Flutter Dart中如何从Firebase Realtime Database获取指定节点特定字段值
Flutter Dart Firebase Realtime Database 单字段获取方法
实现方案
你要的指定节点下特定字段的读取操作完全可以实现,有两种常用写法:
1. 直接查询目标字段路径(最优)
直接把字段名拼接在查询路径中,只会返回目标字段的数据,不需要拉取整个节点,节省带宽:
// 示例:获取123节点下的test1字段值 final dataSnapshot = await FirebaseDatabase.instance.ref().child("123/test1").get(); if (dataSnapshot.exists) { String test1Value = dataSnapshot.value as String; // 此处test1Value就是你写入的"test" }
2. 拉取整个节点后按需取值
如果需要同时使用同个节点下的多个字段,可以先拉取整个节点,再从返回的Map中取值:
final dataSnapshot = await FirebaseDatabase.instance.ref().child("123").get(); if (dataSnapshot.exists) { Map nodeAllData = dataSnapshot.value as Map; String test1Value = nodeAllData["test1"] as String; // 其他字段可通过nodeAllData["字段名"]直接读取 }
原有代码的问题
之前的写法存在两处错误:
- 新版
firebase_databaseSDK已废弃reference()方法,替换为ref()方法 - 没有调用
get()方法发起实际查询,child()方法仅返回路径引用,不会返回数据快照
注意事项
- 读取前请确认你的Realtime Database安全规则放开了对应路径的读取权限
- 取值前建议先判断
dataSnapshot.exists,避免节点不存在导致的空值异常
附示例数据库结构:
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

