flutter - 如何替换下面的路线,以便我的导航器堆栈中没有重复的路线?
问题描述
我的 Navigator Bloc 中有以下代码
@override
Stream<dynamic> mapEventToState(NavigatorEvent event) async* {
final navigatorState = navigatorKey.currentState;
if (navigatorState == null) return;
if (event is NavigateToProfileEvent) {
Future.delayed(Duration.zero, () {
navigatorState.replaceRouteBelow(anchorRoute: ProfilePage.route(), newRoute: ProfilePage.route());
});
}
}
这是我个人资料页面中的路线
class ProfilePage extends StatelessWidget {
static Route route() {
return InstantMaterialPageRoute<ProfilePage>(builder: (_) => ProfilePage());
}
但它会引发以下错误
Unhandled Exception: 'package:flutter/src/widgets/navigator.dart': Failed assertion: line 4961 pos 12: 'anchorRoute._navigator == this': is not true.
我想防止重复路线。所以假设你有以下堆栈
第 1 页 > 第 2 页 > 第 3 页 > 第 4 页 > 第 2 页 > 第 4 页 > 第 3 页
我想让它变成
第 1 页 > 第 2 页 > 第 4 页 > 第 3 页
解决方案
如果您在要推送的同一页面中,您可以执行以下操作:
Navigator.popAndPushNamed(context, route);
这将弹出当前页面然后推送它。
此外,如果您想向其发送一些数据,您可以尝试:
Navigator.popAndPushNamed(context, route, arguments: myParam);
推荐阅读
- python - 如何使用 ax.get_subplotspec().is_first_col() 而不是 is_first_col
- java - 如何更改 javafx 警告框的图标
- installation - ROS Noetic 环境设置(目录未找到)
- c# - 在转换为枚举的对象上调用重载函数
- c++ - 如何获取键盘名称?(在视觉上区分特定语言的键盘)
- pandas - 我怎样才能像这样组合列和行
- css - 谁能帮我解决这个设计问题?
- google-sheets - 谷歌表格:计算具有多个答案的表单数据。arraformula,拆分和转置
- c++ - 如何用 bool 打破 while 循环?
- cmake - CMake 构建类型没有区别