Files
hum-flutter/lib/core/utils/toaster.dart
2025-12-12 14:31:36 -05:00

154 lines
3.7 KiB
Dart

import 'package:flutter/cupertino.dart';
import 'dart:async';
import 'package:hum/core/constants/app_theme.dart';
void
showCupertinoToast(
BuildContext context,
String message,
) {
final overlay = Overlay.of(
context,
);
// Animation controller lives inside an OverlayEntry widget
late OverlayEntry entry;
final animationController = AnimationController(
vsync: Navigator.of(
context,
),
duration: const Duration(
milliseconds: 250,
),
);
entry = OverlayEntry(
builder:
(
ctx,
) {
return Positioned(
bottom: 30,
left: 24,
right: 24,
child: FadeTransition(
opacity: CurvedAnimation(
parent: animationController,
curve: Curves.easeInOut,
),
child: CupertinoPopupSurface(
isSurfacePainted: true,
child: Container(
padding: const EdgeInsets.symmetric(
horizontal: 16,
vertical: 12,
),
decoration: BoxDecoration(
// color: CupertinoColors.black.withValues(
// alpha: .8,
// ),
color: CupertinoDynamicColor.resolve(
colorBackground,
context,
),
borderRadius: BorderRadius.circular(
12,
),
),
child: Center(
child: Text(
message,
style: const TextStyle(
color: CupertinoColors.white,
fontSize: 16,
),
textAlign: TextAlign.center,
),
),
),
),
),
);
},
);
overlay.insert(
entry,
);
// Animate fade-in
animationController.forward();
// Wait, then fade out and remove
Future.delayed(
const Duration(
seconds: 2,
),
).then(
(
_,
) async {
await animationController.reverse();
entry.remove();
animationController.dispose();
},
);
}
// void
// showCupertinoToast(
// BuildContext context,
// String message,
// ) {
// final overlay = Overlay.of(
// context,
// );
// final overlayEntry = OverlayEntry(
// builder:
// (
// _,
// ) => Positioned(
// bottom: 100, // distance from bottom
// left: 24,
// right: 24,
// child: CupertinoPopupSurface(
// isSurfacePainted: true,
// child: Container(
// padding: const EdgeInsets.symmetric(
// horizontal: 16,
// vertical: 12,
// ),
// decoration: BoxDecoration(
// color: CupertinoColors.black.withValues(
// alpha: 0.8,
// ),
// borderRadius: BorderRadius.circular(
// 12,
// ),
// ),
// child: Center(
// child: Text(
// message,
// style: const TextStyle(
// color: CupertinoColors.white,
// ),
// textAlign: TextAlign.center,
// ),
// ),
// ),
// ),
// ),
// );
// overlay.insert(
// overlayEntry,
// );
// Future.delayed(
// const Duration(
// seconds: 2,
// ),
// overlayEntry.remove,
// );
// }