Encrypted messaging app
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

174 lines
4.9 KiB

import 'package:Capsule/components/flash_message.dart';
import 'package:Capsule/exceptions/update_data_exception.dart';
import 'package:Capsule/utils/storage/conversations.dart';
import 'package:Capsule/utils/storage/database.dart';
import 'package:flutter/material.dart';
import '/components/custom_title_bar.dart';
import '/models/conversations.dart';
class ConversationPermissions extends StatefulWidget {
const ConversationPermissions({
Key? key,
required this.conversation,
}) : super(key: key);
final Conversation conversation;
@override
_ConversationPermissionsState createState() => _ConversationPermissionsState();
}
class _ConversationPermissionsState extends State<ConversationPermissions> {
Map<String, Map<String, String>> perms = {
'admin_add_members': {
'title': 'Add Members',
'desc': 'Restrict adding members to admins',
},
'admin_edit_info': {
'title': 'Edit Info',
'desc': 'Restrict editing the conversation information to admins',
},
'admin_send_messages': {
'title': 'Send Messages',
'desc': 'Restrict sending messages to admins',
},
};
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: CustomTitleBar(
title: const Text(
'Permissions',
style: TextStyle(
fontSize: 28,
fontWeight: FontWeight.bold
)
),
beforeBack: () async {
final db = await getDatabaseConnection();
db.update(
'conversations',
widget.conversation.toMap(),
where: 'id = ?',
whereArgs: [widget.conversation.id],
);
updateConversation(widget.conversation)
.catchError((error) {
String message = error.toString();
if (error.runtimeType != UpdateDataException) {
message = 'An error occured, please try again later';
}
showMessage(message, context);
});
},
showBack: true,
backgroundColor: Colors.transparent,
),
body: Padding(
padding: const EdgeInsets.only(top: 30),
child: _list(),
),
);
}
Widget _list() {
return ListView.builder(
itemCount: perms.length,
shrinkWrap: true,
itemBuilder: (context, i) {
String key = perms.keys.elementAt(i);
return GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () {
_setValue(key);
},
child: Padding(
padding: const EdgeInsets.only(left: 30, right: 20, top: 8, bottom: 8),
child: Row(
children: [
_getValue(key) ?
const Icon(Icons.check) :
const SizedBox(width: 24),
const SizedBox(width: 16),
Expanded(
child: Align(
alignment: Alignment.centerLeft,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
perms[key]!['title'] ?? '',
textAlign: TextAlign.left,
style: const TextStyle(
fontSize: 20,
fontWeight: FontWeight.normal,
),
),
const SizedBox(height: 5),
Text(
perms[key]!['desc'] ?? '',
textAlign: TextAlign.left,
style: const TextStyle(
fontSize: 14,
fontWeight: FontWeight.w200,
),
),
]
)
)
)
],
)
)
);
}
);
}
bool _getValue(String key) {
switch (key) {
case 'admin_add_members': {
return widget.conversation.adminAddMembers;
}
case 'admin_edit_info': {
return widget.conversation.adminEditInfo;
}
case 'admin_send_messages': {
return widget.conversation.adminSendMessages;
}
default: {
return false;
}
}
}
void _setValue(String key) {
switch (key) {
case 'admin_add_members': {
setState(() {
widget.conversation.adminAddMembers = !widget.conversation.adminAddMembers;
});
break;
}
case 'admin_edit_info': {
setState(() {
widget.conversation.adminEditInfo = !widget.conversation.adminEditInfo;
});
break;
}
case 'admin_send_messages': {
setState(() {
widget.conversation.adminSendMessages = !widget.conversation.adminSendMessages;
});
break;
}
}
}
}