|
|
|
@ -23,6 +23,8 @@ class ChatDetailsView extends StatelessWidget {
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
|
final theme = Theme.of(context);
|
|
|
|
|
|
|
|
|
|
final room = Matrix.of(context).client.getRoomById(controller.roomId!);
|
|
|
|
|
if (room == null) {
|
|
|
|
|
return Scaffold(
|
|
|
|
@ -45,7 +47,7 @@ class ChatDetailsView extends StatelessWidget {
|
|
|
|
|
final actualMembersCount = (room.summary.mInvitedMemberCount ?? 0) +
|
|
|
|
|
(room.summary.mJoinedMemberCount ?? 0);
|
|
|
|
|
final canRequestMoreMembers = members.length < actualMembersCount;
|
|
|
|
|
final iconColor = Theme.of(context).textTheme.bodyLarge!.color;
|
|
|
|
|
final iconColor = theme.textTheme.bodyLarge!.color;
|
|
|
|
|
final displayname = room.getLocalizedDisplayname(
|
|
|
|
|
MatrixLocals(L10n.of(context)!),
|
|
|
|
|
);
|
|
|
|
@ -53,7 +55,7 @@ class ChatDetailsView extends StatelessWidget {
|
|
|
|
|
appBar: AppBar(
|
|
|
|
|
leading: controller.widget.embeddedCloseButton ??
|
|
|
|
|
const Center(child: BackButton()),
|
|
|
|
|
elevation: Theme.of(context).appBarTheme.elevation,
|
|
|
|
|
elevation: theme.appBarTheme.elevation,
|
|
|
|
|
actions: <Widget>[
|
|
|
|
|
if (room.canonicalAlias.isNotEmpty)
|
|
|
|
|
IconButton(
|
|
|
|
@ -68,7 +70,7 @@ class ChatDetailsView extends StatelessWidget {
|
|
|
|
|
ChatSettingsPopupMenu(room, false),
|
|
|
|
|
],
|
|
|
|
|
title: Text(L10n.of(context)!.chatDetails),
|
|
|
|
|
backgroundColor: Theme.of(context).appBarTheme.backgroundColor,
|
|
|
|
|
backgroundColor: theme.appBarTheme.backgroundColor,
|
|
|
|
|
),
|
|
|
|
|
body: MaxWidthBody(
|
|
|
|
|
child: ListView.builder(
|
|
|
|
@ -143,9 +145,8 @@ class ChatDetailsView extends StatelessWidget {
|
|
|
|
|
size: 16,
|
|
|
|
|
),
|
|
|
|
|
style: TextButton.styleFrom(
|
|
|
|
|
foregroundColor: Theme.of(context)
|
|
|
|
|
.colorScheme
|
|
|
|
|
.onSurface,
|
|
|
|
|
foregroundColor:
|
|
|
|
|
theme.colorScheme.onSurface,
|
|
|
|
|
),
|
|
|
|
|
label: Text(
|
|
|
|
|
room.isDirectChat
|
|
|
|
@ -167,9 +168,8 @@ class ChatDetailsView extends StatelessWidget {
|
|
|
|
|
size: 14,
|
|
|
|
|
),
|
|
|
|
|
style: TextButton.styleFrom(
|
|
|
|
|
foregroundColor: Theme.of(context)
|
|
|
|
|
.colorScheme
|
|
|
|
|
.secondary,
|
|
|
|
|
foregroundColor:
|
|
|
|
|
theme.colorScheme.secondary,
|
|
|
|
|
),
|
|
|
|
|
label: Text(
|
|
|
|
|
L10n.of(context)!.countParticipants(
|
|
|
|
@ -185,13 +185,13 @@ class ChatDetailsView extends StatelessWidget {
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
Divider(color: Theme.of(context).dividerColor),
|
|
|
|
|
Divider(color: theme.dividerColor),
|
|
|
|
|
if (!room.canChangeStateEvent(EventTypes.RoomTopic))
|
|
|
|
|
ListTile(
|
|
|
|
|
title: Text(
|
|
|
|
|
L10n.of(context)!.chatDescription,
|
|
|
|
|
style: TextStyle(
|
|
|
|
|
color: Theme.of(context).colorScheme.secondary,
|
|
|
|
|
color: theme.colorScheme.secondary,
|
|
|
|
|
fontWeight: FontWeight.bold,
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
@ -204,12 +204,10 @@ class ChatDetailsView extends StatelessWidget {
|
|
|
|
|
label: Text(L10n.of(context)!.setChatDescription),
|
|
|
|
|
icon: const Icon(Icons.edit_outlined),
|
|
|
|
|
style: TextButton.styleFrom(
|
|
|
|
|
backgroundColor: Theme.of(context)
|
|
|
|
|
.colorScheme
|
|
|
|
|
.secondaryContainer,
|
|
|
|
|
foregroundColor: Theme.of(context)
|
|
|
|
|
.colorScheme
|
|
|
|
|
.onSecondaryContainer,
|
|
|
|
|
backgroundColor:
|
|
|
|
|
theme.colorScheme.secondaryContainer,
|
|
|
|
|
foregroundColor:
|
|
|
|
|
theme.colorScheme.onSecondaryContainer,
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
@ -231,21 +229,19 @@ class ChatDetailsView extends StatelessWidget {
|
|
|
|
|
fontStyle: room.topic.isEmpty
|
|
|
|
|
? FontStyle.italic
|
|
|
|
|
: FontStyle.normal,
|
|
|
|
|
color:
|
|
|
|
|
Theme.of(context).textTheme.bodyMedium!.color,
|
|
|
|
|
color: theme.textTheme.bodyMedium!.color,
|
|
|
|
|
decorationColor:
|
|
|
|
|
Theme.of(context).textTheme.bodyMedium!.color,
|
|
|
|
|
theme.textTheme.bodyMedium!.color,
|
|
|
|
|
),
|
|
|
|
|
onOpen: (url) =>
|
|
|
|
|
UrlLauncher(context, url.url).launchUrl(),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(height: 16),
|
|
|
|
|
Divider(color: Theme.of(context).dividerColor),
|
|
|
|
|
Divider(color: theme.dividerColor),
|
|
|
|
|
ListTile(
|
|
|
|
|
leading: CircleAvatar(
|
|
|
|
|
backgroundColor:
|
|
|
|
|
Theme.of(context).scaffoldBackgroundColor,
|
|
|
|
|
backgroundColor: theme.scaffoldBackgroundColor,
|
|
|
|
|
foregroundColor: iconColor,
|
|
|
|
|
child: const Icon(
|
|
|
|
|
Icons.insert_emoticon_outlined,
|
|
|
|
@ -260,8 +256,7 @@ class ChatDetailsView extends StatelessWidget {
|
|
|
|
|
if (!room.isDirectChat)
|
|
|
|
|
ListTile(
|
|
|
|
|
leading: CircleAvatar(
|
|
|
|
|
backgroundColor:
|
|
|
|
|
Theme.of(context).scaffoldBackgroundColor,
|
|
|
|
|
backgroundColor: theme.scaffoldBackgroundColor,
|
|
|
|
|
foregroundColor: iconColor,
|
|
|
|
|
child: const Icon(Icons.shield_outlined),
|
|
|
|
|
),
|
|
|
|
@ -282,8 +277,7 @@ class ChatDetailsView extends StatelessWidget {
|
|
|
|
|
L10n.of(context)!.whoCanPerformWhichAction,
|
|
|
|
|
),
|
|
|
|
|
leading: CircleAvatar(
|
|
|
|
|
backgroundColor:
|
|
|
|
|
Theme.of(context).scaffoldBackgroundColor,
|
|
|
|
|
backgroundColor: theme.scaffoldBackgroundColor,
|
|
|
|
|
foregroundColor: iconColor,
|
|
|
|
|
child: const Icon(
|
|
|
|
|
Icons.edit_attributes_outlined,
|
|
|
|
@ -293,14 +287,14 @@ class ChatDetailsView extends StatelessWidget {
|
|
|
|
|
onTap: () => context
|
|
|
|
|
.push('/rooms/${room.id}/details/permissions'),
|
|
|
|
|
),
|
|
|
|
|
Divider(color: Theme.of(context).dividerColor),
|
|
|
|
|
Divider(color: theme.dividerColor),
|
|
|
|
|
ListTile(
|
|
|
|
|
title: Text(
|
|
|
|
|
L10n.of(context)!.countParticipants(
|
|
|
|
|
actualMembersCount.toString(),
|
|
|
|
|
),
|
|
|
|
|
style: TextStyle(
|
|
|
|
|
color: Theme.of(context).colorScheme.secondary,
|
|
|
|
|
color: theme.colorScheme.secondary,
|
|
|
|
|
fontWeight: FontWeight.bold,
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
@ -309,12 +303,10 @@ class ChatDetailsView extends StatelessWidget {
|
|
|
|
|
ListTile(
|
|
|
|
|
title: Text(L10n.of(context)!.inviteContact),
|
|
|
|
|
leading: CircleAvatar(
|
|
|
|
|
backgroundColor: Theme.of(context)
|
|
|
|
|
.colorScheme
|
|
|
|
|
.primaryContainer,
|
|
|
|
|
foregroundColor: Theme.of(context)
|
|
|
|
|
.colorScheme
|
|
|
|
|
.onPrimaryContainer,
|
|
|
|
|
backgroundColor:
|
|
|
|
|
theme.colorScheme.primaryContainer,
|
|
|
|
|
foregroundColor:
|
|
|
|
|
theme.colorScheme.onPrimaryContainer,
|
|
|
|
|
radius: Avatar.defaultSize / 2,
|
|
|
|
|
child: const Icon(Icons.add_outlined),
|
|
|
|
|
),
|
|
|
|
@ -332,8 +324,7 @@ class ChatDetailsView extends StatelessWidget {
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
leading: CircleAvatar(
|
|
|
|
|
backgroundColor:
|
|
|
|
|
Theme.of(context).scaffoldBackgroundColor,
|
|
|
|
|
backgroundColor: theme.scaffoldBackgroundColor,
|
|
|
|
|
child: const Icon(
|
|
|
|
|
Icons.group_outlined,
|
|
|
|
|
color: Colors.grey,
|
|
|
|
|