環境
- VSCode ← たぶん重要
- iOS 13.6 シミュレータ
- google_sign_in 4.5.1
※ 試していませんが、Android Studioでデバッグしている場合は起こらないかもしれません
問題
Googleアカウントでのサインインを行うためのパッケージgoogle_sign_inを使って、サインイン画面を表示させた際に、左上に表示されるキャンセルボタンを押して、サインインせずにサインイン画面を閉じると、下記のようなエラーが出る。しかもcatchできない。
signIn()関数は失敗時にnullを返すと関数の説明に書いてありますが、なぜ。。。?
PlatformException (PlatformException(sign_in_canceled, com.google.GIDSignIn, The user canceled the sign-in flow.))
Future<void> _handleSignIn() async {
try {
await _googleSignIn.signIn();
} catch (error) {
// サインインをキャンセルした時にここが実行されない。
// _googleSignIn.signIn().catchError(onError)としても同様
print(error);
}
}
対処方法
先に対処方法から。
デバッグを開始する際、コマンドflutter runで実行する。
???
そんなんでほんとに変わるの?
と思いましたが、ちゃんと動きました。(自分の場合は)
Future<void> _handleSignIn() async {
try {
// キャンセルした時は、nullが返ってくる
final GoogleSignInAccount googleSignInAccount await _googleSignIn.signIn();
if (googleSignInAccount != null) {
// ~~~
}
} catch (error) {
print(error);
}
}
ちなみに、以下ではダメでした。
VSCodeのデバッグ機能を使うと起きる問題?
- VSCodeのメニュー「実行」→「デバッグの開始」
- F5
以下のQAを参考にしました。
https://github.com/flutter/flutter/issues/44431#issuecomment-657431886
なんとなく不便なので、他に対処方法をご存知の方がいらっしゃいましたら、教えていただけると大変助かります。