Я создаю случайное приложение чата 1: 1 в Flutter и Firebase.Я использую transaction
для добавления пользователя в чат, потому что нужно избегать условия гонки более чем одного пользователя, добавляемого в чат.Чат должен быть 1: 1.
Мне нужна ошибка catch transaction
, если transaction
timeout.
Но ошибка ловится только на iOS (не Android).Только на iOS это ловит ошибку как показано:
PlatformException (9, Транзакция провалила все попытки. Каждый документ, прочитанный в транзакции, также должен быть записан в этой транзакции., Нуль)
На Android в режиме отладки приложение зависает и выдает ошибку в message_codecs.dart
:
throw PlatformException (код: errorCode, сообщение: errorMessage, подробности: errorDetails);
Вот транзакция:
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) {
print(e);
userAdded = false;
}
return userAdded;
}
Я использую плагин cloud_firestore: ^0.12.5+1
Кто-нибудь видел эту проблему плагина?
Почему эта ошибка возникает только на Android?
Спасибо за помощь!