Выполнить метод при успешной транзакции - PullRequest
0 голосов
/ 14 марта 2019

Я создаю случайное приложение чата 1: 1 в Flutter и Firebase.

Я использую transaction для добавления пользователя в чат, потому что необходимо избегать условия гонки более чем одного пользователя, добавляемого в чат. Чат должен быть 1: 1.

Я использую bool userInChat в Firestore doc для монитора, если в чате только один пользователь, поэтому он может добавить другого пользователя в чат.

Если транзакция прошла успешно, я отображаю экран чата. Если нет, покажите ошибку. Я установил bool userAdded для отслеживания этого.

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

Но это работает только на iOS, а не на Android. Только на iOS это ловит ошибку как показывают:

PlatformException (9, транзакция не прошла все попытки., Ноль).

На Android нет ошибок.

Я использую плагин cloud_firestore: ^0.9.5+2

Я не знаю, почему работают только iOS. Может быть, это не правильный способ сделать? В чем проблема с моим кодом? Как правильно делать?

Спасибо за помощь!

  Future<bool> addUser() async {

try {
  await Firestore.instance.runTransaction((transaction) async {
    DocumentSnapshot chatRoomDocSnapshot =
        await transaction.get(chatRoomDocRef);
    bool userInChat = await chatRoomDocSnapshot[‘userInChat'];

    if (userInChat == false) {
        await transaction.update(chatRoomDocSnapshot.reference, {
          ‘userInChat': true,
        });
    }
  });

await chatUserRef.setData({
  ‘User’: user,
});

  userAdded = true;


} catch (e) {
  userAdded = false;
}
return userAdded;
  }

ОБНОВЛЕНИЕ: Может быть, проблема с плагином cloud_firestore? Потому что есть только эта ошибка на Android.

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