Flutter中如何将Firebase节点Key以String类型添加至列表
解决Firebase节点Key添加为字符串而非对象集合的问题
你的问题出在values.keys.toString()这行代码——它会把整个Keys集合转换成字符串格式(所以输出带括号),而不是提取单个节点的Key字符串。
修正方案
情况1:查询结果仅返回单个节点
直接获取集合中的第一个Key并转成字符串:
var myList = []; await database.ref().child("team").orderByChild(uid).equalTo("test").once().then((DatabaseEvent databaseEvent){ if (databaseEvent.snapshot.value != null) { Map<dynamic, dynamic> values = databaseEvent.snapshot.value as Map<dynamic, dynamic>; // 取第一个Key并转字符串 myList.add(values.keys.first.toString()); print(myList); } });
情况2:查询结果可能返回多个节点
遍历所有Keys,逐个添加到列表:
var myList = []; await database.ref().child("team").orderByChild(uid).equalTo("test").once().then((DatabaseEvent databaseEvent){ if (databaseEvent.snapshot.value != null) { Map<dynamic, dynamic> values = databaseEvent.snapshot.value as Map<dynamic, dynamic>; // 遍历所有Key并添加 values.keys.forEach((key) { myList.add(key.toString()); }); print(myList); } });
说明
values.keys返回的是一个Key集合,直接调用toString()会输出集合的整体格式(带括号);- 通过
first可以获取集合中的第一个元素,或者用forEach遍历所有元素,再分别转成字符串添加到列表,就能得到你期望的纯Key字符串列表。
内容的提问来源于stack exchange,提问作者Bernhard
相关产品推荐
相关产品推荐

