Flutter仿Boss-6.底部tab切换

效果

实现

  • 图片资源采用boss包中的动画webp资源。
  • Flutter采用Image加载webp动画。

遇到的问题

问题:Flutter加载webp再次加载无法再次播放动画问题

看如下代码:

Image.asset('assets/images/xxx.webp',width: 40.w,height: 30.w,
)

运行的效果:

直接采用上面代码加载webp动画图片的时候,发现首次加载是没有问题的,当切换其他tab再次切换回来的时候,虽然我重新setState了,但是图片不会重新动画加载出来。开始觉得很奇怪,Image都重新创建了,为啥动画不重新执行呢?心想难道有缓存,想当然就给Image定义了key,每次点击按钮给Image设置不同的key,运行发现还是不行,到这一步只好谷歌大法了,看到了很多人遇到这个问题,但是没有给出解决的答案,看来只能源码大法了。

源码走起~~这里省略…

然后发现Image中有内存缓存ImageCache,翻看了源码后发现了解决方案,因为这里我不需要内存缓存,而且这个缓存与Image中的bundle有关系,只要每次创建Image设置不同的bundle就OK了,所以我就把代码尝试修改了下。

Image.asset('assets/images/xxx.webp',bundle: PlatformAssetBundle(),width: 40.w,height: 30.w,
)

再运行下效果:

完整源码

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_project/res/colors/color_res.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';/// BottomBarItem
class BottomBarItem extends StatefulWidget {// Tab 名字final String tabName;// Tab 图标final String tabIcon;// Tab 选中图标final String tabSelectedIcon;// 默认颜色final Color tabTextColor;// 选中颜色final Color tabTextSelectedColor;// Tab对应索引final int tabIndex;// 点击回调final Function(int) onTap;// 是否选中final bool isChecked;// 角标final int badger;const BottomBarItem({Key? key,required this.tabName,required this.tabIcon,required this.tabSelectedIcon,required this.onTap,required this.tabIndex,this.tabTextColor = Colors.grey,this.tabTextSelectedColor = RC.themeColor,this.isChecked = false,this.badger = 0,}) : super(key: key);@overrideState<BottomBarItem> createState() => _BottomBarItemState();
}class _BottomBarItemState extends State<BottomBarItem> {@overrideWidget build(BuildContext context) {return InkWell(child: Stack(children: [Positioned(child: Container(alignment: Alignment.center,child: Column(crossAxisAlignment: CrossAxisAlignment.center,mainAxisAlignment: MainAxisAlignment.start,children: [widget.isChecked? Image.asset(widget.tabSelectedIcon,bundle: PlatformAssetBundle(),width: 40.w,height: 30.w,): Image.asset(widget.tabIcon,width: 40.w,height: 30.w,),Text(widget.tabName,style: TextStyle(color: widget.isChecked? widget.tabTextSelectedColor: widget.tabTextColor,fontSize: 10.sp,),),],),),),Visibility(visible: widget.badger > 0,child: Positioned(right: 30.w,top: 10.w,child: ClipOval(child: Container(alignment: Alignment.center,color: Colors.red,width: 8,height: 8,),),),)],),onTap: () {widget.onTap(widget.tabIndex);setState(() {});},);}
}

具体详情:github.com/yixiaolunhui/flutter_project

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

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

相关文章

Vue3 + Vite 构建组件库发布到 npm

你有构建完组件库后&#xff0c;因为不知道如何发布到 npm 的烦恼吗&#xff1f;本教程手把手教你用 Vite 构建组件库发布到 npm 搭建项目 这里我们使用 Vite 初始化项目&#xff0c;执行命令&#xff1a; pnpm create vite my-vue-app --template vue这里以我的项目 vue3-xm…

GPT提示词分享 —— 中医

&#x1f449; 中医诊断涉及因素较多&#xff0c;治疗方案仅供参考&#xff0c;具体的方子需由医生提供。AI建议不能替代专业医疗意见&#xff0c;如果症状严重或持续&#xff0c;建议咨询专业医生。 我希望你能扮演一位既是老中医同时又是一个营养学专家&#xff0c;我讲描述…

Linux部署FTP服务器

文章目录 什么是FTP协议&#xff1f;Linux上部署FTP服务器安装FTP服务启动FTP服务编辑/etc/vsftpd.conf重新启动服务测试FTP服务 什么是FTP协议&#xff1f; FTP协议是一种基于TCP的文件传输协议&#xff0c;能够实现高效的文件上传和下载功能&#xff0c;最重要的是它能够使用…

LeetCode-322. 零钱兑换【广度优先搜索 数组 动态规划】

LeetCode-322. 零钱兑换【广度优先搜索 数组 动态规划】 题目描述&#xff1a;解题思路一&#xff1a;Python动态规划五部曲&#xff1a;定推初遍举【先遍历物品 后遍历背包】解题思路二&#xff1a;Python动态规划五部曲&#xff1a;定推初遍举【先遍历背包 后遍历物品】解题思…

WPF —— 动画旋转变换

RotateTransform:在二维x-y坐标系统内围绕指定点顺时针旋转某个对象: 在故事板中依赖属性为:RenderTransform.Angle就是要进行旋转的角度 直接给按钮添加 RenderTransformOrigin"0.5,0.5" 是中心位置 。值是比例0 和1&#xff0c; <Button Width"100" H…

组装机械狗电子玩具方案

