🙄
【Flutter + Firebase】FirebaseAuth の処理で、Exception を拾えない問題の解決
ケース
Flutter で Firebase Authentication にアカウント登録する処理をする。
問題
FirebaseAuth でアカウントを登録する処理に際しての Exception が起きてもそこでなぜか拾えず try-catch の catch {} 部分がシカトされ、むしろ他の自分で実装していない部分に Exception を横取りされるという問題に出会した。
↓コード
// ~(中略)~
try {
final auth = FirebaseAuth.instance;
return await auth.createUserWithEmailAndPassword(
email: email,
password: password,
);
} on PlatformException catch (e) {
print(e.code);
}
// ~(中略)~
解決
catch で受け取る際の on PlatformException をより具体的な FirebaseAuthException に直したら、すんなり受け取ってくれるようになった。
おそらく PlatformException だったから Exception を受け取れる範囲が広く、他の catch 部分に Exception を横取りされてしまっていたのだと思う。
より明確な Exception にすることで、自分が意図する部分での try-catch で Exception を拾えるようになったらしい。
↓改コード
// ~(中略)~
try {
final auth = FirebaseAuth.instance;
return await auth.createUserWithEmailAndPassword(
email: email,
password: password,
);
} on FirebaseAuthException catch (e) {
print(e.code);
}
// ~(中略)~
before → after
コメント部分は変更なし
before
// ~(中略)~
try {
// final auth = FirebaseAuth.instance;
// return await auth.createUserWithEmailAndPassword(
// email: email,
// password: password,
// );
} on PlatformException catch (e) {
// print(e.code);
}
// ~(中略)~
after
// ~(中略)~
try {
// final auth = FirebaseAuth.instance;
// return await auth.createUserWithEmailAndPassword(
// email: email,
// password: password,
// );
} on FirebaseAuthException catch (e) {
// print(e.code);
}
// ~(中略)~
まとめ
今後、try-catch で Exception を拾う場合は、on ~~Exception のところをより具体的な Exception(今回の場合:×PlatformException → ○FirebaseAuthException)にして拾うべきだなと学んだ。
おわりに
以上
参考になりましたら幸いです。
初心者ゆえ、ご指摘、アドバイス等ございましたら、是非ともよろしくお願いいたします。
Discussion