Flutter震动功能插件flutter_vibrate的使用

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

Flutter震动功能插件flutter_vibrate的使用

插件介绍

Donate Donate github pages GitHub stars flutter_vibrate

flutter_vibrate 是一个Flutter插件,用于触发设备的震动。它利用了苹果和安卓平台上的所有当前触觉反馈API,为开发者提供了丰富的震动模式选择。

开始使用

Android配置

确保在您的AndroidManifest.xml文件中添加以下权限:

<uses-permission android:name="android.permission.VIBRATE"/>

导入包

在Dart代码中导入插件:

import 'package:flutter_vibrate/flutter_vibrate.dart';

使用方法

普通震动

检查设备是否支持震动

bool canVibrate = await Vibrate.canVibrate;
if (canVibrate) {
  print('This device can vibrate');
} else {
  print('This device cannot vibrate');
}

触发震动

Vibrate.vibrate();

注意:在iOS上,震动持续时间是一个固定的500ms,因为无法设置特定的持续时间。

带有暂停的连续震动

final Iterable<Duration> pauses = [
  const Duration(milliseconds: 500),
  const Duration(milliseconds: 1000),
  const Duration(milliseconds: 500),
];
Vibrate.vibrateWithPauses(pauses);

这段代码将执行如下的震动序列:震动 - 等待0.5秒 - 再次震动 - 等待1秒 - 再次震动 - 等待0.5秒 - 最后一次震动。

触觉反馈

根据不同的场景选择合适的反馈类型:

enum FeedbackType {
  success,
  error,
  warning,
  selection,
  impact,
  heavy,
  medium,
  light
}

// 例如,触发一次轻度的触觉反馈
Vibrate.feedback(FeedbackType.light);

完整示例Demo

下面是一个完整的Flutter应用例子,展示了如何使用flutter_vibrate插件来实现不同的震动效果。

import 'package:flutter/material.dart';
import 'package:flutter_vibrate/flutter_vibrate.dart';

void main() => runApp(const MyApp());

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  bool _canVibrate = true;
  final Iterable<Duration> pauses = [
    const Duration(milliseconds: 500),
    const Duration(milliseconds: 1000),
    const Duration(milliseconds: 500),
  ];

  @override
  void initState() {
    super.initState();
    _init();
  }

  Future<void> _init() async {
    bool canVibrate = await Vibrate.canVibrate;
    setState(() {
      _canVibrate = canVibrate;
      _canVibrate
          ? debugPrint('This device can vibrate')
          : debugPrint('This device cannot vibrate');
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('Haptic Feedback Example')),
        body: Center(
          child: ListView(children: [
            ListTile(
              title: const Text('Vibrate'),
              leading: const Icon(Icons.vibration, color: Colors.teal),
              onTap: () {
                if (_canVibrate) Vibrate.vibrate();
              },
            ),
            ListTile(
              title: const Text('Vibrate with Pauses'),
              leading: const Icon(Icons.vibration, color: Colors.brown),
              onTap: () {
                if (_canVibrate) {
                  Vibrate.vibrateWithPauses(pauses);
                }
              },
            ),
            const Divider(height: 1),
            ListTile(
              title: const Text('Impact'),
              leading: const Icon(Icons.tap_and_play, color: Colors.orange),
              onTap: () {
                if (_canVibrate) {
                  Vibrate.feedback(FeedbackType.impact);
                }
              },
            ),
            ListTile(
              title: const Text('Selection'),
              leading: const Icon(Icons.select_all, color: Colors.blue),
              onTap: () {
                if (_canVibrate) {
                  Vibrate.feedback(FeedbackType.selection);
                }
              },
            ),
            ListTile(
              title: const Text('Success'),
              leading: const Icon(Icons.check, color: Colors.green),
              onTap: () {
                if (_canVibrate) {
                  Vibrate.feedback(FeedbackType.success);
                }
              },
            ),
            ListTile(
              title: const Text('Warning'),
              leading: const Icon(Icons.warning, color: Colors.red),
              onTap: () {
                if (_canVibrate) {
                  Vibrate.feedback(FeedbackType.warning);
                }
              },
            ),
            ListTile(
              title: const Text('Error'),
              leading: const Icon(Icons.error, color: Colors.red),
              onTap: () {
                if (_canVibrate) {
                  Vibrate.feedback(FeedbackType.error);
                }
              },
            ),
            const Divider(height: 1),
            ListTile(
              title: const Text('Heavy'),
              leading:
                  const Icon(Icons.notification_important, color: Colors.red),
              onTap: () {
                if (_canVibrate) {
                  Vibrate.feedback(FeedbackType.heavy);
                }
              },
            ),
            ListTile(
              title: const Text('Medium'),
              leading:
                  const Icon(Icons.notification_important, color: Colors.green),
              onTap: () {
                if (_canVibrate) {
                  Vibrate.feedback(FeedbackType.medium);
                }
              },
            ),
            ListTile(
              title: const Text('Light'),
              leading:
                  Icon(Icons.notification_important, color: Colors.yellow[700]),
              onTap: () {
                if (_canVibrate) {
                  Vibrate.feedback(FeedbackType.light);
                }
              },
            ),
          ]),
        ),
      ),
    );
  }
}

