Плагин Flutter cloud_firestore Транзакции на Android - PullRequest
0 голосов
/ 10 мая 2018

Кто-нибудь успешно запустил транзакцию с помощью плагина cloud_firestore? Я получаю следующую ошибку:

E / AndroidRuntime (26208): ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: AsyncTask # 2 E / AndroidRuntime (26208): процесс: io.flutter.plugins.googlesigninexample, PID: 26208 E / AndroidRuntime (26208): java.lang.RuntimeException: произошла ошибка при> выполнении doInBackground () E / AndroidRuntime (26208): на android.os.AsyncTask $ 3.done (AsyncTask.java:353) E / AndroidRuntime (26208): на java.util.concurrent.FutureTask.finishCompletion (FutureTask.java:383) E / AndroidRuntime (26208): на java.util.concurrent.FutureTask.setException (FutureTask.java:252) E / AndroidRuntime (26208): на java.util.concurrent.FutureTask.run (FutureTask.java:271) E / AndroidRuntime (26208): на android.os.AsyncTask $ SerialExecutor $ 1.run (AsyncTask.java:245) E / AndroidRuntime (26208): на java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1162) E / AndroidRuntime (26208): на java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:636) E / AndroidRuntime (26208): на java.lang.Thread.run (Thread.java:764) E / AndroidRuntime (26208): Причина: java.lang.IllegalArgumentException:> Предоставленная ссылка на документ из другого экземпляра Firestore. E / AndroidRuntime (26208): на com.google.firebase.firestore.FirebaseFirestore.zza (неизвестный источник: 17) E / AndroidRuntime (26208): на com.google.firebase.firestore.Transaction.get (неизвестный источник: 2) E / AndroidRuntime (26208): в io.flutter.plugins.firebase.cloudfirestore.CloudFirestorePlugin $ 4.doInBackground (CloudFirestorePlugin.java:321) E / AndroidRuntime (26208): на io.flutter.plugins.firebase.cloudfirestore.CloudFirestorePlugin $ 4.doInBackground (CloudFirestorePlugin.java:316) E / AndroidRuntime (26208): на android.os.AsyncTask $ 2.call (AsyncTask.java:333) E / AndroidRuntime (26208): на java.util.concurrent.FutureTask.run (FutureTask.java:266) E / AndroidRuntime (26208): ... еще 4 D / FlutterNativeView (26208): handlePlatformMessage отвечает на отдельное представление, channel = plugins.flutter.io / cloud_firestore I / FirebaseAuth (26208): [FirebaseAuth:] Загрузка модуля через FirebaseOptions. I / FirebaseAuth (26208): [FirebaseAuth:] Подготовка к созданию подключения службы к реализации gms

Вот код, основанный на https://github.com/flutter/plugins/tree/master/packages/cloud_firestore#usage:

   final DocumentReference postRef =
    Firestore.instance.document('posts/post1');
    Firestore.instance.runTransaction((Transaction tx) async {
      DocumentSnapshot postSnapshot = await tx.get(postRef);
      if (postSnapshot.exists) {
      await tx.update(postRef,
          <String, dynamic>{'likesCt': postSnapshot.data['likesCt'] + 1});
      }
    });

pubspec.lock:

  cloud_firestore:
    dependency: "direct main"
    description:
      name: cloud_firestore
      url: "https://pub.dartlang.org"
    source: hosted
    version: "0.7.0+2"

трепет доктора:

Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel beta, v0.3.1, on Microsoft Windows [Version 
10.0.16299.431], locale en-US)
[√] 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.
[√] IntelliJ IDEA Community Edition (version 2018.1)
[√] Connected devices (1 available)

• No issues found!

1 Ответ

0 голосов
/ 25 марта 2019

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

Я инициировал свое приложение с помощью main.dart следующим образом:

final FirebaseApp app =
      await FirebaseApp.configure(options: _options(), name: 'testauth');
final Firestore firestore = Firestore(app: app);
  await firestore.settings(timestampsInSnapshotsEnabled: true);

после аутентификации я перенаправляю на homescreen.dart, который использовал новый Firestore.instance ... полностью не связанный с основным.

Я проследил свою проблему по ошибке, которая говорит

Причина: java.lang.IllegalArgumentException: Предоставленная ссылка на документ из другого экземпляра Firestore.

Итак, я удалил строки

final Firestore firestore = Firestore(app: app);
await firestore.settings(timestampsInSnapshotsEnabled: true);

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

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