flutter - Dart:在 Flutter 应用程序中最小化对 Firebase 的访问
问题描述
我有以下小部件,它根据给定文档 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 的替代方法是什么。
谢谢。
解决方案
StreamBuilder 在您需要在 firebase 集合中获取任何更新、插入或删除的应用程序中是必需的(在这种情况下)。另一种选择是 FutureBuilder ,它获取一次数据,然后您可以包裹在 Swipe 中进行刷新(用户决定何时需要查看新数据)。
推荐阅读
- r - 如何评估 R 中数据表中布尔列函数的代码?
- matlab - MATLAB:许多矩阵求逆速度更快
- java - 基于事件时间的窗口不触发
- nestjs - 无法运行测试,因为 Nest 找不到模块
- python - 是否有使用Python提取txt文件时间的功能
- matlab - MATLAB Coder:截断/连接元胞数组
- behat - 在 Behat 中是否有任何自定义函数可以传递用户凭据来测试 API 响应?
- android - 以粗体、斜体和下划线显示和保存 Edittext 的选择性文本,并发送到在 android 中编辑的服务器
- version-control - SSMS 的位桶源控制,团队资源管理器:无法创建 SSL/TLS 安全通道
- swift - Swift:确保来自具有关联类型的不同协议的等价性