1
0
mirror of https://gitlab.com/comunic/comunicmobile synced 2024-11-22 12:59:21 +00:00

Update conversation settings

This commit is contained in:
Pierre HUBERT 2021-04-06 18:41:51 +02:00
parent 1d0609f66e
commit 661475dec7
6 changed files with 75 additions and 33 deletions

View File

@ -3,7 +3,6 @@ import 'package:comunic/helpers/users_helper.dart';
import 'package:comunic/lists/users_list.dart';
import 'package:comunic/models/conversation.dart';
import 'package:comunic/ui/routes/main_route/main_route.dart';
import 'package:comunic/ui/routes/update_conversation_route.dart';
import 'package:comunic/ui/screens/conversation_screen.dart';
import 'package:comunic/ui/widgets/comunic_back_button_widget.dart';
import 'package:comunic/ui/widgets/conversation_image_widget.dart';
@ -65,13 +64,8 @@ class _ConversationRouteState extends SafeState<ConversationRoute> {
}
}
void _openSettings() {
MainController.of(context).push(
UpdateConversationRoute(
conversationID: widget.conversationID,
),
hideNavBar: true);
}
void _openSettings() =>
MainController.of(context).openConversationSettingsRoute(_conversation);
Widget _buildRouteBody() {
//Handle errors

View File

@ -5,6 +5,7 @@ import 'package:comunic/ui/routes/conversation_message_stats_route.dart';
import 'package:comunic/ui/routes/conversation_route.dart';
import 'package:comunic/ui/routes/main_route/page_info.dart';
import 'package:comunic/ui/routes/settings/account_settings_route.dart';
import 'package:comunic/ui/routes/update_conversation_route.dart';
import 'package:comunic/ui/screens/call_screen.dart';
import 'package:comunic/ui/screens/conversations_list_screen.dart';
import 'package:comunic/ui/screens/friends_list_screen.dart';
@ -169,6 +170,15 @@ abstract class MainController extends State<MainRoute> {
hideNavBar: true,
));
/// Open conversation settings route
void openConversationSettingsRoute(Conversation conv) => pushPage(PageInfo(
child: UpdateConversationRoute(
conversationID: conv.id,
),
canShowAsDialog: true,
hideNavBar: true,
));
/// Open a conversation message statistics page
void openConversationMessageStats(
Conversation conv, ConversationMessage message) =>

View File

@ -1,7 +1,7 @@
import 'package:comunic/models/advanced_group_info.dart';
import 'package:comunic/ui/routes/main_route/main_route.dart';
import 'package:comunic/ui/screens/conversation_screen.dart';
import 'package:comunic/ui/screens/group_sections/about_group_section.dart';
import 'package:comunic/ui/screens/group_sections/group_conversation_section.dart';
import 'package:comunic/ui/screens/group_sections/group_members_screen.dart';
import 'package:comunic/ui/screens/group_sections/group_posts_section.dart';
import 'package:comunic/ui/screens/group_settings_screen.dart';
@ -75,9 +75,7 @@ class _AuthorizedGroupPageScreenState
1,
_group.conversations
.map((e) => _GroupPageTab(
widget: (c) => ConversationScreen(
conversationID: e.id,
),
widget: (c) => GroupConversationSection(conv: e),
label: e.name))
.toList());

View File

@ -8,7 +8,6 @@ import 'package:comunic/lists/groups_list.dart';
import 'package:comunic/lists/users_list.dart';
import 'package:comunic/models/conversation.dart';
import 'package:comunic/ui/routes/main_route/main_route.dart';
import 'package:comunic/ui/routes/update_conversation_route.dart';
import 'package:comunic/ui/screens/create_conversation_screen.dart';
import 'package:comunic/ui/tiles/conversation_tile.dart';
import 'package:comunic/ui/widgets/safe_state.dart';
@ -122,11 +121,7 @@ class _ConversationScreenState extends SafeState<ConversationsListScreen> {
/// Handle conversations updated requests
void _updateConversation(Conversation conversation) {
MainController.of(context).push(
UpdateConversationRoute(
conversationID: conversation.id,
),
);
MainController.of(context).openConversationSettingsRoute(conversation);
}
/// Handle conversation deletion request

View File

@ -0,0 +1,36 @@
import 'package:comunic/models/conversation.dart';
import 'package:comunic/ui/routes/main_route/main_route.dart';
import 'package:flutter/material.dart';
import '../conversation_screen.dart';
/// Group conversation section
///
/// @author Pierre Hubert
class GroupConversationSection extends StatelessWidget {
final Conversation conv;
const GroupConversationSection({
Key key,
@required this.conv,
}) : assert(conv != null),
super(key: key);
@override
Widget build(BuildContext context) => Stack(
children: [
ConversationScreen(
conversationID: conv.id,
),
Positioned(
right: 1.0,
child: IconButton(
icon: Icon(Icons.settings),
onPressed: () => MainController.of(context)
.openConversationSettingsRoute(conv),
),
)
],
);
}

View File

@ -68,6 +68,9 @@ class _UpdateConversationScreen extends State<UpdateConversationScreen> {
get isAdmin => !isUpdating || _conversation.isAdmin;
bool get _isGroupConversation =>
isUpdating && _conversation.isGroupConversation;
bool get _canAddMembers =>
(isAdmin || _conversation.canEveryoneAddMembers) &&
(!isUpdating || !_conversation.isManaged);
@ -122,6 +125,10 @@ class _UpdateConversationScreen extends State<UpdateConversationScreen> {
padding: EdgeInsets.all(8.0),
child: Column(
children: <Widget>[
_isGroupConversation
? Text(tr("This conversation is managed by a group"))
: Container(),
// Conversation name
TextField(
controller: _nameController,
@ -161,21 +168,23 @@ class _UpdateConversationScreen extends State<UpdateConversationScreen> {
),
// Allow every members of the conversation to add users ?
Row(
children: <Widget>[
Switch.adaptive(
value: _canEveryoneAddMembers,
onChanged: isAdmin
? (b) => setState(() {
_canEveryoneAddMembers = b;
})
: null,
),
Flexible(
child: Text(tr(
"Allow all members of the conversation to add users")))
],
),
_isGroupConversation
? Container()
: Row(
children: <Widget>[
Switch.adaptive(
value: _canEveryoneAddMembers,
onChanged: isAdmin
? (b) => setState(() {
_canEveryoneAddMembers = b;
})
: null,
),
Flexible(
child: Text(tr(
"Allow all members of the conversation to add users")))
],
),
// Add a member to the conversation
PickUserWidget(