Flutter振动控制插件vibration_type的使用

Flutter振动控制插件vibration_type的使用

该插件允许Flutter应用程序在iOS系统中访问可用的振动类型。

平台支持

Android iOS MacOS Web Linux Windows
x ✔️ x x x x

必备条件

在Podfile中添加以下内容:

platform :ios, '13.0'

如何使用

首先,在项目中导入插件:

import 'package:vibration_type/vibration_type.dart';

影响振动

定义影响振动类型:

enum ImpactVibrationType { soft, light, medium, heavy, rigid }

// 使用重型振动
VibrationType().impactVibration(ImpactVibrationType.heavy);

通知振动

定义通知振动类型:

enum NotificationVibrationType { success, error, warning }

// 使用警告振动
VibrationType().notificationVibration(NotificationVibrationType.warning);

完整示例代码

以下是完整的示例代码,展示了如何在Flutter应用中使用振动插件。

import 'package:flutter/material.dart';
import 'package:vibration_type/vibration_type_export.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final _vibrationTypePlugin = VibrationType();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text(
            '振动类型',
          ),
        ),
        body: Center(
          child: SingleChildScrollView(
            child: Column(
              children: [
                const Text(
                  '通知振动',
                  style: TextStyle(
                    fontWeight: FontWeight.bold,
                    fontSize: 20,
                  ),
                ),
                const SizedBox(
                  height: 20,
                ),
                _buttonVibration(
                  name: '成功',
                  color: Colors.green,
                  onTap: () {
                    _vibrationTypePlugin.notificationVibration(
                        NotificationVibrationType.success);
                  },
                ),
                const SizedBox(
                  height: 20,
                ),
                _buttonVibration(
                  name: '错误',
                  color: Colors.red,
                  onTap: () {
                    _vibrationTypePlugin
                        .notificationVibration(NotificationVibrationType.error);
                  },
                ),
                const SizedBox(
                  height: 20,
                ),
                _buttonVibration(
                  name: '警告',
                  color: const Color.fromARGB(255, 238, 214, 6),
                  onTap: () {
                    _vibrationTypePlugin.notificationVibration(
                        NotificationVibrationType.warning);
                  },
                ),
                const SizedBox(
                  height: 20,
                ),
                const Text(
                  '影响振动',
                  style: TextStyle(
                    fontWeight: FontWeight.bold,
                    fontSize: 20,
                  ),
                ),
                const SizedBox(
                  height: 20,
                ),
                Wrap(
                  spacing: 15.0, // 间距
                  runSpacing: 15.0,
                  children: [
                    _buttonVibration(
                        name: '坚硬',
                        onTap: () {
                          _vibrationTypePlugin
                              .impactVibration(ImpactVibrationType.rigid);
                        },
                        color: Colors.red,
                        height: 100,
                        width: 100),
                    _buttonVibration(
                        name: '柔和',
                        onTap: () {
                          _vibrationTypePlugin
                              .impactVibration(ImpactVibrationType.soft);
                        },
                        color: Colors.green,
                        height: 100,
                        width: 100),
                    _buttonVibration(
                        name: '中等',
                        onTap: () {
                          _vibrationTypePlugin
                              .impactVibration(ImpactVibrationType.medium);
                        },
                        color: Colors.lightBlueAccent,
                        height: 100,
                        width: 100),
                    _buttonVibration(
                        name: '重',
                        onTap: () {
                          _vibrationTypePlugin
                              .impactVibration(ImpactVibrationType.heavy);
                        },
                        color: Colors.purple,
                        height: 100,
                        width: 100),
                    _buttonVibration(
                        name: '轻',
                        onTap: () {
                          _vibrationTypePlugin
                              .impactVibration(ImpactVibrationType.light);
                        },
                        color: Colors.blue,
                        height: 100,
                        width: 100),
                  ],
                )
              ],
            ),
          ),
        ),
      ),
    );
  }

  Widget _buttonVibration({
    required String name,
    required VoidCallback onTap,
    required Color color,
    double? height,
    double? width,
  }) {
    return InkWell(
      onTap: onTap,
      child: Container(
        height: height ?? 80,
        width: width ?? 300,
        decoration: BoxDecoration(
          color: color,
          borderRadius: BorderRadius.circular(10),
        ),
        child: Center(
          child: Text(
            name,
            style: const TextStyle(
              fontWeight: FontWeight.bold,
              fontSize: 20,
              color: Colors.white,
            ),
          ),
        ),
      ),
    );
  }
}

更多关于Flutter振动控制插件vibration_type的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


当然,我可以为你提供一个关于Flutter振动控制插件vibration的使用示例,特别是关于vibration_type的使用。不过需要注意的是,Flutter的vibration插件本身并没有直接提供一个名为vibration_type的参数,但大多数平台(如Android和iOS)支持不同类型的振动模式。在Flutter中,你可以通过传递不同的模式数组来实现不同的振动效果。

以下是一个示例,展示了如何在Flutter中使用vibration插件来控制设备的振动。这个示例假设你已经将vibration插件添加到了你的pubspec.yaml文件中,并且已经运行了flutter pub get

首先,确保你的pubspec.yaml包含以下依赖项:

dependencies:
  flutter:
    sdk: flutter
  vibration: ^1.7.4  # 请检查最新版本号

然后,在你的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(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Vibration Control Demo'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              ElevatedButton(
                onPressed: _vibrateShort,
                child: Text('Short Vibration'),
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: _vibrateLong,
                child: Text('Long Vibration'),
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: _vibratePattern,
                child: Text('Pattern Vibration'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  void _vibrateShort() async {
    bool hasVibrationPermission = await Vibration.hasVibrator();
    if (hasVibrationPermission) {
      Vibration.vibrate(duration: 500); // 短振动,持续500毫秒
    } else {
      print("Device does not have a vibrator.");
    }
  }

  void _vibrateLong() async {
    bool hasVibrationPermission = await Vibration.hasVibrator();
    if (hasVibrationPermission) {
      Vibration.vibrate(duration: 2000); // 长振动,持续2000毫秒
    } else {
      print("Device does not have a vibrator.");
    }
  }

  void _vibratePattern() async {
    bool hasVibrationPermission = await Vibration.hasVibrator();
    if (hasVibrationPermission) {
      // 自定义振动模式:[开启时间, 关闭时间, 开启时间, ...]
      List<int> pattern = [0, 500, 200, 500, 200, 500]; // 500毫秒开,200毫秒关,重复
      // -1 表示振动模式结束后的保持关闭状态
      Vibration.vibrate(pattern: pattern, repeat: -1); 
    } else {
      print("Device does not have a vibrator.");
    }
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含三个按钮,每个按钮触发不同类型的振动:

  1. _vibrateShort:触发一个短振动,持续500毫秒。
  2. _vibrateLong:触发一个长振动,持续2000毫秒。
  3. _vibratePattern:触发一个自定义振动模式,该模式按照指定的开启和关闭时间进行振动。

请注意,不同的设备和操作系统版本可能对振动的支持和限制有所不同。在实际应用中,确保处理可能的异常和权限问题。

回到顶部