使用 FlutterFire_ui 时如何关闭从 firebase 重新加载数据?

how do I turn off data reloading from firebase while using FlutterFire_ui?

我正在使用 googles flutter fire ui 库,在大多数情况下它工作正常,唯一的问题是似乎没有列出任何方式来阻止快照在数据更改时刷新.

这是我的查询:

 final restaurantsQuery =
        FirebaseFirestore.instance.collection('restaurants').orderBy('name');

这是代码:

class RestrauntSliver extends StatelessWidget {
  const RestrauntSliver({
    Key? key,
    required this.restaurantsQuery,
  }) : super(key: key);

  final Query<Map<String, dynamic>> restaurantsQuery;

  @override
  Widget build(BuildContext context) {
    return FirestoreQueryBuilder<Map<String, dynamic>>(
      query: restaurantsQuery,
      builder: (context, snapshot, _) {
        if (snapshot.isFetching) {
          return SliverToBoxAdapter(child: const CircularProgressIndicator());
        }
        if (snapshot.hasError) {
          return Text('Something went wrong! ${snapshot.error}');
        }

        // ...

        return SliverList(
          delegate: SliverChildBuilderDelegate(
            (context, index) {
              // obtain more items
              if (snapshot.hasMore && index + 1 == snapshot.docs.length) {
                // Tell FirestoreQueryBuilder to try to obtain more items.
                // It is safe to call this function from within the build method.
                snapshot.fetchMore();
              }
              final restaurant = snapshot.docs[index].data();

              final restaurantId = snapshot.docs[index].id;
              // print(restaurant);
              return RestaurantItem(
                restaurant: restaurant,
                id: restaurantId,
              );
            },
            childCount: snapshot.docs.length,
          ),
        );
      },

    );
  }
}

如果小部件被销毁,FirestoreQueryBuilder 将自动取消订阅实时侦听器。

如果您需要更多地控制何时取消、暂停或恢复侦听器,我建议您改用 StreamSubscription

您可以通过调用其 cancel() 方法来取消您的 StreamSubscription(即您对从流中接收更多数据更新不感兴趣)。 文档中的示例代码,调整为按字母顺序查询前 10 个城市:

final query = db.collection("cities").orderBy("name").limit(10);
final listener = query.snapshots().listen((event) {
  // ...
});
listener.cancel();

Link 到文档的相关部分:https://firebase.google.com/docs/firestore/query-data/listen?hl=en