move showContextMenu to extension
This commit is contained in:
parent
5dc8fe14bd
commit
b9bc345b56
2 changed files with 38 additions and 37 deletions
35
lib/helpers/extensions/show_context_menu.dart
Normal file
35
lib/helpers/extensions/show_context_menu.dart
Normal file
|
|
@ -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")),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -14,6 +14,7 @@ import "package:nexus/controllers/current_room_controller.dart";
|
||||||
import "package:nexus/controllers/room_chat_controller.dart";
|
import "package:nexus/controllers/room_chat_controller.dart";
|
||||||
import "package:nexus/helpers/extensions/better_when.dart";
|
import "package:nexus/helpers/extensions/better_when.dart";
|
||||||
import "package:nexus/helpers/extensions/get_headers.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/helpers/launch_helper.dart";
|
||||||
import "package:nexus/widgets/chat_page/chat_box.dart";
|
import "package:nexus/widgets/chat_page/chat_box.dart";
|
||||||
import "package:nexus/widgets/chat_page/code_block.dart";
|
import "package:nexus/widgets/chat_page/code_block.dart";
|
||||||
|
|
@ -33,39 +34,6 @@ class RoomChat extends HookConsumerWidget {
|
||||||
super.key,
|
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
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
final replyToMessage = useState<Message?>(null);
|
final replyToMessage = useState<Message?>(null);
|
||||||
|
|
@ -117,8 +85,7 @@ class RoomChat extends HookConsumerWidget {
|
||||||
message, {
|
message, {
|
||||||
required details,
|
required details,
|
||||||
required index,
|
required index,
|
||||||
}) => showContextMenu(
|
}) => context.showContextMenu(
|
||||||
context: context,
|
|
||||||
globalPosition: details.globalPosition,
|
globalPosition: details.globalPosition,
|
||||||
onTap: () => replyToMessage.value = message,
|
onTap: () => replyToMessage.value = message,
|
||||||
),
|
),
|
||||||
|
|
@ -128,8 +95,7 @@ class RoomChat extends HookConsumerWidget {
|
||||||
message, {
|
message, {
|
||||||
required details,
|
required details,
|
||||||
required index,
|
required index,
|
||||||
}) => showContextMenu(
|
}) => context.showContextMenu(
|
||||||
context: context,
|
|
||||||
globalPosition: details.globalPosition,
|
globalPosition: details.globalPosition,
|
||||||
onTap: () => replyToMessage.value = message,
|
onTap: () => replyToMessage.value = message,
|
||||||
),
|
),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue