Flutter Slider


简介

用来选择范围性的数据

slider 用来选择连续性的或者非连续性的数据. 默认是在一段最大值最小值间做任意值的选择. 如果你想选择间隔性的值, 例如0.0到50.0间,选择10, 15,...50.0这样的值, 给divisions设定一个非空的整数5,, 去分割区间范围.

基本用法

关于slider有以下的术语:

  • thumb 滑块 用户可以水平拖拽移动的区域

  • track 滑轨 thumb 可以滑动的线条区域

  • value indicator 值指示器 当用户拖拽thumb的时候. 显示用户当前所选的属性值

  • active 选中区

  • inactive 非选中区

如果onChanged属性为空或者min .. max给出的范围 为空(例如如果min等于max),则将禁用滑块。

滑块小部件本身不保持任何状态State。相反,当滑块状态发生变化时,窗口小部件会调用 onChanged 回调。大多数使用滑块的小部件将侦听 onChanged 回调并使用新值重建滑块以更新滑块的视觉外观。要知道值何时开始更改,或何时更改,请设置可选回调onChangeStartonChangeEnd

默认情况下,滑块将尽可能宽,垂直居中。当给定无限制约束时,它将尝试使轨道宽144像素(每边有边距)并垂直收缩。

实例演示

import 'package:flutter/material.dart';

class SliderDemo extends StatefulWidget {
  _Demo createState() => _Demo();
}

class _Demo extends State<SliderDemo> {
  double value = 0.0;
  Widget build(BuildContext context) {
    return  Slider(
      value: value,//实际进度的位置
      inactiveColor: Colors.black12,//进度中不活动部分的颜色
      label: 'value: $value',
      min: 0.0,
      max: 100.0,
      divisions: 1000,
      activeColor: Colors.blue,//进度中活动部分的颜色
      onChanged: (double){
        setState(() {
          value = double.roundToDouble();
        });
      },
    );
  }

}



class SliderThemeDemo extends StatefulWidget {
  _SliderThemeDemo createState() => _SliderThemeDemo();
}

class _SliderThemeDemo extends State<SliderThemeDemo> {
  double value = 0.0;
  Widget build(BuildContext context) {
    return  Container(
      child:  SliderTheme(
        data: SliderTheme.of(context).copyWith(
//                activeTickMarkColor:Colors.yellowAccent,
          activeTrackColor: Colors.yellowAccent,//实际进度的颜色
//                inactiveTickMarkColor:Colors.black
          thumbColor: Colors.black,//滑块中心的颜色
          inactiveTrackColor:Colors.red,//默 认进度条的颜色
          valueIndicatorColor: Colors.blue,//提示进度的气派的背景色
          valueIndicatorTextStyle:  TextStyle(//提示气泡里面文字的样式
            color: Colors.white,
          ),
          inactiveTickMarkColor:Colors.blue,//divisions对进度线分割后 断续线中间间隔的颜色
          overlayColor: Colors.pink,//滑块边缘颜色
        ),
        child:  Container(
          width: 340.0,
          margin: EdgeInsets.fromLTRB(0.0, 50.0, 0.0, 0.0),
          child:  Row(
            children: <Widget>[
               Text('0.0'),
               Expanded(
                flex: 1,
                child:  Slider(
                  value: value,
                  label: '$value',
                  divisions: 10,
                  onChanged: (double){
                    setState(() {
                      value=double.floorToDouble();//转化成double
                    });
                  },
                  min: 0.0,
                  max: 100.0,
                ),
              ),
               Text('100.0'),
            ],
          ),
        ),
      ),
    );
  }
}