我有屏幕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 次 |
| 最近记录: |