Flutter Slider自定义滑块样式 Slider的label标签框常显示

1、自定义Slider滑块样式

Flutter Slider控件的滑块系统样式是一个圆点,thumbShape默认样式是RoundSliderThumbShape,如果想要使用其它的样式就需要自定义一下thumbShape;

例如需要一个上图样式的(圆点+半透明圆形边框)的滑块:


class CustomSliderThumbShape extends SliderComponentShape {final Size size = const Size(40, 40);@overrideSize getPreferredSize(bool isEnabled, bool isDiscrete) {return size;}@overridevoid paint(PaintingContext context, Offset center, {required Animation<double> activationAnimation, required Animation<double> enableAnimation, required bool isDiscrete, required TextPainter labelPainter, required RenderBox parentBox, required SliderThemeData sliderTheme, required TextDirection textDirection, required double value, required double textScaleFactor, required Size sizeWithOverflow}) {final Canvas canvas = context.canvas;final Paint paint =  Paint();paint.color = const Color(0XFFEF5133);paint.isAntiAlias = true;final Paint paint2 =  Paint();paint2.color = const Color(0x30EF5133);paint2.isAntiAlias = true;//绘制滑块canvas.drawCircle(center, 5, paint);canvas.drawCircle(center, 14, paint2);}
}

然后再使用 SliderThemeData控件的 thumbShape属性设置一下就行了;

          SliderTheme(data: SliderThemeData(thumbShape: CustomSliderThumbShape(),),child: Slider(),),

2、Slider的label标签框常显示

上图,Slider的label标签只有按住滑动块时才会显示,松开手指后label标签就会消失,设置 showValueIndicator: ShowValueIndicator.always,也不能一直显示;

若要Slider的label标签框常显示,可以把label标签框和滑块写在一起,使用SliderComponentShape自定义一下布局;

class IndicatorSliderThumbShape extends SliderComponentShape {IndicatorSliderThumbShape(this.msg);String msg;@overrideSize getPreferredSize(bool isEnabled, bool isDiscrete) {return const Size(15, 40);}TextPainter labelTextPainter = TextPainter()..textDirection = TextDirection.ltr;@overridevoid paint(PaintingContext context, Offset center, {required Animation<double> activationAnimation, required Animation<double> enableAnimation, required bool isDiscrete, required TextPainter labelPainter, required RenderBox parentBox, required SliderThemeData sliderTheme, required TextDirection textDirection, required double value, required double textScaleFactor, required Size sizeWithOverflow}) {final Canvas canvas = context.canvas;final Paint paint =  Paint();paint.color = const Color(0XFFEF5133);paint.isAntiAlias = true;//绘制圆点滑块canvas.drawCircle(center, 4, paint);final Paint paint2 =  Paint();paint2.color = const Color(0X30EF5133);paint2.isAntiAlias = true;//绘制半透明滑块canvas.drawCircle(center, 12, paint2);//在thumb上面添加一个自定义labels//绘制labels的圆角矩形final Paint paint3 =  Paint();paint3.color = const Color(0xFF2C28E8);paint3.isAntiAlias = true;var rr =  RRect.fromLTRBXY(center.dx+30, center.dy-20, center.dx-30, center.dy-50 , 8,8);canvas.drawRRect(rr, paint3);//绘制labels的三角形指示块final Paint paint4 =  Paint();paint4.color = const Color(0xFF28CD41);paint4.isAntiAlias = true;final path = Path();path.moveTo(center.dx, center.dy-10,);path.lineTo(center.dx-10, center.dy-20);path.lineTo(center.dx+10, center.dy-20,);path.close();canvas.drawPath(path, paint4);//绘制labels的文字内容labelTextPainter.text = TextSpan(text: msg,style: const TextStyle(fontSize: 14, color: Colors.white));labelTextPainter.layout();labelTextPainter.paint(canvas,center.translate(-labelTextPainter.width / 2, -43));}
}

label框的文字、指示器箭头、圆角背景框都可以自定义;

同样shape设置一下就可以了:

