第四百四十八回

文章目录

  • 1. 知识回顾
  • 2. 使用方法
  • 3. 代码与功能
    • 3.1 示例代码
    • 3.2 功能说明
  • 4. 内容总结

我们在上一章回中介绍了"overlay_tooltip简介"相关的内容,本章回中将介绍OverlayTooltip用法.闲话休提,让我们一起Talk Flutter吧。

在这里插入图片描述

1. 知识回顾

我们在上一章回中介绍了overlay_tooltip包的功能以及包中相关的组件,该包提供了OverlayTooltip和OverlayTooltipScaffold两个组件,前者用来解释页
面中某个功能的用法,后者用来管理页面中的OverlayTooltip。该包主要用来实现首次使用引导,实现该功能的整体思路就是在页面中某个功能所在的位置插入一个
OverlayTooltip,用来解释该功能的使用方法。因为首次使用引导功能包含多个功能的使用方法,所以在整个页面上使用包中的组件(OverlayTooltipScaffold)
来管理所有的OverlayTooltip。

2. 使用方法

  • 创建TooltipController对象,用来管理Tooltip;
  • 创建OverlayTooltipScaffold组件,并且把页面的Scaffold组件赋值给它的builder属性;
  • 配置OverlayTooltipScaffold组件的controller,startWhen和preferredOverlay等属性;
  • 在builder属性对应的scaffold组件中添加OverlayTooltipItem组件,用来显示OverlayTooltip;
  • 在页面销毁时释放TooltipController对象,以名引起内存泄漏;
    上面的步骤中大家重点关注一下startWhen和preferredOverlay属性;前者用来控制OverlayTooltip的启动时机,后者用来显示模糊层,通常会在模糊层上添加
    点击事件,这样就可以在点击模糊层的时候切换不同的OverlayTooltip。大家可能觉得这些内容比较抽象,我们将在后面的小节中通过示例代码来演示。

3. 代码与功能

3.1 示例代码

final TooltipController tooltipController = TooltipController();
bool done = false;
void initState() {tooltipController.onDone(() {setState(() {done = true;});});super.initState();
}
void dispose() {tooltipController.dispose();super.dispose();
}OverlayTooltipScaffold(controller: tooltipController,startWhen: (initValue) async {debugPrint("start tool tip value:$initValue");await Future.delayed(const Duration(seconds: 1,),);debugPrint(" 1s later start tool tip value:$initValue");///这个3是tips的数量,它值是最后一个toolTip的值加1: displayIndex: 2,return initValue == 3 && !done;
},overlayColor: Colors.blueAccent,///第个点击后跳转到下一个tip的时间tooltipAnimationDuration: const Duration(milliseconds: 100),///这个是在模糊层上(除了tooltip位置外)任意位置上点击时的事件,它主要用来切换不同的tooltipspreferredOverlay: GestureDetector(onTap: () {// ///跳转到最后一个tips的时候停止跳转if(tooltipController.nextPlayIndex == 1) {debugPrint("stop tips");tooltipController.dismiss();} else {debugPrint("next tips");tooltipController.next();}},child: Container(width: double.infinity,height: double.infinity,color: Colors.yellowAccent.withOpacity(.8),),),builder: (BuildContext context) {return Scaffold(appBar: AppBar(actions: [SizedBox(width: 80,child: TextButton(onPressed: () {},child: const Text("action1")),),///在这里加入toolTip 1OverlayTooltipItem(displayIndex: 0,tooltipVerticalPosition: TooltipVerticalPosition.TOP ,tooltip: (tooltipController) {debugPrint("show tool tip tips");return const Padding(padding: EdgeInsets.all(16),///toolTip显示的内容,可以看作是对child中内容的解析,tooltip消失后它会随之消失child: Text("this is tool tip1"),);},///需要显示toolTip的内容,这个值会一直显示在,它是页面上正常的内容child: const Text("index 0 Tip")),],),body: Column(children: [///充当标题const Center(child: Text(" Picked image and video"),),ElevatedButton(onPressed: () {},child: const Text("Pick Image by Camera"),),///在这里加入toolTip 2OverlayTooltipItem(displayIndex: 1,tooltip: (tooltipController) {debugPrint("show tool tip tips");return const Padding(padding: EdgeInsets.all(16),child: Text("this is tool tip2",),);},child: const Text("index 1 Tip")),const SizedBox(height: 120,),///在这里加入toolTip 3OverlayTooltipItem(displayIndex: 2,tooltipVerticalPosition: TooltipVerticalPosition.BOTTOM,tooltip: (tooltipController) {debugPrint("show tool tip tips2");return Padding(padding: const EdgeInsets.all(16),///toolTip显示的内容,可以看作是对child中内容的解析,tooltip消失后它会随之消失child: Column(children: [///这个只是为了显示漂亮而加的装饰框Container(color: Colors.greenAccent,padding: const EdgeInsets.all(8),child: const Text("this is tool tip2")),///专门指定了一个按钮点击时切换到下一个tipElevatedButton(onPressed:() { tooltipController.next();},style: ElevatedButton.styleFrom(shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16),side: const BorderSide(color: Colors.white,width: 2,),),backgroundColor: Colors.black,foregroundColor: Colors.white),child: const Text("Next",),),],),);},///需要显示toolTip的内容,这个值会一直显示在,它是页面上正常的内容///这个只是为了显示漂亮而加的装饰框child: Container(padding: const EdgeInsets.all(8),decoration: BoxDecoration(borderRadius: BorderRadius.circular(90),color: Colors.white),child: const Text("index 2 Tip"))),],),);},
);

