Flutter-分段滑块
简述
首先说下非常抱歉,因为个人问题,已有一个多月没有更新了,上周五有个小姐姐问我一个分段滑块的效果,这里就简单写下一个小样作为一个记录。
效果图
分析
其实自带的Slider基本能满足我们的需求,但是这个小姐姐的需要是后台会返回一个数组段比如说[0,10,30,60,100,150],这个滑块只能滑动到数组段中的值,其实这个简单的方式就是直接在slider滑动的时候,判断当前value距离数组段中那个值最接近,然后直接设置slider的值为这个值就可以了。
代码实现
///在数组段中找到当前与value最接近的值 void updateValue(double value) { var minValue = double.infinity; var result = 0.0; for (var element in widget.divisions) { double m = value - element; if (m.abs() < minValue) { result = element; minValue = m.abs(); } } if (_value == result) { return; } setState(() { _value = result; if (widget.onChanged != null) { widget.onChanged?.call(_value); } }); }
完整代码
import 'package:flutter/material.dart';
///分段滑块class DivisionsSlider extends StatefulWidget {const DivisionsSlider({ Key? key, required this.value, required this.onChanged, required this.divisions, this.onChangeStart, this.onChangeEnd, this.min = 0.0, this.max = 1.0, this.label, this.activeColor, this.inactiveColor, this.thumbColor, this.mouseCursor, this.semanticFormatterCallback, this.focusNode, this.autofocus = false,}) : super(key: key);
final double value;final ValueChanged<double>? onChanged;final ValueChanged<double>? onChangeStart;final ValueChanged<double>? onChangeEnd;final double min;final double max;final String? label;final Color? activeColor;final Color? inactiveColor;final Color? thumbColor;final MouseCursor? mouseCursor;final SemanticFormatterCallback? semanticFormatterCallback;final FocusNode? focusNode;final bool autofocus;final List<double> divisions;
@overrideState<DivisionsSlider> createState() => _DivisionsSliderState();}
class _DivisionsSliderState extends State<DivisionsSlider> {late double _value;
@overridevoid initState() { super.initState(); _value = widget.value;}
@overrideWidget build(BuildContext context) { return Slider( value: _value, onChanged: (value) { updateValue(value); }, onChangeStart: widget.onChangeStart, onChangeEnd: widget.onChangeEnd, min: widget.min, max: widget.max, label: widget.label, activeColor: widget.activeColor, inactiveColor: widget.inactiveColor, thumbColor: widget.thumbColor, mouseCursor: widget.mouseCursor, semanticFormatterCallback: widget.semanticFormatterCallback, focusNode: widget.focusNode, autofocus: widget.autofocus, );}
void updateValue(double value) { var minValue = double.infinity; var result = 0.0; for (var element in widget.divisions) { double min = (value - element).abs(); if (min < minValue) { result = element; minValue = min; } } if (_value == result) { return; } setState(() { _value = result; if (widget.onChanged != null) { widget.onChanged?.call(_value); } });}}
使用控件
DivisionsSlider( value: defaultValue, onChanged: (value) { defaultValue = value; setState(() {}); }, divisions: const [0, 10, 30, 60, 100, 150], max: 150, ),
本文由 mdnice 多平台发布
Flutter-分段滑块相关推荐
- qscrollbar 固定滑块大小_五金模具设计:通用滑块结构形式!模具滑块的设计标准!值得收藏...
一. 滑块通用结构形式 1. 图(1)是常用的滑块结构形式;如滑块尺寸L较小,或当采用图(1)的形式,模板在滑块W方向尺寸有干涉时,可选用图(2)的结构形式;采用图(4)所示的结构形式时,要经专案主管 ...
- qscrollbar 固定滑块大小_第32章:五金冲压模具设计:通用滑块结构形式!新手必备资料!...
点击上方"pressCAD五金模具设计"关注我们吧! 一. 滑块通用结构形式 1. 图(1)是常用的滑块结构形式;如滑块尺寸L较小,或当采用图(1)的形式,模板在滑块W方向尺寸有干 ...
- Flutter学习总纲教程
Flutter学习总纲教程 Flutter Widget 目录 准备 学习Flutter之前,必须要了解(不需要多么精通,但至少要了解)Dart的基础特性. Dart基础特性 · Dart 是 G ...
- 状态控件ios 中滑块、开关、分段控件、操作表和警告的常用函数
PS:今天上午,非常郁闷,有很多简单基础的问题搞得我有些迷茫,哎,代码几天不写就忘.目前又不当COO,还是得用心记代码哦! 对于SLider通过value属性可以到得以后滑块的值 UISlider * ...
- Flutter:手机号输入分段
上一次写技术博客还是2018年的事情,当时只是发表到CSDN和简书,2021年10月11日开始学习Flutter了,准备分享一下学习的历程,写的第一个Flutter示例:登录界面. 先说一下手机号输入 ...
- Flutter CupertinoSlidingSegmentedControl 分段组件使用解析
如果你有兴趣 你可以关注一下公众号 biglead 来获取最新的学习资料. Flutter 从入门 到精通系列文章在这里 当然也必需是要有源码的 在这里了 github 有点慢 不妨来看看码云的源码吧 ...
- Flutter CupertinoSegmentedControl 分段组件
如果你有兴趣 你可以关注一下公众号 biglead 来获取最新的学习资料. Flutter 从入门 到精通系列文章在这里 当然也必需是要有源码的 在这里了 github 有点慢 不妨来看看码云的源码吧 ...
- Flutter布局锦囊---轮播图片与滑块
设计给的效果如下: 拿到设计后,先把整体拆分成几个部分: "运营位",可以通过左右滑动来切换图片. "进度条",显示"运营位"当前位置的进度 ...
- iOS开发 ---- 其他控件,弹窗,滑块,菊花,步进,分段等
UIControlHub UISwitch 开关 1. 继承于UIControl 默认大小事79*27 2. 一般通过center属性来设位置 3. tintColor 边框的颜色 4. onTint ...
最新文章
- 【JNI】JNI中java类型的简写
- Python-map、reduce、filter、sorted函数
- C 实现删除非空文件夹
- 数据结构 —— 为结构体内变量赋值
- Cadence IC CDB-OA工艺库转换方法
- Qt Quick 中 QML 与 C++ 混合编程详解
- CentOS 更改MySQL数据库目录位置
- ucinet使用手册_ucinet使用手册
- 轻量级 HTTP(s) 代理 TinyProxy
- 电力拖动自动控制系统matlab,基于Matlab的《电力拖动自动控制系统》课程教学改革...
- 从细节入手为您的客户创造价值
- 黎曼猜想--论文笔记《On the Number of Primes Less Than a Given Magnitude》
- 简单的一种图像冷暖色温转换(MATLAB)
- 网络正常,浏览器显示代理服务器没有响应怎么办?
- 电脑锁屏蓝牙鼠标断开_如何阻止蓝牙鼠标不断断开
- VC浏览器相关的学习(八)(截获IE网络访问)
- 计算机网络的应用阶层,计算机网络应用专业人才培养方案.doc
- Linuxnbsp;用命令行打开docnbsp;pdf…
- 接收微信公众号的事件推送并且回复消息
- Java JVM堆空间的概述
热门文章
- VsCode Jupyter 中画图显示问题
- mac重启电脑 chrome浏览器中插件消失
- nfs挂载不上,指定版本挂载
- AAPCS(Procedure Call Standard for the ARM Architecture)笔记
- Aapche POI txt 导入excel
- Matlab中hex2dec函数使用
- 小程序安全设置-弹出框输入获取值
- plt.savefig()保存图片打开却神魔都没有
- 商家WIFI码项目全解析
- 关于谭浩强著的C程序设计(第四版)的“规范化的指数形式”和“标准化指数形式”的问题