      SliderTheme(data: SliderThemeData(thumbShape: IndicatorSliderThumbShape('xx-km'),),child: Slider(),),

下面是Slider的全部代码:

class TestSliderPage extends StatefulWidget {const TestSliderPage({Key? key}) : super(key: key);@overrideState<TestSliderPage> createState() => _TestSliderPageState();
}class _TestSliderPageState extends State<TestSliderPage> {double _sliderValue = 0;final List<int> _slideValues = [1,3,5,10,20,30,40,50,60,70,80,90,100];@overrideWidget build(BuildContext context) {return BaseTopView(title: "Slider",body:Container(color: color_fff,child: SliderTheme(data: SliderThemeData(thumbShape: IndicatorSliderThumbShape('${_slideValues[_sliderValue.toInt()]}km'),trackHeight: ScreenUtils.getDip(1.5),thumbColor: color_EF5133,//滑块颜色activeTrackColor: color_EF5133,//已选中颜色inactiveTrackColor: color_EF5133.withAlpha(15),//未选中颜色activeTickMarkColor: Colors.transparent,//指示器点颜色inactiveTickMarkColor: Colors.transparent,//指示器点颜色valueIndicatorColor: color_EF5133,//气泡颜色overlayColor: color_EF5133.withAlpha(15),showValueIndicator: ShowValueIndicator.never,valueIndicatorTextStyle: TextStyle(fontSize: 11),),child: Slider(value: _sliderValue,min: 0,max: 12,onChanged: (newValue) {setState(() {_sliderValue = newValue;});},label: '${_slideValues[_sliderValue.toInt()]}km',divisions: _slideValues.length - 1,),),),);}
}

随手记录、、、

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

线性代数:向量空间

目录 向量空间 Ax 0 的解空间S Ax b 的全体解向量所构成集合不是向量空间 基、维数、子空间 自然基与坐标 例1 例2 向量空间 Ax 0 的解空间S Ax b 的全体解向量所构成集合不是向量空间 基、维数、子空间 自然基与坐标 例1 例2

ElasticStack安装(windows)

官网 : Elasticsearch 平台 — 大规模查找实时答案 | Elastic Elasticsearch Elastic Stack(一套技术栈) 包含了数据的整合 >提取 >存储 >使用&#xff0c;一整套! 各组件介绍: beats 套件:从各种不同类型的文件/应用中采集数据。比如:a,b,cd,e,aa,bb,ccLogstash:…

五种多目标优化算法(NSWOA、MOJS、MOAHA、MOPSO、NSGA2)性能对比(提供MATLAB代码)

一、5种多目标优化算法简介 1.1NSWOA 1.2MOJS 1.3MOAHA 1.4MOPSO 1.5NSGA2 二、5种多目标优化算法性能对比 为了测试5种算法的性能将其求解9个多目标测试函数&#xff08;zdt1、zdt2 、zdt3、 zdt4、 zdt6 、Schaffer、 Kursawe 、Viennet2、 Viennet3&#xff09;&#xff0…

Google插件Sider: ChatGPT Sidebar + GPTs GPT-4 Turbo Sider

Sider: ChatGPT Sidebar 可以使得满屏都是机器人&#xff0c;左侧栏可以打开访问GPT-4. 配置跳板机地址 google 搜索的右侧也有打开

关于在分布式环境中RVN和使用场景的介绍4

简介 在前面的文档中&#xff0c;我们介绍了RVN的概念&#xff0c;通过RVN可以解决的某类问题和使用技巧&#xff0c;以及处理RVN的逻辑的具体实现。在本文中&#xff0c;我们将要介绍关于如何使用RVN解决另一种在分布式系统中常出现的问题。 问题 假设我们创建了一个servic…

数据驱动决策:掌握高效数据分析的七大步骤

在这个数据驱动的时代&#xff0c;无论是企业决策还是个人发展&#xff0c;数据分析都扮演着至关重要的角色。然而&#xff0c;想要从海量数据中提炼出有价值的信息&#xff0c;并不是一件容易的事情。本文为你详细解读高效数据分析&#xff0c;让你的数据开口说话&#xff0c;…

ICRA 2024:UC伯克利、斯坦福大学等共同开发机器人强化学习套件(SERL),20分钟学会装配电路板!

近年来&#xff0c;机器人强化学习技术领域取得显著的进展&#xff0c;例如四足行走&#xff0c;抓取&#xff0c;灵巧操控等&#xff0c;但大多数局限于实验室展示阶段。将机器人强化学习技术广泛应用到实际生产环境仍面临众多挑战&#xff0c;这在一定程度上限制了其在真实场…

__proto__和protype的区别

__proto__和prototype是JavaScript中两个重要的概念&#xff0c;它们在对象原型链和继承中起着关键作用。下面将详细解释它们之间的区别&#xff1a; 定义和性质&#xff1a; prototype&#xff1a;这是每一个函数创建后都会拥有的一个属性&#xff0c;它指向函数的原型对象。这…

集合可视化:rainbow box与欧拉图

论文&#xff1a;A new diagram for amino acids: User study comparing rainbow boxes to Venn/Euler diagram 最近偶然看到了这篇论文&#xff0c;觉得很有意思&#xff0c;针对的任务是集合数据的可视化。 我们用示例来说明&#xff0c;比如图二的欧拉图&#xff0c;展示的…

安卓开发:挑战每天发布一个封装类02--Wav录音封装类AudioChannel 1.0

简介 库名称&#xff1a;AudioChannel 版本:1.0 由于项目需求录音并base64编码存到服务器中&#xff0c;就顺手改装了一个别人的封装类 原封装类地址:Android AudioRecord音频录制wav文件输出 - 简书 (jianshu.com) 描述&#xff1a;此封装类基于AudioRecord实现wav的音频…

2024年雾锁王国Enshrouded服务器搭建方法,最新教程

阿里云雾锁王国服务器搭建教程是基于计算巢服务&#xff0c;3分钟即可成功创建Enshrouded游戏服务器&#xff0c;阿里云8核32G雾锁王国专用游戏服务器90元1个月、271元3个月&#xff0c;阿里云服务器网aliyunfuwuqi.com亲自整理雾锁王国服务器详细搭建教程&#xff1a; 一、前…

MyBatis-Plus:通用分页实体封装

分页查询实体&#xff1a;PageQuery package com.example.demo.demos.model.query;import com.baomidou.mybatisplus.core.metadata.OrderItem; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.Data; import org.springframework.util.St…

设计模式浅析(六) ·命令模式

设计模式浅析(六) 命令模式 日常叨逼叨 java设计模式浅析&#xff0c;如果觉得对你有帮助&#xff0c;记得一键三连&#xff0c;谢谢各位观众老爷&#x1f601;&#x1f601; 命令模式 概念 命令模式&#xff08;Command Pattern&#xff09;是一种行为设计模式&#xff0c…

实战打靶集锦-025-HackInOS

文章目录 1. 主机发现2. 端口扫描3. 服务枚举4. 服务探查5. 提权5.1 枚举系统信息5.2 探索一下passwd5.3 枚举可执行文件5.4 查看capabilities位5.5 目录探索5.6 枚举定时任务5.7 Linpeas提权 靶机地址&#xff1a;https://download.vulnhub.com/hackinos/HackInOS.ova 1. 主机…

万界星空科技MES系统,实现数字化智能工厂

万界星空科技帮助制造型企业解决生产过程中遇到的生产过程不透明&#xff0c;防错成本高&#xff0c;追溯困难&#xff0c;品质不可控&#xff0c;人工效率低下&#xff0c;库存积压&#xff0c;交期延误等问题&#xff0c;从而达到“降本增效”的目标。打通各个信息孤岛&#…

Android进阶(二十九) 走近 IntentFilter

文章目录 一、什么是IntentFilter &#xff1f;二、IntentFilter 如何过滤隐式意图&#xff1f;2.1 动作测试2.2 类别测试2.3 数据测试 一、什么是IntentFilter &#xff1f; 如果一个 Intent 请求在一片数据上执行一个动作&#xff0c; Android 如何知道哪个应用程序&#xf…

力扣 面试题 05.06. 整数转换

思路&#xff1a; 牵扯到二进制数&#xff0c;基本上要考虑位运算符&#xff0c;相关知识可以见http://t.csdnimg.cn/fzts7 之前做过类似的题目&#xff0c;大致思路就是先用按位异或^找出不同位&#xff0c;再用n&&#xff08;n-1&#xff09;计算出不同位的个数&#x…

恒峰—高压森林应急消防泵:保障森林安全

在自然环境中&#xff0c;森林起着至关重要的作用&#xff0c;它们不仅为我们提供木材和清新的空气&#xff0c;还是众多生物的家园。然而&#xff0c;随着人类活动的增长&#xff0c;森林面临着越来越严重的火灾威胁。为了保护这些宝贵的资源&#xff0c;我们需要一种高效、可…

10.CSS3的calc函数

CSS3 的 calc 函数 经典真题 CSS 的计算属性知道吗&#xff1f; CSS3 中的 calc 函数 calc 是英文单词 calculate&#xff08;计算&#xff09;的缩写&#xff0c;是 CSS3 的一个新增的功能。 MDN 的解释为可以用在任何长度、数值、时间、角度、频率等处&#xff0c;语法如…

为全志D1开发板移植LVGL日历控件和显示天气

利用TCP封装HTTP包请求天气信息 Linux还真是逐步熟悉中&#xff0c;现在才了解到Linux即没有原生的GUI&#xff0c;也没有应用层协议栈&#xff0c;所以要实现HTTP应用&#xff0c;必须利用TCP然后自己封装HTTP数据包。本篇即记录封装HTTP数据包&#xff0c;到心知天气请求天气…