Message item swipe to

This commit is contained in:
2025-10-12 17:29:03 +08:00
parent 9d39c6a825
commit 91784e65e6

View File

@@ -25,6 +25,7 @@ import 'package:island/widgets/content/embed/embed_list.dart';
import 'package:island/widgets/post/post_shared.dart';
import 'package:material_symbols_icons/material_symbols_icons.dart';
import 'package:styled_widget/styled_widget.dart';
import 'package:swipe_to/swipe_to.dart';
import 'package:island/widgets/content/sheet.dart';
class MessageItemAction {
@@ -159,14 +160,35 @@ class MessageItem extends HookConsumerWidget {
return Stack(
clipBehavior: Clip.none,
children: [
InkWell(
SwipeTo(
rightSwipeWidget: Transform.flip(
flipX: true,
child: Icon(Symbols.menu_open),
).padding(left: 16),
leftSwipeWidget: Icon(
isCurrentUser ? Symbols.forward : Symbols.reply,
).padding(right: 16),
onLeftSwipe: (details) {
if (onAction != null) {
if (isCurrentUser) {
onAction!(MessageItemAction.forward);
} else {
onAction!(MessageItemAction.reply);
}
}
},
onRightSwipe: (details) => showActionMenu(),
child: InkWell(
mouseCursor: MouseCursor.defer,
focusColor: Colors.transparent,
onLongPress: showActionMenu,
onSecondaryTap: showActionMenu,
onTap: () {
// Jump to related message
if (['messages.update', 'messages.delete'].contains(message.type) &&
if ([
'messages.update',
'messages.delete',
].contains(message.type) &&
message.meta['message_id'] is String &&
message.meta['message_id'] != null) {
onJump(message.meta['message_id']);
@@ -214,6 +236,7 @@ class MessageItem extends HookConsumerWidget {
),
),
),
),
if (isHovered.value && !isMobile)
Positioned(
top: -15,
@@ -314,7 +337,9 @@ class _MessageActionSheetState extends State<MessageActionSheet> {
mainAxisSize: MainAxisSize.min,
children: [
// Header
Row(
SizedBox(
height: 24,
child: Row(
children: [
Icon(
Symbols.article,
@@ -347,12 +372,13 @@ class _MessageActionSheetState extends State<MessageActionSheet> {
},
padding: EdgeInsets.zero,
constraints: const BoxConstraints(
minWidth: 24,
minWidth: 32,
minHeight: 24,
),
),
],
),
),
const Gap(8),
// Selectable content
SelectableText(
@@ -403,7 +429,7 @@ class _MessageActionSheetState extends State<MessageActionSheet> {
Navigator.pop(context);
},
),
if (widget.isCurrentUser) const Divider(height: 8),
if (widget.isCurrentUser) const Divider(),
_ActionListTile(
leading: Icon(Symbols.reply),
@@ -422,7 +448,7 @@ class _MessageActionSheetState extends State<MessageActionSheet> {
},
),
if (widget.translatableLanguage) const Divider(height: 8),
if (widget.translatableLanguage) const Divider(),
if (widget.translatableLanguage)
_ActionListTile(
leading: Icon(Symbols.translate),
@@ -439,7 +465,7 @@ class _MessageActionSheetState extends State<MessageActionSheet> {
},
),
if (widget.isMobile) const Divider(height: 8),
if (widget.isMobile) const Divider(),
if (widget.isMobile)
_ActionListTile(
leading: Icon(Symbols.copy_all),