Как реализовать вибрацию с Flutter для Android и iOS?

Используя Flutter, я пытаюсь реализовать вибрацию при нажатии кнопки.

Мне на удивление сложно быть честным. Я безуспешно пытался использовать следующие пакеты: вибрация и vibrate, но они просто не вибрируют (здесь речь идет о реальных устройствах, а не эмуляторах / симуляторах).

Есть ли руководство с наглядными примерами того, как реализовать вибрацию на устройствах iOS и Android с помощью Flutter?

Спасибо, Михай


person Miha    schedule 02.06.2019    source источник


Ответы (3)


Нашел способ с помощью HapticFeedback.vibrate(). Работает как на iOS, так и на Android. См. Более подробную информацию с примером кода и другими настройками в этом [сообщении] [1]: Flutter: How to использовать HapticFeedback

person Miha    schedule 06.06.2019
comment
Я создал краткое руководство по реализации вибрации с помощью Flutter, на случай, если вам это не удастся. Взгляните на: - person Miha; 19.01.2020
comment
Спасибо, а вы знаете, почему это не работает на Samsung S8? Ни один из методов не работает. Это забавно, потому что при использовании такого плагина, как Vibrate, работают по крайней мере несколько методов вибрации. Это на Android 9, кстати, и у нас есть запись в манифесте. - person DarkNeuron; 29.01.2020
comment
@DarkNeuron, возможно, стоит взглянуть Settings, затем Sounds and vibration, а затем Vibration feedback и включить его, если это еще не сделано. - person Miha; 30.01.2020
comment
@Miha Это было включено, но мы нашли другую настройку, которая называется вибрация при касании. Таким образом, есть 2 настройки вибрации. При включенной сенсорной вибрации некоторые функции вибрации работали. Я думаю, что это было тяжело, а отбор - нет. - person DarkNeuron; 30.01.2020
comment
Я не думаю, что HapticFeedback поддерживает Flutter web правильно? - person Yuhao; 24.09.2020

Во-первых, вам нужно добавить vibrate: в качестве зависимости к вашему pubspec.yaml файлу.

dependencies:
  flutter:
    sdk: flutter
  vibrate:

После этого вам нужно импортировать пакет в тот класс, который вы используете.

// 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

person laaasBIGL    schedule 02.06.2019
comment
Не могли бы вы поделиться файлом .dart с рабочим примером. Не могу понять, как реализовать приведенный выше код. Я добавил зависимости в файл .yaml выше. Я даже использовал пример, представленный в этом плагине https://github.com/clovisnicolas/flutter_vibrate/blob/master/example/lib/main.dart, но при запуске на iOS (iPhone 7 iOS 12.1.4) я получаю следующую ошибку: Error output from CocoaPods: ↳ .... Finished with error: Error running pod install - person Miha; 02.06.2019
comment
полное сообщение об ошибке: Error output from CocoaPods: ↳ [!] ‹PBXGroup UUID = xxx› `попытался инициализировать объект с неизвестным UUID. xxx для атрибута: children. Это может быть результатом слияния и отказа от неизвестного UUID. [!] Автоматическое назначение платформы ios с версией 8.0 целевому Runner, поскольку платформа не указана. Укажите платформу для этой цели в своем подфиле. См. https://guides.cocoapods.org/syntax/podfile.html#platform. Завершено с ошибкой: Ошибка при запуске установки модуля. - person Miha; 02.06.2019
comment
Просто следите за этим @BastianMeyer на случай, если вы знаете способ реализовать HapticFeedback во Flutter для Android (без использования плагина выше). Я могу заставить его работать на iOS. - person Miha; 05.06.2019

Я рекомендую использовать flutter_vibrate, он будет работать как на ios, так и на android. Более простая настройка и очень хорошо работает.

  1. Просто добавьте flutter_vibrate в качестве зависимости в свой файл pubspec.yaml.

    зависимости: вибрация: ^ 1.4.0

  2. Убедитесь, что вы добавили следующие разрешения в свой манифест Android

  3. Импортируйте пакет:

    импорт 'пакет: вибрация / вибрация. 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.

Supports vibration with duration and pattern. On Android 8 (Oreo) and above, uses the [VibrationEffect][1] class. For the rest of the usage instructions, see [Vibrator][1] class documentation.

iOS

Поддерживает вибрацию с продолжительностью и шаблоном на устройствах CoreHaptics. На старых устройствах шаблон эмулируется с помощью вибраций длительностью 500 мс. Вы можете проверить, поддерживает ли текущее устройство CoreHaptics, используя hasCustomVibrationsSupport.

person Cassio Seffrin    schedule 27.08.2020
comment
Я пробовал этот пакет. Выдает слишком много ошибок времени выполнения - person Denis Barzanov; 07.04.2021
comment
Я использую пакет: вибрация / вибрация. Это намного проще, после импорта просто вызовите Vibration.vibrate (продолжительность: 200); - person Cassio Seffrin; 08.04.2021