ModalRoute.withName 在pushNamedAndRemoveUntil 中永远不会返回true

问题描述 投票:0回答:2

我已经为这个问题苦苦挣扎了几天,但一直找不到解决方案,因此发了这篇文章。 在我的应用程序中的某个时刻,我需要从导航器堆栈中弹出 2 条路线并推送一条新路线。在研究了执行此操作的最佳方法之后,我发现使用

pushNamedAndRemoveUntil
是最好的方法,因为我可以指定
ModalRoute.withName('/<route_name>')
,它会弹出路线,直到到达
/<route_name>
,此时它将停止并推送新路线。这是我一直在使用的线路
Navigator.of(context).pushNamedAndRemoveUntil('/raceadmin_reporting', ModalRoute.withName('/raceadmin_page'));

但我的问题是它对我不起作用。我在

/<route_name>
中输入什么似乎并不重要,
pushNamedAndRemoveUntil
会弹出所有路线,这让我相信
ModalRoute.withName
永远不会返回 true。

我也尝试过

Navigator.of(context).pushNamedAndRemoveUntil('/raceadmin_reporting', (route) => route == RaceAdminPage.route());
,也没有用。

当我查看调试器时,我看到的是: 应用程序导航器堆栈

我尝试弹出的路线是

RaceAdmin
页面,该页面显然在堆栈中。在该类的定义中,我添加了行
static const routeName = '/raceadmin_page';
,这就是我在
ModalRoute.withName('/raceadmin_name')
中所说的内容,但它不起作用。

我的路线在

routes.dart
文件中定义,如下所示:

  static Route<dynamic> generateRoute(RouteSettings settings) {
    switch (settings.name) {
      case '/':
        return MaterialPageRoute(builder: (context) => RailMeatApp());
      case '/raceadmin_page':
        return MaterialPageRoute(builder: (context) => const RaceAdminPage());
      case '/raceadmin_pendinglist':
        return MaterialPageRoute(builder: (context) => PendingResultsList());
      case '/raceadmin_pendingresults':
        final args = settings.arguments as Map<String?, String?>;
        return MaterialPageRoute(
            builder: (context) => PendingResultsPage(
                  raceId: args['raceId'] as String,
                ));
      case '/raceadmin_reporting':
        return MaterialPageRoute(builder: (context) => RaceAdminReporting());
      default:
        return _errorRoute();
    }
  }

我的

MaterialApp
定义如下:

    return MaterialApp(
      navigatorKey: _navigatorKey,
      home: _railmeatHome(),
      onGenerateRoute: RailmeatRoutes.generateRoute,
    );
  }

在 Flutter 调试器中,我可以查看

MaterialApp
小部件,我可以在其状态中看到导航器的
_history
属性中有 4 个条目,如下所示: MaterialApp 小部件属性

如果我单击

_history
中的任何条目,我会看到如下相同的信息: _history 中的路线属性

如你所见,

name
下的
_settings
属性是
null
,在我看来,这可以解释为什么
ModalRoute.withName
找不到正确的路线,但我不确定我的想法是否准确.

我应该采取哪些不同措施才能使

pushNamedAndRemoveUntil
发挥作用?

提前非常感谢, 伯特兰。

flutter flutter-navigation
2个回答
0
投票

试试这个吧

Navigator.of(context)
    .pushNamedAndRemoveUntil('/routename', (Route<dynamic> route) => false);

Or

Navigator.of(context).popUntil(ModalRoute.withName('/root'));


0
投票

你对此有答案吗?我想删除顶部的一些路线,直到特定路线(在您的情况下是 /raceadmin_page )。我尝试使用 pushNamedAndRemoveUntil('/to_route', ModalRoute.withName('/history_specific_route')) 并清除所有历史记录。我正在寻找这个问题的解决方案。我的目的是仍然保留导航历史记录,只清除导航器堆栈顶部的 4 条路线并刷新我推送到的页面。

© www.soinside.com 2019 - 2024. All rights reserved.