Skip to content

[Cloud Firestore Plugin] Error performing transaction #17663

@mateusz-grzegorzek

Description

@mateusz-grzegorzek

Hello,

I have been doing this tutorial step by step:
flutter-firebase
and everything works execelent, but when I tap on any row the java.lang.Exception is thrown.

Code

onTap: () => Firestore.instance.runTransaction((transaction) async {
    DocumentSnapshot postSnapshot =
        await transaction.get(document.reference);
    if (postSnapshot.exists) {
      await transaction.update(document.reference,
          <String, dynamic>{'votes': postSnapshot.data['votes'] + 1});
    }
  }),

Logs

E/flutter ( 4032): [ERROR:topaz/lib/tonic/logging/dart_error.cc(16)] Unhandled exception:
E/flutter ( 4032): PlatformException(Error performing transaction, java.lang.Exception: Do transaction failed., null)
E/flutter ( 4032): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:547:7)
E/flutter ( 4032): #1      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:279:18)
E/flutter ( 4032): <asynchronous suspension>
E/flutter ( 4032): #2      Firestore.runTransaction (file:///c:/Program%20Files/flutter/.pub-cache/hosted/pub.dartlang.org/cloud_firestore-0.7.2/lib/src/firestore.dart:115:10)
E/flutter ( 4032): <asynchronous suspension>
E/flutter ( 4032): #3      MyHomePage._buildListItem.<anonymous closure> (file:///X:/Projects/baby_names/lib/main.dart:62:39)
E/flutter ( 4032): #4      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:494:14)
E/flutter ( 4032): #5      _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:549:30)
E/flutter ( 4032): #6      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24)
E/flutter ( 4032): #7      TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:161:9)
E/flutter ( 4032): #8      TapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:123:7)
E/flutter ( 4032): #9      GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:156:27)
E/flutter ( 4032): #10     _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:147:20)
E/flutter ( 4032): #11     _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:121:22)
E/flutter ( 4032): #12     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:101:7)
E/flutter ( 4032): #13     _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:64:7)
E/flutter ( 4032): #14     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:48:7)
E/flutter ( 4032): #15     _invoke1 (dart:ui/hooks.dart:134:13)
E/flutter ( 4032): #16     _dispatchPointerDataPacket (dart:ui/hooks.dart:91:5)
E/MethodChannel#plugins.flutter.io/cloud_firestore( 4032): Failed to handle method call result
E/MethodChannel#plugins.flutter.io/cloud_firestore( 4032): java.lang.IllegalStateException: Task is already complete
E/MethodChannel#plugins.flutter.io/cloud_firestore( 4032): 	at com.google.android.gms.common.internal.Preconditions.checkState(Unknown Source:8)
E/MethodChannel#plugins.flutter.io/cloud_firestore( 4032): 	at com.google.android.gms.tasks.zzu.zzdr(Unknown Source:8)
E/MethodChannel#plugins.flutter.io/cloud_firestore( 4032): 	at com.google.android.gms.tasks.zzu.setException(Unknown Source:9)
E/MethodChannel#plugins.flutter.io/cloud_firestore( 4032): 	at com.google.android.gms.tasks.TaskCompletionSource.setException(Unknown Source:2)
E/MethodChannel#plugins.flutter.io/cloud_firestore( 4032): 	at io.flutter.plugins.firebase.cloudfirestore.CloudFirestorePlugin$3$1.error(CloudFirestorePlugin.java:290)
E/MethodChannel#plugins.flutter.io/cloud_firestore( 4032): 	at io.flutter.plugin.common.MethodChannel$IncomingResultHandler.reply(MethodChannel.java:171)
E/MethodChannel#plugins.flutter.io/cloud_firestore( 4032): 	at io.flutter.view.FlutterNativeView.handlePlatformMessageResponse(FlutterNativeView.java:171)
E/MethodChannel#plugins.flutter.io/cloud_firestore( 4032): 	at android.os.MessageQueue.nativePollOnce(Native Method)
E/MethodChannel#plugins.flutter.io/cloud_firestore( 4032): 	at android.os.MessageQueue.next(MessageQueue.java:325)
E/MethodChannel#plugins.flutter.io/cloud_firestore( 4032): 	at android.os.Looper.loop(Looper.java:142)
E/MethodChannel#plugins.flutter.io/cloud_firestore( 4032): 	at android.app.ActivityThread.main(ActivityThread.java:6938)
E/MethodChannel#plugins.flutter.io/cloud_firestore( 4032): 	at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#plugins.flutter.io/cloud_firestore( 4032): 	at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
E/MethodChannel#plugins.flutter.io/cloud_firestore( 4032): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

Note:

When I try this solution, it works:

onTap: () {           // DO NOT USE THIS VERSION!
       document.reference.updateData({'votes': document['votes'] + 1});
},

Flutter Doctor

Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel beta, v0.3.2, on Microsoft Windows [Version 6.3.9600], locale pl-PL)
[√] Android toolchain - develop for Android devices (Android SDK 27.0.3)
[√] Android Studio (version 3.1)
    X Flutter plugin not installed; this adds Flutter specific functionality.
    X Dart plugin not installed; this adds Dart specific functionality.
[√] VS Code, 64-bit edition (version 1.23.1)
[√] Connected devices (1 available)

Metadata

Metadata

Assignees

Labels

c: crashStack traces logged to the consolep: cloud_firestoreFirebase Firestore pluginp: firebaseFirebase pluginspackageflutter/packages repository. See also p: labels.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions