fix: Make chat permission settings null and type safe

This commit is contained in:
krille-chan 2024-04-07 10:34:37 +02:00
parent 02ceddf9e8
commit f6c6898fb6
No known key found for this signature in database

View file

@ -31,14 +31,14 @@ class ChatPermissionsSettingsView extends StatelessWidget {
if (room == null) { if (room == null) {
return Center(child: Text(L10n.of(context)!.noRoomsFound)); return Center(child: Text(L10n.of(context)!.noRoomsFound));
} }
final powerLevelsContent = Map<String, dynamic>.from( final powerLevelsContent = Map<String, Object?>.from(
room.getState(EventTypes.RoomPowerLevels)!.content, room.getState(EventTypes.RoomPowerLevels)?.content ?? {},
); );
final powerLevels = Map<String, dynamic>.from(powerLevelsContent) final powerLevels = Map<String, dynamic>.from(powerLevelsContent)
..removeWhere((k, v) => v is! int); ..removeWhere((k, v) => v is! int);
final eventsPowerLevels = final eventsPowerLevels = Map<String, int?>.from(
Map<String, dynamic>.from(powerLevelsContent['events'] ?? {}) powerLevelsContent.tryGetMap<String, int?>('events') ?? {},
..removeWhere((k, v) => v is! int); )..removeWhere((k, v) => v is! int);
return Column( return Column(
children: [ children: [
Column( Column(
@ -67,9 +67,12 @@ class ChatPermissionsSettingsView extends StatelessWidget {
Builder( Builder(
builder: (context) { builder: (context) {
const key = 'rooms'; const key = 'rooms';
final int value = powerLevelsContent final value = powerLevelsContent
.containsKey('notifications') .containsKey('notifications')
? powerLevelsContent['notifications']['rooms'] ?? 0 ? powerLevelsContent
.tryGetMap<String, Object?>('notifications')
?.tryGet<int>('rooms') ??
0
: 0; : 0;
return PermissionsListTile( return PermissionsListTile(
permissionKey: key, permissionKey: key,
@ -98,11 +101,11 @@ class ChatPermissionsSettingsView extends StatelessWidget {
PermissionsListTile( PermissionsListTile(
permissionKey: entry.key, permissionKey: entry.key,
category: 'events', category: 'events',
permission: entry.value, permission: entry.value ?? 0,
onTap: () => controller.editPowerLevel( onTap: () => controller.editPowerLevel(
context, context,
entry.key, entry.key,
entry.value, entry.value ?? 0,
category: 'events', category: 'events',
), ),
), ),