Как я могу исправить ошибку транзакции firestore во флаттере? - PullRequest
0 голосов
/ 16 февраля 2019

Я внедряю приложение чата и должен использовать транзакцию для синхронизации сообщений пользователей.Но есть фатальная ошибка, которая резко завершает приложение.Как я могу иметь дело?

Я искал много материалов для этого, но не было никакого решения. Проблема Github связана с этим, и я уже написал вопрос об этом.

Future<void> sendMessage(String content,String receiver,String chatRoomID) async {
  DocumentReference doc = Firestore.instance
    .collection(firestoreMessageCollection)
    .document(chatRoomID)
    .collection(chatRoomID)
    .document(DateTime.now().millisecondsSinceEpoch.toString());

  await Firestore.instance.runTransaction((tx) async{
    await tx.set(doc,{
      firestoreChatFromField: sl.get<CurrentUser>().uid,
      firestoreChatToField: receiver,
      firestoreChatTimestampField: DateTime.now().millisecondsSinceEpoch.toString(),
      firestoreChatContentField: content
    });
  });
}

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

E / AndroidRuntime (1719): вызвано: java.lang.IllegalArgumentException: предоставлена ​​ссылка на документ из другого экземпляра Firestore.

Даже еслиЯ использую один и тот же экземпляр Firestore, это происходит постоянно.Есть кто-нибудь, кто решил эту ужасную проблему?

Ответы [ 2 ]

0 голосов
/ 24 июня 2019

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

с:

DocumentReference doc = Firestore.instance
    .collection(firestoreMessageCollection)
    .document(chatRoomID)
    .collection(chatRoomID)
    .document(DateTime.now().millisecondsSinceEpoch.toString());

на:

DocumentReference doc = Firestore.instance.document('$firestoreMessageCollection/$chatRoomID/$chatRoomID/${DateTime.now().millisecondsSinceEpoch.toString()}');

Я также обновил версии зависимостей.В моем случае это:

firebase_core: ^0.4.0+6
firebase_auth: 0.11.1+7
cloud_firestore: 0.12.5+2
firebase_storage: ^3.0.2
firebase_messaging: ^5.0.4
firebase_crashlytics: ^0.0.4+8
0 голосов
/ 16 февраля 2019

Это было связано с настройкой пожарного депо.Когда вы инициализируете настройки FireStore, просто используйте Firestore.instance.Если вы используете другой экземпляр, это происходит моя ошибка

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