84 lines
2.3 KiB
Dart
84 lines
2.3 KiB
Dart
|
|
import 'dart:async';
|
||
|
|
|
||
|
|
import 'package:flutter/services.dart';
|
||
|
|
|
||
|
|
/// Platform-independent vibration methods.
|
||
|
|
class Vibration {
|
||
|
|
/// Method channel to communicate with native code.
|
||
|
|
static const MethodChannel _channel = const MethodChannel('vibration');
|
||
|
|
|
||
|
|
/// Check if vibrator is available on device.
|
||
|
|
///
|
||
|
|
/// ```dart
|
||
|
|
/// if (await Vibration.hasVibrator()) {
|
||
|
|
/// Vibration.vibrate();
|
||
|
|
/// }
|
||
|
|
/// ```
|
||
|
|
static Future<bool?> hasVibrator() => _channel.invokeMethod("hasVibrator");
|
||
|
|
|
||
|
|
/// Check if the vibrator has amplitude control.
|
||
|
|
///
|
||
|
|
/// ```dart
|
||
|
|
/// if (await Vibration.hasAmplitudeControl()) {
|
||
|
|
/// Vibration.vibrate(amplitude: 128);
|
||
|
|
/// }
|
||
|
|
/// ```
|
||
|
|
static Future<bool?> hasAmplitudeControl() =>
|
||
|
|
_channel.invokeMethod("hasAmplitudeControl");
|
||
|
|
|
||
|
|
/// Check if the device is able to vibrate with a custom
|
||
|
|
/// [duration], [pattern] or [intensities].
|
||
|
|
/// May return `true` even if the device has no vibrator.
|
||
|
|
///
|
||
|
|
/// ```dart
|
||
|
|
/// if (await Vibration.hasCustomVibrationsSupport()) {
|
||
|
|
/// Vibration.vibrate(duration: 1000);
|
||
|
|
/// } else {
|
||
|
|
/// Vibration.vibrate();
|
||
|
|
/// await Future.delayed(Duration(milliseconds: 500));
|
||
|
|
/// Vibration.vibrate();
|
||
|
|
/// }
|
||
|
|
/// ```
|
||
|
|
static Future<bool?> hasCustomVibrationsSupport() =>
|
||
|
|
_channel.invokeMethod("hasCustomVibrationsSupport");
|
||
|
|
|
||
|
|
/// Vibrate with [duration] at [amplitude] or [pattern] at [intensities].
|
||
|
|
///
|
||
|
|
/// The default vibration duration is 500ms.
|
||
|
|
/// Amplitude is a range from 1 to 255, if supported.
|
||
|
|
///
|
||
|
|
/// ```dart
|
||
|
|
/// Vibration.vibrate(duration: 1000);
|
||
|
|
///
|
||
|
|
/// if (await Vibration.hasAmplitudeControl()) {
|
||
|
|
/// Vibration.vibrate(duration: 1000, amplitude: 1);
|
||
|
|
/// Vibration.vibrate(duration: 1000, amplitude: 255);
|
||
|
|
/// }
|
||
|
|
/// ```
|
||
|
|
static Future<void> vibrate({
|
||
|
|
int duration = 500,
|
||
|
|
List<int> pattern = const [],
|
||
|
|
int repeat = -1,
|
||
|
|
List<int> intensities = const [],
|
||
|
|
int amplitude = -1,
|
||
|
|
}) =>
|
||
|
|
_channel.invokeMethod(
|
||
|
|
"vibrate",
|
||
|
|
{
|
||
|
|
"duration": duration,
|
||
|
|
"pattern": pattern,
|
||
|
|
"repeat": repeat,
|
||
|
|
"amplitude": amplitude,
|
||
|
|
"intensities": intensities
|
||
|
|
},
|
||
|
|
);
|
||
|
|
|
||
|
|
/// Cancel ongoing vibration.
|
||
|
|
///
|
||
|
|
/// ```dart
|
||
|
|
/// Vibration.vibrate(duration: 10000);
|
||
|
|
/// Vibration.cancel();
|
||
|
|
/// ```
|
||
|
|
static Future<void> cancel() => _channel.invokeMethod("cancel");
|
||
|
|
}
|