haptic_utils.dart 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import 'package:flutter/foundation.dart';
  2. import 'package:flutter/services.dart';
  3. import 'dart:io' show Platform;
  4. class HapticUtils {
  5. static bool get isSupported {
  6. try {
  7. return !kIsWeb && (Platform.isAndroid || Platform.isIOS);
  8. } catch (e) {
  9. return false;
  10. }
  11. }
  12. static Future<void> lightImpact() async {
  13. if (!isSupported) return;
  14. try {
  15. await HapticFeedback.lightImpact();
  16. } catch (e) {
  17. // Silently ignore haptic feedback errors
  18. }
  19. }
  20. static Future<void> mediumImpact() async {
  21. if (!isSupported) return;
  22. try {
  23. await HapticFeedback.mediumImpact();
  24. } catch (e) {
  25. // Silently ignore haptic feedback errors
  26. }
  27. }
  28. static Future<void> heavyImpact() async {
  29. if (!isSupported) return;
  30. try {
  31. await HapticFeedback.heavyImpact();
  32. } catch (e) {
  33. // Silently ignore haptic feedback errors
  34. }
  35. }
  36. static Future<void> vibrate({int duration = 50}) async {
  37. if (!isSupported) return;
  38. try {
  39. // Use appropriate haptic feedback based on duration
  40. if (duration <= 30) {
  41. await HapticFeedback.lightImpact();
  42. } else if (duration <= 60) {
  43. await HapticFeedback.mediumImpact();
  44. } else {
  45. await HapticFeedback.heavyImpact();
  46. }
  47. } catch (e) {
  48. // Silently ignore haptic feedback errors
  49. }
  50. }
  51. }