streambuilder 我得到了 snap 但无法传输到列表 firebase 数据库 rtdb flutter

streambuilder I got the snap but can not transfer to list firebase database rtdb flutter

今天差点要了我的命 T T,我得到了数据,但无法成功转换为我可以使用的列表,我得到了 Frank 的帮助 link

但是我还是得到了null,请检查我的代码谢谢:

StreamBuilder(
                stream: messageStream.onValue,
                builder: (context, snap) {
                  if (snap.hasData &&
                      !snap.hasError &&
                      snap.data.snapshot.value != null) {

print('snapshot value${snap.data.snapshot.value.toString()}'); 
// but here I can see the data from snap
//I/flutter ( 6189): snapshot value{-My6relBpWvPaY_I4JvN: {idUser: 4dca8440-a37d-11ec-9c66-9b8f61be17f0, message: 777777}}


                    DataSnapshot snapshot = snap.data.snapshot;
                    final data = Map<String, dynamic>.from(snapshot.value as Map);
                    Message message = Message.fromJson(data);

                    print('message value${message.message}'); // here I got null
                    List<Message> messages = [];
                    messages.add(message);


                    return ListView.builder(
                      reverse: true,
                      shrinkWrap: true,
                      controller: _scrollController,
                      itemCount: (messages == null) ? 0 : messages.length,
                      itemBuilder: (itemBuilderContext, index) {
                        final message = messages[index];
                        return MessageWidget(
                          message: message,
                          isMe: message.userId == currentUserId,
                        );
                      },
                    );
                  } else {
                    return const Center(child: CircularProgressIndicator());
                  }
                }), 

消息模型很简单:

class Message {
  final String userId;
  final String message;

  const Message({
    @required this.userId,
    @required this.message,
  });

  static Message fromJson(Map<String, dynamic> json) => Message(
        userId: json['idUser'],
        message: json['message'],
      );

  Map<String, dynamic> toJson() => {
        'idUser': userId,
        'message': message,
      };
}

希望这是对像我这样的初学者的正确解决方案和启发,

最后我通过使用 Map 两次从流中获取数据以避免转换错误 () 请检查下面的代码:

            DataSnapshot snapshot = snap.data.snapshot;

            print(
                'snapshot${snap.data.snapshot.value.toString()}');
            List<Message> messages = [];
            final Map<String,dynamic> data = Map<String, dynamic>.from(
                snapshot.value as Map);

            for (var element in data.values) {
              final Map<String,dynamic> messageData = Map<String, dynamic>.from(
                  element as Map);
              Message message = Message.fromJson(messageData);
              messages.add(message);
              print('message的${message.message}');

感谢 Frank 一如既往地提供解决方案和指导!