msg static method
void
msg(
- BuildContext context, {
- void onTap()?,
- required String txt,
- required NGAMsg type,
- int s = 3,
Implementation
static void msg(BuildContext context,
{void Function()? onTap, required String txt, required NGAMsg type, int s = 3}) {
if (!context.mounted) return;
final overlayState = Overlay.of(context);
IconData icon;
Color color;
switch (type) {
case NGAMsg.err:
icon = Icons.error_rounded;
color = Colors.redAccent;
break;
case NGAMsg.warn:
icon = Icons.warning_rounded;
color = Colors.orangeAccent;
break;
case NGAMsg.ok:
icon = Icons.check_circle_rounded;
color = Colors.greenAccent;
break;
case NGAMsg.info:
icon = Icons.info_rounded;
color = Colors.blueAccent;
}
OverlayEntry toastOverlayEntry(Tween<Offset> tween) {
return OverlayEntry(
builder: (context) => Positioned(
top: MediaQuery.of(context).size.height * 0.075,
left: MediaQuery.of(context).size.width * 0.1,
right: MediaQuery.of(context).size.width * 0.1,
child: TweenAnimationBuilder<Offset>(
tween: tween,
duration: Duration(milliseconds: 300),
builder: (context, offset, child) {
return Transform.translate(offset: offset * MediaQuery.of(context).size.height, child: child);
},
child: Center(
child: ClipRRect(
borderRadius: BorderRadius.circular(16),
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 10, sigmaY: 10),
child: Material(
color: Colors.transparent,
borderRadius: BorderRadius.circular(16),
child: InkWell(
onTap: onTap,
borderRadius: BorderRadius.circular(16),
child: Container(
padding: EdgeInsets.all(16),
decoration: BoxDecoration(
color: Colors.white.withAlpha(128), borderRadius: BorderRadius.circular(16)),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Icon(icon, color: color),
SizedBox(width: 12),
Text(txt, style: TextStyle(color: color))
],
),
))),
),
),
),
),
),
);
}
OverlayEntry goEntry = toastOverlayEntry(Tween<Offset>(begin: Offset(0, -1), end: Offset(0, 0)));
overlayState.insert(goEntry);
Future.delayed(Duration(seconds: s), () {
OverlayEntry backEntry = toastOverlayEntry(Tween<Offset>(begin: Offset(0, 0), end: Offset(0, -1)));
overlayState.insert(backEntry);
goEntry.remove();
Future.delayed(Duration(milliseconds: 300), () => backEntry.remove());
});
}