исключение выброса транзакции из пожарного депо - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь реализовать приложение оплаты счетов.Поэтому я хочу использовать транзакции, проблема в том, что я хочу остановить транзакцию при различных условиях, таких как:

1 - пользователь не найден

2 - суммы недостаточно

Очень хочется использовать исключения, но проблема в том, что вместо ошибки я получаю исключение Java (Задача - полное исключение)

      await _firestoreClient.runTransaction((Transaction trans) async {
      DocumentReference userPocketRef =
          _firestoreClient.collection("users").document(userID);

      DocumentSnapshot userData = await trans.get(userPocketRef);

      if (!userData.exists) throw Exception("User Data Not Found");

      if (userData.data['cash'] == null || userData.data['cash'] < amount)
        throw Exception("Bill is Over Client Budget");

      await trans.update(userPocketRef, <String, dynamic>{
        "cash": userData.data['cash'] - amount,
      });
    })

Полученное исключение

E/MethodChannel#plugins.flutter.io/cloud_firestore(12228): Failed to handle E/MethodChannel#plugins.flutter.io/cloud_firestore(12228): Failed to handle method call result
java.lang.IllegalStateException: Task is already complete
at com.google.android.gms.common.internal.Preconditions.checkState(Unknown Source:29)
at com.google.android.gms.tasks.zzu.zzc(Unknown Source:123)
at com.google.android.gms.tasks.zzu.setException(Unknown Source:98)
at com.google.android.gms.tasks.TaskCompletionSource.setException(Unknown Source:11)
at io.flutter.plugins.firebase.cloudfirestore.CloudFirestorePlugin$3$1.error(CloudFirestorePlugin.java:296)
at io.flutter.plugin.common.MethodChannel$IncomingResultHandler.reply(MethodChannel.java:181)
at io.flutter.view.FlutterNativeView$PlatformMessageHandlerImpl.handlePlatformMessageResponse(FlutterNativeView.java:220)
at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessageResponse(FlutterJNI.java:211)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:326)
at android.os.Looper.loop(Looper.java:160)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...