【问题标题】:My flutter app moves to a new page even when firebase auth has errors即使 Firebase 身份验证出现错误,我的颤振应用程序也会移动到新页面
【发布时间】:2020-12-08 06:49:04
【问题描述】:

即使功能出现错误,我的 Flutter 应用也会导航到新页面。

我有一个登录按钮,用于处理 firebase 登录,之后我希望应用在登录后移至下一个屏幕,但即使 firebase 身份验证出现错误,该按钮也会移至下一个屏幕。

我的问题是;登录成功后如何跳转到下一页

这是我的按钮按下功能

            press: () async {
              if (formKey.currentState.validate()) {
                formKey.currentState.save();
              }
              await context.read<Authentication>().signInWithEmailAndPassword(
              email: emailController.text,
              password: passwordController.text);
              Navigator.pushReplacement(
              context,
              MaterialPageRoute(
              builder: (context) =>
              HomeScreen()));
            },

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    您好,我知道您做错了什么,您应该在使用电子邮件和密码登录后添加一个 .then() 回调,您可以按照文档进行操作 https://firebase.flutter.dev/docs/auth/usage#emailpassword-registration--sign-in

    【讨论】:

      【解决方案2】:

      您的代码不会验证登录是否成功,

            press: () async {
              if (formKey.currentState.validate()) {
                formKey.currentState.save();
              }
              context.read<Authentication>().signInWithEmailAndPassword(
              email: emailController.text,
              password: passwordController.text).then((user) => {
             //  check if signin is valid or not
               if(user){
                     Navigator.pushReplacement(
                     context,
                     MaterialPageRoute(builder: (context) => HomeScreen()));
               },
      
              }
            });
             
      

      【讨论】:

      【解决方案3】:
      press: () async {
        if (formKey.currentState.validate()) {
          formKey.currentState.save();
        }
        final FirebaseUser user = await context.read<Authentication>().signInWithEmailAndPassword(
            email: emailController.text,
            password: passwordController.text);
      
        if(user != null){
      
          Navigator.pushReplacement(
              context,
              MaterialPageRoute(
                  builder: (context) =>
                      HomeScreen()));
        }else{
        //show some dialog - not a user or invalid password etc. for error handling.
        }
      },
      

      【讨论】:

      • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
      • 它没有解决我的问题,登录后按钮没有移动到下一个屏幕
      猜你喜欢
      • 1970-01-01
      • 2014-01-25
      • 2018-08-20
      • 1970-01-01
      • 1970-01-01
      • 2021-04-15
      • 2020-02-03
      • 2020-10-23
      • 2021-12-31
      相关资源
      最近更新 更多