spotube/lib/hooks/configurators/use_has_touch.dart

28 lines
789 B
Dart

import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:spotube/utils/platform.dart';
bool useHasTouch() {
final hasTouch = useState(kIsMobile);
useEffect(() {
void globalRoute(PointerEvent event) {
if (hasTouch.value) return;
hasTouch.value = event.kind == PointerDeviceKind.touch ||
event.kind == PointerDeviceKind.stylus ||
event.kind == PointerDeviceKind.invertedStylus;
}
WidgetsBinding.instance.addPostFrameCallback((_) {
GestureBinding.instance.pointerRouter.addGlobalRoute(globalRoute);
});
return () {
GestureBinding.instance.pointerRouter.removeGlobalRoute(globalRoute);
};
}, []);
return hasTouch.value;
}