如何在Flutter中从Firebase Realtime Database仅获取指定单条字段数据
解决方案
问题原因
你当前传入了数据库根引用作为查询条件,FirebaseAnimatedList 会默认拉取根节点下所有第一级子节点(也就是User 1、User 2两个子节点),所以会返回两条name数据。
方案1:保留FirebaseAnimatedList,添加查询过滤
仅需修改query参数,通过orderByKey().equalTo()匹配你需要的子节点键名即可,修改后的完整代码如下:
Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.deepPurple, appBar: AppBar(), body: SingleChildScrollView( child: FirebaseAnimatedList( shrinkWrap: true, // 仅查询键名为User 1的子节点 query: FirebaseDatabase.instance.reference().orderByKey().equalTo("User 1"), itemBuilder: (BuildContext context, DataSnapshot snapshot,Animation<double> animation, int index) { return Text(snapshot.value["name"]); },), ), ); }
方案2:单节点查询更推荐使用StreamBuilder
如果仅需拉取单个固定节点的数据,不需要列表组件,用StreamBuilder更符合使用场景,示例代码如下:
Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.deepPurple, appBar: AppBar(), body: Center( child: StreamBuilder( // 直接定位到User 1节点 stream: FirebaseDatabase.instance.reference().child("User 1").onValue, builder: (context, AsyncSnapshot<DatabaseEvent> snapshot) { if (snapshot.hasData) { Map userData = snapshot.data!.snapshot.value as Map; return Text(userData["name"]); } else if (snapshot.hasError) { return Text("加载失败"); } return CircularProgressIndicator(); }, ), ), ); }
内容的提问来源于stack exchange,提问作者Aslan Mahy
相关产品推荐
相关产品推荐

