Flutter Overlay、OverlayState、OverlayEntry 叠加 Toast Demo

2023-11-02

叠加组件,可以悬浮在其他组件上边,我们通常使用他开发Toast、PopupWindow弹窗等

虽然可以直接创建Overlay ,但最常见的是在WidgetsApp或MaterialApp中使用导航器创建的叠加层。

使用方法
//获取实例
OverlayState overlayState = Overlay.of(_context);
//创建OverlayEntry
OverlayEntry overlayEntry = OverlayEntry(builder);
//显示到屏幕上
overlayState.insert(_overlayEntry);
//移除屏幕
overlayEntry.remove();
代码示例
一个透明渐变的 Toast Demo 代码片段,点击查看完整代码

//显示 文本 Toast  透明渐变  代码片段
  static void _makeTextShowOpacity() async {
    
    _showing = true;
 
    //创建OverlayEntry
    _overlayEntry = OverlayEntry(
      builder: (BuildContext context) => Positioned(
        //top值,可以改变这个值来改变toast在屏幕中的位置
        top: _top,
        child: Container(
          alignment: Alignment.center,//居中
          width: MediaQuery.of(context).size.width,//Container 宽
          child: AnimatedOpacity(
            //目标透明度
            opacity: _showing ? 1.0 : 0.0, 
            //执行时间
            duration: _showing ? Duration(milliseconds: _millisecondsShow) : Duration(milliseconds: _millisecondsHide),
            child: _toastWidget,
          ),
        ),
      )
    );
    //显示到屏幕上
    Overlay.of(_context).insert(_overlayEntry);
    //等待两秒
    await Future.delayed(Duration(milliseconds: _milliseconds)); 
 
    //2秒后 到底消失不消失
    if (DateTime.now().difference(_startedTime).inMilliseconds >= _milliseconds) {
      _showing = false;
      //重新绘制UI,类似setState
      _overlayEntry.markNeedsBuild();
      //等待动画执行
      await Future.delayed(Duration(milliseconds: _millisecondsHide)); 
      if(!_showing){
        _overlayEntry.remove();
        _overlayEntry = null;
      }
    }
  }
效果图
添加曲线和不添加曲线效果对比

     


完整代码
查看完整代码
————————————————
版权声明:本文为CSDN博主「马志武」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ruoshui_t/article/details/97803045

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter Overlay、OverlayState、OverlayEntry 叠加 Toast Demo 的相关文章

