import 'package:cryptocornars/common/utils/app_context.dart'; import 'package:cryptocornars/constants/global_variable.dart'; import 'package:flutter/material.dart'; class Toast { static void show(String msg, BuildContext context, double height) { Color textColor = Colors.white; Color backgroundColor = Colors.blueAccent; dismiss(); Toast._createView(msg, context, backgroundColor, textColor, height); } static OverlayEntry? _overlayEntry; static bool isVisible = false; static void _createView(String msg, BuildContext context, Color background, Color textColor, double height) async { var overlayState = Overlay.of(context); AppContext.get(); final themeData = Theme.of(context); _overlayEntry = OverlayEntry( builder: (BuildContext context) => _ToastAnimatedWidget( height: height, child: SizedBox( width: MediaQuery.of(context).size.width, child: Container( alignment: Alignment.center, width: MediaQuery.of(context).size.width, child: Container( decoration: BoxDecoration( color: GlobalVariable.whiteSmoke, borderRadius: BorderRadius.circular(10), ), margin: const EdgeInsets.symmetric(horizontal: 20), padding: const EdgeInsets.fromLTRB(16, 10, 16, 10), child: Text( msg, style: themeData.textTheme.bodyLarge?.copyWith( color: GlobalVariable.platinum, fontFamily: 'Roboto', fontSize: 16, fontWeight: FontWeight.w500, ), ), ), ), ), ), ); isVisible = true; overlayState.insert(_overlayEntry!); } static dismiss() async { if (!isVisible) { return; } isVisible = false; _overlayEntry?.remove(); } } class _ToastAnimatedWidget extends StatefulWidget { const _ToastAnimatedWidget({ Key? key, required this.child, required this.height, }) : super(key: key); final double height; final Widget child; @override _ToastWidgetState createState() => _ToastWidgetState(); } class _ToastWidgetState extends State<_ToastAnimatedWidget> with SingleTickerProviderStateMixin { bool get _isVisible => true; //update this value later @override void initState() { super.initState(); } @override Widget build(BuildContext context) { return Positioned( bottom: widget.height, child: AnimatedOpacity( duration: const Duration(seconds: 2), opacity: _isVisible ? 1.0 : 0.0, child: widget.child, )); } }
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter