Приложение Flutter падает при одновременных транзакциях (cloud_firestore) - PullRequest
0 голосов
/ 30 апреля 2020

В настоящее время я пытаюсь создать базовое приложение c counter, используя flutter и cloud_firestore. Однако всякий раз, когда я быстро увеличиваю счетчик, приложение вылетает и выдает следующую ошибку. Причины: java .lang.AssertionError: ВНУТРЕННЯЯ СБОЙ: объект транзакции не может использоваться после того, как был вызван его обратный вызов обновления. Я смотрел на несколько других людей, имеющих аналогичную проблему, таких как https://github.com/FirebaseExtended/flutterfire/issues/1216.I, которые прикрепили мой код, где в списке есть все элементы, считанные из моей базы данных.

Widget _buildListItem(BuildContext context,DocumentSnapshot doc)
{
  return ListTile(
    title: Row(children: <Widget>[
      Expanded(child: Text(doc['prayerName']),),

      Container(
        child: Text(doc['totalCount'].toString()),
      )
    ],) ,
    onTap: ()  {
   databaseReference.runTransaction((transaction) async {
        DocumentSnapshot counterChange = await transaction.get(doc.reference);
   await transaction.update(counterChange.reference,
            {
              'totalCount':counterChange['totalCount']+1,
            });

      } );

    }
  );
}
  Widget build(BuildContext context)
  {

return Scaffold(
  appBar: AppBar(title: Text('View Your Prayers')),
body:StreamBuilder(
  stream: Firestore.instance.collection('prayerRooms').snapshots(),
  builder: (context,snapshot)
    {
      if(!snapshot.hasData)return const Text("Loading..");
      return ListView.builder(
        itemBuilder: (context,index)=>
        _buildListItem(context,snapshot.data.documents[index]),
        itemCount: snapshot.data.documents.length,
                              );
    }
)
);
  }

1 Ответ

0 голосов
/ 01 мая 2020

В ссылке, которой вы поделились в вашем описании, сказано, что это известная проблема в библиотеке привязки флаттера с устройствами iOS. Возможное решение - упомянуть в том же посте здесь или попробовать это предложение.

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