上面的示例代码完全按照实现方法中的内容来实现,我们在代码中的关键位置添加了注释,这样方便大家理解代码。代码中添加了三个OverlayTooltipItem,分别位于
页面的AppBar,按钮上。也就是说这些toolTip会对AppBar和按钮做功能解释,不过示例中没有对功能做解释,只是简单地显示一个文本。编译并且运行上面的程序可以
看到整个页面呈现模糊层,首先是在页面的AppBar位置显示ToolTip,点击模糊层后切换到下一个ToolTip,直到最后一个ToolTip时停止显示模糊层,页面恢复正常。
我在这里注不演示程序的运行结果了,建议大家自己动手去实践一下。

3.2 功能说明

本小节中我们重点说一下示例代码中的相关功能,这些功能比较重要,而且包含很多细节:

  • 启动功能:该功能对应startWhen属性,它除了在页面的initState()方法中启动Overlay外,还包含toolTip的数量,因为该属性是方法类型,所以通过方法的
    参数传递toolTip的数量;当该属性对应的方法返回true时才可以启动Overlay.示例代码中对启动条件加了两个条件:一个是done为true,它表示页面初始化完成了;
    另外一个是tooltip的数量等于3.它表示显示的toolTip的实际页面中的tooltip数量相同。
  • 模糊层:该功能主要显示一个模糊图层,可以控制图层的颜色和透明度,还可以在图层响应事件,示例代码中就添加了事件响应功能;
  • OverlayTooltipItem的tooltip属性:它是Widget类型,可以自定义组件,也就是说对某个功能进行解释时可以显示成方矩形文本,圆形文件,或者向对话框窗口
    一样,示例代码中前两个toolTip功能比较简单,第三个toolTip做了包含详细的自定义功能。

4. 内容总结

最后,我们对本章回的内容做一个全面总结:

  • 我们可以使用OverlayTooltip来解释页面中的某个功能;
  • 我们可以使用OverlayTooltipScaffold管理页面中所有的OverlayTooltip;
  • 在使用OverlayTooltipScaffold时注意它的启动功能,模糊层功能;
  • 在使用OverlayTooltip时可以用它默认的文本来解释功能,也可以添加自定义的组件;
    看官们,与"OverlayTooltip用法"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/801463.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MP4视频如何转OGV视频格式?视频格式转换的方法

一,什么是OGV视频格式 OGV是一个使用OGG开源格式的容器。 OGG不受软件专利的限制,这是其创建的主要目标之一。 OGV格式用于存储带或不带音频的视频流,而视频流又可以用Opus,Vorbis,Theora或Speex算法压缩。该格式用于…

以XX公司为例的Acrel1000DP分布式光伏监控系统在5.98MW分布式光伏10KV并网系统的应用

分布式光伏监控系统 目前,光伏电站中装设的电力二次系统主要有光伏后台监控系统、计量系统、远动通讯屏、调度数据网屏、防孤岛保护装置、电能质量在线监测装置、频率电压紧急控制装置等,部分光伏电站还建设有向发电集团传输数据的系统。 分布式光伏监…

初识SpringMVC

一、什么是MVC MVC是一种软件架构模式(是一种软件架构设计思想,不止Java开发中用到,其它语言也需要用到),它将应用分为三块: M:Model(模型)V:View&#xff08…

xss.pwnfunction-Ligma

首先用jsFuckhttps://jsfuck.com/ [][(![][])[[]](![][])[![]![]](![][])[![]](!![][])[[]]][([][(![][])[[]](![][])[![]![]](![][])[![]](!![][])[[]]][])[![]![]![]](!![][][(![][])[[]](![][])[![]![]](![][])[![]](!![][])[[]]])[![][[]]]([][[]][])[![]](![][])[![]![]!…

设计模式之解释器模式(上)

解释器模式 1)概述 1.定义 定义一个语言的文法,并且建立一个解释器来解释该语言中的句子,这里的“语言”是指使用规定格式和语法的代码。 2.结构图 3.角色 AbstractExpression(抽象表达式):在抽象表达…

【uniapp】开发微信小程序 — 注意事项

