如何使用 Flutter 为 Android 和 iOS 实现振动?

How to implement vibration with Flutter for both Android and iOS?

我正在尝试使用 Flutter 在单击按钮时实现振动。

我发现说实话很难。我尝试使用以下软件包失败: vibration and vibrate 但它们就是不振动(这里说的是真正的设备不是 emulators/simulators)。

是否有关于如何使用 Flutter 在 iOS 和 Android 设备上实现振动的清晰示例指南?

谢谢, 米海

首先,您需要将 vibrate: 添加为 pubspec.yaml 文件的依赖项。

dependencies:
  flutter:
    sdk: flutter
  vibrate:

在此之后,您需要在您正在使用的 class 中导入包。

// Import package
import 'package:vibrate/vibrate.dart';

现在你可以振动:

// Check if the device can vibrate
bool canVibrate = await Vibrate.canVibrate;

// Vibrate
// Vibration duration is a constant 500ms because
// it cannot be set to a specific duration on iOS.
Vibrate.vibrate();

// Vibrate with pauses between each vibration
final Iterable<Duration> pauses = [
    const Duration(milliseconds: 500),
    const Duration(milliseconds: 1000),
    const Duration(milliseconds: 500),
];
// vibrate - sleep 0.5s - vibrate - sleep 1s - vibrate - sleep 0.5s - vibrate
Vibrate.vibrateWithPauses(pauses);

触觉反馈

// Choose from any of these available methods
enum FeedbackType {
  success,
  error,
  warning,
  selection,
  impact,
  heavy,
  medium,
  light
}

var _type = FeedbackType.impact;
Vibrate.feedback(_type);

来源:https://github.com/clovisnicolas/flutter_vibrate

找到了使用 HapticFeedback.vibrate() 的方法。它适用于 iOS 和 Android。查看有关此 [post][1] 的代码示例和其他设置的更多详细信息:Flutter: How to use HapticFeedback

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

// Note:
// Make sure you add the following permissions to your Android Manifest
// <uses-permission android:name="android.permission.VIBRATE"/>
// 
// In pubspec.yaml file, add following dependency
// dependencies:
//   vibrate: ^0.0.4

class TestVibration extends StatefulWidget {
  @override
  _TestVibrationState createState() => _TestVibrationState();
}

class _TestVibrationState extends State<TestVibration> {

  bool canVibrate = false;
  @override
  void initState() {
    super.initState();
    _checkIfVibrate();
  }
  _checkIfVibrate() async {
    // check if device can vibrate
    canVibrate = await Vibrate.canVibrate;
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      child: RaisedButton(
        child: Text('Vibrate'),
        onPressed: (){
          // FeedbackTypes -> {success, error, warning, selection, impact, heavy, medium, light}
          _getVibration(FeedbackType.warning);
        },
      ),
    );
  }

  _getVibration(feedbackType) async {
    if (canVibrate) {
      Vibrate.feedback(feedbackType);
      // Vibrate.vibrate();   // Try this too!
    }
  }
}

我会推荐使用 flutter_vibrate,它对 ios/ android 都有效。设置更简单,效果很好。

  1. 只需在 pubspec.yaml 文件中添加 flutter_vibrate 作为依赖。

    依赖项: 振动:^1.4.0

  2. 确保将以下权限添加到您的 Android 清单

  3. 导入包:

    进口'package:vibration/vibration.dart';

示例:

默认振动 500 毫秒:

Vibration.vibrate();
       

振动 1000 毫秒:

Vibration.vibrate(duration: 1000);
           

模式:等待0.5秒,振动1秒,等待0.5秒,振动2秒,等待0.5秒,振动3秒,等待0.5秒,振动0.5秒:

Vibration.vibrate(pattern: [500, 1000, 500, 2000, 500, 3000, 500, 500]);
            

模式:等待0.5秒,振动1秒,等待0.5秒,振动2秒,等待0.5秒,振动3秒,等待0.5秒,振动0.5秒':

Vibration.vibrate( pattern: [500, 1000, 500, 2000, 500, 3000, 500, 500], intensities: [128, 255, 64, 255]);

Android

在 AndroidManifest.xml 中需要 VIBRATE 权限。

支持具有持续时间和模式的振动。在 Android 8 (Oreo) 及更高版本上,使用 [VibrationEffect][1] class。有关其余的使用说明,请参阅 [Vibrator][1] class 文档。

iOS

在 CoreHaptics 设备上支持具有持续时间和模式的振动。在旧设备上,该模式是通过 500 毫秒长的振动来模拟的。您可以使用 hasCustomVibrationsSupport.

检查当前设备是否支持 CoreHaptics

Flutter 2021最简单的解决方案

1) 导入标准服务:

import 'package:flutter/services.dart';

2) 使用:

HapticFeedback.mediumImpact();

lightImpact,或heavyImpact

3) 不要忘记在 Android 清单中添加:

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

奖金)播放“咔嗒”声:

SystemSound.play(SystemSoundType.click);