【问题标题】:Flutter: [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: Instance of 'CustomException'颤振:[错误:颤振/lib/ui/ui_dart_state.cc(199)]未处理的异常:'CustomException'的实例
【发布时间】:2021-08-05 18:40:08
【问题描述】:

我正在尝试使用 Firebase 身份验证执行移动身份验证。在执行注册之前的注册过程中,我正在检查手机号码是否已经存在,如果存在我正在抛出一个自定义异常。

代码

class CustomException implements Exception {
  String cause;
  CustomException(this.cause);
}

Future mobileAuth(
      String number, BuildContext context, Customer newCustomer) async {
    try {
      _databaseService
          .customerStream(customer: newCustomer)
          .listen((event) async {

        //Throwing custom exception if user exists
        if (event.length > 0) {
          throw CustomException("got error user");
        }

        await _firebaseAuth.verifyPhoneNumber(
          phoneNumber: number,
          verificationCompleted: (PhoneAuthCredential credential) async {
            await FirebaseAuth.instance
                .signInWithCredential(credential)
                .then((value) async {
              if (value.user != null) {
                Navigator.of(context).pushReplacement(MaterialPageRoute(
                    builder: (context) => HomeScreen(index: 3)));
              }
            });
          },
          verificationFailed: (FirebaseAuthException e) {
            if (e.code == 'invalid-phone-number') {
              print('The provided phone number is not valid.');
            }

            Navigator.of(context)
                .push(MaterialPageRoute(builder: (context) => MobileError()));
          },
          codeSent: (String verificationId, int? resendToken) {
            Navigator.of(context).push(MaterialPageRoute(
                builder: (context) => SignupForm3(
                      phoneNumber: number,
                      verificationCode: verificationId,
                      newCustomer: newCustomer,
                    )));

            
          },
          codeAutoRetrievalTimeout: (String verificationId) {
          },
        );
      });
      return true;
    } on CustomException catch (e) {
      print("User already exists ");
      print(e.cause);
      return false;
    } on FirebaseAuthException catch (e) {
      return false;
    } on PlatformException catch (e) {
      print(e.message);
      return false;
    } catch (e) {
      print(e.toString());
      Navigator.of(context)
          .push(MaterialPageRoute(builder: (context) => MobileError2()));
      return false;
    }
  }

我收到了这个未处理的异常错误。但是我已经实现了 catch 来处理这个自定义异常。

[ERROR:flutter/lib/ui/ui_dart_state.cc(199)] 未处理的异常:“CustomException”实例

【问题讨论】:

    标签: firebase flutter exception throw


    【解决方案1】:

    异常没有被监听器捕获。 所以需要在监听回调中添加try-catch

    _databaseService
              .customerStream(customer: newCustomer)
              .listen((event) async {
              
                try {
                  //Listener code
                } on CustomException catch (e) {
                  //Handle CustomException
                } catch (e) {
                  //Handle other Exceptions
                }
              }
    

    【讨论】:

      【解决方案2】:

      我认为您的 if check 传递为 false,因此您的异常将永远不会被调用。

      很可能,事件的长度总是大于 0,所以你的 if check 总是会通过。

      但是您可以查看文档以查看他们是否有实现来检查此类内容。

      【讨论】:

        猜你喜欢
        • 2020-12-05
        • 2022-01-05
        • 2021-11-20
        • 2021-06-30
        • 2019-11-27
        • 2019-10-05
        • 1970-01-01
        • 2019-07-21
        • 1970-01-01
        相关资源
        最近更新 更多