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