diff --git a/lib/pages/chat/events/html_message.dart b/lib/pages/chat/events/html_message.dart
index d40ac72a7..7aca3154b 100644
--- a/lib/pages/chat/events/html_message.dart
+++ b/lib/pages/chat/events/html_message.dart
@@ -250,7 +250,7 @@ class HtmlMessage extends StatelessWidget {
border: Border(
left: BorderSide(
color: textColor,
- width: 3,
+ width: 5,
),
),
),
diff --git a/lib/pages/chat/events/message.dart b/lib/pages/chat/events/message.dart
index c38639b60..823594a1a 100644
--- a/lib/pages/chat/events/message.dart
+++ b/lib/pages/chat/events/message.dart
@@ -20,7 +20,6 @@ import 'message_content.dart';
import 'message_reactions.dart';
import 'reply_content.dart';
import 'state_message.dart';
-import 'verification_request_content.dart';
class Message extends StatelessWidget {
final Event event;
@@ -85,7 +84,7 @@ class Message extends StatelessWidget {
if (event.type == EventTypes.Message &&
event.messageType == EventTypes.KeyVerificationRequest) {
- return VerificationRequestContent(event: event, timeline: timeline);
+ return StateMessage(event);
}
final client = Matrix.of(context).client;
@@ -376,22 +375,32 @@ class Message extends StatelessWidget {
return Padding(
padding:
const EdgeInsets.only(
- bottom: 4.0,
+ left: 16,
+ right: 16,
+ top: 8,
),
- child: InkWell(
+ child: Material(
+ color:
+ Colors.transparent,
borderRadius:
ReplyContent
.borderRadius,
- onTap: () =>
- scrollToEventId(
- replyEvent.eventId,
- ),
- child: AbsorbPointer(
- child: ReplyContent(
- replyEvent,
- ownMessage:
- ownMessage,
- timeline: timeline,
+ child: InkWell(
+ borderRadius:
+ ReplyContent
+ .borderRadius,
+ onTap: () =>
+ scrollToEventId(
+ replyEvent.eventId,
+ ),
+ child: AbsorbPointer(
+ child: ReplyContent(
+ replyEvent,
+ ownMessage:
+ ownMessage,
+ timeline:
+ timeline,
+ ),
),
),
),
diff --git a/lib/pages/chat/events/message_download_content.dart b/lib/pages/chat/events/message_download_content.dart
index 80ae1cc08..b1b0dd71f 100644
--- a/lib/pages/chat/events/message_download_content.dart
+++ b/lib/pages/chat/events/message_download_content.dart
@@ -32,31 +32,59 @@ class MessageDownloadContent extends StatelessWidget {
'UNKNOWN');
final sizeString = event.sizeString ?? '?MB';
final fileDescription = event.fileDescription;
- return Padding(
- padding: const EdgeInsets.symmetric(
- horizontal: 16,
- vertical: 8,
- ),
- child: Column(
- mainAxisSize: MainAxisSize.min,
- crossAxisAlignment: CrossAxisAlignment.stretch,
- spacing: 8,
- children: [
- OutlinedButton.icon(
- style: OutlinedButton.styleFrom(
- foregroundColor: textColor,
- side: BorderSide(color: textColor),
- ),
- icon: const Icon(Icons.file_download_outlined),
- label: Text(
- '$sizeString | $filetype - $filename',
- maxLines: 1,
- overflow: TextOverflow.ellipsis,
+ return Column(
+ mainAxisSize: MainAxisSize.min,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ spacing: 8,
+ children: [
+ Material(
+ color: Colors.transparent,
+ child: InkWell(
+ borderRadius: BorderRadius.circular(AppConfig.borderRadius / 2),
+ onTap: () => event.saveFile(context),
+ child: Padding(
+ padding: const EdgeInsets.all(16.0),
+ child: Row(
+ mainAxisSize: MainAxisSize.min,
+ spacing: 16,
+ children: [
+ CircleAvatar(
+ backgroundColor: textColor.withAlpha(32),
+ child: Icon(Icons.file_download_outlined, color: textColor),
+ ),
+ Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ mainAxisSize: MainAxisSize.min,
+ children: [
+ Text(
+ filename,
+ maxLines: 1,
+ overflow: TextOverflow.ellipsis,
+ style: TextStyle(
+ color: textColor,
+ fontWeight: FontWeight.w500,
+ ),
+ ),
+ Text(
+ '$sizeString | $filetype',
+ maxLines: 1,
+ overflow: TextOverflow.ellipsis,
+ style: TextStyle(color: textColor, fontSize: 10),
+ ),
+ ],
+ ),
+ ],
+ ),
),
- onPressed: () => event.saveFile(context),
),
- if (fileDescription != null) ...[
- Linkify(
+ ),
+ if (fileDescription != null) ...[
+ Padding(
+ padding: const EdgeInsets.symmetric(
+ horizontal: 16.0,
+ vertical: 8.0,
+ ),
+ child: Linkify(
text: fileDescription,
textScaleFactor: MediaQuery.textScalerOf(context).scale(1),
style: TextStyle(
@@ -72,9 +100,9 @@ class MessageDownloadContent extends StatelessWidget {
),
onOpen: (url) => UrlLauncher(context, url.url).launchUrl(),
),
- ],
+ ),
],
- ),
+ ],
);
}
}
diff --git a/lib/pages/chat/events/reply_content.dart b/lib/pages/chat/events/reply_content.dart
index e5b7f2975..65c8cabdb 100644
--- a/lib/pages/chat/events/reply_content.dart
+++ b/lib/pages/chat/events/reply_content.dart
@@ -10,14 +10,12 @@ class ReplyContent extends StatelessWidget {
final Event replyEvent;
final bool ownMessage;
final Timeline? timeline;
- final Color? backgroundColor;
const ReplyContent(
this.replyEvent, {
this.ownMessage = false,
super.key,
this.timeline,
- this.backgroundColor,
});
static const BorderRadius borderRadius = BorderRadius.only(
@@ -40,16 +38,18 @@ class ReplyContent extends StatelessWidget {
: theme.colorScheme.tertiary;
return Material(
- color: backgroundColor ??
- theme.colorScheme.surface.withAlpha(ownMessage ? 50 : 80),
+ color: Colors.transparent,
borderRadius: borderRadius,
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Container(
- width: 3,
+ width: 5,
height: fontSize * 2 + 16,
- color: color,
+ decoration: BoxDecoration(
+ borderRadius: BorderRadius.circular(AppConfig.borderRadius),
+ color: color,
+ ),
),
const SizedBox(width: 6),
Flexible(
diff --git a/lib/pages/chat/events/verification_request_content.dart b/lib/pages/chat/events/verification_request_content.dart
deleted file mode 100644
index 9b085114f..000000000
--- a/lib/pages/chat/events/verification_request_content.dart
+++ /dev/null
@@ -1,72 +0,0 @@
-import 'package:flutter/material.dart';
-
-import 'package:flutter_gen/gen_l10n/l10n.dart';
-import 'package:matrix/matrix.dart';
-
-import '../../../config/app_config.dart';
-
-class VerificationRequestContent extends StatelessWidget {
- final Event event;
- final Timeline timeline;
-
- const VerificationRequestContent({
- required this.event,
- required this.timeline,
- super.key,
- });
-
- @override
- Widget build(BuildContext context) {
- final theme = Theme.of(context);
-
- final events = event.aggregatedEvents(timeline, 'm.reference');
- final done = events.where((e) => e.type == EventTypes.KeyVerificationDone);
- final start =
- events.where((e) => e.type == EventTypes.KeyVerificationStart);
- final cancel =
- events.where((e) => e.type == EventTypes.KeyVerificationCancel);
- final fullyDone = done.length >= 2;
- final started = start.isNotEmpty;
- final canceled = cancel.isNotEmpty;
- return Padding(
- padding: const EdgeInsets.symmetric(
- horizontal: 8.0,
- vertical: 4.0,
- ),
- child: Center(
- child: Container(
- padding: const EdgeInsets.all(8),
- decoration: BoxDecoration(
- border: Border.all(
- color: theme.dividerColor,
- ),
- borderRadius: BorderRadius.circular(AppConfig.borderRadius),
- color: theme.colorScheme.surface,
- ),
- child: Row(
- mainAxisSize: MainAxisSize.min,
- crossAxisAlignment: CrossAxisAlignment.center,
- children: [
- Icon(
- Icons.lock_outlined,
- color: canceled
- ? Colors.red
- : (fullyDone ? Colors.green : Colors.grey),
- ),
- const SizedBox(width: 8),
- Text(
- canceled
- ? 'Error ${cancel.first.content.tryGet('code')}: ${cancel.first.content.tryGet('reason')}'
- : (fullyDone
- ? L10n.of(context).verifySuccess
- : (started
- ? L10n.of(context).loadingPleaseWait
- : L10n.of(context).newVerificationRequest)),
- ),
- ],
- ),
- ),
- ),
- );
- }
-}
diff --git a/lib/pages/chat/reply_display.dart b/lib/pages/chat/reply_display.dart
index ec607e1ac..361f5b97b 100644
--- a/lib/pages/chat/reply_display.dart
+++ b/lib/pages/chat/reply_display.dart
@@ -38,7 +38,6 @@ class ReplyDisplay extends StatelessWidget {
? ReplyContent(
controller.replyEvent!,
timeline: controller.timeline!,
- backgroundColor: Colors.transparent,
)
: _EditContent(
controller.editEvent?.getDisplayEvent(controller.timeline!),