【问题标题】:Display error message instead of throw exception in console (Flutter Firebase)在控制台中显示错误消息而不是抛出异常(Flutter Firebase)
【发布时间】:2021-03-24 05:56:18
【问题描述】:

当用户输入错误的用户名和密码时如何显示错误信息?验证用户存在多个条件时可以显示消息吗?消息应该显示在屏幕上,而不是在控制台中抛出异常。

我在控制台中遇到的异常 发生了异常。 PlatformException (PlatformException(firebase_auth, com.google.firebase.auth.FirebaseAuthInvalidUserException: 没有与此标识符对应的用户记录。用户可能已被删除。, {code: user-not-found, additionalData: {}, message:没有该标识对应的用户记录,用户可能已被删除。}, null))

import 'package:firebase_auth/firebase_auth.dart';

abstract class BaseAuth {
  Future<String> currentUser();
  Future<String> signIn(String email, String password);
  Future<String> createUser(String email, String password);
  Future<void> signOut();
}

class Auth implements BaseAuth {
  final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;

  Future<String> signIn(String email, String password) async {
    UserCredential result = await FirebaseAuth.instance
        .signInWithEmailAndPassword(email: email, password: password);
User user = result.user;
    return user.uid;
  }

  Future<String> createUser(String email, String password) async {
    UserCredential result = await FirebaseAuth.instance
        .createUserWithEmailAndPassword(email: email, password: password);
    User user = result.user;
    return user.uid;
  }


  Future<String> currentUser() async {
    User user = _firebaseAuth.currentUser;
    return user != null ? user.uid : null;
  }

  Future<void> signOut() async {
    return _firebaseAuth.signOut();
  }
}

【问题讨论】:

    标签: firebase flutter firebase-authentication


    【解决方案1】:

    一个简单的 try catch 就可以解决问题

    Future<String> signIn(String email, String password) async {
    try{
        UserCredential result = await FirebaseAuth.instance
            .signInWithEmailAndPassword(email: email, password: password);
    User user = result.user;
        return user.uid;
    }on AuthException catch(error){
    return Future.error(error);
      }
    }
    

    假设您了解基础知识,现在介绍如何处理 UI 中的错误:D

    await signIn(email,password).then((onSuccess){
     //do something with data or not up to you
     }).catchError((err){
     print(err);
     });
    

    希望对您有所帮助:)

    【讨论】:

    • 出现此错误。名称 'AuthException' 不是一种类型,不能在 on-catch 子句中使用。尝试更正名称以匹配现有的 class.dartnon_type_in_catch_clause。
    • 试试这个 } catch(error){ return Future.error(error); }
    • 无法工作....我仍然找不到解决此问题的方法...
    猜你喜欢
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多