Flutter popUntil引发错误状态:将来已经完成

Man*_*ska 7 dart flutter

我有屏幕A-> B-> C-> D

在B,C,D屏幕中,有一个按钮应该带您进入屏幕A并保持其状态(因此pushNamedAndRemoveUntil在这里不合适)。

我想基于文档使用popUntil,这就是我的方法:

Navigator.popUntil(context, ModalRoute.withName(ScreenName.mainScreen));
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:状态错误:将来已经完成

这是我的主要内容:

void main() {
  SystemChrome.setPreferredOrientations([
    DeviceOrientation.portraitUp,
    DeviceOrientation.portraitDown,
  ]);

  final pages = {
    ScreenName.mainScreen: (settings) => MaterialPageRoute(
        builder: (context) => MainScreen(), settings: settings),
  };

  var configureApp = AppConfig(
    appName: 'TaskerMate',
    flavorName: FLAVOR_NAME.PROD,
    child: AppModelProvider(
      model: AppModel(),
      child: MaterialApp(
        theme: TMTheme().get(),
        home: SplashScreen(),
        onGenerateRoute: (settings) {
          pages[settings.name](settings);
        },
        routes: {ScreenName.mainScreen: (context) => MainScreen()},
      ),
    ),
  );

  Logger.root.level = Level.ALL;
  Logger.root.onRecord.listen((LogRecord rec) {
    print('${rec.level.name}: ${rec.time}: ${rec.message}');
  });

  runApp(configureApp);
}
Run Code Online (Sandbox Code Playgroud)

ScreenName.mainScreen->静态最终字符串mainScreen ='/ main';

Man*_*ska 17

我花了很长时间才找到答案,但如果有人发现自己被这个问题困住了,Rémi Rousselet 对另一个问题的回答就是为我解决的问题:

 Navigator.pushReplacement(
  context,
  MaterialPageRoute(settings: RouteSettings(name: "Foo")),
);
Run Code Online (Sandbox Code Playgroud)

使用名称将设置添加到 MaterialPageRoute,然后像这样调用 popUntil:

Navigator.popUntil(context, ModalRoute.withName("Foo"))
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

2603 次

最近记录:

6 年,7 月 前