flutter_xlider

支持 RTL 和众多选项及自定义的 Material Design 滑块和范围滑块,适用于 Flutter。

开始使用

单个滑块

一个单个滑块

FlutterSlider(
  values: [300],
  max: 500,
  min: 0,
  onDragging: (lowerValue, upperValue) {
    _lowerValue = lowerValue;
    _upperValue = upperValue;
    setState(() {});
  },
)

single

要制作从右到左的滑块,请使用 rtl: true

 FlutterSlider(
  ...
  rtl: true,
  ...
)

single-rtl

范围滑块

滑块的简单示例

FlutterSlider(
  values: [30, 420],
  rangeSlider: true,
  max: 500,
  min: 0,
  onDragging: (lowerValue, upperValue) {
    _lowerValue = lowerValue;
    _upperValue = upperValue;
    setState(() {});
  },
)

range-1

处理器

您可以使用 handlerrightHandler 属性来自定义处理程序。
自定义处理程序需要 widthheight,因此我们使用 SizedBox 作为包装器

如果您使用 rangeSlider,那么如果您想自定义处理程序,还应该定义 rightHandler

这里有一个带有自定义处理程序和轨道的范围滑块

FlutterSlider(
  ...
  handler: SizedBox(
    width: 20,
    height: 50,
    child: Container(
      child: Icon(
        Icons.view_headline,
        color: Colors.black54,
        size: 13,
      ),
      decoration: BoxDecoration(
          color: Colors.white,
          border: Border.all(color: Colors.black.withOpacity(0.12))),
    ),
  ),
  rightHandler: SizedBox(
    width: 20,
    height: 50,
    child: Container(
      child: Icon(
        Icons.view_headline,
        color: Colors.black54,
        size: 13,
      ),
      decoration: BoxDecoration(
          color: Colors.white,
          border: Border.all(color: Colors.black.withOpacity(0.12))),
    ),
  ),
  ...
)

处理程序缩放动画

您可以使用 handlerAnimation 控制处理程序的缩放动画类型、持续时间和缩放大小。
handlerAnimation 接受一个 FlutterSliderHandlerAnimation 类,该类具有以下 4 个属性

FlutterSlider(
  ...
    handlerAnimation: FlutterSliderHandlerAnimation(
      curve: Curves.elasticOut,
      reverseCurve: Curves.bounceIn,
      duration: Duration(milliseconds: 500),
      scale: 1.5
    ),
  ...
)

range-handler-animation

如果您不想要缩放动画,则只需将 scale 属性设置为 1 即可。
如果您不想要 reverseCurve,则忽略它。默认为 null

轨道条

要自定义轨道条,您可以使用 FlutterSliderTrackBar您可以在此处查看详细信息

FlutterSlider(
  ...
    trackBar: FlutterSliderTrackBar(
      activeTrackBarColor: Colors.redAccent,
      activeTrackBarHeight: 5,
      leftInactiveTrackBarColor: Colors.greenAccent.withOpacity(0.5),
    ),
  ...
)

工具提示

为了自定义您的工具提示,您可以使用 FlutterSliderTooltip 类。 您可以在此处查看所有属性

FlutterSlider(
  ...
  tooltip: FlutterSliderTooltip(
    textStyle: TextStyle(fontSize: 17, color: Colors.white),
    boxStyle: FlutterSliderTooltipBox(
      decoration: BoxDecoration(
        color: Colors.redAccent.withOpacity(0.7)
      )
    )
  ),
  ...
)

range-customized

工具提示前缀

您可以使用 leftPrefixleftSuffixrightPrefixrightSuffix 在工具提示内容周围添加所需的控件。

FlutterSlider(
  ...
    tooltip: FlutterSliderTooltip(
      leftPrefix: Icon(Icons.attach_money, size: 19, color: Colors.black45,),
      rightSuffix: Icon(Icons.attach_money, size: 19, color: Colors.black45,),
    ),
  ...
)

range-tooltip-prefix-suffix

工具提示数字格式

您可以使用 NumberFormat 类自定义工具提示数字
这是一个示例

FlutterSlider(
  ...
    tooltip: FlutterSliderTooltip(
      numberFormat: intl.NumberFormat(),
      // numberFormat: intl.compact(),
    ),
  ...
)

您可以在 NumberFormat 中找到更多信息

range-compact

控件

跳转

默认情况下,滑块处理程序会流畅移动,如果将 jump 设置为 true,处理程序将在间隔之间跳转

FlutterSlider(
  ...
  jump: true,
  ...
)

间隔数

离散间隔的数量

FlutterSlider(
  ...
  divisions: 25,
  ...
)

忽略步骤

如果您的配置要求某些步骤不可用,您可以使用 ignoreSteps 属性。
此属性接受一个简单的类来定义 fromto 范围。

FlutterSlider(
  ...
    ignoreSteps: [
      FlutterSliderIgnoreSteps(from: 8000, to: 12000),
      FlutterSliderIgnoreSteps(from: 18000, to: 22000),
    ],
  ...
)

range-ignore-steps

最小距离

使用范围滑块时,可以使用 minimumDistance 选项定义两个处理程序之间的最小距离

FlutterSlider(
  ...
    minimumDistance: 300,
  ...
)

range-minimum-distance

最大距离

这是最小距离的相反,使用范围滑块时,可以使用 maximumDistance 选项定义两个处理程序之间的最大距离

FlutterSlider(
  ...
    maximumDistance: 300,
  ...
)

range-maximum-distance

始终显示工具提示

如果此属性设置为 true,工具提示将始终显示。如上面的示例所示

FlutterSlider(
  ...
  alwaysShowTooltip: true,
  ...
)

触摸区域

您可以控制处理程序的触摸区域大小。默认触摸区域为 2
范围在 1 到 5 之间

FlutterSlider(
  ...
  touchZone: 2,
  ...
)

要查看处理程序的触摸区域,请将 displayTestTouchZone 设置为 true 并测试您的滑块

FlutterSlider(
  ...
  displayTestTouchZone: true,
  ...
)

range-touchable-area

disabled

要禁用滑块,可以使用 disabled

FlutterSlider(
  ...
  disabled: true,
  ...
)

RTL

使滑块从右到左

FlutterSlider(
  ...
  rtl: true,
  ...
)

事件

有 3 个事件

onDragStarted:拖动开始时触发
onDragCompleted 拖动结束时触发
onDragging 拖动时持续触发

以上三个函数都返回两个 double 值:Lower ValueUpper Value

FlutterSlider(
  ...
  onDragging: (lowerValue, upperValue) {
    _lowerValue = lowerValue;
    _upperValue = upperValue;
    setState(() {});
  },
  ...
)

GitHub

https://github.com/Ali-Azmoud/flutter_xlider