62 lines
No EOL
1.9 KiB
Dart
62 lines
No EOL
1.9 KiB
Dart
As I mentioned before, directly detecting right-clicks in Flutter isn't natively supported due to its touch-centric nature. However, there are ways to achieve similar functionality, especially on desktop platforms.
|
|
|
|
Let's explore the options with more detail and code examples:
|
|
|
|
1. Long Press (Cross-Platform, but not true right-click):
|
|
|
|
This is the most straightforward and cross-platform approach. It uses a long press gesture to trigger an action that mimics a right-click.
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
class RightClickSimulation extends StatelessWidget {
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return GestureDetector(
|
|
onLongPress: () {
|
|
_showContextMenu(context);
|
|
},
|
|
child: Container(
|
|
width: 200,
|
|
height: 100,
|
|
color: Colors.lightBlue,
|
|
child: Center(
|
|
child: Text('Long Press for Context Menu'),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
void _showContextMenu(BuildContext context) async {
|
|
final RenderBox renderBox = context.findRenderObject() as RenderBox;
|
|
final position = renderBox.localToGlobal(Offset.zero);
|
|
|
|
final selectedItem = await showMenu(
|
|
context: context,
|
|
position: RelativeRect.fromLTRB(
|
|
position.dx,
|
|
position.dy + renderBox.size.height,
|
|
position.dx + renderBox.size.width,
|
|
position.dy + 2 * renderBox.size.height,
|
|
),
|
|
items: [
|
|
PopupMenuItem(
|
|
value: 'option1',
|
|
child: Text('Option 1'),
|
|
),
|
|
PopupMenuItem(
|
|
value: 'option2',
|
|
child: Text('Option 2'),
|
|
),
|
|
PopupMenuItem(
|
|
value: 'option3',
|
|
child: Text('Option 3'),
|
|
),
|
|
],
|
|
);
|
|
|
|
if (selectedItem != null) {
|
|
print('Selected: $selectedItem');
|
|
// Handle the selected option here
|
|
}
|
|
}
|
|
} |