import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; class RefreshIntent extends Intent { const RefreshIntent(); } class ExtendedRefreshIndicator extends StatefulWidget { final Widget child; final RefreshCallback onRefresh; const ExtendedRefreshIndicator({ super.key, required this.child, required this.onRefresh, }); @override State createState() => _ExtendedRefreshIndicatorState(); } class _ExtendedRefreshIndicatorState extends State { late final FocusNode _focusNode; @override void initState() { super.initState(); _focusNode = FocusNode(); WidgetsBinding.instance.addPostFrameCallback((_) { _focusNode.requestFocus(); }); } @override void dispose() { _focusNode.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Shortcuts( shortcuts: { LogicalKeySet(LogicalKeyboardKey.control, LogicalKeyboardKey.keyR): const RefreshIntent(), LogicalKeySet(LogicalKeyboardKey.meta, LogicalKeyboardKey.keyR): const RefreshIntent(), LogicalKeySet(LogicalKeyboardKey.f5): const RefreshIntent(), }, child: Actions( actions: >{ RefreshIntent: CallbackAction( onInvoke: (RefreshIntent intent) => widget.onRefresh(), ), }, child: Focus( focusNode: _focusNode, child: RefreshIndicator( onRefresh: widget.onRefresh, child: widget.child, ), ), ), ); } }