Я создаю случайное приложение чата 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.