美文网首页
Slider-滑块组件

Slider-滑块组件

作者: 爱吃豆包 | 来源:发表于2021-01-09 20:48 被阅读0次

SliderRangeSlider

#Slider

基础用法:

class SliderDemo extends StatefulWidget {
  @override
  _SliderDemoState createState() => _SliderDemoState();
}

class _SliderDemoState extends State<SliderDemo> {
  double _sliderValue = 0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            Text('值:$_sliderValue'),
            Slider(
              value: _sliderValue,
              onChanged: (v){
                setState(() {
                  _sliderValue = v;
                });
              },
            )
          ],
        ),
      ),
    );
  }
}

  • value:当前值。
  • onChanged:滑块值改变时回调。
image

看看 Flutter 1.20 版本以前的样式(我的珍藏):

image

明显的感觉就是滑块轨道变粗了,滑块变的更有立体感(加了阴影)了。

Slider 默认滑动范围是 0-1,修改为 1-100:

Slider(
  value: _sliderValue,
  min: 1,
  max: 100,
  onChanged: (v){
    setState(() {
      _sliderValue = v;
    });
  },
)

image

设置滑块的滑动为 离散的,即滑动值为 0、25 、50、75 100:

Slider(
  value: _sliderValue,
  min: 0,
  max: 100,
  divisions: 4,
  onChanged: (v){
    setState(() {
      _sliderValue = v;
    });
  },
)

image

设置标签,滑动过程中在其上方显示:

Slider(
  value: _sliderValue,
  label: '$_sliderValue',
  min: 0,
  max: 100,
  divisions: 4,
  onChanged: (v){
    setState(() {
      _sliderValue = v;
    });
  },
)

image

看看 Flutter 1.20 版本以前的样式(依然是我的珍藏):

image

个人感觉以前的更好看。

下面是官方给的 Slider 结构图:

image
  • 1 :轨道(Track),1 和 4 是有区别的,1 指的是底部整个轨道,轨道显示了可供用户选择的范围。对于从左到右(LTR)的语言,最小值出现在轨道的最左端,而最大值出现在最右端。对于从右到左(RTL)的语言,此方向是相反的。
  • 2:滑块(Thumb),位置指示器,可以沿着轨道移动,显示其位置的选定值。
  • 3:标签(label),显示与滑块的位置相对应的特定数字值。
  • 4:刻度指示器(Tick mark),表示用户可以将滑块移动到的预定值。

自定义滑块 激活的颜色未激活的颜色

Slider(
  activeColor: Colors.red,
  inactiveColor: Colors.blue,
  value: _sliderValue,
  label: '$_sliderValue',
  min: 0,
  max: 100,
  divisions: 4,
  onChanged: (v){
    setState(() {
      _sliderValue = v;
    });
  },
)

image

#自定义样式

这个自定义比较笼统,下面来一个更细致的自定义:

SliderTheme(
  data: SliderTheme.of(context).copyWith(
      activeTrackColor: Color(0xff404080),
      thumbColor: Colors.blue,
      overlayColor: Colors.green,
      valueIndicatorColor: Colors.purpleAccent),
  child: Slider(
    value: _sliderValue,
    label: '$_sliderValue',
    min: 0,
    max: 100,
    divisions: 4,
    onChanged: (v) {
      setState(() {
        _sliderValue = v;
      });
    },
  ),
)

image

这个基本可以完全自定义样式了。

如何在 Flutter 1.20 版本使用以前的标签样式呢?

SliderTheme(
  data: SliderTheme.of(context).copyWith(
    valueIndicatorShape: PaddleSliderValueIndicatorShape(),
  ),
  child: Slider(
    value: _sliderValue,
    label: '$_sliderValue',
    min: 0,
    max: 100,
    divisions: 4,
    onChanged: (v) {
      setState(() {
        _sliderValue = v;
      });
    },
  ),
)

image

RectangularSliderValueIndicatorShape 表示矩形样式:

image

#RangeSlider

RangeSliderSlider 几乎一样,RangeSlider 是范围滑块,想要选择一段值,可以使用 RangeSlider。

RangeValues _rangeValues = RangeValues(0, 25);