底部导航栏 (tabBar) 图标的正确做法: 1、图片的标准尺寸为 81px * 81px,该尺寸在官方的文档中有明确的说明,可以参考微信小程序全局配置文档中对 iconPath 属性的说明。 2、为了保持良好的间距,图片的内容区域设置 60px* 比较好&…

java的封装

在Java中,封装是面向对象编程中的一种重要概念,它指的是将数据和方法打包在一个单一的单位(类)中,并对外部隐藏对象的内部细节。封装通过将类的成员变量声明为私有的,并提供公共的方法来访问和修改这些变量…

nacos分布式程序开发实例

1.通过windows docker desktop 完成 nacos 的安装/启动/配置 (1)先安装docker desktop docker-toolbox-windows-docker-for-windows-stable安装包下载_开源镜像站-阿里云 (2)配置docker 国内镜像源 Docker 镜像加速 | 菜鸟教程…

无尽加班何时休--状态模式

1.1 加班,又是加班! 公司的项目很急,所以要求加班。经理把每个人每天的工作都排得满满的,说做完就可以回家,但是没有任何一个人可以在下班前完成的,基本都得加班,这就等于是自愿加班。我走时还有…

点击上传文件

一、页面样式: (1)点击前: (2)点击后: 设计:①自定义elementPlus图标;②使用Tooltip实现鼠标悬浮按钮上出现文字提示;③上传与更换的切换样式;…

【C++】类和对象①(什么是面向对象 | 类的定义 | 类的访问限定符及封装 | 类的作用域和实例化 | 类对象的存储方式 | this指针)

目录 前言 什么是面向对象? 类的定义 类的访问限定符及封装 访问限定符 封装 类的作用域 类的实例化 类对象的存储方式 this指针 结语 前言 最早的C版本(C with classes)中,最先加上的就是类的机制,它构成…

不使用 Docker 构建 Triton 服务器并在 Google Colab 平台上部署 HuggingFace 模型

Build Triton server without docker and deploy HuggingFace models on Google Colab platform EnvironmentBuilding Triton serverDeploying HuggingFace models客户端推荐阅读参考 Environment 根据Triton 环境对应表 ,Colab 环境缺少 tensorrt-8.6.1&#xff0…

如何客观评价5G的现状?

前几天,在知乎上看到一个帖子,热度挺高: 看了一下帖子的回答,基本上都在骂5G。 作为通信行业从业者,我说说我自己的看法。大家姑且听听,一起交流一下。 我们目前所处的这个时代,有一个很大的特点…

使用Node.js模拟执行JavaScript

使用Node.js模拟执行JavaScript 模拟执行的是JavaScript,而且依赖的是Node.js,为什么不直接用Node.js来尝试JavaScript的执行呢?其实是完全可行的。 准备工作 确保已经正确安装好了Node.js。安装流程可以在小蜜蜂AI网站获取。 模拟执行 …

Day17_学点JavaEE_转发、重定向、Get、POST、乱码问题总结

1 转发 转发:一般查询了数据之后,转发到一个jsp页面进行展示 req.setAttribute("list", list); req.getRequestDispatcher("student_list.jsp").forward(req, resp);2 重定向 重定向:一般添加、删除、修改之后重定向到…

Flutter如何集成到已有iOS工程上

大家好,我是咕噜铁蛋,今天我将和大家分享一个实用的技术教程——如何将Flutter集成到已有的iOS工程中。Flutter是Google推出的一款开源的移动UI框架,它允许开发者使用Dart语言来开发高性能、美观的原生应用,并支持iOS和Android两大…

Walmart.com DSV XML对接需求

此前的文章Walmart.com DSV EDI对接需求中,为大家介绍了如果选择传输EDI文件需要做的准备与需求。本文将为大家介绍Walmart.com 与DSV(Drop Ship Vender)之间传输XML文件的需求。与EDI相比,XML文件的处理难度相对低一些。无论企业…

stm32GPO的相关操作

GPIO的使用 1.GPIO八种工作模式1.1 上拉输入1.2 下拉输入1.3 浮空输入1.4 模拟输入1.5 推挽输出1.6 开漏输出1.7 复用推挽输出1.8 复用开漏输出 2.相关寄存器2.1 寄存器配置IO 3.相关库函数 1.GPIO八种工作模式 保护二极管的作用:用来保护IO,一般情况IO的…

【Linux】TCP编程{socket/listen/accept/telnet/connect/send}

文章目录 1.TCP接口1.1socket文档 1.2listen拓:端口号8080 1.3accept拓:今天全局函数 1.4读写接口1.5telnet1.一个客户端2.两个客户端 1.6ulimit -a1.7常识回顾1.8connect1.9拓:客户端的ip和地址什么时候被分配?1.10拓&#xff1a…

设计模式之命令模式讲解

概念:命令模式(Command Pattern)又称行动(Action)模式或交易(Transaction)模式。将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请…