[Flutter×Firebase] firebase_auth 오류 처리 배우기 (예외 처리,try-catch)

글의 내용


앱을 만들면 필요할 때 오답을 하려고 할 때가 있다.
이것은 상황에 따라 Dialog에 오류 처리를 표시하는 글입니다.


오류 처리(예외 처리)는


프로그램의 처리에서 방해된 사건을 처리할 때 이 처리를 오류로 처리하는 처리를 말한다.예외 처리라고도 불린다.

이번에 사용한 예외 처리의 기본 (try-catch)


    try{
      ログインする
    }
    catch(e){
      print(e); //エラー内容が出力
      //出力例) パスワードが間違っています
    }
Dart의 예외 처리는 기본적으로try-catch문구이다.
try가 실행하는 처리에서 오류가 발생했을 때catch가 지정한 처리를 실행합니다.
매개 변수 e에서try가 실패했을 때의 오류를 수신할 수 있습니다.

새 등록 화면 오류 처리


새 로그인 화면 코드
ElevatedButton(
              onPressed: () async {
                startLoading();
                try {
                  await signUp();
                } on FirebaseAuthException catch (e) {
                  if (e.code == 'email-already-in-use') {
                    _emailAlreadyInUseDialog(context);
                  }
		  if (e.code == 'weak-password') {
                    _weakPasswordDialog(context);
                  }
                }
              },
              child: Text(
                '登録',
                style: TextStyle(fontWeight: FontWeight.bold),
              ),
            ),

코드 해설


on FirebaseAuthException을 지정하면 e.code에서 발생하는 오류 코드를 얻을 수 있습니다.
오류에 따른 처리를 지정할 수 있습니다.
FirebaseAuthException에서 발생할 수 있는 오류 코드는 Firebase입니다.auth 문서에서 확인할 수 있습니다.
메서드
  • email-already-in-use:
  • 메일 주소가 잘못되면 버려집니다.
  • invalid-email:
  • 지정된 전자 우편 주소가 있는 계정이 이미 존재하면 던져집니다.
  • operation-not-allowed:
  • email/password 계정이 무효일 때 던져집니다.Firebase 콘솔의 Auth 탭에서 메일/암호 계정을 사용하십시오.
  • wrong-password:
  • 비밀번호가 충분하지 않은 상태에서 던진다.
  • 새로 등록된 e.code는 공식 문서에 기재되어 있습니다.
    https://pub.dev/documentation/firebase_auth/latest/firebase_auth/FirebaseAuth/createUserWithEmailAndPassword.html

    로그인 화면 오류 처리


    로그인 화면 코드
    ElevatedButton(
                          onPressed: () async {
                            startLoading();
                            try {
                              await login();
                            } on FirebaseAuthException catch (e) {
                              if (e.code == 'user-not-found') {
                                _userNotFoundDialog(context);
                              } else if (e.code == 'invalid-email') {
                                _invalidEmailDialog(context);
                              }
                            }
                            endLoading();
                          },
                          child: Text(
                            'ログイン',
                            style: TextStyle(fontWeight: FontWeight.bold),
                          ),
                        ),
    
    방법
  • invalid-email:
  • 메일 주소가 잘못되면 버려집니다.
  • user-disabled:
  • 지정한 메일에 대응하는 사용자가 비활성화된 상태에서 던져집니다.
  • user-not-found:
  • 주어진 메일에 대응하는 사용자가 없으면 버려집니다.
  • wrong-password:
  • 주어진 전자메일의 비밀번호가 잘못되거나 대응하는 전자메일의 계정에 비밀번호가 설정되지 않으면 버려집니다.
  • 공식 문서
    https://pub.dev/documentation/firebase_auth/latest/firebase_auth/FirebaseAuth/signInWithEmailAndPassword.html

    Dialog에서 오류 처리 표시


    이번에는 Dialog에 오류 처리가 표시됩니다.
    또한 SnackBar class 등을 사용하여 오류 처리를 표시할 수 있습니다!
    https://api.flutter.dev/flutter/material/SnackBar-class.html
    새 등록 오류 처리 Dialog
    void _emailAlreadyInUseDialog(BuildContext context) {
      showDialog(
        context: context,
        barrierDismissible: false,
        builder: (BuildContext dialogContext) {
          return AlertDialog(
            title: Text('指定したメールアドレスは登録済みです'),
            actions: <Widget>[
              TextButton(
                child: Text('OK'),
                onPressed: () {
                  Navigator.pop(dialogContext);
                },
              ),
            ],
          );
        },
      );
    }
    
    로그인 오류 처리 Dialog
    void _userNotFoundDialog(BuildContext context) {
      showDialog(
        context: context,
        barrierDismissible: false,
        builder: (BuildContext dialogContext) {
          return AlertDialog(
            title: Text('ユーザーが見つかりません'),
            actions: <Widget>[
              TextButton(
                child: Text('OK'),
                onPressed: () {
                  Navigator.pop(dialogContext);
                },
              ),
            ],
          );
        },
      );
    }
    

    끝맺다


    어때요?
    이번 보도는 초보 엔지니어, 앞으로 Flutter에서 업무를 전개할 사람들에게 도움이 될 보도입니다!
    의견이 있으면 제 트위터에 연락 주세요.

    좋은 웹페이지 즐겨찾기