本文主要介绍Flutter中利用Overlay相关内容实现Toast效果,主要实现逻辑参考简书:平静的阿卿达的文章:使用Flutter实现Toast效果以及FlutterToast的部分写法。
1.实现原理
Overlay首先是一个可以浮在整个UI框架上的StatefulWidget,所以其需要借助于OverlayState来更新其状态,利用Overlay.of(context)方 法实例化OverlayState后过OverlayEntry构建在Overlay中的需要展示的 view,并通过OverlayState的insert方法将构建的view更新到Overlay中,同时展示在屏幕上,在不需要的时候可以通过OverlayEntry的remove方法移除当前的展示的view。
OverlayState的使用示例:
1 | //获取OverlayState |
2.实现效果
下图为gif动态图,加载比较慢
3.封装完成的MyToast代码如下
1 | import 'package:flutter/material.dart'; |
4.使用示例
没使用静态方法的形式,因为可能存在需要在同一界面下一个toast弹出在TOP,一个toast弹出在CENTER,这时候需要实例化两个toast,设置不同的gravity属性。两个Color属性其实可以固定,主要控制Context以及时间和位置。1
2
3
4
5
6
7
8void _showToast(String msg) {
MyToast myToast = new MyToast(context,Colors.lightBlueAccent,Colors.white);
myToast.showToast(
msg: msg,
toastLength: myToastLength.LENGTH_SHORT,
gravity: myToastGravity.CENTER
);
}
5.总结
由于个人不太喜欢FlutterToast的效果,也没认真研究,就在网上参考了文初提到的那位作者算是另辟蹊径地实现方式,使用起来个人觉得很舒服,就结合了FlutterToast的使用写法封装了一个MyToast,如有更好的实现方案或者文中代码有问题欢迎在评论区分享和指正。