fluffychat/lib/pages/chat_permissions_settings/chat_permissions_settings_view.dart

128 lines
5.1 KiB
Dart
Raw Normal View History

2021-04-15 06:48:26 +00:00
import 'package:flutter/material.dart';
2021-10-26 16:50:34 +00:00
2021-04-15 06:48:26 +00:00
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:matrix/matrix.dart';
2021-04-15 06:48:26 +00:00
2021-11-09 20:32:16 +00:00
import 'package:fluffychat/pages/chat_permissions_settings/chat_permissions_settings.dart';
import 'package:fluffychat/pages/chat_permissions_settings/permission_list_tile.dart';
2021-10-26 16:50:34 +00:00
import 'package:fluffychat/widgets/layouts/max_width_body.dart';
import 'package:fluffychat/widgets/matrix.dart';
2021-05-22 07:13:47 +00:00
class ChatPermissionsSettingsView extends StatelessWidget {
2021-04-15 06:48:26 +00:00
final ChatPermissionsSettingsController controller;
const ChatPermissionsSettingsView(this.controller, {super.key});
2021-04-15 06:48:26 +00:00
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
leading: const Center(child: BackButton()),
2023-08-13 14:25:56 +00:00
title: Text(L10n.of(context)!.chatPermissions),
2021-04-15 06:48:26 +00:00
),
body: MaxWidthBody(
child: StreamBuilder(
stream: controller.onChanged,
builder: (context, _) {
2022-01-29 11:35:03 +00:00
final roomId = controller.roomId;
final room = roomId == null
? null
: Matrix.of(context).client.getRoomById(roomId);
if (room == null) {
return Center(child: Text(L10n.of(context)!.noRoomsFound));
}
final powerLevelsContent = Map<String, Object?>.from(
room.getState(EventTypes.RoomPowerLevels)?.content ?? {},
);
2021-04-15 06:48:26 +00:00
final powerLevels = Map<String, dynamic>.from(powerLevelsContent)
2021-10-14 16:09:30 +00:00
..removeWhere((k, v) => v is! int);
final eventsPowerLevels = Map<String, int?>.from(
powerLevelsContent.tryGetMap<String, int?>('events') ?? {},
)..removeWhere((k, v) => v is! int);
2021-04-15 06:48:26 +00:00
return Column(
children: [
Column(
mainAxisSize: MainAxisSize.min,
children: [
2023-08-18 05:24:31 +00:00
for (final entry in powerLevels.entries)
2021-04-15 06:48:26 +00:00
PermissionsListTile(
permissionKey: entry.key,
permission: entry.value,
onChanged: (level) => controller.editPowerLevel(
context,
entry.key,
entry.value,
newLevel: level,
),
canEdit: room.canChangePowerLevel,
2021-04-15 06:48:26 +00:00
),
2024-04-14 13:49:46 +00:00
Divider(color: Theme.of(context).dividerColor),
2021-04-15 06:48:26 +00:00
ListTile(
title: Text(
2022-01-29 11:35:03 +00:00
L10n.of(context)!.notifications,
2021-04-15 06:48:26 +00:00
style: TextStyle(
color: Theme.of(context).colorScheme.primary,
2021-04-15 06:48:26 +00:00
fontWeight: FontWeight.bold,
),
),
),
Builder(
builder: (context) {
const key = 'rooms';
final value = powerLevelsContent
.containsKey('notifications')
? powerLevelsContent
.tryGetMap<String, Object?>('notifications')
?.tryGet<int>('rooms') ??
0
: 0;
return PermissionsListTile(
permissionKey: key,
permission: value,
category: 'notifications',
canEdit: room.canChangePowerLevel,
onChanged: (level) => controller.editPowerLevel(
context,
key,
value,
newLevel: level,
category: 'notifications',
),
);
},
),
2024-04-14 13:49:46 +00:00
Divider(color: Theme.of(context).dividerColor),
2021-04-15 06:48:26 +00:00
ListTile(
title: Text(
2022-01-29 11:35:03 +00:00
L10n.of(context)!.configureChat,
2021-04-15 06:48:26 +00:00
style: TextStyle(
color: Theme.of(context).colorScheme.primary,
2021-04-15 06:48:26 +00:00
fontWeight: FontWeight.bold,
),
),
),
2023-08-18 05:24:31 +00:00
for (final entry in eventsPowerLevels.entries)
2022-01-29 11:35:03 +00:00
PermissionsListTile(
permissionKey: entry.key,
category: 'events',
permission: entry.value ?? 0,
canEdit: room.canChangePowerLevel,
onChanged: (level) => controller.editPowerLevel(
context,
entry.key,
entry.value ?? 0,
newLevel: level,
category: 'events',
),
2022-01-29 11:35:03 +00:00
),
2021-04-15 06:48:26 +00:00
],
),
],
);
},
),
),
);
}
}