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