Flutter Vibrate
A Flutter plugin to provide haptic feedback on iOS and Android. This package unifies the haptic feedback APIs, allowing for consistent vibration patterns and feedback types across both platforms.
| Platform | Support |
|---|---|
| Android | ✅ |
| iOS | ✅ |
| macOS | ❌ |
| Web | ❌ |
| Linux | ❌ |
| Windows | ❌ |
Features
- Device Vibration: Trigger standard vibrations or custom patterns (Android).
- Haptic Feedback: Access platform-specific haptic feedback constants (Impact, Selection, Success, Warning, Error, etc.).
- Type Safety: Built with Pigeon for type-safe communication between Flutter and native platforms.
- Modern Android Support: Uses
View.performHapticFeedbackfor broad compatibility and adheres to modern Android haptic standards. - iOS Haptics: Uses
UIImpactFeedbackGeneratorandUINotificationFeedbackGeneratorfor rich haptic experiences on iOS 10+.
Getting Started
Installation
Add flutter_vibrate to your pubspec.yaml:
dependencies:
flutter_vibrate: ^1.4.0
Android Setup
Add the vibration permission to your AndroidManifest.xml (android/app/src/main/AndroidManifest.xml):
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.VIBRATE"/>
</manifest>
Note: While
vibrate()requires this permission, many haptic feedback types (like selection, impact) may work without it on some Android versions using the View-based API. However, it is recommended to include it for full functionality.
iOS Setup
No additional configuration is required. The plugin uses AudioServicesPlaySystemSound and UIFeedbackGenerator which are available by default.
Usage
Import the package:
import 'package:flutter_vibrate/flutter_vibrate.dart';
Basic Vibration
Check for device capabilities and vibrate:
// Check if the device can vibrate
bool canVibrate = await Vibrate.canVibrate;
if (canVibrate) {
// Vibrate for 500ms
Vibrate.vibrate();
}
Vibration Patterns
You can create custom patterns by specifying a list of pauses. The pattern alternates between vibrating and pausing.
Android: Supports custom patterns with variable pauses.
iOS: The OS does not support fine-grained custom patterns. This method will vibrate once for each interval in the list.
final Iterable<Duration> pauses = const [
Duration(milliseconds: 500), // Vibrate
Duration(milliseconds: 1000), // Wait
Duration(milliseconds: 500), // Vibrate
];
Vibrate.vibrateWithPauses(pauses);
Haptic Feedback
Trigger specific haptic feedback types to enhance user interaction:
// Impact (light collision)
Vibrate.feedback(FeedbackType.impact);
// Selection (scroll tick)
Vibrate.feedback(FeedbackType.selection);
// Success (task completion)
Vibrate.feedback(FeedbackType.success);
// Warning (potential issue)
Vibrate.feedback(FeedbackType.warning);
// Error (task failure)
Vibrate.feedback(FeedbackType.error);
// Heavy Impact
Vibrate.feedback(FeedbackType.heavy);
// Medium Impact
Vibrate.feedback(FeedbackType.medium);
// Light Impact
Vibrate.feedback(FeedbackType.light);
Contributing
Contributions are welcome! If you find a bug or want to add a feature, please file an issue or submit a pull request.