我有以下小部件,它根据给定文档 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 是否是一种矫枉过正,因为使用流来监听可能会浪费资源和访问 Firebase。更重要的是,使用 Firebase 的成本是按访问量计算的。
总而言之,问题是是否需要使用 StreamBuilder。如果不是,那么可以帮助避免不必要地访问 Firebase 的替代方法是什么。
谢谢。