我有一個像這樣的json結構
{
"-My6relBpWvPaY_I4JvN": {
"idUser": "4dca8440-a37d-11ec-9c66-9b8f61be17f0",
"message": "777777"
}
}
我想使用 fromJson 保存到地圖,這是我的模型:
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,
};
}
現在我總是在弗蘭克的幫助下得到空值,
final data = Map<String, dynamic>.from(snapshot.value as Map);
Message message = Message.fromJson(data);
print('message value${message.message}'); // here i got null
請告訴我哪里錯了。
----------更新----------
嗨弗蘭克,首先感謝您的回復,我將從firebase RTDB獲取一個流,因為資料結構如上所示,我通過以下方法獲得的資料,
final Map<String, dynamic> data = Map<String, dynamic>.from(snapshot.value as Map);
該資料的鍵是{"-My6relBpWvPaY_I4JvN"},值是
{
"idUser": "4dca8440-a37d-11ec-9c66-9b8f61be17f0",
"message": "777777"
}
所以在這種情況下,我需要更新你展示的方法
//**instead** snapshot.children.forEach((msgSnapshot) {
data.values.forEach((msgSnapshot) {
final Map<String, dynamic> messageData = Map<String, dynamic>.from(msgSnapshot as Map);
//i am not sure whether I need to use msgSnapshot.value as Map, since msgSnaphot is already the right Map<String, dynamic> that I can put to fromJson
Message message = Message.fromJson(messageData);
})
我理解正確嗎?感謝您提供更多資訊!
uj5u.com熱心網友回復:
在我的情況下,我有這樣的設定,女巫作業得很好:
static Message model({required Map map}) => Message(
messageID: map[kModelMessengerID],
owner: map[kModelMessageOwner],
type: map[kModelMessageType],
msg: map[kModelMessageMsg],
membersIDs: (map[kModelMessageMembersIDs] as List<dynamic>)
.map((e) => e.toString())
.toList(),
createdAt: map[kModelMessageCreatedAt] == null
? DateTime.now()
: (map[kModelMessageCreatedAt] as Timestamp).toDate(),
);
以及我如何將資料傳遞給它:
final ref = FirebaseDatabase.instance.ref();
final snapshot = await ref.child(...).get();
if (snapshot.exists) {
var m = Message.model(map: snapshot.value as Map))
} else {
print('No data available.');
}
uj5u.com熱心網友回復:
您問題中的代碼沒有顯示如何snapshot初始化,但我猜它包含一個訊息串列。甚至 1 條訊息的串列仍然是一個串列,因此您必須在代碼中通過迭代children快照的屬性來處理它:
snapshot.children.forEach((msgSnapshot) {
final data = Map<String, dynamic>.from(msgSnapshot.value as Map);
Message message = Message.fromJson(data);
print('message value${message.message}');
})
uj5u.com熱心網友回復:
您的 JSON 應如下所示:
{"userId": "4dca8440-a37d-11ec-9c66-9b8f61be17f0", "message": "777777"}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/444493.html
標籤:火力基地 扑 firebase-实时数据库