随机推荐

  • php 大转盘抽奖概率 角度,在线抽奖大转盘和概率计算

    html gt 抽奖效果演示 rotary position relative width 854px height 504px margin 0 auto background d71f2e url p w picpaths bg1 pn
  • 3D游戏编程设计作业九

    P D 过河游戏智能帮助实现 程序具体要求 实现状态图的自动生成 讲解图数据在程序中的表示方法 利用算法实现下一步的计算 状态图分析 此次作业的代码基于第三次作业 牧师与魔鬼的动作分离版代码进行改进 加入了智能提示功能 实现效果图如下 要实
  • Android ImageView视图的七种图片缩放类型

    博主前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住也分享一下给大家 点击跳转到网站 前言 ImageView默认图片居中显示 默认图片的缩放类型为 scaleType属性为 fitCenter 一 scaleType属性
  • 【严重】vm2 <3.9.18 沙箱逃逸漏洞(存在POC)

    漏洞描述 vm2 是一个基于 Node js 的沙箱环境 可以使用列入白名单的 Node 内置模块运行不受信任的代码 代理对象用于拦截并重定义宿主对象的各种操作 vm2 3 9 18之前版本中 由于 prepareStackTrace 函数
  • 【转】OSI TCP/IP 浅析

    OSI是Open System Interconnect的缩写 意为开放式系统互联 国际标准组织 国际标准化组织 制定了OSI模型 这个模型把网络通信的工作分为7层 分别是物理层 数据链路层 网络层 传输层 会话层 表示层 应用层 一 网络
  • unity控制物体显示和隐藏的方法总结

    首先是物体的获取 代码如下 GameObject Find SampleAnchorMe 找到并返回一个名字为SampleAnchorMe的游戏物体 不能用于inactive的物体即隐藏的物体无法用find发现 GameObject Fin
  • 4:eMMC command

    1 前言 本文主要对eMMC的command进行详细介绍 主要包含如下内容 1 command类型 2 command格式 2 command类型 command类型 说明 bc 不带response的广播命令 bcr 带有response
  • 华为机试C语言-最长方连续方波信号

    题目描述 https zhuanlan zhihu com p 546563566 代码分层有利于代码调试 include
  • Okhttp设置公共参数,以json对象放入@Body请求公共参数的配置方式

    当网络请求都是基于一个URL 所有的接口都是同一个地址 而请求不同接口数据则是通过command字段进行配置 然后所有的请求参数都是需要自己写一个bean类 再转成json格式放入请求body里发给后台 而不是通过表单form body发送
  • MySQL之MVCC

    事务隔离级别 对于一个MySQL服务 可以有多个客户端与其建立连接 并向其发送SQL语句 一条SQL语句可能是一个事务的一部分 MySQL可以同时处理客户端的多个事务 一次事务对应着一次完成的状态转换 事务执行完毕后 需要保证数据符合客观逻
  • 622. 设计循环队列

    622 设计循环队列 Java实现循环队列设计 题目描述 设计你的循环队列实现 循环队列是一种线性数据结构 其操作表现基于 FIFO 先进先出 原则并且队尾被连接在队首之后以形成一个循环 它也被称为 环形缓冲器 循环队列的一个好处是我们可以
  • 比MyBatis Generator更强大的代码生成器

    本文为 从零打造项目 系列第一篇文章 首发于个人网站 从零打造项目 系列文章 比MyBatis Generator更强大的代码生成器 SpringBoot项目基础设施搭建 前言 工欲善其事 必先利其器 作为 从零打造项目 系列的第一篇文章
  • 服务器被放入后门文件,服务器被***了怎么办 rkhunter的简单安装及检测后门

    被 了 查看了下 var log messages和last都已经清理 sshd spawn bin echo c d mail s 标题 邮箱地址 邮件来报警 一 接着查看 host allow里面设置 禁止某个可疑ip的访问 二 用rk
  • STM32CubeMX----基本定时器(TIM6、TIM7)

    基本定时器TIM6 TIM7 的相关参数 Activated 激活TIM6 把前面的方框选中局表示激活了TIM6 One Pulse Mode STM32F103定时器的One Pulse Mode是一种特殊的计数模式 它只产生一个脉冲输出
  • win10 安装mysql-5.7.23-winx64

    下载MYSQL 官网下载MYSQL5 7 23版本 链接地址https www mysql com downloads 下载流程图如下 2 安装 直接解压到D盘 解压后的目录结构为 注不需要手动新建data和my ini文件 这两个是通过命
  • 关于element-ui表格table设置header-cell-class-name样式不起作用的原因分析

    在编写表格的时候想给表头添加样式 使用 header cell class name怎么都添加不上样式 检查元素发现连class都没添加上 查了很多资料有人说element之前版本不支持这属性 但我使用的并不是之前的版本啊 有人说是添加sc
  • 柚城后台管理系统--Vue+ElementUi+MySQL+NodeJs

    柚城后台管理系统 介绍 该项目是基于前后端分离的开发模式 基于Vue技术栈的SPA单页面项目 后端主要操作数据库并向前端暴露一些API接口 前端主要负责绘制页面同时 利用ajax调用后端提供的接口 具体实现功能有 用户管理 权限管理 商品管
  • Aviator表达式

    1 正则表达式 匹配 Map
  • 如何在Unity中使用AR Foundation和ARCore创建一个项目并编译到Android 11手机设备中

    最近又开始学如何使用Unity进行AR开发 因为Unity开发的AR Foundation在各种设备 例如Android iOS HoloLens 的原生AR SDK 例如ARCore ARKit Windows 10 SDK 上进行了封装
  • Flutter Overlay、OverlayState、OverlayEntry 叠加 Toast Demo

    叠加组件 可以悬浮在其他组件上边 我们通常使用他开发Toast PopupWindow弹窗等 虽然可以直接创建Overlay 但最常见的是在WidgetsApp或MaterialApp中使用导航器创建的叠加层 使用方法 获取实例 Overl