这款机械狗玩具电子方案结合了现代电子技术和人工智能元素&#xff0c;旨在为用户提供一个高科技、互动性强的娱乐体验。通过不断的软件更新和硬件迭代&#xff0c;机械狗的功能将持续扩展。 一、功能特点&#xff1a; 1、自动巡游&#xff1a;机械狗能够自主在房间内巡游&am…

一文详解手机IP地址如何改变

在互联网时代&#xff0c;手机的IP地址扮演着至关重要的角色。它不仅是手机在网络中的标识&#xff0c;还关系到手机的网络连接、隐私保护以及访问权限等方面。然而&#xff0c;在某些情况下&#xff0c;我们可能需要改变手机的IP地址&#xff0c;以满足特定的需求或解决网络问…

OLAP在线实时 数据分析平台

随着业务的增长&#xff0c;精细化运营的提出&#xff0c;产品对数据部门提出了更高的要求&#xff0c;包括需要对实时数据进行查询分析&#xff0c;快速调整运营策略&#xff1b;对小部分人群做 AB 实验&#xff0c;验证新功能的有效性&#xff1b;减少数据查询时间&#xff0…

逆向案例十七(1)——webpack加如果之前发送公钥如何定位参数,基于中国五矿

网址链接&#xff1a;中国五矿集团有限公司采购电子商务平台 定位到数据包&#xff0c;载荷中param是一个加密参数。 每一个数据包前都有一个public返回公钥。 点击查看返回的数据 如何定位参数加密位置&#xff1f; 复制公钥包url的后面&#xff0c;进行搜索 &#xff0c;查…

Ajax、Fetch、Axios三者的区别

AJax 概念&#xff1a;Asynchronous JavaScript and XML&#xff08;异步的 JavaScript 和 XML&#xff09;。是一种网络请求的概念框架。 主要特点&#xff1a;实现页面局部刷新&#xff0c;主要使用js的XMLHttpRequest请求实现网络请求。 主要缺点&#xff1a;使用函数回调的…

计算机网络---第四天

局域网基本原理 物理层&#xff1a; 双绞线、同轴电缆、光纤、红外线、无线 数据链路层&#xff1a; 以太网&#xff08;主流&#xff09; 令牌环网、FDDI&#xff08;淘汰&#xff09; 网络层&#xff1a; IP&#xff08;主流&#xff09; IPX 、Apple talk&#xff0…

nodejs fs http express express-session jwt mysql mongoose

文件fs模块 读取文件内容 fs.readFile(./file/fs-01.txt, utf8, (err, data) > {if (err) {console.error(err)return}console.log(data) })写入内容到文件 const fs require(fs);const filePath "./file/output.txt";fs.writeFile(filePath, "Hello Wor…

1362: 【C4】【搜索】【回溯】组合的输出

题目描述 排列与组合是常用的数学方法&#xff0c;其中组合就是从n个元素中抽出r个元素(不分顺序且0<r≤n)&#xff0c;我们可以简单地将n个元素理解为自然数1&#xff0c;2&#xff0c;…&#xff0c;n&#xff0c;从中任取r个数。 现要求你用递归的方法输出所有组合。 …

[C++][算法基础]字符串统计(Trie树)

维护一个字符串集合&#xff0c;支持两种操作&#xff1a; I x 向集合中插入一个字符串 x&#xff1b;Q x 询问一个字符串在集合中出现了多少次。 共有 N 个操作&#xff0c;所有输入的字符串总长度不超过 &#xff0c;字符串仅包含小写英文字母。 输入格式 第一行包含整数…

ChatGPT与学术论文写作:创新思维的碰撞

ChatGPT无限次数:点击直达 ChatGPT与学术论文写作&#xff1a;创新思维的碰撞 ChatGPT 是一种基于大型神经网络的自然语言处理模型&#xff0c;其强大的文本生成能力在各个领域都引起了广泛关注。在学术论文写作中&#xff0c;ChatGPT 的应用也为研究人员带来了全新的启发&…

MySQL-10. 存储引擎、视图、mysql管理

10.1 存储引擎 存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的&#xff0c;所以存储引擎也可以称为表类型&#xff08;即存储和操作此表的类型&#xff09;。 存储引擎(Stor…

【MySQL】C# 连接MySQL

C# 连接MySQL 1. 添加MySQL引用 安装完MySQL之后&#xff0c;在安装的默认目录 C:\Program Files (x86)\MySQL\Connector NET 8.0 中查找MySQLData.dll文件。 在Visual Studio 中为项目中添加引用。 2. 引入命名空间 using MySql.Data.MySqlClient;3. 构建连接 private …

【深度学习】pytorch计算KL散度、kl_div

使用pytorch进行KL散度计算&#xff0c;可以使用pytorch的kl_div函数 假设y为真实分布&#xff0c;x为预测分布。 import torch import torch.nn.functional as F# 定义两组数据 tensor1 torch.tensor([[0.1, 0.2, 0.3, 0.2, 0.2],[0.2, 0.1, 0.2, 0.3, 0.2],[0.2, 0.3, 0.1…

SpringBoot使用Zxing生成二维码

SpringBoot使用Zxing生成二维码 什么是Zxing具体实现1. 在pom文件中导入依赖2. 二维码生成工具类3. 控制层和服务层4. 前端 总结参考 什么是Zxing ZXing&#xff0c;一个支持在图像中解码和生成条形码(如二维码、PDF 417、EAN、UPC、Aztec、Data Matrix、Codabar)的库。ZXing(…

spring boot admin搭建,监控springboot程序运行状况

新建一个spring boot web项目&#xff0c;添加以下依赖 <dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-server</artifactId><version>2.3.0</version></dependency> <dependency&…