dart - Flutter popUntil 抛出错误状态:Future 已经完成
问题描述
我有屏幕 A->B->C->D
在 B、C、D 屏幕中,有一个按钮可以将您带到屏幕 A并保持其状态(因此 pushNamedAndRemoveUntil 在这里不合适)。
我想使用popUntil,我就是这样做的,基于文档:
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';
解决方案
我花了很长时间才找到答案,但如果有人发现自己遇到了这个问题,Rémi Rousselet 对另一个问题的回答就是为我解决了这个问题:
Navigator.pushReplacement(
context,
MaterialPageRoute(settings: RouteSettings(name: "Foo")),
);
使用名称将设置添加到 MaterialPageRoute,然后像这样调用 popUntil:
Navigator.popUntil(context, ModalRoute.withName("Foo"))
推荐阅读
- javascript - 更改 reactjs 中 maxLength 之后写入的 textarea 文本颜色
- scala - 当容器项是 Either 时如何组合期货
- python - 在 KIVY 中单击下拉列表的值并比较所选值时如何调用函数 DDOSATK()
- asp.net - 带有自定义对象的 ASP.net 列表
- android - 使用 getExternalStorageDirectory 时 Android Studio 4.1.2 中的 java.io.FileNotFoundException
- neo4j - Neo4j Cypher:当基数很高时如何优化 NOT EXISTS 查询
- visual-studio-code - 无法使用代码服务器映像在 AWS 中启动 jupyter notebook
- opencv - 如何获得黑白阈值之间的长边?
- python-3.x - 哪个 API 密钥用于 IBM Speech-to-Text with IAMAuthenticator?(Python)
- json - 使用 jq 对 JSON 进行分组和计数