// Author: fruit.com.cn import 'package:flutter/services.dart'; /// User-action haptic feedback boundary. abstract interface class Haptics { /// Feedback for a selection change. Future selectionClick(); /// Feedback for a primary action. Future lightImpact(); /// Feedback for a destructive action. Future mediumImpact(); } /// Default implementation backed by Flutter's platform haptics. class FlutterHaptics implements Haptics { const FlutterHaptics(); @override Future selectionClick() => _ignoreUnavailable(HapticFeedback.selectionClick); @override Future lightImpact() => _ignoreUnavailable(HapticFeedback.lightImpact); @override Future mediumImpact() => _ignoreUnavailable(HapticFeedback.mediumImpact); Future _ignoreUnavailable(Future Function() feedback) async { try { await feedback(); } catch (_) { // Haptics are optional and may be unavailable on the target device. } } }