ron*_*nbm 5 flutter flutter-bloc
下面是代码。
ElevatedButton(
onPressed: () => Navigator.of(context, rootNavigator: true)
.push(MaterialPageRoute(
fullscreenDialog: true,
builder: (context) => UserLoginPage(),
)),
child: Text('Login to continue'),
),
Run Code Online (Sandbox Code Playgroud)
登录页面内:
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... }
Run Code Online (Sandbox Code Playgroud)
当状态为 时UserAuthorized,我想弹出对话框以及LoginPage,以便返回到最后一页,即主页。但是,使用上面的代码,有时它可以工作,但有时也会弹出主页。我试过,有/没有 rootNavigator 设置为 true,但无法实现我的目标。
请帮助我了解我在这里缺少什么。
我已经在这里检查了答案如何关闭颤振对话框? .
你可以简单地使用
Navigator.popUntil(context, (route) {
return count++ == 2;
});
Run Code Online (Sandbox Code Playgroud)
更新:
如果您不知道应该弹出多少页,那么您应该使用
Navigator.push(context, MaterialPageRoute(builder: (context)=>YourMaterialClassName(), settings: RouteSettings(name: "nameOfYourClass")));
Run Code Online (Sandbox Code Playgroud)
当你提升你的材料等级时。
然后在弹出使用的时候
Navigator.popUntil(context, (route) => route.settings.name == "nameOfYourClass");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1899 次 |
| 最近记录: |