概述

#

當路由被推入時,開發者可以 await 它們,以便在它們被 pop 時得到通知。然而,當它們被移除時,這不起作用,因為關聯的 Future 永遠不會完成。

背景

#

所有呼叫 remove 的 Navigator 方法都有這個問題。透過使用 complete,該問題得以妥善解決,使開發者能夠傳遞結果。

變更說明

#

所有 Navigator 方法都已更新,不再呼叫 remove,而是使用 complete。上下文選單現在從 contextMenuBuilder 引數構建。

所有直接使用 complete 的方法現在都接受一個可選的 result 引數,將其返回給關聯的 Future。目前,其他間接使用 remove 的方法會返回 null。未來,我們可能會透過一個可選的回撥函式來擴充套件這些方法,以便開發者能夠處理間接場景中的 pop 邏輯(例如 removeUntil)。

在此 PR 之前,以下方法無法返回結果

dart
Navigator.of(context).removeRoute(route);
Navigator.of(context).removeRouteBelow(route);

在此 PR 之後,方法可以返回結果

dart
Navigator.of(context).removeRoute(route, result);
Navigator.of(context).removeRouteBelow(route, result);

遷移指南

#

如果您實現了 RouteTransitionRecord 並使用了 markForRemove,則需要改用 markForCompletemarkForRemove 現已棄用。

對於其他開發者,無需進行任何更改。Navigator 將繼續按預期工作,並具備新的功能。

時間線

#

已釋出到版本: 3.31.0-0.0.pre
穩定版本:3.32

參考資料

#

API 文件

#

相關問題

#

相關 PR

#