博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编写了一个辅助Flutter弹出Toast的Package
阅读量:6479 次
发布时间:2019-06-23

本文共 1643 字,大约阅读时间需要 5 分钟。

前言

在日常 APP 开发过程中,经常会使用到 Toast 来弹出应用内的小通知来告知用户一些小情况。但 Flutter 中并没有带有类似 Toast 这样的工具类,翻了 StackOverflow 都是建议使用 SnackBar 来弹出提示。例如:

Scaffold.of(context).showSnackBar(SnackBar(content: Text('message')));复制代码

个人不太满意这样的实现方式。在巧合之下,我发现了 Overlay 这个类,于是诞生了借用 Overlay 来实现 toast 的想法。

项目的地址在

预览

先放两张效果图来展示最终效果

notification toast

怎么使用

使用的方式很简单,引入包后简单调用即可。

//弹出toasttoast(context, '消息');//弹出notificationshowSimpleNotification(context, Text('消息'));复制代码

实现过程

整体实现的核心逻辑在 showOverlay(BuildContext, builder, ...)中:

NotificationEntry showOverlay(    BuildContext context, AnimatedOverlayWidgetBuilder builder,    {
bool autoDismiss = true, Curve curve}) { assert(autoDismiss != null); GlobalKey
key = GlobalKey(); //步骤1 创建OverlayEntry final entry = OverlayEntry(builder: (context) { return AnimatedOverlay( key: key, builder: builder, curve: curve, ); }); NotificationEntry notification = NotificationEntry(entry, key); //步骤2 将OverlayEntry添加到Overlay中 Overlay.of(context).insert(entry); if (autoDismiss) { Future.delayed(kNotificationDuration + kNotificationSlideDuration) .whenComplete(() { //ensure entry has been inserted into screen WidgetsBinding.instance .scheduleFrameCallback((_) => notification.dismiss()); }); } return notification;}复制代码

主要分为这么几个部分:

  1. 创建OverlayEntry。为了方便实现动画效果,我抽出了一个单独的 widget —— AnimatedOverlay
  2. OverlayEntry 添加到 Overlay 中。
  3. 如果 autoDismiss 设置为 true 的话,就在一段事件之后(kNotificationDuration + kNotificationSlideDuration),将 OverlayEntryOverlay 中移除。

弊端

使用 Overlay 来实现 Toast 效果很简便,但是有一个弊端:无法在后台弹出

最后

如果大家有什么想法或者建议的话,可以直接在 Github 中提 issues 或者 PR,这样可以让库的可用性更高一些,谢谢大家。

转载地址:http://njzuo.baihongyu.com/

你可能感兴趣的文章
基于HTML5的WebGL设计汉诺塔3D游戏
查看>>
WPF资料链接
查看>>
再次更新
查看>>
利用Windows自带的Certutil查看文件MD5
查看>>
开篇,博客的申请理由
查看>>
[JSOI2008]星球大战starwar BZOJ1015
查看>>
iOS项目分层
查看>>
IntelliJ IDEA 注册码
查看>>
String字符串的截取
查看>>
Shell编程-环境变量配置文件
查看>>
Struts2和Spring MVC的区别
查看>>
理解Javascript参数中的arguments对象
查看>>
git代码冲突
查看>>
git bash 风格调整
查看>>
linux操作系统加固软件,系统安全:教你Linux操作系统的安全加固
查看>>
linux中yum源安装dhcp,24.Linux系统下动态网络源部署方法(dhcpd)
查看>>
HDOJ-1010 Tempter of the Bone
查看>>
日本开设无人机专业,打造无人机“人才市场”
查看>>
190行代码实现mvvm模式
查看>>
兼容几乎所有浏览器的透明背景效果
查看>>