diff --git a/lib/src/utils/event_localizations.dart b/lib/src/utils/event_localizations.dart index 350a621c..86163a15 100644 --- a/lib/src/utils/event_localizations.dart +++ b/lib/src/utils/event_localizations.dart @@ -144,11 +144,13 @@ abstract class EventLocalizations { text = i18n.joinedTheChat(targetName); } } else if (newMembership == 'join') { - final newAvatar = event.content['avatar_url'] ?? ''; - final oldAvatar = event.prevContent?['avatar_url'] ?? ''; + final newAvatar = event.content.tryGet('avatar_url') ?? ''; + final oldAvatar = event.prevContent?.tryGet('avatar_url') ?? ''; - final newDisplayname = event.content['displayname'] ?? ''; - final oldDisplayname = event.prevContent?['displayname'] ?? ''; + final newDisplayname = + event.content.tryGet('displayname') ?? ''; + final oldDisplayname = + event.prevContent?.tryGet('displayname') ?? ''; final stateKey = event.stateKey; // Has the user avatar changed? diff --git a/test/event_test.dart b/test/event_test.dart index 9fb32afa..e82d509f 100644 --- a/test/event_test.dart +++ b/test/event_test.dart @@ -368,6 +368,46 @@ void main() { 'Removed by Example'); expect(event.isEventTypeKnown, true); + event = Event.fromJson({ + 'content': { + 'avatar_url': + 'mxc://pixelthefox.net/bmGuC44Eeb3BomfkZTP02DVnGaRp4dek', + 'displayname': [ + [ + [[]] + ] + ], + 'membership': 'join' + }, + 'origin_server_ts': 1636487843183, + 'room_id': '!watercooler-v9:maunium.net', + 'sender': '@nyaaori:pixelthefox.net', + 'state_key': '@nyaaori:pixelthefox.net', + 'type': 'm.room.member', + 'unsigned': { + 'prev_content': { + 'avatar_url': + 'mxc://pixelthefox.net/bmGuC44Eeb3BomfkZTP02DVnGaRp4dek', + 'displayname': 1, + 'membership': 'join' + }, + 'prev_sender': '@nyaaori:pixelthefox.net', + 'replaces_state': '\$kcqn2k6kXQKOM45t_p8OA03PQRR3KB2N_PN4HUq1GiY' + }, + 'event_id': '\$21DJjleMGcviLoT4L9wvxawMlOXSQ9yW6R8mrhlbhfU', + 'user_id': '@nyaaori:pixelthefox.net', + 'replaces_state': '\$kcqn2k6kXQKOM45t_p8OA03PQRR3KB2N_PN4HUq1GiY', + 'prev_content': { + 'avatar_url': + 'mxc://pixelthefox.net/bmGuC44Eeb3BomfkZTP02DVnGaRp4dek', + 'displayname': 1, + 'membership': 'join' + } + }, room); + expect( + event.getLocalizedBody(MatrixDefaultLocalizations()) is String, true); + expect(event.isEventTypeKnown, true); + event = Event.fromJson({ 'content': { 'body': 'Landing',