Firebase Stream - 知道初始提取何时完成?
Firebase Stream - Knowing when initial fetch complete?
我使用 Firebase 实时数据库 StreamSubscription
来监听事件,包括 onChildAdded
和 onChildChanged
。
例如,这将获取 dbRef
处的所有现有条目以及流处于活动状态时的任何未来添加。
dbRef.onChildAdded.listen((event) async {
String? key = event.snapshot.key;
Map value = event.snapshot.value as Map;
// Do stuff with object...
});
但是,由于onChildAdded
获取所有数据,然后进行后续添加,我不知道initial/existing数据何时完成获取。
我可以使用 dbRef.once()
来获取 initial/existing 数据,我会知道它何时完成,从而允许我呈现加载 UI。但是,在此之后使用 onChildAdded
会使我获取数据两次。
我怎样才能获取 initial/existing 数据,知道什么时候完成,以便可以适当地显示正在加载的 UI,然后收听将来添加的内容?
firebaser 在这里
如果您同时监听实时数据库中的子事件和值事件,更新的值事件只会在所有子事件都触发后触发。
知道这一点后,一个常见的技巧是同时监听 onChild...
和 onValue
事件(或 once
未来)。然后,您可以 build/update 子处理程序中的状态,并在值处理程序中提交新状态。
SDK 会自动对同一 query/reference 上的侦听器进行重复数据删除,因此在同一 query/ref 上设置多个侦听器只会从服务器读取一次数据。
我使用 Firebase 实时数据库 StreamSubscription
来监听事件,包括 onChildAdded
和 onChildChanged
。
例如,这将获取 dbRef
处的所有现有条目以及流处于活动状态时的任何未来添加。
dbRef.onChildAdded.listen((event) async {
String? key = event.snapshot.key;
Map value = event.snapshot.value as Map;
// Do stuff with object...
});
但是,由于onChildAdded
获取所有数据,然后进行后续添加,我不知道initial/existing数据何时完成获取。
我可以使用 dbRef.once()
来获取 initial/existing 数据,我会知道它何时完成,从而允许我呈现加载 UI。但是,在此之后使用 onChildAdded
会使我获取数据两次。
我怎样才能获取 initial/existing 数据,知道什么时候完成,以便可以适当地显示正在加载的 UI,然后收听将来添加的内容?
firebaser 在这里
如果您同时监听实时数据库中的子事件和值事件,更新的值事件只会在所有子事件都触发后触发。
知道这一点后,一个常见的技巧是同时监听 onChild...
和 onValue
事件(或 once
未来)。然后,您可以 build/update 子处理程序中的状态,并在值处理程序中提交新状态。
SDK 会自动对同一 query/reference 上的侦听器进行重复数据删除,因此在同一 query/ref 上设置多个侦听器只会从服务器读取一次数据。