diff --git a/CHANGELOG.md b/CHANGELOG.md index 96a86aa3..aaa9e3b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,11 @@ ## NEXT -## 4.0.0+1 +## 4.0.0+2 #### 修复 -- 修复图片消息和视频消息转换失败的问题。 +- 修复List? 转换失败; +- 修复图片消息和视频消息转换失败; ## 4.0.0 diff --git a/lib/src/em_chat_room_manager.dart b/lib/src/em_chat_room_manager.dart index 62cffb8e..ad746a6c 100644 --- a/lib/src/em_chat_room_manager.dart +++ b/lib/src/em_chat_room_manager.dart @@ -64,13 +64,13 @@ class EMChatRoomManager { break; case EMChatRoomEvent.ON_MUTE_LIST_ADDED: String roomId = event['roomId']; - List mutes = List.from(event['mutes']); + List mutes = List.from(event['mutes'] ?? []); String? expireTime = event['expireTime']; item.onMuteListAddedFromChatRoom?.call(roomId, mutes, expireTime); break; case EMChatRoomEvent.ON_MUTE_LIST_REMOVED: String roomId = event['roomId']; - List mutes = List.from(event['mutes']); + List mutes = List.from(event['mutes'] ?? []); item.onMuteListRemovedFromChatRoom?.call(roomId, mutes); break; case EMChatRoomEvent.ON_ADMIN_ADDED: @@ -96,12 +96,12 @@ class EMChatRoomManager { break; case EMChatRoomEvent.ON_WHITE_LIST_ADDED: String roomId = event['roomId']; - List members = List.from(event["whitelist"]); + List members = List.from(event["whitelist"] ?? []); item.onAllowListAddedFromChatRoom?.call(roomId, members); break; case EMChatRoomEvent.ON_WHITE_LIST_REMOVED: String roomId = event['roomId']; - List members = List.from(event["whitelist"]); + List members = List.from(event["whitelist"] ?? []); item.onAllowListRemovedFromChatRoom?.call(roomId, members); break; case EMChatRoomEvent.ON_ALL_MEMBER_MUTE_STATE_CHANGED: @@ -163,13 +163,13 @@ class EMChatRoomManager { break; case EMChatRoomEvent.ON_MUTE_LIST_ADDED: String roomId = event['roomId']; - List mutes = List.from(event['mutes']); + List mutes = List.from(event['mutes'] ?? []); String? expireTime = event['expireTime']; listener.onMuteListAddedFromChatRoom(roomId, mutes, expireTime); break; case EMChatRoomEvent.ON_MUTE_LIST_REMOVED: String roomId = event['roomId']; - List mutes = List.from(event['mutes']); + List mutes = List.from(event['mutes'] ?? []); listener.onMuteListRemovedFromChatRoom(roomId, mutes); break; case EMChatRoomEvent.ON_ADMIN_ADDED: @@ -195,12 +195,12 @@ class EMChatRoomManager { break; case EMChatRoomEvent.ON_WHITE_LIST_ADDED: String roomId = event['roomId']; - List members = List.from(event["whitelist"]); + List members = List.from(event["whitelist"] ?? []); listener.onAllowListAddedFromChatRoom(roomId, members); break; case EMChatRoomEvent.ON_WHITE_LIST_REMOVED: String roomId = event['roomId']; - List members = List.from(event["whitelist"]); + List members = List.from(event["whitelist"] ?? []); listener.onAllowListRemovedFromChatRoom(roomId, members); break; case EMChatRoomEvent.ON_ALL_MEMBER_MUTE_STATE_CHANGED: diff --git a/lib/src/em_client.dart b/lib/src/em_client.dart index a77527d4..25187ed9 100644 --- a/lib/src/em_client.dart +++ b/lib/src/em_client.dart @@ -629,7 +629,7 @@ class EMClient { Future _onMultiDeviceGroupEvent(Map map) async { EMMultiDevicesEvent event = convertIntToEMMultiDevicesEvent(map['event'])!; String target = map['target']; - List users = map['users']; + List? users = map.getList("users"); for (var handler in _multiDeviceEventHandler.values) { handler.onGroupEvent?.call(event, target, users); diff --git a/lib/src/em_group_manager.dart b/lib/src/em_group_manager.dart index e490e0ff..79097dbb 100644 --- a/lib/src/em_group_manager.dart +++ b/lib/src/em_group_manager.dart @@ -1319,13 +1319,13 @@ class EMGroupManager { break; case EMGroupChangeEvent.ON_MUTE_LIST_ADDED: String groupId = map['groupId']; - List mutes = List.from(map['mutes']); + List mutes = List.from(map['mutes'] ?? []); int? muteExpire = map['muteExpire']; element.onMuteListAddedFromGroup?.call(groupId, mutes, muteExpire); break; case EMGroupChangeEvent.ON_MUTE_LIST_REMOVED: String groupId = map['groupId']; - List mutes = List.from(map['mutes']); + List mutes = List.from(map['mutes'] ?? []); element.onMuteListRemovedFromGroup?.call(groupId, mutes); break; case EMGroupChangeEvent.ON_ADMIN_ADDED: @@ -1372,12 +1372,12 @@ class EMGroupManager { break; case EMGroupChangeEvent.ON_WHITE_LIST_ADDED: String groupId = map["groupId"]; - List members = List.from(map['whitelist']); + List members = List.from(map['whitelist'] ?? []); element.onAllowListAddedFromGroup?.call(groupId, members); break; case EMGroupChangeEvent.ON_WHITE_LIST_REMOVED: String groupId = map["groupId"]; - List members = List.from(map['whitelist']); + List members = List.from(map['whitelist'] ?? []); element.onAllowListRemovedFromGroup?.call(groupId, members); break; case EMGroupChangeEvent.ON_ALL_MEMBER_MUTE_STATE_CHANGED: @@ -1462,13 +1462,13 @@ class EMGroupManager { break; case EMGroupChangeEvent.ON_MUTE_LIST_ADDED: String groupId = map['groupId']; - List mutes = List.from(map['mutes']); + List mutes = List.from(map['mutes'] ?? []); int? muteExpire = map['muteExpire']; listener.onMuteListAddedFromGroup(groupId, mutes, muteExpire); break; case EMGroupChangeEvent.ON_MUTE_LIST_REMOVED: String groupId = map['groupId']; - List mutes = List.from(map['mutes']); + List mutes = List.from(map['mutes'] ?? []); listener.onMuteListRemovedFromGroup(groupId, mutes); break; case EMGroupChangeEvent.ON_ADMIN_ADDED: @@ -1515,12 +1515,12 @@ class EMGroupManager { break; case EMGroupChangeEvent.ON_WHITE_LIST_ADDED: String groupId = map["groupId"]; - List members = List.from(map['whitelist']); + List members = List.from(map['whitelist'] ?? []); listener.onAllowListAddedFromGroup(groupId, members); break; case EMGroupChangeEvent.ON_WHITE_LIST_REMOVED: String groupId = map["groupId"]; - List members = List.from(map['whitelist']); + List members = List.from(map['whitelist'] ?? []); listener.onAllowListRemovedFromGroup(groupId, members); break; case EMGroupChangeEvent.ON_ALL_MEMBER_MUTE_STATE_CHANGED: diff --git a/lib/src/models/em_chat_room.dart b/lib/src/models/em_chat_room.dart index 628627bc..ca9e6b18 100644 --- a/lib/src/models/em_chat_room.dart +++ b/lib/src/models/em_chat_room.dart @@ -34,10 +34,10 @@ class EMChatRoom { owner: map["owner"], memberCount: map["memberCount"], maxUsers: map["maxUsers"], - adminList: map["adminList"], - memberList: map["memberList"], - blockList: map["blockList"], - muteList: map["muteList"], + adminList: map.getList("adminList"), + memberList: map.getList("memberList"), + blockList: map.getList("blockList"), + muteList: map.getList("muteList"), announcement: map["announcement"], permissionType: chatRoomPermissionTypeFromInt(map["permissionType"]), isAllMemberMuted: map.boolValue("isAllMemberMuted")); diff --git a/lib/src/models/em_group.dart b/lib/src/models/em_group.dart index 991fb2b5..5a5370bb 100644 --- a/lib/src/models/em_group.dart +++ b/lib/src/models/em_group.dart @@ -189,10 +189,10 @@ class EMGroup { String? owner = map["owner"]; String? announcement = map["announcement"]; int? memberCount = map["memberCount"]; - List? memberList = map["memberList"]; - List? adminList = map["adminList"]; - List? blockList = map["blockList"]; - List? muteList = map["muteList"]; + List? memberList = map.getList("memberList"); + List? adminList = map.getList("adminList"); + List? blockList = map.getList("blockList"); + List? muteList = map.getList("muteList"); bool? messageBlocked = map["messageBlocked"]; bool? isAllMemberMuted = map["isAllMemberMuted"]; EMGroupPermissionType? permissionType = diff --git a/lib/src/models/em_message.dart b/lib/src/models/em_message.dart index 7a67de8c..bd1ef8c1 100644 --- a/lib/src/models/em_message.dart +++ b/lib/src/models/em_message.dart @@ -933,12 +933,7 @@ class EMTextMessageBody extends EMMessageBody { type: MessageType.TXT, ) { this.content = map["content"] ?? ""; - this.targetLanguages = map.getList( - "targetLanguages", - valueCallback: (item) { - return item; - }, - ); + this.targetLanguages = map.getList("targetLanguages"); if (map.containsKey("translations")) { this.translations = map["translations"]?.cast(); } diff --git a/lib/src/models/em_message_reaction.dart b/lib/src/models/em_message_reaction.dart index 6a73196c..d03fcabe 100644 --- a/lib/src/models/em_message_reaction.dart +++ b/lib/src/models/em_message_reaction.dart @@ -44,9 +44,7 @@ class EMMessageReaction { bool isAddedBySelf = map["isAddedBySelf"] ?? false; List userList = []; - List? tmp = map.getList("userList", valueCallback: (str) { - return str; - }); + List? tmp = map.getList("userList"); if (tmp != null) { userList.addAll(tmp); } diff --git a/lib/src/tools/em_extension.dart b/lib/src/tools/em_extension.dart index 8416e864..caa31c6f 100644 --- a/lib/src/tools/em_extension.dart +++ b/lib/src/tools/em_extension.dart @@ -52,14 +52,20 @@ extension MapExtension on Map { return ret; } - List? getList(String key, {valueCallback = MapResultCallback}) { + List? getList(String key, {MapResultCallback? valueCallback}) { List? ret; if (this.containsKey(key)) { List list = this[key]; List typeList = []; for (var item in list) { - typeList.add(valueCallback(item)); + if (valueCallback != null) { + typeList.add(valueCallback(item)); + } else { + if (item is T) { + typeList.add(item); + } + } } if (typeList.length > 0) { ret = typeList; diff --git a/pubspec.yaml b/pubspec.yaml index 559a95fe..c6236de5 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: im_flutter_sdk description: Integrate the Chat SDK to enjoy the global IM services with high reliability, ultra-low latency, and high concurrency. -version: 4.0.0+1 +version: 4.0.0+2 homepage: https://www.easemob.com/product/im environment: