我试图让用户从应用程序注销后返回登录页面,但是天哪,什么都没用。我遇到诸如Bad state: Future already completed
之类的异常,或者应用程序返回登录屏幕,但是当我回击时,上一个屏幕仍存在于堆栈中。
这是我的代码:
_logOut() async{
await _auth.signOut().then((value){
print("***** log out");
//Navigator.pop(context);
//Navigator.popUntil(context, ModalRoute.withName("/login"));
Navigator.pushReplacement(context, new MaterialPageRoute(builder: (context)=>new MyApp()));
});
// Navigator.popUntil(context, ModalRoute.withName("/login"));
}
答案 0 :(得分:2)
尝试了Navigator
中的每个功能之后,终于成功了:
_logOut() async{
await _auth.signOut().then((_){
Navigator.of(context).pushNamedAndRemoveUntil("/login", ModalRoute.withName("/home"));
});
}
答案 1 :(得分:1)
您不应该在注销后手动将使用权发送到登录页面。相反,您应该听用户的身份验证状态更改,然后根据用户的身份验证状态选择应该显示给用户的页面。
在此处查看我的答案以获取更多详细信息: Firebase Login with Flutter using onAuthStateChanged
答案 2 :(得分:0)
尝试使用以下代码
Navigator.pushReplacementNamed(context, routeName)