Dart 颤振PopIntil抛出错误状态:未来已完成

Dart 颤振PopIntil抛出错误状态:未来已完成,dart,flutter,Dart,Flutter,我有屏幕A->B->C->D 在B、C、D屏幕中,有一个按钮可以引导您进入a屏幕,保持其状态(因此,此处不适合按Named和RemoveUntil) 我想使用PopTill,我就是这样做的,基于文档: Navigator.popUntil(context, ModalRoute.withName(ScreenName.mainScreen)); 我得到一个错误: 错误状态:未来已完成 以下是我的主要观点: void main() { SystemChrome.setPreferredOri

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

在B、C、D屏幕中,有一个按钮可以引导您进入a屏幕,保持其状态(因此,此处不适合按Named和RemoveUntil)

我想使用PopTill,我就是这样做的,基于文档:

Navigator.popUntil(context, ModalRoute.withName(ScreenName.mainScreen));
我得到一个错误: 错误状态:未来已完成

以下是我的主要观点:

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);
}

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

我花了很长时间才找到答案,但如果有人发现自己陷入了这个问题,是什么为我解决了这个问题:

 Navigator.pushReplacement(
  context,
  MaterialPageRoute(settings: RouteSettings(name: "Foo")),
);
使用名称将设置添加到MaterialPage路由,然后调用PopIntil,如下所示:

Navigator.popUntil(context, ModalRoute.withName("Foo"))

@codygray我不认为这是重复的。另一个问题不是试图解决一个错误,就像这个问题。@Dark这里接受的答案(由提问者发布,不少于)只不过是另一个问题答案的链接。很难看出它为什么不是复制品。问题的提出或表述不相关;重要的是他们有相同的答案。我当然愿意重新考虑,因为我不是飞镖或颤振专家,但这两个问题有相同的答案,这一事实强烈表明这些问题是重复的。我所有的路线都被命名了,我使用PopTill时仍然会出错。见: