如何在StreamBuilder列表视图中列出所有数据库值?使用实时数据库

时间:2020-03-24 22:34:17

标签: flutter firebase-realtime-database dart

我试图在列表视图中列出我的数据库,但是我不断收到此错误:

“ _ 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",
  }
},

谢谢您的时间,我真的很感激。

1 个答案:

答案 0 :(得分:0)

您的onValue中的快照值似乎是HashMap,因此在JSON中类似于:

broadcastDb: {
  child1: { ... },
  child2: { ... },
  child3: { ... }
}

如果只想从中获取值,则需要将类型转换为List

List<String>.from(event.snapshot.value as Map<dynamic, dynamic>).values.toList();

此结果列表中的每个dynamic都是JSON中的{ ... }之一。