登录firebase帐户失败引发异常并停止Flatter应用程序

登录firebase帐户失败引发异常并停止Flatter应用程序,firebase,dart,firebase-authentication,flutter,Firebase,Dart,Firebase Authentication,Flutter,我正在我的Flatter应用程序中实现电子邮件和密码登录表单,但当我无法登录时(例如,电子邮件格式错误或密码错误),应用程序会引发平台异常,模拟器停止响应 这是我的handle登录函数: Future<FirebaseUser> _handleLogin(String email, String password) async { print(email); print(password); print(_firebaseUser); try {

我正在我的Flatter应用程序中实现电子邮件和密码登录表单,但当我无法登录时(例如,电子邮件格式错误或密码错误),应用程序会引发平台异常,模拟器停止响应

这是我的handle登录函数:

Future<FirebaseUser> _handleLogin(String email, String password) async {
    print(email);
    print(password);
    print(_firebaseUser);
    try {
      FirebaseUser user = await _firebaseAuth.signInWithEmailAndPassword(
          email: email, password: password);
      print("done logging in");
      print(user.uid);
      setState(() {
        _firebaseUser = user;
      });
      print("new user set");
      return user;
    } catch (err) {
      print(err.toString());
      return null;
    }
}

我是否以错误的方式进行错误处理?在输入错误的密码或格式不正确的电子邮件后,如何捕捉错误并使应用程序继续运行?

在输入错误后使用
最终

Future<FirebaseUser> _handleLogin(String email, String password) async {
    print(email);
    print(password);
    print(_firebaseUser);
    FirebaseUser user;
    try {
      user = await _firebaseAuth.signInWithEmailAndPassword(
          email: email, password: password);
      print("done logging in");
      print(user.uid);

      print("new user set");
      return user;
    } catch (err) {
      print(err.toString());
    }
      finally {
       if(user != null) {
         //Log in was successfull! 
         setState(() {
          _firebaseUser = user;
        });

      }
      else {
         //Log in was unsuccessfull!
      }
    }
}
Future\u handleLogin(字符串电子邮件、字符串密码)异步{
打印(电子邮件);
打印(密码);
打印(_firebaseUser);
FirebaseUser用户;
试一试{
user=await\u firebaseAuth.signin带email和password(
电子邮件:电子邮件,密码:密码);
打印(“完成登录”);
打印(user.uid);
打印(“新用户集”);
返回用户;
}捕捉(错误){
打印(err.toString());
}
最后{
如果(用户!=null){
//登录成功!
设置状态(){
_firebaseUser=用户;
});
}
否则{
//登录失败!
}
}
}
看看Dart中的。您还可以使用
.then
.onError
来处理错误。我正在调用
SetState()
在屏幕上显示错误消息。下面的示例代码用于注册

void _register() async {
  AuthResult result;

  await _auth
      .createUserWithEmailAndPassword(
    email: _emailController.text,
    password: _passwordController.text,
  )
      .then((value) {
    result = value;
  }, onError: (error) {
    _errorDesc = error.message;
    setState(() {
      _success = false;
    });
  });

  if (result != null) {
    setState(() {
      _success = true;
      _userEmail = result.user.email;
    });
  }
}

如果您使用的是Visual Studio代码,请取消选中“未捕获异常”选项。这会解决你的问题。将执行catch块内的语句。

void _register() async {
  AuthResult result;

  await _auth
      .createUserWithEmailAndPassword(
    email: _emailController.text,
    password: _passwordController.text,
  )
      .then((value) {
    result = value;
  }, onError: (error) {
    _errorDesc = error.message;
    setState(() {
      _success = false;
    });
  });

  if (result != null) {
    setState(() {
      _success = true;
      _userEmail = result.user.email;
    });
  }
}