feat(flutter): 增加关键操作震动反馈
This commit is contained in:
1 parent
e609e3ad8d
commit
8a481d5c62
20 files changed
+308
-72
No files matched your search
@@ -0,0 +1,39 @@
|
||||
// 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.
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user