mirror of
https://gitlab.com/famedly/fluffychat.git
synced 2024-11-18 09:59:35 +01:00
104 lines
3.2 KiB
Dart
104 lines
3.2 KiB
Dart
|
import 'package:famedlysdk/famedlysdk.dart';
|
||
|
import 'package:flutter/material.dart';
|
||
|
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||
|
|
||
|
class PermissionsListTile extends StatelessWidget {
|
||
|
final String permissionKey;
|
||
|
final int permission;
|
||
|
final String category;
|
||
|
final void Function() onTap;
|
||
|
|
||
|
const PermissionsListTile({
|
||
|
Key key,
|
||
|
@required this.permissionKey,
|
||
|
@required this.permission,
|
||
|
this.category,
|
||
|
this.onTap,
|
||
|
}) : super(key: key);
|
||
|
|
||
|
String getLocalizedPowerLevelString(BuildContext context) {
|
||
|
if (category == null) {
|
||
|
switch (permissionKey) {
|
||
|
case 'users_default':
|
||
|
return L10n.of(context).defaultPermissionLevel;
|
||
|
case 'events_default':
|
||
|
return L10n.of(context).sendMessages;
|
||
|
case 'state_default':
|
||
|
return L10n.of(context).configureChat;
|
||
|
case 'ban':
|
||
|
return L10n.of(context).banFromChat;
|
||
|
case 'kick':
|
||
|
return L10n.of(context).kickFromChat;
|
||
|
case 'redact':
|
||
|
return L10n.of(context).deleteMessage;
|
||
|
case 'invite':
|
||
|
return L10n.of(context).inviteContact;
|
||
|
}
|
||
|
} else if (category == 'notifications') {
|
||
|
switch (permissionKey) {
|
||
|
case 'rooms':
|
||
|
return L10n.of(context).notifications;
|
||
|
}
|
||
|
} else if (category == 'events') {
|
||
|
switch (permissionKey) {
|
||
|
case EventTypes.RoomName:
|
||
|
return L10n.of(context).changeTheNameOfTheGroup;
|
||
|
case EventTypes.RoomPowerLevels:
|
||
|
return L10n.of(context).editChatPermissions;
|
||
|
case EventTypes.HistoryVisibility:
|
||
|
return L10n.of(context).visibilityOfTheChatHistory;
|
||
|
case EventTypes.RoomCanonicalAlias:
|
||
|
return L10n.of(context).setInvitationLink;
|
||
|
case EventTypes.RoomAvatar:
|
||
|
return L10n.of(context).editRoomAvatar;
|
||
|
case EventTypes.RoomTombstone:
|
||
|
return L10n.of(context).replaceRoomWithNewerVersion;
|
||
|
case EventTypes.Encryption:
|
||
|
return L10n.of(context).enableEncryption;
|
||
|
case 'm.room.server_acl':
|
||
|
return L10n.of(context).editBlockedServers;
|
||
|
}
|
||
|
}
|
||
|
return permissionKey;
|
||
|
}
|
||
|
|
||
|
@override
|
||
|
Widget build(BuildContext context) {
|
||
|
return ListTile(
|
||
|
onTap: onTap,
|
||
|
leading: CircleAvatar(
|
||
|
backgroundColor: Theme.of(context).scaffoldBackgroundColor,
|
||
|
foregroundColor: Colors.grey,
|
||
|
child: Icon(Icons.edit_attributes_outlined),
|
||
|
),
|
||
|
title: Text(getLocalizedPowerLevelString(context)),
|
||
|
subtitle: Row(
|
||
|
children: [
|
||
|
Container(
|
||
|
padding: EdgeInsets.all(4),
|
||
|
decoration: BoxDecoration(
|
||
|
color: Theme.of(context).secondaryHeaderColor,
|
||
|
borderRadius: BorderRadius.circular(8),
|
||
|
),
|
||
|
child: Center(
|
||
|
child: Text(permission.toString()),
|
||
|
),
|
||
|
),
|
||
|
SizedBox(width: 8),
|
||
|
Text(permission.toLocalizedPowerLevelString(context)),
|
||
|
],
|
||
|
),
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
extension on int {
|
||
|
String toLocalizedPowerLevelString(BuildContext context) {
|
||
|
return this == 100
|
||
|
? L10n.of(context).admin
|
||
|
: this >= 50
|
||
|
? L10n.of(context).moderator
|
||
|
: L10n.of(context).participant;
|
||
|
}
|
||
|
}
|