Flutter震动功能插件vibration的使用
Flutter震动功能插件vibration的使用
Vibration
这是一个用于处理iOS、Android和Web上的震动API的插件。API 文档。
Getting Started
添加依赖
在pubspec.yaml
文件的dependencies部分添加vibration
:
dependencies:
vibration: ^1.8.4
导入包
在您的Dart代码中导入此包:
import 'package:vibration/vibration.dart';
Methods
hasVibrator
检查目标设备是否具有震动功能。
if (await Vibration.hasVibrator()) {
Vibration.vibrate();
}
hasAmplitudeControl
检查目标设备是否有控制震动幅度的能力,该功能在Android 8.0 Oreo引入,在更早的API级别中返回false。
if (await Vibration.hasAmplitudeControl()) {
Vibration.vibrate(amplitude: 128);
}
hasCustomVibrationsSupport
检查设备是否能够以自定义时长、模式或强度震动。即使设备没有震动器也可能返回true(如果您想检查设备是否有震动器,请参阅hasVibrator
)。
if (await Vibration.hasCustomVibrationsSupport()) {
Vibration.vibrate(duration: 1000);
} else {
Vibration.vibrate();
await Future.delayed(Duration(milliseconds: 500));
Vibration.vibrate();
}
vibrate
- 特定时长:例如1秒
Vibration.vibrate(duration: 1000);
默认时长为500ms。
- 特定时长和特定幅度(如果支持)
Vibration.vibrate(duration: 1000, amplitude: 128);
- 模式(等待500ms,震动1s,等待500ms,震动2s)
Vibration.vibrate(pattern: [500, 1000, 500, 2000]);
- 模式(等待500ms,震动1s,等待500ms,震动2s),不同强度(1 - 最小,255 - 最大)
Vibration.vibrate(pattern: [500, 1000, 500, 2000], intensities: [1, 255]);
cancel
停止正在进行的震动。
Vibration.cancel();
Android
在AndroidManifest.xml
中需要VIBRATE
权限。
<uses-permission android:name="android.permission.VIBRATE"/>
支持带有持续时间和模式的震动。在Android 8(Oreo)及以上版本中,使用VibrationEffect类。对于其余的使用说明,请参阅Vibrator类文档。
iOS
支持CoreHaptics设备上的震动持续时间和模式。在较旧的设备上,模式通过500ms长的震动进行模拟。您可以使用hasCustomVibrationsSupport
来检查当前设备是否支持CoreHaptics。
OpenHarmony
在OpenHarmony平台上的vibration实现。
在你的项目的module.json5
文件中增加以下权限设置。
"requestPermissions": [
{"name" : "ohos.permission.VIBRATE"},
]
vibrateEffect
和 vibrateAttribute
只存在于VibrationOhos
中。
(VibrationPlatform.instance as VibrationOhos).vibrate(
vibrateEffect: const VibratePreset(count: 100),
vibrateAttribute: const VibrateAttribute(
usage: 'alarm',
),
);
示例Demo
import 'package:flutter/material.dart';
import 'package:vibration/vibration.dart';
void main() => runApp(VibratingApp());
class VibratingApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Vibration Plugin example app'),
),
body: Builder(
builder: (BuildContext context) {
return Center(
child: Column(
children: <Widget>[
ElevatedButton(
child: Text('Vibrate for default 500ms'),
onPressed: () {
Vibration.vibrate();
},
),
ElevatedButton(
child: Text('Vibrate for 1000ms'),
onPressed: () {
Vibration.vibrate(duration: 1000);
},
),
ElevatedButton(
child: Text('Vibrate with pattern'),
onPressed: () {
final snackBar = SnackBar(
content: Text(
'Pattern: wait 0.5s, vibrate 1s, wait 0.5s, vibrate 2s, wait 0.5s, vibrate 3s, wait 0.5s, vibrate 0.5s',
),
);
ScaffoldMessenger.of(context).showSnackBar(snackBar);
Vibration.vibrate(
pattern: [500, 1000, 500, 2000, 500, 3000, 500, 500],
);
},
),
ElevatedButton(
child: Text('Vibrate with pattern and amplitude'),
onPressed: () {
final snackBar = SnackBar(
content: Text(
'Pattern: wait 0.5s, vibrate 1s, wait 0.5s, vibrate 2s, wait 0.5s, vibrate 3s, wait 0.5s, vibrate 0.5s',
),
);
ScaffoldMessenger.of(context).showSnackBar(snackBar);
Vibration.vibrate(
pattern: [500, 1000, 500, 2000, 500, 3000, 500, 500],
intensities: [0, 128, 0, 255, 0, 64, 0, 255],
);
},
)
],
),
);
},
),
),
);
}
}
更多关于Flutter震动功能插件vibration的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter震动功能插件vibration的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter应用中使用vibration
插件来实现震动功能的代码示例。这个插件允许你在Android和iOS设备上触发设备的震动功能。
首先,你需要在你的Flutter项目中添加vibration
插件。你可以通过修改pubspec.yaml
文件来添加依赖项:
dependencies:
flutter:
sdk: flutter
vibration: ^1.7.3 # 请检查最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,你可以在你的Dart代码中导入并使用这个插件。以下是一个简单的示例,展示了如何在按钮点击时触发震动:
import 'package:flutter/material.dart';
import 'package:vibration/vibration.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Vibration Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
Vibration vibration = Vibration();
void _triggerVibration() async {
bool hasVibrationPermission = await vibration.hasVibrationPermission();
if (hasVibrationPermission) {
// 触发一次短震动
await vibration.vibrate(pattern: [100]); // 100毫秒的震动
} else {
// 请求震动权限(仅在Android上需要)
bool result = await vibration.requestVibrationPermission();
if (result) {
await vibration.vibrate(pattern: [100]); // 100毫秒的震动
} else {
// 处理权限被拒绝的情况
print("Vibration permission denied");
}
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Vibration Example'),
),
body: Center(
child: ElevatedButton(
onPressed: _triggerVibration,
child: Text('Trigger Vibration'),
),
),
);
}
}
代码解释
- 依赖添加:在
pubspec.yaml
文件中添加vibration
插件依赖。 - 导入插件:在Dart文件中导入
vibration
插件。 - 权限检查:在触发震动之前,检查是否已经获得了震动权限。
- 请求权限:如果没有获得权限,则请求权限(仅在Android上需要,iOS通常不需要额外请求权限)。
- 触发震动:使用
vibrate
方法并传入一个震动模式(例如,[100]
表示100毫秒的震动)。
注意事项
- iOS权限:iOS通常不需要额外请求震动权限,但请确保在
Info.plist
中配置了相应的权限描述(虽然通常不是必须的)。 - Android权限:Android上需要请求
VIBRATE
权限,插件会帮你处理这部分,但你需要确保在AndroidManifest.xml
中有相应的权限声明(插件通常会自动添加)。
希望这个示例能帮助你在Flutter项目中实现震动功能!