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