Files
plezy/lib/mixins/context_menu_tap_mixin.dart
T

31 lines
1.1 KiB
Dart

import 'package:flutter/material.dart';
import '../widgets/media_context_menu.dart';
/// Tracks tap position and exposes show-context-menu helpers for media cards
/// that wrap their tappable area in a [MediaContextMenu].
mixin ContextMenuTapMixin<T extends StatefulWidget> on State<T> {
final GlobalKey<MediaContextMenuState> contextMenuKey = GlobalKey<MediaContextMenuState>();
Offset? _tapPosition;
void storeTapPosition(TapDownDetails details) {
_tapPosition = details.globalPosition;
}
/// Last stored tap position, for menus shown outside [MediaContextMenu]
/// (null when activated via keyboard/gamepad).
Offset? get lastTapPosition => _tapPosition;
bool get isContextMenuOpen => contextMenuKey.currentState?.isContextMenuOpen ?? false;
/// Show at the last tap position (long-press, mouse).
void showContextMenuFromTap() {
contextMenuKey.currentState?.showContextMenu(context, position: _tapPosition);
}
/// Show without a tap position (keyboard, gamepad).
void showContextMenu() {
contextMenuKey.currentState?.showContextMenu(context);
}
}