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 一如既往地提供解决方案和指导!
今天差点要了我的命 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 一如既往地提供解决方案和指导!