概述

#

当路由被推入堆栈时,开发者可以对其进行 await 操作,以便在路由被弹出时收到通知。然而,当路由被移除时,此功能不起作用,因为相关联的 Future 从未完成。

背景

#

所有调用 remove 的 Navigator 方法都存在此问题。通过使用 complete,该问题得到了妥善解决,允许开发者传递一个结果。

变更说明

#

所有 Navigator 方法已更新,不再调用 remove,而是使用 complete。上下文菜单现在通过 contextMenuBuilder 参数构建。

所有直接使用 complete 的方法现在都接受一个可选的 result 参数,以将其返回给相关联的 Future。其他间接使用 remove 的方法当前返回 null。未来,我们可能会通过一个可选的回调函数来扩展这些方法,以允许开发者在间接场景中(例如 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

#