| // Copyright 2014 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'dart:async'; |
| |
| import 'system_channels.dart'; |
| |
| /// Allows access to the haptic feedback interface on the device. |
| /// |
| /// This API is intentionally terse since it calls default platform behavior. It |
| /// is not suitable for precise control of the system's haptic feedback module. |
| class HapticFeedback { |
| // This class is not meant to be instatiated or extended; this constructor |
| // prevents instantiation and extension. |
| // ignore: unused_element |
| HapticFeedback._(); |
| |
| /// Provides vibration haptic feedback to the user for a short duration. |
| /// |
| /// On iOS devices that support haptic feedback, this uses the default system |
| /// vibration value (`kSystemSoundID_Vibrate`). |
| /// |
| /// On Android, this uses the platform haptic feedback API to simulate a |
| /// response to a long press (`HapticFeedbackConstants.LONG_PRESS`). |
| static Future<void> vibrate() async { |
| await SystemChannels.platform.invokeMethod<void>('HapticFeedback.vibrate'); |
| } |
| |
| /// Provides a haptic feedback corresponding a collision impact with a light mass. |
| /// |
| /// On iOS versions 10 and above, this uses a `UIImpactFeedbackGenerator` with |
| /// `UIImpactFeedbackStyleLight`. This call has no effects on iOS versions |
| /// below 10. |
| /// |
| /// On Android, this uses `HapticFeedbackConstants.VIRTUAL_KEY`. |
| static Future<void> lightImpact() async { |
| await SystemChannels.platform.invokeMethod<void>( |
| 'HapticFeedback.vibrate', |
| 'HapticFeedbackType.lightImpact', |
| ); |
| } |
| |
| /// Provides a haptic feedback corresponding a collision impact with a medium mass. |
| /// |
| /// On iOS versions 10 and above, this uses a `UIImpactFeedbackGenerator` with |
| /// `UIImpactFeedbackStyleMedium`. This call has no effects on iOS versions |
| /// below 10. |
| /// |
| /// On Android, this uses `HapticFeedbackConstants.KEYBOARD_TAP`. |
| static Future<void> mediumImpact() async { |
| await SystemChannels.platform.invokeMethod<void>( |
| 'HapticFeedback.vibrate', |
| 'HapticFeedbackType.mediumImpact', |
| ); |
| } |
| |
| /// Provides a haptic feedback corresponding a collision impact with a heavy mass. |
| /// |
| /// On iOS versions 10 and above, this uses a `UIImpactFeedbackGenerator` with |
| /// `UIImpactFeedbackStyleHeavy`. This call has no effects on iOS versions |
| /// below 10. |
| /// |
| /// On Android, this uses `HapticFeedbackConstants.CONTEXT_CLICK` on API levels |
| /// 23 and above. This call has no effects on Android API levels below 23. |
| static Future<void> heavyImpact() async { |
| await SystemChannels.platform.invokeMethod<void>( |
| 'HapticFeedback.vibrate', |
| 'HapticFeedbackType.heavyImpact', |
| ); |
| } |
| |
| /// Provides a haptic feedback indication selection changing through discrete values. |
| /// |
| /// On iOS versions 10 and above, this uses a `UISelectionFeedbackGenerator`. |
| /// This call has no effects on iOS versions below 10. |
| /// |
| /// On Android, this uses `HapticFeedbackConstants.CLOCK_TICK`. |
| static Future<void> selectionClick() async { |
| await SystemChannels.platform.invokeMethod<void>( |
| 'HapticFeedback.vibrate', |
| 'HapticFeedbackType.selectionClick', |
| ); |
| } |
| } |