简述

首先说下非常抱歉,因为个人问题,已有一个多月没有更新了,上周五有个小姐姐问我一个分段滑块的效果,这里就简单写下一个小样作为一个记录。

效果图


分析

其实自带的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-分段滑块相关推荐

  1. qscrollbar 固定滑块大小_五金模具设计:通用滑块结构形式!模具滑块的设计标准!值得收藏...

    一. 滑块通用结构形式 1. 图(1)是常用的滑块结构形式;如滑块尺寸L较小,或当采用图(1)的形式,模板在滑块W方向尺寸有干涉时,可选用图(2)的结构形式;采用图(4)所示的结构形式时,要经专案主管 ...

  2. qscrollbar 固定滑块大小_第32章:五金冲压模具设计:通用滑块结构形式!新手必备资料!...

    点击上方"pressCAD五金模具设计"关注我们吧! 一. 滑块通用结构形式 1. 图(1)是常用的滑块结构形式;如滑块尺寸L较小,或当采用图(1)的形式,模板在滑块W方向尺寸有干 ...

  3. Flutter学习总纲教程

    Flutter学习总纲教程 Flutter Widget 目录 准备 学习Flutter之前,必须要了解(不需要多么精通,但至少要了解)Dart的基础特性. Dart基础特性  ·  Dart 是 G ...

  4. 状态控件ios 中滑块、开关、分段控件、操作表和警告的常用函数

    PS:今天上午,非常郁闷,有很多简单基础的问题搞得我有些迷茫,哎,代码几天不写就忘.目前又不当COO,还是得用心记代码哦! 对于SLider通过value属性可以到得以后滑块的值 UISlider * ...

  5. Flutter:手机号输入分段

    上一次写技术博客还是2018年的事情,当时只是发表到CSDN和简书,2021年10月11日开始学习Flutter了,准备分享一下学习的历程,写的第一个Flutter示例:登录界面. 先说一下手机号输入 ...

  6. Flutter CupertinoSlidingSegmentedControl 分段组件使用解析

    如果你有兴趣 你可以关注一下公众号 biglead 来获取最新的学习资料. Flutter 从入门 到精通系列文章在这里 当然也必需是要有源码的 在这里了 github 有点慢 不妨来看看码云的源码吧 ...

  7. Flutter CupertinoSegmentedControl 分段组件

    如果你有兴趣 你可以关注一下公众号 biglead 来获取最新的学习资料. Flutter 从入门 到精通系列文章在这里 当然也必需是要有源码的 在这里了 github 有点慢 不妨来看看码云的源码吧 ...

  8. Flutter布局锦囊---轮播图片与滑块

    设计给的效果如下: 拿到设计后,先把整体拆分成几个部分: "运营位",可以通过左右滑动来切换图片. "进度条",显示"运营位"当前位置的进度 ...

  9. iOS开发 ---- 其他控件,弹窗,滑块,菊花,步进,分段等

    UIControlHub UISwitch 开关 1. 继承于UIControl 默认大小事79*27 2. 一般通过center属性来设位置 3. tintColor 边框的颜色 4. onTint ...

最新文章

  1. 【JNI】JNI中java类型的简写
  2. Python-map、reduce、filter、sorted函数
  3. C 实现删除非空文件夹
  4. 数据结构 —— 为结构体内变量赋值
  5. Cadence IC CDB-OA工艺库转换方法
  6. Qt Quick 中 QML 与 C++ 混合编程详解
  7. CentOS 更改MySQL数据库目录位置
  8. ucinet使用手册_ucinet使用手册
  9. 轻量级 HTTP(s) 代理 TinyProxy
  10. 电力拖动自动控制系统matlab,基于Matlab的《电力拖动自动控制系统》课程教学改革...
  11. 从细节入手为您的客户创造价值
  12. 黎曼猜想--论文笔记《On the Number of Primes Less Than a Given Magnitude》
  13. 简单的一种图像冷暖色温转换(MATLAB)
  14. 网络正常,浏览器显示代理服务器没有响应怎么办?
  15. 电脑锁屏蓝牙鼠标断开_如何阻止蓝牙鼠标不断断开
  16. VC浏览器相关的学习(八)(截获IE网络访问)
  17. 计算机网络的应用阶层,计算机网络应用专业人才培养方案.doc
  18. Linuxnbsp;用命令行打开docnbsp;pdf…
  19. 接收微信公众号的事件推送并且回复消息
  20. Java JVM堆空间的概述

热门文章

  1. VsCode Jupyter 中画图显示问题
  2. mac重启电脑 chrome浏览器中插件消失
  3. nfs挂载不上,指定版本挂载
  4. AAPCS(Procedure Call Standard for the ARM Architecture)笔记
  5. Aapche POI txt 导入excel
  6. Matlab中hex2dec函数使用
  7. 小程序安全设置-弹出框输入获取值
  8. plt.savefig()保存图片打开却神魔都没有
  9. 商家WIFI码项目全解析
  10. 关于谭浩强著的C程序设计(第四版)的“规范化的指数形式”和“标准化指数形式”的问题