chore: Adjust encryption page design

This commit is contained in:
Christian Kußowski 2025-10-19 07:39:21 +02:00
commit 7ff6d7b401
No known key found for this signature in database
GPG key ID: E067ECD60F1A0652

View file

@ -9,6 +9,7 @@ import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/chat_encryption_settings/chat_encryption_settings.dart'; import 'package:fluffychat/pages/chat_encryption_settings/chat_encryption_settings.dart';
import 'package:fluffychat/utils/beautify_string_extension.dart'; import 'package:fluffychat/utils/beautify_string_extension.dart';
import 'package:fluffychat/widgets/avatar.dart';
import 'package:fluffychat/widgets/layouts/max_width_body.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart';
class ChatEncryptionSettingsView extends StatelessWidget { class ChatEncryptionSettingsView extends StatelessWidget {
@ -58,7 +59,6 @@ class ChatEncryptionSettingsView extends StatelessWidget {
size: 128, size: 128,
color: theme.colorScheme.onInverseSurface, color: theme.colorScheme.onInverseSurface,
), ),
const Divider(),
if (room.isDirectChat) if (room.isDirectChat)
Padding( Padding(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
@ -107,7 +107,32 @@ class ChatEncryptionSettingsView extends StatelessWidget {
shrinkWrap: true, shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(), physics: const NeverScrollableScrollPhysics(),
itemCount: deviceKeys.length, itemCount: deviceKeys.length,
itemBuilder: (BuildContext context, int i) => itemBuilder: (BuildContext context, int i) => Column(
mainAxisSize: MainAxisSize.min,
children: [
if (i == 0 ||
deviceKeys[i].userId !=
deviceKeys[i - 1].userId) ...[
const Divider(),
FutureBuilder(
future: room.client
.getUserProfile(deviceKeys[i].userId),
builder: (context, snapshot) {
final displayname =
snapshot.data?.displayname ??
deviceKeys[i].userId.localpart ??
deviceKeys[i].userId;
return ListTile(
leading: Avatar(
name: displayname,
mxContent: snapshot.data?.avatarUrl,
),
title: Text(displayname),
subtitle: Text(deviceKeys[i].userId),
);
},
),
],
SwitchListTile( SwitchListTile(
value: !deviceKeys[i].blocked, value: !deviceKeys[i].blocked,
activeThumbColor: deviceKeys[i].verified activeThumbColor: deviceKeys[i].verified
@ -117,52 +142,25 @@ class ChatEncryptionSettingsView extends StatelessWidget {
controller.toggleDeviceKey(deviceKeys[i]), controller.toggleDeviceKey(deviceKeys[i]),
title: Row( title: Row(
children: [ children: [
Icon( Text(
deviceKeys[i].verified deviceKeys[i].verified
? Icons.verified_outlined ? L10n.of(context).verified
: deviceKeys[i].blocked : deviceKeys[i].blocked
? Icons.block_outlined ? L10n.of(context).blocked
: Icons.info_outlined, : L10n.of(context).unverified,
style: TextStyle(
color: deviceKeys[i].verified color: deviceKeys[i].verified
? Colors.green ? Colors.green
: deviceKeys[i].blocked : deviceKeys[i].blocked
? Colors.red ? Colors.red
: Colors.orange, : Colors.orange,
size: 20,
), ),
const SizedBox(width: 4), ),
const Text(' | ID: '),
Text( Text(
deviceKeys[i].deviceId ?? deviceKeys[i].deviceId ??
L10n.of(context).unknownDevice, L10n.of(context).unknownDevice,
), ),
const SizedBox(width: 4),
Flexible(
fit: FlexFit.loose,
child: Material(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(
AppConfig.borderRadius,
),
side: BorderSide(
color: theme.colorScheme.primary,
),
),
color: theme.colorScheme.primaryContainer,
child: Padding(
padding: const EdgeInsets.all(4.0),
child: Text(
deviceKeys[i].userId,
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: theme.colorScheme.primary,
fontSize: 12,
fontStyle: FontStyle.italic,
),
),
),
),
),
], ],
), ),
subtitle: Text( subtitle: Text(
@ -171,9 +169,12 @@ class ChatEncryptionSettingsView extends StatelessWidget {
style: TextStyle( style: TextStyle(
fontFamily: 'RobotoMono', fontFamily: 'RobotoMono',
color: theme.colorScheme.secondary, color: theme.colorScheme.secondary,
fontSize: 11,
), ),
), ),
), ),
],
),
); );
}, },
), ),