import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_hbb/models/state_model.dart'; import '../../models/input_model.dart'; class RawKeyFocusScope extends StatelessWidget { final FocusNode? focusNode; final ValueChanged? onFocusChange; final InputModel inputModel; final Widget child; RawKeyFocusScope({ this.focusNode, this.onFocusChange, required this.inputModel, required this.child, }); @override Widget build(BuildContext context) { return FocusScope( autofocus: true, child: Focus( autofocus: true, canRequestFocus: true, focusNode: focusNode, onFocusChange: onFocusChange, onKey: stateGlobal.grabKeyboard ? inputModel.handleRawKeyEvent : null, child: child)); } } class RawPointerMouseRegion extends StatelessWidget { final InputModel inputModel; final Widget child; final MouseCursor? cursor; final PointerEnterEventListener? onEnter; final PointerExitEventListener? onExit; final PointerDownEventListener? onPointerDown; final PointerUpEventListener? onPointerUp; RawPointerMouseRegion( {this.onEnter, this.onExit, this.cursor, this.onPointerDown, this.onPointerUp, required this.inputModel, required this.child}); @override Widget build(BuildContext context) { return Listener( onPointerHover: inputModel.onPointHoverImage, onPointerDown: (evt) { onPointerDown?.call(evt); inputModel.onPointDownImage(evt); }, onPointerUp: (evt) { onPointerUp?.call(evt); inputModel.onPointUpImage(evt); }, onPointerMove: inputModel.onPointMoveImage, onPointerSignal: inputModel.onPointerSignalImage, onPointerPanZoomStart: inputModel.onPointerPanZoomStart, onPointerPanZoomUpdate: inputModel.onPointerPanZoomUpdate, onPointerPanZoomEnd: inputModel.onPointerPanZoomEnd, child: MouseRegion( cursor: cursor ?? MouseCursor.defer, onEnter: onEnter, onExit: onExit, child: child)); } }