From 75deb04a2b296d4bb662a0ae656412a92b1824c7 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Fri, 10 Oct 2025 22:34:34 +0800 Subject: [PATCH] :recycle: Better resend message --- assets/i18n/en-US.json | 3 ++- lib/screens/chat/room.dart | 2 ++ lib/widgets/chat/message_item.dart | 16 +++++++++++++++- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/assets/i18n/en-US.json b/assets/i18n/en-US.json index 4583766f..eff8e570 100644 --- a/assets/i18n/en-US.json +++ b/assets/i18n/en-US.json @@ -1208,5 +1208,6 @@ "enterPinToConfirmTransfer": "Enter your 6-digit PIN to confirm transfer", "transferCreatedSuccessfully": "Transfer created successfully!", "postUpdate": "Update", - "fileMetadata": "File Metadata" + "fileMetadata": "File Metadata", + "resend": "Resend" } diff --git a/lib/screens/chat/room.dart b/lib/screens/chat/room.dart index f6a619e6..2a6a70dd 100644 --- a/lib/screens/chat/room.dart +++ b/lib/screens/chat/room.dart @@ -586,6 +586,8 @@ class ChatRoomScreen extends HookConsumerWidget { messageForwardingTo.value = message.toRemoteMessage(); case MessageItemAction.reply: messageReplyingTo.value = message.toRemoteMessage(); + case MessageItemAction.resend: + messagesNotifier.retryMessage(message.id); } }, onJump: (messageId) { diff --git a/lib/widgets/chat/message_item.dart b/lib/widgets/chat/message_item.dart index 0f202e33..4cd813ec 100644 --- a/lib/widgets/chat/message_item.dart +++ b/lib/widgets/chat/message_item.dart @@ -34,6 +34,7 @@ class MessageItemAction { static const String delete = "delete"; static const String reply = "reply"; static const String forward = "forward"; + static const String resend = "resend"; } class MessageItem extends HookConsumerWidget { @@ -117,6 +118,7 @@ class MessageItem extends HookConsumerWidget { translate: translate, isMobile: isMobile, remoteMessage: remoteMessage, + message: message, ), ); } @@ -254,6 +256,7 @@ class MessageActionSheet extends StatefulWidget { final VoidCallback translate; final bool isMobile; final dynamic remoteMessage; + final LocalChatMessage message; const MessageActionSheet({ super.key, @@ -265,6 +268,7 @@ class MessageActionSheet extends StatefulWidget { required this.translate, required this.isMobile, required this.remoteMessage, + required this.message, }); @override @@ -390,6 +394,16 @@ class _MessageActionSheetState extends State { Navigator.pop(context); }, ), + if (widget.isCurrentUser && + widget.message.status == MessageStatus.failed) + _ActionListTile( + leading: Icon(Symbols.refresh), + title: Text('resend'.tr()), + onTap: () { + widget.onAction!.call(MessageItemAction.resend); + Navigator.pop(context); + }, + ), if (widget.isCurrentUser) _ActionListTile( leading: Icon(Symbols.delete), @@ -1188,7 +1202,7 @@ class FileUploadProgressWidget extends StatelessWidget { 'fileUploadingProgress'.tr( args: [ (entry.key + 1).toString(), - entry.value.toStringAsFixed(1), + (entry.value * 100).toStringAsFixed(1), ], ), style: TextStyle(