📜  Flutter Slider(1)

📅  最后修改于: 2023-12-03 15:15:07.692000             🧑  作者: Mango

Flutter Slider介绍

Flutter Slider是一个可以滑动调节数值的轨道控件,用户可以使用手指在滑块上滑动或者点击轨道上的某个点来设置值。这个控件可以用来调节音量、屏幕亮度、进度条等等。

基本用法

使用Flutter Slider非常简单,只需要创建一个Slider实例,并指定属性即可。以下是一个基本示例:

double _value = 50;
Slider(
  value: _value,
  onChanged: (value) {
    setState(() {
      _value = value;
    });
  },
)

这个示例创建了一个初始值为50的Slider,用户可以通过滑动滑块来改变_value的值。

可配置属性

Flutter Slider提供了很多可配置属性,以下是一部分常用的属性:

  • value:当前Slider的值。
  • onChanged:当Slider的值发生改变时回调的函数。
  • min:Slider的最小值。
  • max:Slider的最大值。
  • divisions:滑道被分割成的份数,设置该属性后,Slider将显示分割线。
  • label:当前值的提示信息,使用了该属性后,滑块下方将显示一个文本标签。
  • activeColor:滑道上高亮部分的颜色。
  • inactiveColor:滑道上非高亮部分的颜色。
  • thumbColor:滑块的颜色。
  • thumbShape:滑块的外形。

示例代码:

double _value = 50;
Slider(
  value: _value,
  onChanged: (value) {
    setState(() {
      _value = value;
    });
  },
  min: 0,
  max: 100,
  divisions: 10,
  label: '${_value.toInt()}',
  activeColor: Colors.blue,
  inactiveColor: Colors.grey[300],
  thumbColor: Colors.blue,
  thumbShape: RoundSliderThumbShape(enabledThumbRadius: 12),
)
自定义Slider外形

Flutter Slider的外形是可以自定义的,主要是通过SliderComponentShapeSliderComponentShape类来实现。以下是一个自定义滑块形状的示例:

double _value = 50;
SliderTheme(
  data: SliderThemeData(
    trackHeight: 2,
    overlayColor: Colors.grey.withOpacity(0.1),
    activeTrackColor: Colors.blue,
    inactiveTrackColor: Colors.grey[300],
    thumbShape: CustomSliderThumbShape(),
  ),
  child: Slider(
    value: _value,
    onChanged: (value) {
      setState(() {
        _value = value;
      });
    },
    min: 0,
    max: 100,
  ),
);

// 自定义滑块形状
class CustomSliderThumbShape extends SliderComponentShape {
  @override
  Size getPreferredSize(bool isEnabled, bool isDiscrete) {
    return Size.fromRadius(12);
  }

  @override
  void paint(PaintingContext context, Offset center,
      {required Animation<double> activationAnimation,
      required Animation<double> enableAnimation,
      required bool isDiscrete,
      required TextPainter labelPainter,
      required RenderBox parentBox,
      required SliderThemeData sliderTheme,
      required TextDirection textDirection,
      required double value}) {
    final canvas = context.canvas;
    final radius = 12.0;
    final path = Path()
      ..moveTo(center.dx + radius, center.dy)
      ..lineTo(center.dx - radius, center.dy - radius)
      ..lineTo(center.dx - radius, center.dy + radius)
      ..close();

    final paint = Paint()
      ..color = sliderTheme.activeTrackColor!
      ..style = PaintingStyle.fill;

    canvas.drawPath(path, paint);
  }
}

在这个示例中,我们自定义了滑块的形状,将滑块变成了一个三角形。自定义Slider外形需要继承SliderComponentShape类并实现getPreferredSizepaint方法。在paint方法中绘制自己定义的形状即可。

总结

Flutter Slider是一个非常实用的轨道控件,可用于各种不同的场景。本文介绍了Slider的基本用法和一些常用属性,还演示了如何自定义Slider的外形。如果您需要在Flutter应用程序中调整数值,别忘了尝试Slider控件。