firebase - 有人能告诉我如何把它变成一个 listview.builder 并且仍然连接到 firebase 吗?顺便说一句,我收藏的名字是“杂货”
问题描述
目前它是一个listview,我知道如何正常创建一个listview.builder,但我不知道如何将它连接到firebase。我在谈论流构建器和上下文以及所有这些东西。非常感谢任何帮助,如果这是一个明显/愚蠢的问题,我很抱歉。
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(FireApp());
}
class FireApp extends StatefulWidget {
@override
_FireAppState createState() => _FireAppState();
}
class _FireAppState extends State<FireApp> {
final TextController = TextEditingController();
bool isChecked = false;
@override
Widget build(BuildContext context) {
CollectionReference groceries =
FirebaseFirestore.instance.collection('groceries');
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: TextField(
controller: TextController,
),
),
body: Center(
child: StreamBuilder(
stream: groceries.orderBy('name').snapshots(),
builder: (context, AsyncSnapshot<QuerySnapshot> snapshot) {
return ListView(
children: snapshot.data!.docs.map((grocery) {
return Center(
child: Row(
children: [
Container(color: Colors.red,height: 50,child: Text(grocery['name'])),
Checkbox(
materialTapTargetSize: MaterialTapTargetSize.padded,
value: isChecked,
activeColor: Colors.black,
checkColor: Colors.greenAccent,
onChanged: (bool) {
setState(() {
isChecked = !isChecked;
});
}
)],
),
);
}).toList(),
);
},
),
),
floatingActionButton: FloatingActionButton(onPressed: () {
groceries.add({
'name': TextController.text,
});
},),
),
);
}
}
解决方案
下面给出了 StreamBuilder 和 listview.builder 示例代码
StreamBuilder<QuerySnapshot<Map<String, dynamic>>>(
stream: groceries.orderBy('name').snapshots(),
builder: (context,
AsyncSnapshot<QuerySnapshot<Map<String, dynamic>>> snapshot) {
// your list of groceries
List groceriesList =
snapshot.data.docs.map((e) => e.data()).toList();
return ListView.builder(
itemCount: groceriesList.length,
itemBuilder: (context, i) {
// build your widget here.
return Center(
child: Row(
children: [
Container(
color: Colors.red,
height: 50,
child: Text(groceriesList[i]['name']),
),
Checkbox(
materialTapTargetSize: MaterialTapTargetSize.padded,
value: isChecked,
activeColor: Colors.black,
checkColor: Colors.greenAccent,
onChanged: (bool) {
setState(() => isChecked = !isChecked);
},
)
],
),
);
},
);
},
),
推荐阅读
- java - Java - 使用客户端证书身份验证时取消 Ssl 流
- jax-rs - Bean 验证是否适用于语义或语法?
- google-search - 谷歌搜索 - 创建后立即制作谷歌索引个人资料页面
- javascript - 创建自定义 URL 以触发按钮
- python - 是否可以将列表导出到 .txt 以便记事本可以读取换行符?
- elasticsearch - lucene查询使用grafana替换子字符串
- google-apps-script - Google Apps 脚本在 for 循环中神秘地停止运行
- javascript - 如何调用存在于 2 个 js 文件中的 js 方法?
- sapui5 - 从 TableSelectDialog 到表单的数据绑定
- keras - Keras 为 if 语句签名