【发布时间】:2021-05-02 23:28:36
【问题描述】:
当 Firestore 项目更改时,我无法刷新列表视图。当添加新项目并显示在列表中并更新视图时,它可以完美运行。我们正在使用 orderby 子句及其经常更改的字段进行查询。我们注意到列表内部发生了变化,因为顺序发生了变化,但是因为列表视图没有刷新和重新排序。当用户点击一个项目时,他们最终会选择一个错误的项目。
小部件代码如下所示:
Widget buildFuture(bool isIndian, bool isJapan){
return FutureBuilder<Stream<List<Map<String,dynamic>>>>(
future: Provider.of<CountryProvider>(context)
.getList(currentUserId, isIndian, isJapan),
builder: (ctx, snap) {
if (!snap.hasData) {
return Center(
child: CircularProgressIndicator(),
);
}
return StreamBuilder<List<Map<String,dynamic>>>(
stream: snap.data,
builder:
(ctx, AsyncSnapshot<List<Map<String,dynamic>>> snapshot) {
if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(),
);
}
usersData = snapshot.data;
if (snapshot.data.isEmpty) {
return Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Image.asset('assets/images/icon.png'),
Text(
'Aha Nothing found',
textAlign: TextAlign.center,
style: Theme.of(context)
.textTheme
.bodyText1
.copyWith(fontSize: 18),
),
],
),
);
}
return _getListView(snapshot);
},
);
},
);
}
_getListView(snapshot) {
return ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (ctx, index) {
return UserItem(
userDocument: snapshot.data[index],
);
},
);
}
这是我们从 Firestore 获取的方式:
Stream<QuerySnapshot> snapshots= _firestore.collection(Constants.COUNTRY_COLLECTION).where('isIndian' , isEqualTo: isIndian).where('isJapan' , isEqualTo: isJapan).orderBy("lastOnline",descending: true).snapshots();
return snapshots.transform(
StreamTransformer<QuerySnapshot, List<Map<String,dynamic>>>.fromHandlers(
handleData: (querySnapshot, sink) async {
}
firestore 数据库中有复合索引。
【问题讨论】:
标签: firebase flutter google-cloud-firestore flutter-layout