Flutter 121: 图解简易 Slider 滑动条

简介: 0 基础学习 Flutter,第一百二十一步:简单学习 Slider 滑动条!

    小菜在业务开发过程中会自定义 Slider 滑动条,而在自定义之前,小菜先简单了解一下 Flutter 自带的 Slider

Slider

源码分析

const Slider({
    Key key,
    @required this.value,       // 滑动过程中对应值
    @required this.onChanged,   // 滑动过程回调
    this.onChangeStart,         // 滑动起始时位置回调
    this.onChangeEnd,           // 滑动结束时位置回调
    this.min = 0.0,             // 滑动条最小范围
    this.max = 1.0,             // 滑动条最大范围
    this.divisions,             // 滑动条均分比例份数
    this.label,                 // 滑动条标签
    this.activeColor,           // 滑动条选中颜色
    this.inactiveColor,         // 滑动条未选中颜色
    this.semanticFormatterCallback,
})

    简单分析源码可得,Slider 是一个有状态的 StatefulWidget 组件,属性也很清晰易懂,其中滑动过程中对应的 value 值和 onChanged 回调是必须参数;

案例尝试

1. value & onChanged

    value 未滑动过程中对应的值,在 minmax 之间;onChanged 是在滑动过程中回调,当 onChangednullvalue 所在的 minmax 集合范围为空时,Slider 禁止滑动;

var _value01 = 0.0;

return Slider(value: _value01, onChanged: (val) => setState(() => _value01 = val));

2. min & max

    minmax 为滑动条范围,而 value 的取值范围是在 minmax 之间,无论 value 为正还是负,均需要在 minmax 之间;

var _value02 = 0.0;

return Slider(value: _value02, min: 0.0, max: 100.0,
    onChanged: (val) => setState(() => _value02 = val));

3. activeColor & inactiveColor

    activeColor 为滑动条已滑动过的颜色;inactiveColor 为滑动条中未滑动的颜色;两者均可以在 SliderTheme 中设置;

return Slider(
    value: _value02, min: 0.0, max: 100.0,
    activeColor: Colors.deepOrange, inactiveColor: Colors.grey,
    onChanged: (val) => setState(() => _value02 = val));

4. label & divisions;

    label 为滑动条滑动到某一节点的标签文案;divisions 是把 minmax 等分为 divisions 份数;只有在 divisions 生效时,label 才会展示;

return Slider(value: _value02, min: 0.0, max: 100.0,
    activeColor: Colors.deepPurple, nactiveColor: Colors.grey,
    divisions: 5, label: 'Current Label = $_value02',
    onChanged: (val) => setState(() => _value02 = val));

5. onChangeStart & onChangeEnd

    onChangeStartonChangeEnd 分别对应滑动过程中 value 值何时开始更改或何时完成更改时对应的回调;

return Slider(value: _value02, min: 0.0, max: 100.0,
    activeColor: Colors.green, inactiveColor: Colors.grey,
    onChangeStart: (val) => print('onChangeStart -> $val'),
    onChangeEnd: (val) => print('onChangeEnd -> $val'),
    onChanged: (val) => setState(() => _value02 = val));

SliderTheme

     Slider 的主题效果可以通过 SliderThemeThemeData.sliderTheme 中获取更新,相较于 Slider 只提供已滑动和未滑动颜色效果,属性粒度更细;

SliderThemeData

1. activeTrackColor & inactiveTrackColor

    activeTrackColorinactiveTrackColor 分别对应 Slider 已滑动过和未滑动过的轨道颜色;

return SliderTheme(
    data: SliderThemeData(activeTrackColor: Colors.pink, inactiveTrackColor: Colors.grey),
    child: _itemSlide06());

2. thumbColor & overlayColor & overlayShape

    thumbColor 对应滑动按钮颜色,而 overlayColor 对应滑动按钮映射的叠层颜色,通常设置为半透明状态;overlayShape 对应叠层样式;

return SliderTheme(
    data: SliderThemeData(activeTrackColor: Colors.pink.withOpacity(0.8), inactiveTrackColor: Colors.grey,
        thumbColor: Colors.deepPurple, overlayColor: Colors.deepPurple.withOpacity(0.3),  overlayShape: RoundSliderOverlayShape(overlayRadius: 30.0))),
    child: _itemSlide06());

3. valueIndicatorColor & valueIndicatorShape & valueIndicatorShape

    valueIndicatorColor 对应 label 气泡颜色;valueIndicatorShape 对应气泡内文字属性;valueIndicatorShape 对应气泡样式,可以再此进行自定义气泡;

return SliderTheme(
    data: SliderThemeData(
        activeTrackColor: Colors.pink.withOpacity(0.8), inactiveTrackColor: Colors.grey,
        thumbColor: Colors.deepPurple, overlayColor: Colors.deepPurple.withOpacity(0.3),
        valueIndicatorColor: Colors.deepPurple.withOpacity(0.6), valueIndicatorShape: PaddleSliderValueIndicatorShape(), valueIndicatorTextStyle: TextStyle(fontSize: 14.0)),
    child: _itemSlide06());

4. activeTickMarkColor & inactiveTickMarkColor & tickMarkShape

    activeTickMarkColor 对应已选中刻度颜色;inactiveTickMarkColor 对应未选中刻度颜色;tickMarkShape 对应刻度样式;

