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,它一次获取数据,然后您可以用滑动来刷新(用户决定何时需要查看新数据)。
我有以下小部件,它根据给定文档 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,它一次获取数据,然后您可以用滑动来刷新(用户决定何时需要查看新数据)。