68 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| 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<ExtendedRefreshIndicator> createState() =>
 | |
|       _ExtendedRefreshIndicatorState();
 | |
| }
 | |
| 
 | |
| class _ExtendedRefreshIndicatorState extends State<ExtendedRefreshIndicator> {
 | |
|   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, Intent>{
 | |
|         LogicalKeySet(LogicalKeyboardKey.control, LogicalKeyboardKey.keyR):
 | |
|             const RefreshIntent(),
 | |
|         LogicalKeySet(LogicalKeyboardKey.meta, LogicalKeyboardKey.keyR):
 | |
|             const RefreshIntent(),
 | |
|         LogicalKeySet(LogicalKeyboardKey.f5): const RefreshIntent(),
 | |
|       },
 | |
|       child: Actions(
 | |
|         actions: <Type, Action<Intent>>{
 | |
|           RefreshIntent: CallbackAction<RefreshIntent>(
 | |
|             onInvoke: (RefreshIntent intent) => widget.onRefresh(),
 | |
|           ),
 | |
|         },
 | |
|         child: Focus(
 | |
|           focusNode: _focusNode,
 | |
|           child: RefreshIndicator(
 | |
|             onRefresh: widget.onRefresh,
 | |
|             child: widget.child,
 | |
|           ),
 | |
|         ),
 | |
|       ),
 | |
|     );
 | |
|   }
 | |
| }
 |