概述

#

当路由被推入时,开发者可以 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

#