【发布时间】:2020-09-06 01:08:04
【问题描述】:
我正在尝试使用 Flutter 从 Firebase RTDB 读取数据,但似乎无法从特定子级获取值。
我的数据库中有一个链接到 Car 字段的下拉列表,它可以正常工作并提取值:
按下按钮后,我尝试运行查询以使用以下命令将Brand 链接到汽车选择:
void CreateNewDeal(String selectedcar) {
try{
print('check car inside function - $selectedcar');
FirebaseDatabase.instance.reference().child('CarList2').orderByChild('Car').equalTo(selectedcar).once().then((DataSnapshot snap) {
print('${snap.value['Brand']}');
});
}catch(e){
print('error in reading the brand');
}
}
我在 print 语句中不断得到一个空值。
但是,如果我更改打印语句以删除 `['Brand]' 它会检索特定节点的完整树。
如何只检索相应“汽车”的“品牌”。
编辑:
我尝试仅使用 $snap.value 运行代码,这将返回特定孩子的整个树。然后当我将打印更改为print(snap.value[0]['Brand']) 时,如果我要选择链接到树中项目 0 的汽车,它会打印品牌。如果我将其更改为在下拉列表中选择的任何其他汽车,它不会给我品牌并返回 null。我虽然可能与 0 索引有关,所以我特意选择了第 1 项并将打印更改为 snap.value[1]['Brand'],但这也不起作用。
这不可能为空,因为当我物理检查数据库时,值是存在的。我不确定为什么它适用于第 0 项而不适用于其他项目
编辑
我遇到此问题的原因是我的树的设置方式。我做了进一步的调查,最终不得不改变上面我的树截图中看到的索引。
如果需要,请参阅下面关于如何重组树的其他问题和答案。
Flutter - Firebase RTDB read issue for node at index 0, 1 and 2
【问题讨论】:
-
尝试打印
snap.value[selectedcar] -
@SanjaySharma,这不起作用,应该,因为“selectedcar”是该字段的
value,而不是该字段的name -
对不起,我的错,你有没有在调试模式下检查
snap的长度 -
@SanjaySharma,它肯定会返回值。如前所述,如果我打印
snap.value,它将返回我的树中的所有值。我可以将它添加到List<dynamic>并打印列表。尝试提取特定字段“品牌”或导致 null 的任何其他字段的问题不应该是这种情况,因为字段中有数据 -
@SanjaySharma,当打印
snapshot.value时,控制台中打印的开头似乎有一个空值。知道那是什么吗?[null, { Brand: Alfa Romeo, Car: Alfa Romeo Guilia 2.0T Standard Automatic Petrol Sedan RWD}]
标签: flutter firebase-realtime-database dart