今回はDartにおける「例外処理」の使い方について解説します。
目次
例外処理の基本
try{
処理...
}
catch(e){
print(e); //エラー内容が出力
処理...
}
Dartにおける例外処理の基本が上記の「try-catch文」です。
tryで実行した処理にエラーが発生した際に「スロー(throw)」され、catchで指定した処理が実行されます。catchの引数(e)でスローされたエラーを「キャッチ(catch)」できます。
finally
try{
処理...
}
catch(e){
処理...
}
finally{
処理... //必ず実行される
}
finallyで指定した処理は、例外が発生してもしなくても必ず実行されます。
「try」 => 「on Exception catch (e)」
try{
処理...
}
on Exception catch(e){
処理...
}
「on」を使えば、指定した例外(Exception)に対してのみ例外処理を実行できます。
例)FirebaseAuthExceptionをキャッチ
onPressed: () async {
try {
await _auth.createUserWithEmailAndPassword(email: email, password: password);
}
on FirebaseAuthException catch (e) {
print(e);
}
}
上記のコードでは「FirebaseAuthException」からスローされる可能性があるエラーのみをキャッチしています。
「e.code」でスローされたエラーコードをを取得できる
onPressed: () async {
try {
final newUser = await _auth.createUserWithEmailAndPassword(email: email, password: password);
} on FirebaseAuthException catch (e) {
if (e.code == 'email-already-in-use') {
print('指定したメールアドレスは登録済みです');
} else if (e.code == 'invalid-email') {
print('メールアドレスのフォーマットが正しくありません');
} else if (e.code == 'operation-not-allowed') {
print('指定したメールアドレス・パスワードは現在使用できません');
} else if (e.code == 'weak-password') {
print('パスワードは6文字以上にしてください');
}
}
}
「on」で例外(Exception)を指定しておけば「e.code」でスローされた「エラーコード」を取得し、エラー別に実行する処理を指定できます。
Exceptionによってスローされる可能性があるエラーコードはドキュメントから確認できます。今回の場合は「createUserWithEmailAndPasswordメソッド」を実行した際にスローされる可能性があるエラーを「e.code」で取得しています。
以上です。