show static method

void show(
  1. BuildContext context, {
  2. void onTap()?,
  3. required String txt,
  4. required NGAMsgType type,
  5. int s = 3,
  6. 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());
  });
}