Files
buzz/mobile/lib/shared/toast_haptic.dart
klopez4212 cfcaef4e9f Update mobile toast animations (#8855)
Updates mobile toast animations and styling.



| Sign in | Retry | Copied |
| --- | --- | --- |
| ![Reconnect to
Builderlab](https://github.com/user-attachments/assets/5298b507-df5b-49da-a021-03f337e997fa)
| ![Save error with
Retry](https://github.com/user-attachments/assets/492c8929-4f91-4342-943b-a72b96547992)
| ![Copied
confirmation](https://github.com/user-attachments/assets/864fd629-7414-415e-81ef-5f7d3d5333a4)
|

---------

Signed-off-by: kenny lopez <klopez4212@gmail.com>
Co-authored-by: Terp <5856f6900e8e0a4e0ea1f4f8d2ee33e4753d2119bc122f94ecafc660b46c0511@buzz.block.builderlab.xyz>
2026-10-31 07:50:00 -07:00

30 lines
969 B
Dart

import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';
/// The outcome communicated by a notice, independent of its wording.
enum ToastKind { generic, success, error }
/// Plays outcome-specific feedback without blocking the notice.
Future<void> toastHaptic(ToastKind kind) async {
try {
if (kind != ToastKind.generic &&
!kIsWeb &&
defaultTargetPlatform == TargetPlatform.iOS) {
await const MethodChannel('buzz/haptics').invokeMethod<void>(kind.name);
return;
}
switch (kind) {
case ToastKind.generic:
await HapticFeedback.lightImpact();
case ToastKind.success:
await HapticFeedback.mediumImpact();
case ToastKind.error:
await HapticFeedback.heavyImpact();
}
} on PlatformException {
// Haptics are optional; feedback must still be displayed.
} on MissingPluginException {
// Some platforms and test embedders do not provide haptics.
}
}