RangeSlider(
  values: _rangeValues,
  labels: RangeLabels('${_rangeValues.start}','${_rangeValues.end}'),
  min: 0,
  max: 100,
  divisions: 4,
  onChanged: (v) {
    setState(() {
      _rangeValues = v;
    });
  },
),

image

#滑块状态

image

#ios风格的 Slider

ios风格的 Slider,使用 CupertinoSlider:

double _sliderValue = 0;
CupertinoSlider(
  value: _sliderValue,
  onChanged: (v) {
    setState(() {
      _sliderValue = v;
    });
  },
)

image

当然也可以根据平台显示不同风格的Slider,ios平台显示CupertinoSlider效果,其他平台显示Material风格,用法如下:

Slider.adaptive(
  value: _sliderValue,
  onChanged: (v) {
    setState(() {
      _sliderValue = v;
    });
  },
)

代码:



import 'package:flutter/material.dart';

/**
 * Slider 滑块组件
 */
class SliderDemo extends StatefulWidget {

  @override
  State<StatefulWidget> createState() {
    return SliderDemoState();
  }

}

class SliderDemoState extends State<SliderDemo> {

  var _sliderNum = 0.0;

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        mainAxisSize: MainAxisSize.min,
        children: [
          Slider(
             activeColor: Colors.red, // 已经激活的颜色(滑块之后的)
             inactiveColor: Colors.blue, // 未激活的颜色(滑块之前的)
            label: '$_sliderNum', // 需要设置 divisions 属性才会有显示
            divisions: 4, // 表示拖完整个进度条需要几次,这里设置4次
            value: _sliderNum, 
            onChanged: (value) {
              setState(() {
                _sliderNum = value;
              });
            }
          ),
          // 自定义样式的进度条
          Text("自定义样式进度条"),
          // 自定义滑块颜色
          SliderTheme(
            data: SliderTheme.of(context).copyWith(
              activeTrackColor: Color(0xff404080), // 激活进度条颜色(滑块左边的)
              thumbColor: Colors.blue, // 未激活进度条的颜色(滑块右边的)
              overlayColor: Colors.green, // 激活滑块,悬浮的颜色
              valueIndicatorColor: Colors.purpleAccent // 显示滑块值的颜色
            ),
            child: Slider(
              label:'$_sliderNum',
              divisions: 4,
              value: _sliderNum, 
              onChanged: (value) {
                setState(() {
                  _sliderNum = value;
                });
              }
            )
          ),
          
        ],
      ),
    );
  }

}

截屏2021-01-10 下午1.05.17.png

相关文章

  • Slider-滑块组件

    Slider 和 RangeSlider #[http://laomengit.com/guide/introdu...

  • 2018-02-11

    swiper 组件: 滑块视图容器 属性名 类型 默认值...

  • React-Native Slider滑竿使用

    Slider用于选择一个范围值的组件 效果: 属性: minimumValue:滑块的最小值(当滑块滑到最左侧时表...

  • UI组件——滑块简介

    滑块控件是调整音量和亮度等设置的首选解决方案。它们立即生效,并允许用户通过移动手柄来微调值。滑块可以很好地达到目的...

  • jquery .on(event.namespace)

    背景:在开发一个滑块组件的时候,在参考类似组件的时候看到了,on('mousemove.xxx') 这个.xxx触...

  • React Native 实现环形滑块

    最近在项目中需要实现一个半圆环形的滑块组件用于实现温度的调节,基本的效果如下: 要求可以控制开口的角度,滑块支持渐...

  • 微信小程序公告滚动通知

    微信小程序实现上下滚动消息提醒,主要是利用swiper组件来实现,swiper组件在小程序中是滑块视图容器。 通过...

  • 基于el-slider自定义range组件封装实践

    前言 日常工作中经常使用范围选择组件,例如进度条、日期范围选择等组件,常见组件库中经常使用的都是使用的圆形滑块形状...

  • uniapp 自定义封装tab

    效果图 思路滑块位置=居中的位置+每一项的宽度乘以当前索引组件代码

  • 微信小程序的视图容器—swiper

    swiper​滑动面板(又称滑块视图容器,常见的轮播图) 注意:其中只可放置swiper-item组件,其他节点会...

网友评论

      本文标题:Slider-滑块组件

      本文链接:https://www.haomeiwen.com/subject/xekhaktx.html