Flutter firebase登录后如何自动重定向?

Flutter firebase登录后如何自动重定向?,flutter,Flutter,我遵循本教程将firebase auth实现到我的应用程序 除了一件事,一切都很顺利。当我进入登录屏幕并单击登录按钮时,我必须重新启动应用程序才能访问主页。 当我单击“注销”时不会发生这种情况,我会立即重定向到“登录” 这是我的登录: 未来登录({String email,String password})异步{ 试一试{ 等待\u firebaseAuth.signin使用Email和Password( 电子邮件:电子邮件,密码:密码); 返回“Connecté”; }关于FireBaseAu

我遵循本教程将firebase auth实现到我的应用程序

除了一件事,一切都很顺利。当我进入登录屏幕并单击登录按钮时,我必须重新启动应用程序才能访问主页。 当我单击“注销”时不会发生这种情况,我会立即重定向到“登录”

这是我的登录:

未来登录({String email,String password})异步{
试一试{
等待\u firebaseAuth.signin使用Email和Password(
电子邮件:电子邮件,密码:密码);
返回“Connecté”;
}关于FireBaseAuth异常捕获(e){
返回e.message;
}
}
主飞镖

class AuthenticationWrapper扩展了无状态小部件{
const AuthenticationWrapper({
关键点,
}):super(key:key);
@凌驾
小部件构建(构建上下文){
final firebaseUser=context.watch();
if(firebaseUser!=null){
返回主页();
}
返回屏幕();
}
}
我的提升按钮:

ElevatedButton(
已按下:(){
context.read().sign(
电子邮件:emailController.text.trim(),
密码:passwordController.text.trim());
},
子项:文本(“Se连接器”),
样式:钮扣样式(
背景颜色:
MaterialStateProperty.all(
颜色(0xff0d47a1)),
形状:MaterialStateProperty.all<
RoundedRectangleBorder>(
圆形三角形边框(
边界半径:
边界半径。圆形(40)),
))

实际上,用户登录后,您还没有将导航器添加到主屏幕

在升高的按钮中,已按下

onPressed: () {
       await context.read<Authentication>().signIn(
             email: emailController.text.trim(),
             password: passwordController.text.trim());
       Navigator.push(context,MaterialPageRoute(builder: (context) => HomePage()));
       },
onPressed:(){
等待上下文。读取()。签名(
电子邮件:emailController.text.trim(),
密码:passwordController.text.trim());
push(context,MaterialPageRoute(builder:(context)=>HomePage());
},
这将起作用。

示例代码为

bool invalid = false;
  String password;
  String error = "";
  loginUser() async {
    print(error);
    try {
      await FirebaseAuth.instance
          .signInWithEmailAndPassword(email: email, password: password);
    } on FirebaseAuthException catch (e) {
      error = e.toString();
    }
    FirebaseAuth.instance.authStateChanges().listen((user) {
      if (error.isNotEmpty) {
        setState(() {
          invalid = true;
        });
      } else {
        setState(() {
          Navigator.popAndPushNamed(context, "homePage");
        });
      }
    });
  }
就在登录按钮上方

if (error.isNotEmpty)
            Row(mainAxisAlignment: MainAxisAlignment.center, children: [
              if (error.split(" ").contains("password"))
                Text(
                  "Invalid Password",
                  style: TextStyle(color: Colors.red),
                ),
              if (error.split(" ").contains("record"))
                Text(
                  "User Does Not Exist",
                  style: TextStyle(color: Colors.red),
                ),
            ]), 

检查后,它的工作很好,谢谢你,我正试图添加导航到authenticate.dart这是不可能的。您知道如何添加错误消息吗?如果我输入了错误的密码或其他东西,则不会显示任何内容。我还遇到了一个问题,当您单击“注销”时,您已注销,但如果我在手机上按“上一步”。我回到主页..要检查密码是否错误,可以使用FirebaseAuthException并将其存储在字符串中。在此之后,检查字符串是否不为空,然后在登录按钮上方添加一个文本,该文本仅在错误字符串不为空时显示错误的密码。(别忘了使用setState)(如果你想要我可以在这里发布的示例代码),你可以使用navigator.of(context.popintil)(ModalRoute.withName('loginPage'))