[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 タブで、メール/パスワード アカウントを有効にしてください。
- weak-password:
- パスワードが十分に強くない場合に投げられる。
新規登録処理のe.codeは公式ドキュメントに記載されております。
ログイン画面 エラーハンドリング
ログイン画面 コード
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:
- 与えられた電子メールのパスワードが無効であるか、または電子メールに対応するアカウントにパスワードが設定されていない場合にスローされます。
公式ドキュメント
Dialogでエラーハンドリングを表示
今回はDialogにてエラーハンドリングを表示させます。
他にもSnackBar classなどを使用して、エラーハンドリングを表示するのも良いですね!
新規登録 エラーハンドリング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での業務を行う方への力になれる記事にしてみました!
何か意見がありましたら私のツイッターまでご連絡ください。
Author And Source
この問題について([Flutter×Firebase] firebase_authのエラーハンドリング(例外処理、try-catch)を学ぶ), 我々は、より多くの情報をここで見つけました https://zenn.dev/hikaru24/articles/7c5d49b0e877b9著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol