Files
App/lib/widgets/extended_refresh_indicator.dart
2025-12-27 22:16:00 +08:00

56 lines
1.3 KiB
Dart

import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:hotkey_manager/hotkey_manager.dart';
import 'package:uuid/uuid.dart';
class RefreshIntent extends Intent {
const RefreshIntent();
}
class ExtendedRefreshIndicator extends HookConsumerWidget {
final Widget child;
final RefreshCallback onRefresh;
const ExtendedRefreshIndicator({
super.key,
required this.child,
required this.onRefresh,
});
@override
Widget build(BuildContext context, WidgetRef ref) {
final hotKeyIdentifier = useState(Uuid().v4().substring(0, 8));
final refreshHotKey = HotKey(
identifier: 'refresh_indicator_$hotKeyIdentifier',
key: PhysicalKeyboardKey.keyR,
modifiers: [
(!kIsWeb && Platform.isMacOS)
? HotKeyModifier.meta
: HotKeyModifier.control,
],
scope: HotKeyScope.inapp,
);
useEffect(() {
hotKeyManager.register(
refreshHotKey,
keyDownHandler: (_) {
onRefresh.call();
},
);
return () {
hotKeyManager.unregister(refreshHotKey);
};
}, []);
return RefreshIndicator(onRefresh: onRefresh, child: child);
}
}