В настоящее время я пытаюсь создать базовое приложение 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,
);
}
)
);
}