这个例子创建了一个简单的Flutter应用程序,用户可以通过点击列表项来触发不同类型的震动效果或触觉反馈。这有助于理解并测试flutter_vibrate插件的各种功能。

文档参考


更多关于Flutter震动功能插件flutter_vibrate的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter震动功能插件flutter_vibrate的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter中使用flutter_vibrate插件来实现震动功能的示例代码。这个插件允许你在Android和iOS设备上触发设备的震动功能。

首先,你需要在你的pubspec.yaml文件中添加flutter_vibrate依赖项:

dependencies:
  flutter:
    sdk: flutter
  flutter_vibrate: ^1.3.0  # 请检查最新版本号

然后,运行flutter pub get来安装依赖项。

接下来,在你的Flutter项目中,你可以按照以下步骤使用flutter_vibrate插件:

  1. 导入插件

在你的Dart文件中(比如main.dart),导入flutter_vibrate插件:

import 'package:flutter_vibrate/flutter_vibrate.dart';
  1. 请求权限(仅Android)

在Android上,你需要请求震动权限。你可以在应用的启动逻辑中(比如在MainActivity.ktMainActivity.java中)请求这个权限。不过,flutter_vibrate插件通常会自动处理这个权限请求,但如果你需要更细粒度的控制,你可以手动处理。

  1. 使用震动功能

在你的按钮点击事件或其他逻辑中使用震动功能。以下是一个简单的例子:

import 'package:flutter/material.dart';
import 'package:flutter_vibrate/flutter_vibrate.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Vibrate Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Vibrate Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text(
                'Press the button to vibrate the device',
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: () {
                  // 震动设备一次,持续500毫秒
                  vibrateDevice();
                },
                child: Text('Vibrate'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  void vibrateDevice() async {
    bool hasVibrate = await FlutterVibrate.hasVibrator();
    if (hasVibrate) {
      // 震动500毫秒
      await FlutterVibrate.vibrate(duration: 500);

      // 你也可以尝试其他震动模式,比如连续震动和停止
      // await FlutterVibrate.vibrateWithPattern([500, 200, 500, 200], repeat: -1); // 无限重复模式
      // await FlutterVibrate.cancel(); // 取消震动
    } else {
      print("Device does not have vibrator.");
    }
  }
}

在这个示例中,当用户点击按钮时,设备会震动500毫秒。你还可以使用vibrateWithPattern方法来定义更复杂的震动模式,比如一系列的震动和停止时间。

请注意,在iOS设备上,震动功能可能受限于设备的硬件和系统设置。确保在真实设备上进行测试,因为模拟器可能无法正确模拟震动功能。

回到顶部