当路由从堆栈中移除时,关联的 Future 必须完成
概述
#当路由被推入时,开发者可以 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
,则需要改用 markForComplete
。markForRemove
现已弃用。
对于其他开发者,无需进行任何更改。Navigator 将继续按预期工作,并具备新的功能。
时间线
#已发布到版本: 3.31.0-0.0.pre
稳定版本:3.32