web-dev-qa-db-ja.com

Flutterは、firebase authの試行中にPlatformExceptionをキャッチできません

私は最近フラッターを使い始めました。メールとパスワードを使用してFirebaseサインインを実装しようとしています。正しいメールとパスワードを入力したときに機能しますが、パスワードが間違っているときは機能しません。 Android studioがこれを以下に示すように、例外をキャッチしようとしても、パスワードが間違っているとアプリがフリーズし、PlatformExceptionが発生します。

enter image description here

ここに私のサインイン実装があります:

String _reason;
  Future<void> _performLogin() async {
    String reason;
    // This is just a demo, so no actual login here.
    try{
      FirebaseUser user =  await FirebaseAuth.instance.signInWithEmailAndPassword(email: _email, password: _password);
      if(user != null){
        Navigator.of(context).Push(new MaterialPageRoute<dynamic>(
          builder: (BuildContext context) {
            return new MyApp();
          },
        ));
        final snack = new SnackBar(
          content: new Text("Signed In Successfully"),
          action: null,
          duration: new Duration(seconds: 4),
          backgroundColor: Colors.black,
        );

        Scaffold.of(context).showSnackBar(snack);
      }
    }on PlatformException catch(e){

      reason = '${e.message}';

      /*final snack = new SnackBar(
        content: new Text(e.message),
        action: null,
        duration: new Duration(seconds: 4),
        backgroundColor: Colors.black,
      );

      Scaffold.of(context).showSnackBar(snack);*/
    }
    setState(() {
      _reason = reason;
    });

  }

import 'package:flutter/services.Dart' show PlatformException;も追加しました

例外をキャッチする方法を教えてください、ありがとうございます。

8
Robin Olisa

私はしばらく同じ問題を抱えていましたが、その理由を知りました。

ここでの問題は、PlatformExceptionをキャッチできないように見えますが、実際には、例外を「キャッチしている」ことです。

Android Studioでは、[実行]> [ブレークポイントの表示]に移動して、デバッグ違反ポリシーを設定できます。 enter image description here

[有効]をオフにすると、例外をキャッチするAndroid Studioが「邪魔しない」ようになり、アプリがcatch句を実行したときにスナックバーを適切に表示します。アプリを「デバッグしていないとき」に期待することです。

ただし、Break on exceptionsを有効にしてデバッグしている場合、Android Studioは、catch句が実行される前にPlatformExceptionで中断することによってその仕事をします。

したがって、[有効]オプションをオフにするか、Android Studioの[プログラムの再開]ボタンを押すだけで、心配する必要はありません。アプリはおそらく正常に動作しています。)

5
iecanfly