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!),