You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 09:36:03