Я пишу транзакцию с помощью плагина cloud_firestore и хочу отклонить транзакцию, если конкретное поле данных не соответствует условию
final refProdotti = refs.getSubReferences('products');
final refOrdini = refs.getSubReferences('orders');
return refs.db.runTransaction((trans) async {
for(var productOrder in order.prodotti) {
var refProdotto = refProdotti.document(productOrder.prodottoId);
print(productOrder.prodottoId);
var docProdotto = await trans.get(refProdotto);
var oldQuantita = docProdotto.data['quantity'];
if(oldQuantita < productOrder.quantita){
throw docProdotto.data['nome'] + ' not available';
}
//aggiorno la quantità nella collezione prodotto
var newQuantita = oldQuantita - productOrder.quantita;
await trans.update(refProdotto, { 'quantity': newQuantita });
}
}
Проблема заключается в том, что при выдаче исключения я получаю PlatformException (Каждый документ, считанный в транзакции, также должен быть записан в этой транзакции., Null).
Я пытался использовать Future.error (..) вместо этого, выбрасывая исключение, но используя эту транзакцию, выполняю без ошибка.
Как остановить транзакцию?