当前位置: 首页 > news >正文

Flutter笔记:光影动画按钮、滚动图标卡片组等

Flutter笔记
scale_design更新:光影动画按钮、滚动图标卡片组

作者李俊才 (jcLee95):https://blog.csdn.net/qq_28550263
邮箱 :291148484@163.com
本文地址:https://blog.csdn.net/qq_28550263/article/details/134339302



1. 关于

之前发布过一个 scale_design 模块,主要提供的是一个基于 dp 尺寸的设计稿解决方案,记录在我的博客【scale_design - 设计师尺寸适配工具与常用组件库】,地址:https://jclee95.blog.csdn.net/article/details/134210226。我打算将一些常用的组件,对于少数常用的原生组件,如 Text、TextSpan、以及各种原生的Button,已经提供了对应的方案。

在 scale_design 的 example 示例 项目中,展示了基于该模块初始化到使用这些组件完成的一些简单面和部分组件的展示,比如一个极简的登陆页面:
在这里插入图片描述
等等。

后续不断将我项目中所封装过的一些常用效果和组件添加进来。本文带来的是基于 dp 的三个组件:

  1. 循环滚动文字组件;
  2. 光影按钮组件;
  3. 图标按钮组组件

下面一一记录。

注意:不可单独使用这些组件,它们需要在项目开始时按照 scale_design 提供的方式进行初始化。具体可以参考 scale_design文档或内部的 example

2. 循环滚动文字组件 SlideText

循环滚动文字常用于封装一些需要展示多个文本的场景,算得上是基本组件中的基本组件。比如某宝首页的伪搜索框:

在这里插入图片描述

这其中的文本就是不断地滚动地。具体来说,有多个不同的小文本,前一个文本向上移除的同时、后一个文本向上移入中间位置。这可以使用 scale_design 库中新增的 SlideText 组件实现,比如:

SlideText(['你有未读消息,请尽快处理1','你有未读消息,请尽快处理2','你有未读消息,请尽快处理3','你有未读消息,请尽快处理4',],
)

看起来效果是这样的:

在这里插入图片描述

其中,SlideText默认情况下是向上动画的,但是实际上是可以通过指定 isScrollUp 参数进行控制

3. 光影按钮组件 ShinyButton

这个组件完全是受启发于我之前写前端代码时使用过光影按钮的效果,但是前端是使用CSS实现的。于是我使用 Flutter 的动画复刻了一个类似的效果。

一个例子为:

class ShinyButtonExample extends StatelessWidget {const ShinyButtonExample({super.key});Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: T('光影按钮',fontSize: 18,),),body: Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[// 当仅传递 onPressed 的时候ShinyButton(onPressed: () {}),const SizedBox(height: 30),// 如果没有任何参数则成为禁用状态ShinyButton(),const SizedBox(height: 30),// 你也可以自定义圆角、颜色、子元素等参数ShinyButton(borderRadius: 20,colors: const [Color.fromARGB(255, 112, 255, 117),Color.fromARGB(255, 0, 81, 3),Color.fromARGB(255, 112, 255, 117),],child: T('自定义一些属性',color: Colors.amber,fontSize: 20,fontWeight: FontWeight.bold,),onPressed: () {print('Button Pressed');},),const SizedBox(height: 30),// 使用 disabled 属性禁用按钮ShinyButton(borderRadius: 20,width: 300,colors: const [Color.fromARGB(255, 112, 255, 117),Color.fromARGB(255, 0, 81, 3),Color.fromARGB(255, 112, 255, 117),],disabled: true,onPressed: () {},child: T('使用 disabled 属性禁用按钮',color: Colors.white,fontSize: 20,fontWeight: FontWeight.bold,),),const SizedBox(height: 30),// 一个登陆按钮的示例ShinyButton(borderRadius: 60,width: 310,colors: const [Color.fromARGB(255, 255, 224, 112),Color.fromARGB(255, 220, 77, 0),Color.fromARGB(255, 255, 224, 112),],onPressed: () {},child: T('登 陆',color: Colors.white,fontSize: 23,fontWeight: FontWeight.bold,),),],),),);}
}

其效果如下:

在这里插入图片描述

4. 图标按钮组组件 ScrollableIconsCard

实际上,ScrollableIconsCard组件 受启发于某宝首页的 图标按钮组组件,例如:

