【问题标题】:Flutter Unable catch Exception using tryCatchFlutter 使用 tryCatch 无法捕获异常
【发布时间】:2021-05-29 15:59:08
【问题描述】:

我无法捕捉到异常。有人知道怎么抓吗?

这是抛出错误的地方。我只是用 try-catch 块包裹它,但它对我没有帮助,它无法捕捉它,我不知道它是什么捕捉不到

此方法来自我的自定义 BaseDB 抽象类,并且此方法在我的自定义 FirebaseDBService 类上被覆盖。

  @override
  Stream<Oyuncu> oyuncuStream(String UID) {
    try {
      return usersColRef
          .doc(UID)
          .withConverter<Oyuncu>(
            fromFirestore: (snapshot, _) => Oyuncu.fromJson(snapshot.data()!),
            toFirestore: (Oyuncu model, _) => model.toJson(),
          )
          .snapshots()
          .map((event) {
        // if (event.data() is Map<String, dynamic>) {
        // var jsonDoc = event.data() as Map<String, dynamic>;
        // return Oyuncu.fromJson(jsonDoc);
        if(event.data() is Oyuncu) {
          return event.data() as Oyuncu;
        }else{
          throw Exception('Unable get user from DB');
        }
      });
    } on Exception catch (e) {
      print("Test "+e.toString());
      rethrow;
    }
  }

我的调试控制台:

W/ProviderInstaller(16484): Failed to load providerinstaller module: No acceptable module found. Local version is 0 and remote version is 0.
E/flutter (16484): [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: Exception: Unable get user from DB
E/flutter (16484): #0      FirestoreDBService.oyuncuStream.<anonymous closure> (package:p763_quiz/data/service/db/firestoreDBService.dart:41:11)
E/flutter (16484): #1      _MapStream._handleData (dart:async/stream_pipe.dart:213:31)
E/flutter (16484): #2      _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:153:13)
E/flutter (16484): #3      _rootRunUnary (dart:async/zone.dart:1362:47)
E/flutter (16484): #4      _CustomZone.runUnary (dart:async/zone.dart:1265:19)
E/flutter (16484): #5      _CustomZone.runUnaryGuarded (dart:async/zone.dart:1170:7)
E/flutter (16484): #6      _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:341:11)
E/flutter (16484): #7      _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
E/flutter (16484): #8      _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:123:11)
E/flutter (16484): #9      _MapStream._handleData (dart:async/stream_pipe.dart:218:10)
E/flutter (16484): #10     _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:153:13)
E/flutter (16484): #11     _rootRunUnary (dart:async/zone.dart:1362:47)
E/flutter (16484): #12     _CustomZone.runUnary (dart:async/zone.dart:1265:19)
E/flutter (16484): #13     _CustomZone.runUnaryGuarded (dart:async/zone.dart:1170:7)
E/flutter (16484): #14     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:341:11)
E/flutter (16484): #15     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
E/flutter (16484): #16     _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:123:11)
E/flutter (16484): #17     _MapStream._handleData (dart:async/stream_pipe.dart:218:10)
E/flutter (16484): #18     _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:153:13)
E/flutter (16484): #19     _rootRunUnary (dart:async/zone.dart:1362:47)
E/flutter (16484): #20     _CustomZone.runUnary (dart:async/zone.dart:1265:19)
E/flutter (16484): #21     _CustomZone.runUnaryGuarded (dart:async/zone.dart:1170:7)
E/flutter (16484): #22     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:341:11)
E/flutter (16484): #23     _DelayedData.perform (dart:async/stream_impl.dart:591:14)
E/flutter (16484): #24     _StreamImplEvents.handleNext (dart:async/stream_impl.dart:706:11)
E/flutter (16484): #25     _PendingEvents.schedule.<anonymous closure> (dart:async/stream_impl.dart:663:7)
E/flutter (16484): #26     _rootRun (dart:async/zone.dart:1346:47)
E/flutter (16484): #27     _CustomZone.run (dart:async/zone.dart:1258:19)
E/flutter (16484): #28     _CustomZone.runGuarded (dart:async/zone.dart:1162:7)
E/flutter (16484): #29     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1202:23)
E/flutter (16484): #30     _rootRun (dart:async/zone.dart:1354:13)
E/flutter (16484): #31     _CustomZone.run (dart:async/zone.dart:1258:19)
E/flutter (16484): #32     _CustomZone.runGuarded (dart:async/zone.dart:1162:7)
E/flutter (16484): #33     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1202:23)
E/flutter (16484): #34     _microtaskLoop (dart:async/schedule_microtask.dart:40:21)
E/flutter (16484): #35     _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5)
E/flutter (16484): 
W/IInputConnectionWrapper(16484): getExtractedText on inactive InputConnection
W/IInputConnectionWrapper(16484): getTextBeforeCursor on inactive InputConnection
W/oidim.p763_qui(16484): Accessing hidden method Ldalvik/system/CloseGuard;->warnIfOpen()V (greylist,core-platform-api, linking, allowed)

【问题讨论】:

  • 您正在重新抛出 oyuncuStream 函数中的 try-catch 捕获的相同错误。

标签: flutter dart try-catch


【解决方案1】:

问题可能出在关键字“rethrow”上。因为如果你加上这个关键字,你会将oyuncuStream捕获的异常发送到调用oyuncuStream的函数。 --> oyuncuStream 也应该在调用它的地方用 try-cat 包裹起来。

【讨论】:

  • 是的,这是另一种情况,我在调用它的地方使用 trycatch。我的 trycatch 应该可以工作但无法正常工作,因为控制台上有未处理的消息未处理的异常:异常:无法从数据库获取用户
【解决方案2】:

使用 onError 选项成功处理了错误。

  @override
  Stream<Oyuncu> oyuncuStream(String UID) {
      return usersColRef
          .doc(UID)
          .withConverter<Oyuncu>(
            fromFirestore: (snapshot, _) => Oyuncu.fromJson(snapshot.data()!),
            toFirestore: (Oyuncu model, _) => model.toJson(),
          )
          .snapshots()
          .map((event) => event.data() as Oyuncu).handleError((x){
            throw 'There is a problem with your account';
      });

  }

我可以从调用者那里得到它。

  void startListeningOyuncu(String id) {
    oyuncuDBSubs = db.oyuncuStream(id).listen((oyuncu) {
      emit(AuthState.auhtenticated(oyuncu));
    })
      ..onError((x) {
        toastBase.toastService.showToast(text: x.toString());
        add(AuthEvent.logOut());
      });
  }

我认为我们不能对 Streams 使用 try-catch,如果我错了,请告诉我。

【讨论】:

    猜你喜欢
    • 2021-04-24
    • 2021-09-02
    • 2020-08-13
    • 2020-06-17
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 2021-09-20
    • 2010-10-29
    相关资源
    最近更新 更多