Dart:在 Flutter 应用程序中最小化对 Firebase 的访问

Dart: Minimising access to Firebase in Flutter app

我有以下小部件,它根据给定文档 ID 的任务的子集合构建待办事项列表。代码运行良好。

  Widget buildFoodList() {
return SizedBox(
  child: Container(
      padding: const EdgeInsets.all(10.0),
      child: StreamBuilder<QuerySnapshot>(
        stream: Firestore.instance.collection('tasks').document(documentID).collection('todo')
            .snapshots(),
        builder: (BuildContext context,
            AsyncSnapshot<QuerySnapshot> snapshot) {
          if (snapshot.hasError)
            return new Text('Error: ${snapshot.error}');
          switch (snapshot.connectionState) {
            case ConnectionState.waiting:
              return new Text('Loading...');
            default:
              return new ListView.builder(
                shrinkWrap: true,
                itemCount: snapshot.data.documents.length,
                itemBuilder: (context, index) {
                  DocumentSnapshot ds = snapshot.data.documents[index];
                  return new Row(
                    children: <Widget>[
                        Expanded (child:Text(ds['deadline'].toString()) ),
                        Expanded (child:Text(ds['description']) ),
                        Expanded (child:Text("$"+ds['quantity'].toString()) ),
                    ],
                  );
                },
              );
          }
        },
      )
  ),
);

}

如您所见,我正在使用 StreamBuilder。但是,我知道子集合不会改变。所以问题是使用StreamBuilder是不是有点大材小用,因为使用stream来监听会浪费资源和访问Firebase。更重要的是,使用 Firebase 的成本是按访问量计算的。

总而言之,问题是是否有必要使用StreamBuilder。如果不能,有什么替代方法可以帮助避免对 Firebase 的不必要访问。

谢谢。

StreamBuilder 在您需要在 firebase 集合中获取任何更新、插入或删除的应用程序中是必需的(在本例中)。另一种方法是 FutureBuilder,它一次获取数据,然后您可以用滑动来刷新(用户决定何时需要查看新数据)。