// 定义一组图标与触碰图标时的回调,假设下main这些图标在你的项目中存在
List<Map<String, Object>> datas = [{'img': 'assets/svgs/捡漏.svg', 'title': '捡漏', 'onTap': () => print('捡漏')},{'img': 'assets/svgs/摇现金.svg', 'title': '摇现金', 'onTap': () => print('捡漏')},{'img': 'assets/svgs/聚补贴.svg', 'title': '聚补贴', 'onTap': () => print('捡漏')},{'img': 'assets/svgs/领券中心.svg', 'title': '领券中心', 'onTap': () => print('捡漏')},{'img': 'assets/svgs/肥鱼.svg', 'title': '肥鱼', 'onTap': () => print('捡漏')},{'img': 'assets/svgs/金币.svg', 'title': '金币', 'onTap': () => print('捡漏')},{'img': 'assets/svgs/工厂购.svg', 'title': '工厂购', 'onTap': () => print('捡漏')},{'img': 'assets/svgs/小时达.svg', 'title': '小时达', 'onTap': () => print('捡漏')},{'img': 'assets/svgs/全球购.svg', 'title': '全球购', 'onTap': () => print('捡漏')},{'img': 'assets/svgs/全部频道.svg', 'title': '全部频道', 'onTap': () => print('捡漏')},{'img': 'assets/svgs/活动日历.svg', 'title': '活动日历', 'onTap': () => print('捡漏')},{'img': 'assets/svgs/减肥助手.svg', 'title': '减肥助手', 'onTap': () => print('捡漏')},{'img': 'assets/svgs/购1001铺.svg','title': '购1001铺','onTap': () => print('捡漏')},{'img': 'assets/svgs/小美庭院.svg', 'title': '小美庭院', 'onTap': () => print('捡漏')},{'img': 'assets/svgs/动物餐厅.svg', 'title': '动物餐厅', 'onTap': () => print('捡漏')},{'img': 'assets/svgs/购票票.svg', 'title': '购票票', 'onTap': () => print('捡漏')},{'img': 'assets/svgs/地狗好屋.svg', 'title': '地狗好屋', 'onTap': () => print('捡漏')},{'img': 'assets/svgs/飞鸟旅行.svg', 'title': '飞鸟旅行', 'onTap': () => print('捡漏')},{'img': 'assets/svgs/资质规则.svg', 'title': '资质规则', 'onTap': () => print('捡漏')},{'img': 'assets/svgs/分类.svg', 'title': '分类', 'onTap': () => print('捡漏')},
];ScrollableIconsCard(datas: datas,
),

在这里插入图片描述
你可以指定行数,这需要通过传入 amount 参数

ScrollableIconsCard(amount: 3,datas: datas,
),

