From af60cfc067ae688e886ac95573e0470c205ec0ba Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Sun, 18 Aug 2024 12:42:14 +0600 Subject: [PATCH] feat: manually detect and define touch behavior #1763 --- .../configurators/use_pointer_devices.dart | 29 +++++++++++++++++++ lib/main.dart | 8 ++++- 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 lib/hooks/configurators/use_pointer_devices.dart diff --git a/lib/hooks/configurators/use_pointer_devices.dart b/lib/hooks/configurators/use_pointer_devices.dart new file mode 100644 index 00000000..d7b378a5 --- /dev/null +++ b/lib/hooks/configurators/use_pointer_devices.dart @@ -0,0 +1,29 @@ +import 'package:flutter/foundation.dart'; +import 'package:flutter/gestures.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_hooks/flutter_hooks.dart'; +import 'package:spotube/utils/platform.dart'; + +Set usePointerDevices() { + final devices = useState>({ + if (kIsMobile) PointerDeviceKind.touch, + if (kIsDesktop || kIsWeb) PointerDeviceKind.mouse, + }); + + useEffect(() { + WidgetsBinding.instance.addPostFrameCallback((_) { + GestureBinding.instance.pointerRouter + .addGlobalRoute((PointerEvent event) { + if (devices.value.contains(event.kind)) return; + devices.value = { + ...devices.value, + event.kind, + }; + }); + }); + + return null; + }, []); + + return devices.value; +} diff --git a/lib/main.dart b/lib/main.dart index 64710f47..3f060896 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -22,6 +22,7 @@ import 'package:spotube/hooks/configurators/use_deep_linking.dart'; import 'package:spotube/hooks/configurators/use_disable_battery_optimizations.dart'; import 'package:spotube/hooks/configurators/use_fix_window_stretching.dart'; import 'package:spotube/hooks/configurators/use_get_storage_perms.dart'; +import 'package:spotube/hooks/configurators/use_pointer_devices.dart'; import 'package:spotube/models/database/database.dart'; import 'package:spotube/provider/audio_player/audio_player_streams.dart'; import 'package:spotube/provider/database/database.dart'; @@ -92,7 +93,7 @@ Future main(List rawArgs) async { await FlutterDiscordRPC.initialize(Env.discordAppId); } - if(kIsWindows){ + if (kIsWindows) { await SMTCWindows.initialize(); } @@ -142,6 +143,7 @@ class Spotube extends HookConsumerWidget { final paletteColor = ref.watch(paletteProvider.select((s) => s?.dominantColor?.color)); final router = ref.watch(routerProvider); + final pointerDevices = usePointerDevices(); ref.listen(audioPlayerStreamListenersProvider, (_, __) {}); ref.listen(bonsoirProvider, (_, __) {}); @@ -179,6 +181,10 @@ class Spotube extends HookConsumerWidget { ); return MaterialApp.router( + scrollBehavior: const MaterialScrollBehavior() + ..copyWith( + dragDevices: pointerDevices, + ), supportedLocales: L10n.all, locale: locale.languageCode == "system" ? null : locale, localizationsDelegates: const [