我在应用程序中的所有模型上使用Json_serializable(它使用命令行自动为我的模型提供fromJson和toJson方法(。
每个(反(序列化都运行良好,但不能使用 firebase_messaging json。
这是我做的:
onMessage: (Map<String, dynamic> msg) {
FCMNotification fcmNotification = FCMNotification.fromJson(msg);
}
而且我总是有这种错误:
类型"字符串"不是类型转换中"动态、动态映射<>"类型的子类型
或
"_InternalLinkedHashMap<动态,动态>"不是类型为"映射<字符串,动态>"的子类型
我在这里的 github 中看到过这种问题,但我没有找到任何解决方案。请帮忙
我找到了问题和解决方案。
Firebase 云消息通知以地图形式接收。
地图的结构是这样的:
{
"registration_ids": ["registrationID1, "registrationID2", ...],
"notification": {
"title": "New message",
"body": "new message in channel: test"
},
"data": {
"type": "CHANNEL_MESSAGE",
"author": {
"id": 5,
"firstName": "John",
"lastName": "Doe",
"email": "J.doe@email.com",
"userType": "USER",
"language": "EN"
},
}
}
我们可以把我们想要的东西放在"数据"中。就我而言,我有一个作者对象。此对象在地图中形成一个附加级别。Firebase 云消息传递认为所有附加级别值均为字符串。
因此,我们可以使用传统的"fromJson(json("方法反序列化"数据",但是如果我们想反序列化"author",我们必须先解码Json,如下所示:
String jsonAuthorStr = msg["data"]["author"];
Map<String, dynamic> temp = json.decode(jsonAuthorStr);
然后,反序列化:
Author author = Author.fromJson(temp);