Как поймать DatabaseError в приложении Flutter Firebase - PullRequest
0 голосов
/ 30 января 2020

Я изучаю Flutter и хочу поймать исключение, которое должно быть сгенерировано (поскольку правило безопасности правильно отклоняет его) в приложении / устройстве Flutter.

Ниже приведен код

   try {
      FirebaseDatabase.instance.reference().once().then((DataSnapshot snapshot) {
        try {
        debugPrint(snapshot.toString());
        }
        on DatabaseError catch (eIn1) {
        debugPrint(' onRoot ' + eIn1.toString());
        }
      });
    }on DatabaseError catch (eOut1) {
      debugPrint(' on1 ' + eOut1.toString());
    }

    try {
      FirebaseDatabase.instance.reference().child("todo").once().then((DataSnapshot snapshot) {
        try {
          debugPrint(snapshot.toString());
        }
        on DatabaseError catch (eIn2) {
          debugPrint(' onNode ' + eIn2.toString());
        }
      });
    }on Exception catch (eOut2) {
      debugPrint(' on2 ' + eOut2.toString());
    }

Но исключение никогда не генерируется и не перехватывается Android Studio. В logCat я вижу исключение,

com.example.flutterlogindemo E / flutter: [ОШИБКА: flutter / lib /ui/ui_dart_state.cc(157)] Необработанное исключение: DatabaseError (-3, разрешение отклонено,) # 0 Query.once (package: firebase_database / src / query.dart: 84: 41) # 1 _HomePageState.initState ( пакет: flutter_login_demo / pages / home_page.dart: 48: 65)

, но не может найти его, чтобы перехватить его в коде и затем действовать в исключении.

1 Ответ

2 голосов
/ 30 января 2020

Вы можете использовать catchError, чтобы иметь возможность отловить ошибку:

FirebaseDatabase.instance.reference().child("todo").once().then((DataSnapshot snapshot) {
    print(snapshot);
})
.catchError((error) {
    print("Something went wrong: ${error.message}");
  });

https://api.flutter.dev/flutter/package-async_async/DelegatingFuture/catchError.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...