154 lines
3.7 KiB
Dart
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,
|
|
// );
|
|
// }
|