[英]Flutter stream deletion issue
我正在处理使用 Firestore 的 Flutter 应用程序。 我已经在带有列表视图的应用程序中显示了我的文档。 感谢 Flutter stream,我可以更新文档并立即出现在应用程序中。但是,我在删除文档时遇到了问题。 似乎删除在现实中工作正常,但应用程序中的显示显示错误信息。 例如,我删除了索引为 1 的文档,但始终删除了最后一个索引的文档。 似乎来自 FireStore stream 的事件只是更新了 stream 中的文档数量,列表视图通过另一个小部件(如客户列表磁贴)显示信息,每个索引的信息未正确更新。 下面是我的代码:
class _BudgetSummaryState extends State<BudgetSummary> {
Stream<QuerySnapshot> getSummaries() => FirebaseFirestore.instance
.collection('Users')
.doc(FirebaseAuth.instance.currentUser!.phoneNumber)
.collection('UserDBs')
.snapshots();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: MyAppBar('Summary'),
floatingActionButton: FloatingActionButton.extended(
onPressed: () {
Navigator.of(context).pushNamed('/Update_Edit_Screens/AddNewBudget');
},
label: const Text('Add new'),
icon: const Icon(Icons.add),
),
body: SafeArea(
child: StreamBuilder<QuerySnapshot>(
stream: getSummaries(),
builder: (context, snapshot) {
if (snapshot.hasError) {
return const Center(
child: Text('Something went wrong, please try again later'),
);
}
if (snapshot.hasData) {
var data = snapshot.data;
if (data == null) {
return const Center(
child: Text('Add you first budget/expense tracker'),
);
} else {
return ListView.builder(
itemCount: data.docs.length,
itemBuilder: ((context, index) {
Color col =
index % 2 == 0 ? Colors.lightBlue : Colors.lime;
return SummaryWidget(data.docs[index], col);
}));
}
}
我通过重新加载整个页面做了一个解决方法,即重建完整的路线。 但不知何故,我觉得它扼杀了使用 stream 的目的。请告知我是否遗漏了什么?
Flutter数据删除经典问题。
您需要为每个列表项提供 Key。 您可以使用 ValueKey 可以为每个列表项获取一些唯一的 ID。 就像是
return SummaryWidget(key:ValueKey(data.docs[index].id), data.docs[index], col);
如果您想知道推理,请告诉我,我会在这里更新。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.