问题描述
下面是代码。
BlocConsumer<UserAuthCubit,UserAuthState>(
listener: (context,state) {
if (state is UserAuthorized) {
Navigator.of(context,rootNavigator: true).pop();
}
if (state is UserAuthWaiting) {
showModalBottomSheet(
useRootNavigator: true,isdismissible: false,context: context,builder: (context) {
return WillPopScope(
onWillPop: () async => false,child: Center(
child: Text(state.msg),),);
});
dialog = true;
} else {
if (dialog) {
Navigator.of(context,rootNavigator: true).pop();
dialog = false;
}
}
},builder: (context,state) { // some widget code... }
UserAuthorized
状态为JSON.stringify(tempJSONObject)
时,我想同时弹出对话框和LoginPage,以便返回到最后一页,即首页。但是,使用上面的代码有时会起作用,而在另一时间,还会弹出“主页”。
我尝试了将rootNavigator设置为/不设置为true的情况,但没有实现我的目标。
请帮助我了解我在这里缺少什么。
我已经在How to dismiss flutter dialog? 处检查了答案。
解决方法
我建议对话框之后返回true
,而不要使用Navigator.of(context).pop()
。您可以尝试使用Navigator.of(context).pushReplacement(MaterialPageRoute(builder: (context) => HomePage()))
。这样,您可以用HomePage替换LoginPage
您可以简单地使用
Navigator.popUntil(context,(route) {
return count++ == 2;
});
更新:
如果您不知道应该弹出多少页面,则应该使用
Navigator.push(context,MaterialPageRoute(builder: (context)=>YourMaterialClassName(),settings: RouteSettings(name: "nameOfYourClass")));
在您推动材料课时。
然后在弹出窗口时使用
Navigator.popUntil(context,(route) => route.settings.name == "nameOfYourClass");