我试图在列表视图中列出我的数据库,但是我不断收到此错误:
“ _ InternalLinkedHashMap”类型不是“列表”类型的子类型
注意:BroadcastDb初始化为:
final DatabaseReference broadcastDb =
FirebaseDatabase.instance.reference().child("Broadcasts");
这是我当前的代码:
new StreamBuilder(
stream: broadcastDb.onValue,
builder: (context, snap) {
if (snap.hasData &&
!snap.hasError &&
snap.data.snapshot.value != null) {
DataSnapshot snapshot = snap.data.snapshot;
List item = [];
List _list = [];
_list = snapshot.value;
_list.forEach((f) {
if (f != null) {
item.add(f);
}
});
return snap.data.snapshot.value == null
? SizedBox()
: ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: item.length,
itemBuilder: (context, index) {
return Text(item[index]);
},
);
} else {
return Center(child: CircularProgressIndicator());
}
},
),
任何想法为何会这样?我在做错什么吗?
我的firebase设置如下:
"Broadcasts" : {
"313123871927391279321" : {
"title" : "test_title",
}
},
谢谢您的时间,我真的很感激。
答案 0 :(得分:0)
您的onValue
中的快照值似乎是HashMap
,因此在JSON中类似于:
broadcastDb: {
child1: { ... },
child2: { ... },
child3: { ... }
}
如果只想从中获取值,则需要将类型转换为List
List<String>.from(event.snapshot.value as Map<dynamic, dynamic>).values.toList();
此结果列表中的每个dynamic
都是JSON中的{ ... }
之一。