其中构造函数:

  const ScrollableIconsCard({super.key,required this.datas,this.amount = 2, // 每一列的单元数量,默认为3this.spoutWidth = 80, // 滑槽宽度this.sliderWidth = 40, // 滑块宽度,默认为40this.sliderHeight = 7, // 滑槽和滑块的高度,默认为7this.spoutColor = const Color.fromARGB(255, 183, 183, 183),  // 滑槽的颜色this.sliderColor = const Color.fromARGB(255, 255, 134, 13), // 滑块的颜色});

相关文章:

Flutter笔记:光影动画按钮、滚动图标卡片组等

Flutter笔记 scale_design更新&#xff1a;光影动画按钮、滚动图标卡片组 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263…...

【论文】利用移动性的比例公平蜂窝调度测量和算法

&#xff08;一支笔一包烟&#xff0c;一节论文看一天 &#xff09;&#xff08;一张纸一瓶酒&#xff0c;一道公式推一宿&#xff09; 摘要1. 引言2. 相关工作3. 模型和问题公式4. 预测FPF调度 &#xff08; P F &#xff09; 2 S &#xff08;PF&#xff09;^2S &#xff08;…...

内存条选购注意事项(电脑,笔记本)

电脑内存条的作用、选购技巧以及注意事项详解 - 郝光明的个人空间 - OSCHINA - 中文开源技术交流社区 现在的电脑直接和内存条联系 电脑上的所有输入和输出都只能依靠内存条 现在买双条而不是单条 买两个相同的内存条最好 笔记本先分清是低电压还是标准电压&#xff0c;DD…...

ChatGPT 宕机?OpenAI 将中断归咎于 DDoS 攻击

您的 ChatGPT 已关闭吗&#xff1f;您是否遇到 ChatGPT 问题&#xff0c;例如连接问题或遇到“长响应时出现网络错误”&#xff1f;– ChatGPT 遭受了一系列 DDoS 攻击&#xff0c;显然是由匿名苏丹组织策划的。 OpenAI 的 ChatGPT 是一款流行的人工智能聊天机器人&#xff0c;…...

go单元格测试

编写单元测试&#xff08;Unit Test&#xff09;是一种测试方法&#xff0c;用于验证代码中的单个功能单元&#xff08;通常是函数或方法&#xff09;是否按照预期工作。以下是编写单元测试的一般步骤&#xff1a; 1. 创建测试文件&#xff1a;在项目的测试目录中创建一个新的…...

JavaScript理解表达式和语句的含义

JavaScript中的表达式和语句都是用于完成特定计算或操作的语言构件&#xff0c;但它们有着不同的含义和用途&#xff1a; 表达式(expression)是用来计算并返回一个值的代码片段&#xff0c;可以包含变量、数值、函数调用、运算符等。表达式的运算结果可以被赋值给变量、作为函数…...

Visual Studio导入Wiinform项目文件,引用显示黄色感叹号

参考博客 第一步&#xff1a; 开程序包管理控制台 vs->工具->NuGet包管理器->程序包管理控制台 Update-Package –reinstall 第二步&#xff1a; 删除.csproj 文件片段 // 整个模块全部删除 包括标签中所含有的任何内容 <Target Name"EnsureNuGetPackage…...

深入研究SVN代码检查的关键工具:svnchecker vs. SonarQube,选择最适合你的代码检查工具

目录 一、SVN代码检查(整合svnchecker)1、创建SVN代码库2、下载安装包3、修改SVN配置4、新建代码检查配置文件(名称自定义)5、hooks目录添加配置文件6、设置只对Java文件进行检查7、测试 二、SonarQube代码检测1、什么是SonarQube2、MySQL数据库的安装3、SonarQube服务端软件安…...

博客积分上一万一千了

博客积分上一万一千了 充满自信&#xff0c;继续前进。...

docker 构建并运行 python项目

此处不重述docker安装及基本命令&#xff0c;可参考另一篇文章centos7 安装 docker_centos7 docker network rm-CSDN博客文章浏览阅读111次。1、 1.1 docker 官网 Empowering App Development for Developers | DockerLearn how Docker helps developers bring their ideas to …...

django建站过程(4)创建文档显示页面

django建站过程&#xff08;4&#xff09;创建文档显示页面 创建文档显示页面项目主文件夹schoolapps中的文件urls.py在APP“baseapps”中创建url.py文件编写视图模板继承bootstrap创建head.html创建doclist.html创建docdetail.html 使用 markdown 编辑器安装模块Model 模型的d…...

uniapp本地存储的几种方式

在UniApp中&#xff0c;你可以使用本地存储来保存和获取数据&#xff0c;以便在应用的不同页面之间共享数据或在应用关闭后仍然保存数据。UniApp提供了两种主要的本地存储方式&#xff1a;uni.setStorage 和 uni.getStorage&#xff0c;以及 uni.removeStorage 用于删除数据。这…...

74hc595模块参考

74hc595模块参考 8位串行并行输出&#xff08;SIPO&#xff09;移位寄存器 使用74HC595移位寄存器扩展微控制器上的输出引脚数量。如果你需要扩充输入引脚的数量那么你需要74HC165移位寄存器。 SER&#xff08;串行输入&#xff09;引脚用于一次一位地将数据发送到移位寄存器…...

【Unity细节】Failed importing package???Unity导包失败?

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 &#x1f636;‍&#x1f32b;️收录于专栏&#xff1a;unity细节和bug &#x1f636;‍&#x1f32b;️优质专栏 ⭐【…...

【问题记录】docker pull 镜像的时候 devel 版本和无 devel 版本的差别

这两个Docker镜像的主要区别在于是否包含了 CUDA 的开发工具集&#xff08;CUDA Toolkit&#xff09;。 docker pull cnstark/pytorch:1.10.0-py3.8.16-cuda11.1.1-ubuntu20.04这个镜像只包含运行时所需的库文件&#xff0c;并没有额外安装CUDA Toolkit。 docker pull cnstar…...

前后端跨域/ 同时运行两个项目

&#xff08;1&#xff09;后端配置端口 server:port: 90 &#xff08;2&#xff09;前端 配置跨域资源共享&#xff08;CORS&#xff09; devServer: {disableHostCheck: true,port: 8088,proxy: {/openapi: {target: http://192.168.31.109:90,ws: false,changeOrigin: true…...

进制的转换

1、进制的转化 &#xff08;1&#xff09;进制介绍 对于进制&#xff0c;有四种表示方法&#xff1a; 1&#xff09;二进制&#xff1a;0,1&#xff0c;满2进1&#xff0c;C语言中没有二进制常数的表示方法 2&#xff09;八进制&#xff1a;0-7&#xff0c;满8进1 3&#xff0…...

计算机简介

一、是什么 计算机&#xff08;computer&#xff09;俗称电脑&#xff0c;是现代一种用于高速计算的电子计算机器&#xff0c;可以进行数值计算&#xff0c;又可以进行逻辑计算&#xff0c;还具有存储记忆功能。是能够按照程序运行&#xff0c;自动、高速处理海量数据的现代化…...

《红蓝攻防对抗实战》十一.内网穿透之利用SSH协议进行隧道穿透

利用DNS协议进行隧道穿透 一.前言二.前文推荐三. 利用SSH协议进行隧道穿透1.SSH隧道-本地端口转发2.SSH隧道-远程端口转发3.SSH隧道-动态端口转发 四.本篇总结 一.前言 SSH&#xff08;Secure Shell&#xff09;协议是一种加密的网络传输协议&#xff0c;它可以在不安全的网络…...

工商银行卡安全码怎么看

工商银行的安全码&#xff0c;作为一项至关重要的安全措施&#xff0c;旨在保护用户的银行账户和交易安全。为了查看工商银行的安全码用户需要按照以下步骤操作&#xff1a; 首先&#xff0c;用户需要使用电脑或手机访问工商银行的网上银行平台。在平台首页&#xff0c;用户需要…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)

第一篇&#xff1a;Liunx环境下搭建PaddlePaddle 3.0基础环境&#xff08;Liunx Centos8.5安装Python3.10pip3.10&#xff09; 一&#xff1a;前言二&#xff1a;安装编译依赖二&#xff1a;安装Python3.10三&#xff1a;安装PIP3.10四&#xff1a;安装Paddlepaddle基础框架4.1…...