Firebase 即使我修改了一些字段,如何从Firestore中每次只提取一次数据?

Firebase 即使我修改了一些字段,如何从Firestore中每次只提取一次数据?,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,我正在开发一个颤振应用程序,我有一个无法解决的问题。 在我的一个视图中,我显示Firestore中的所有用户。 我首先查询Firestore,每次保存最后一个用户以使用startAfterDocument(lastUser)重新执行查询 fetch10first()异步{ Stream-Stream=dbInstance.collection('users').orderBy('prenom',降序:true).limit(10).snapshots(); stream.listen((快照){

我正在开发一个颤振应用程序,我有一个无法解决的问题。 在我的一个视图中,我显示Firestore中的所有用户。 我首先查询Firestore,每次保存最后一个用户以使用startAfterDocument(
lastUser
)重新执行查询

fetch10first()异步{
Stream-Stream=dbInstance.collection('users').orderBy('prenom',降序:true).limit(10).snapshots();
stream.listen((快照){
snapshot.documents.forEach((u){
User User=User.fromDocument(u);
设置状态(){
用户。添加(用户);
_lastUser=u;
});
});
});
}
每个用户都存储在一个列表中。为了显示这些用户,我使用了一个带有滚动控制器的ListView.builder,它可以检查我是否已经到达页面底部并获取10个新用户。 我的问题是我在听快照。然后,如果我修改我的一个用户(从应用程序或Firestore),它将获得另一个快照,我将让该用户显示两次。
我怎样才能解决这个问题

要仅获取一次数据,您需要将
Future
getDocuments()
一起使用:

fetch10first()异步{
Future futureCol=dbInstance.collection('users').orderBy('prenom',降序:true).limit(10).getDocuments();
futureCol.then((快照){
snapshot.documents.forEach((u){
User User=User.fromDocument(u);
设置状态(){
用户。添加(用户);
_lastUser=u;
});
});
});
}
 fetch10first() async {
 Stream<QuerySnapshot> stream = dbInstance.collection('users').orderBy('prenom', descending: true).limit(10).snapshots();
 stream.listen((snapshot) {
  snapshot.documents.forEach((u) {
    User user = User.fromDocument(u);
    setState(() {
      users.add(user);
      _lastUser = u;
    });
  });
});
}
fetch10first() async {
 Future<QuerySnapshot> futureCol = dbInstance.collection('users').orderBy('prenom', descending: true).limit(10).getDocuments();
 futureCol.then((snapshot) {
  snapshot.documents.forEach((u) {
    User user = User.fromDocument(u);
    setState(() {
      users.add(user);
      _lastUser = u;
    });
  });
});
}