Плагин Flutter Cloud Firestore: как отказаться от транзакции? - PullRequest
2 голосов
/ 10 января 2020

Я пишу транзакцию с помощью плагина 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 (..) вместо этого, выбрасывая исключение, но используя эту транзакцию, выполняю без ошибка.

Как остановить транзакцию?

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