return SliderTheme(
    data: SliderThemeData(
        activeTrackColor: Colors.pink.withOpacity(0.8), inactiveTrackColor: Colors.grey,
        thumbColor: Colors.deepPurple, overlayColor: Colors.deepPurple.withOpacity(0.3),
        valueIndicatorColor: Colors.deepPurple.withOpacity(0.6), valueIndicatorShape: PaddleSliderValueIndicatorShape(), valueIndicatorTextStyle: TextStyle(fontSize: 14.0),
        activeTickMarkColor: Colors.deepPurple.withOpacity(0.8), inactiveTickMarkColor: Colors.pink.withOpacity(0.4), tickMarkShape: RoundSliderTickMarkShape(tickMarkRadius: 4.0)),
    child: _itemSlide06());

5. trackHeight & trackShape

    trackHeightSlider 轨道高度;trackShape 对应轨道样式,主要再此处进行自定义样式;

trackHeight: 8.0

6. 不可滑动状态

    对于不可滑动状态,SliderThemeData 提供了对应属性;

  • disabledActiveTrackColor 对应已滑动轨道颜色;
  • disabledInactiveTrackColor 对应未滑动轨道颜色;
  • disabledThumbColor 对应滑动按钮颜色;
  • disabledActiveTickMarkColor 对应已滑动刻度颜色;
  • disabledInactiveTickMarkColor 对应未滑动刻度颜色;
return SliderTheme(
    data: SliderThemeData(
        disabledActiveTrackColor: Colors.deepOrange.withOpacity(0.8),
        disabledInactiveTrackColor: Colors.grey,
        disabledThumbColor: Colors.grey,
        disabledActiveTickMarkColor: Colors.deepOrange.withOpacity(0.8),
        disabledInactiveTickMarkColor: Colors.yellow.withOpacity(0.8),
        tickMarkShape: RoundSliderTickMarkShape(tickMarkRadius: 4.0),
        trackHeight: 4.0),
    child: Slider(value: 0.6, divisions: 5, onChanged: null));


    Slider 案例源码


    小菜本节暂未涉及自定义滑动条样式,对于底层的 Slider 了解还不够深入;如有错误,请多多指导!

来源: 阿策小和尚
目录
相关文章
【交互 widget】Flutter Slider
【交互 widget】Flutter Slider
175 0
【交互 widget】Flutter Slider
Flutter基础widgets教程-Slider篇
Flutter基础widgets教程-Slider篇
317 0
|
前端开发
[译] 用 Flutter 打造一个圆形滑块(Slider)
大多数情况下你并不会需要它。但想象一下:如果你想要用户选定一个时间段,或者只是想要一个比直线形状更有趣一点的常规滑块的场景时,就可以使用圆形滑块。
2454 0
|
4天前
|
缓存 监控 前端开发
【Flutter 前端技术开发专栏】Flutter 应用的启动优化策略
【4月更文挑战第30天】本文探讨了Flutter应用启动优化策略,包括理解启动过程、资源加载优化、减少初始化工作、界面布局简化、异步初始化、预加载关键数据、性能监控分析以及案例和未来优化方向。通过这些方法,可以缩短启动时间,提升用户体验。使用Flutter DevTools等工具可助于识别和解决性能瓶颈,实现持续优化。
【Flutter 前端技术开发专栏】Flutter 应用的启动优化策略
|
4天前
|
开发框架 Dart 前端开发
【Flutter前端技术开发专栏】Flutter与React Native的对比与选择
【4月更文挑战第30天】对比 Flutter(Dart,强类型,Google支持,快速热重载,高性能渲染)与 React Native(JavaScript,庞大生态,热重载,依赖原生渲染),文章讨论了开发语言、生态系统、性能、开发体验、学习曲线、社区支持及项目选择因素。两者各有优势,选择取决于项目需求、团队技能和长期维护考虑。参考文献包括官方文档和性能比较文章。
【Flutter前端技术开发专栏】Flutter与React Native的对比与选择
|
2天前
|
前端开发 C++ 容器
Flutter-完整开发实战详解(一、Dart-语言和-Flutter-基础)(1)
Flutter-完整开发实战详解(一、Dart-语言和-Flutter-基础)(1)
|
2天前
|
Android开发
Flutter完整开发实战详解(六、 深入Widget原理),2024百度Android岗面试真题收录解析
Flutter完整开发实战详解(六、 深入Widget原理),2024百度Android岗面试真题收录解析
|
2天前
|
XML Dart Java
Flutter插件开发之APK自动安装,字节跳动Android岗面试题
Flutter插件开发之APK自动安装,字节跳动Android岗面试题
|
3天前
|
Java Android开发 设计模式
flutter音视频开发,Android开发需要学什么
flutter音视频开发,Android开发需要学什么
|
4天前
|
Dart 前端开发 测试技术
【Flutter前端技术开发专栏】Flutter开发中的代码质量与重构实践
【4月更文挑战第30天】随着Flutter在跨平台开发的普及,保证代码质量成为开发者关注的重点。优质代码能确保应用性能与稳定性,提高开发效率。关键策略包括遵循最佳实践,编写可读性强的代码,实施代码审查和自动化测试。重构实践在项目扩展时尤为重要,适时重构能优化结构,降低维护成本。开发者应重视代码质量和重构,以促进项目成功。
【Flutter前端技术开发专栏】Flutter开发中的代码质量与重构实践