From b9bc345b567162fd5b45e5504db2ee74940989a0 Mon Sep 17 00:00:00 2001 From: Henry-Hiles Date: Fri, 28 Nov 2025 18:25:55 -0500 Subject: [PATCH] move showContextMenu to extension --- lib/helpers/extensions/show_context_menu.dart | 35 ++++++++++++++++ lib/widgets/chat_page/room_chat.dart | 40 ++----------------- 2 files changed, 38 insertions(+), 37 deletions(-) create mode 100644 lib/helpers/extensions/show_context_menu.dart diff --git a/lib/helpers/extensions/show_context_menu.dart b/lib/helpers/extensions/show_context_menu.dart new file mode 100644 index 0000000..aa337f3 --- /dev/null +++ b/lib/helpers/extensions/show_context_menu.dart @@ -0,0 +1,35 @@ +import "package:flutter/material.dart"; + +extension ShowContextMenu on BuildContext { + void showContextMenu({ + required Offset globalPosition, + required VoidCallback onTap, + }) { + final overlay = Overlay.of(this).context.findRenderObject() as RenderBox; + + showMenu( + context: this, + position: RelativeRect.fromLTRB( + globalPosition.dx, + globalPosition.dy, + overlay.size.width - globalPosition.dx, + overlay.size.height - globalPosition.dy, + ), + color: Theme.of(this).colorScheme.surfaceContainerHighest, + items: [ + PopupMenuItem( + onTap: onTap, + child: ListTile(leading: Icon(Icons.reply), title: Text("Reply")), + ), + PopupMenuItem( + onTap: onTap, + child: ListTile(leading: Icon(Icons.edit), title: Text("Edit")), + ), + PopupMenuItem( + onTap: onTap, + child: ListTile(leading: Icon(Icons.delete), title: Text("Delete")), + ), + ], + ); + } +} diff --git a/lib/widgets/chat_page/room_chat.dart b/lib/widgets/chat_page/room_chat.dart index 760e6d3..4647d62 100644 --- a/lib/widgets/chat_page/room_chat.dart +++ b/lib/widgets/chat_page/room_chat.dart @@ -14,6 +14,7 @@ import "package:nexus/controllers/current_room_controller.dart"; import "package:nexus/controllers/room_chat_controller.dart"; import "package:nexus/helpers/extensions/better_when.dart"; import "package:nexus/helpers/extensions/get_headers.dart"; +import "package:nexus/helpers/extensions/show_context_menu.dart"; import "package:nexus/helpers/launch_helper.dart"; import "package:nexus/widgets/chat_page/chat_box.dart"; import "package:nexus/widgets/chat_page/code_block.dart"; @@ -33,39 +34,6 @@ class RoomChat extends HookConsumerWidget { super.key, }); - void showContextMenu({ - required BuildContext context, - required Offset globalPosition, - required VoidCallback onTap, - }) { - final overlay = Overlay.of(context).context.findRenderObject() as RenderBox; - - showMenu( - context: context, - position: RelativeRect.fromLTRB( - globalPosition.dx, - globalPosition.dy, - overlay.size.width - globalPosition.dx, - overlay.size.height - globalPosition.dy, - ), - color: Theme.of(context).colorScheme.surfaceContainerHighest, - items: [ - PopupMenuItem( - onTap: onTap, - child: ListTile(leading: Icon(Icons.reply), title: Text("Reply")), - ), - PopupMenuItem( - onTap: onTap, - child: ListTile(leading: Icon(Icons.edit), title: Text("Edit")), - ), - PopupMenuItem( - onTap: onTap, - child: ListTile(leading: Icon(Icons.delete), title: Text("Delete")), - ), - ], - ); - } - @override Widget build(BuildContext context, WidgetRef ref) { final replyToMessage = useState(null); @@ -117,8 +85,7 @@ class RoomChat extends HookConsumerWidget { message, { required details, required index, - }) => showContextMenu( - context: context, + }) => context.showContextMenu( globalPosition: details.globalPosition, onTap: () => replyToMessage.value = message, ), @@ -128,8 +95,7 @@ class RoomChat extends HookConsumerWidget { message, { required details, required index, - }) => showContextMenu( - context: context, + }) => context.showContextMenu( globalPosition: details.globalPosition, onTap: () => replyToMessage.value = message, ),