Flutter震动功能插件vibration的使用

发布于 1周前 作者 vueper 来自 Flutter

Flutter震动功能插件vibration的使用

Vibration

Build Status

这是一个用于处理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"},                
]

vibrateEffectvibrateAttribute 只存在于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

1 回复

更多关于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'),
        ),
      ),
    );
  }
}

代码解释

  1. 依赖添加:在pubspec.yaml文件中添加vibration插件依赖。
  2. 导入插件:在Dart文件中导入vibration插件。
  3. 权限检查:在触发震动之前,检查是否已经获得了震动权限。
  4. 请求权限:如果没有获得权限,则请求权限(仅在Android上需要,iOS通常不需要额外请求权限)。
  5. 触发震动:使用vibrate方法并传入一个震动模式(例如,[100]表示100毫秒的震动)。

注意事项

  • iOS权限:iOS通常不需要额外请求震动权限,但请确保在Info.plist中配置了相应的权限描述(虽然通常不是必须的)。
  • Android权限:Android上需要请求VIBRATE权限,插件会帮你处理这部分,但你需要确保在AndroidManifest.xml中有相应的权限声明(插件通常会自动添加)。

希望这个示例能帮助你在Flutter项目中实现震动功能!

回到顶部