show static method
void
show(
- BuildContext context, {
- void onTap()?,
- required String txt,
- required NGAMsgType type,
- int s = 3,
- String tip = '',
Implementation
static void show(BuildContext context,
{void Function()? onTap, required String txt, required NGAMsgType type, int s = 3, String tip = ''}) {
if (!context.mounted) return;
final overlayState = Overlay.of(context);
IconData icon;
Color color;
switch (type) {
case NGAMsgType.err:
icon = Icons.error_rounded;
color = Colors.redAccent;
break;
case NGAMsgType.warn:
icon = Icons.warning_rounded;
color = Colors.orangeAccent;
break;
case NGAMsgType.ok:
icon = Icons.check_circle_rounded;
color = Colors.greenAccent;
break;
case NGAMsgType.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: Tooltip(
message: tip,
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(
children: [
Icon(icon, color: color),
SizedBox(width: 12),
Text(txt, style: TextStyle(color: color))
],
).min(),
)))),
),
),
),
),
),
);
}
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());
});
}