修改Flutter Material主题Slider线条宽度

在使用Flutter自带的slider组件时,发现自带的slider显示效果不理想,左边线条明显大于右边

查看Flutter源码发现,底层会对左边线条增加2个像素的宽度

解决方案:

使用自定义SliderTheme包裹Slider组件,自定义RoundedRectSliderTrackShape复现里面paint方法

  void paint(
    PaintingContext context,
    Offset offset, {
    required RenderBox parentBox,
    required SliderThemeData sliderTheme,
    required Animation<double> enableAnimation,
    required TextDirection textDirection,
    required Offset thumbCenter,
    bool isDiscrete = false,
    bool isEnabled = false,
    double additionalActiveTrackHeight = 2,
  }) 

 新建自定义Shape文件

import 'package:flutter/material.dart';

/// Created by bawomingtian on 9.12.21.
/// 修改Flutter Material 主题Slider默认滑杆左边比右边线条粗的问题
class BalanceShape extends RoundedRectSliderTrackShape {
  @override
  void paint(PaintingContext context, Offset offset,
      {RenderBox parentBox,
      SliderThemeData sliderTheme,
      Animation<double> enableAnimation,
      TextDirection textDirection,
      Offset thumbCenter,
      bool isDiscrete = false,
      bool isEnabled = false,
      double additionalActiveTrackHeight = 0}) {
    super.paint(context, offset,
        parentBox: parentBox,
        sliderTheme: sliderTheme,
        enableAnimation: enableAnimation,
        textDirection: textDirection,
        thumbCenter: thumbCenter,
        additionalActiveTrackHeight: additionalActiveTrackHeight);
  }
}

使用SliderTheme包裹Slider

SliderTheme(
      data: SliderTheme.of(context).copyWith(trackShape: BalanceShape()),
      child: Slider(
        value: widgetItem.value,
        onChanged: (data) {},
        onChangeStart: (data) {
          print('start:$data');
        },
        onChangeEnd: (data) {
          print('end:$data');
        },
        min: widgetItem.min,
        max: widgetItem.max,
        // divisions: widgetItem.divisions,
        activeColor: ColorsUtil.hexToColor(widgetItem.activeColor ?? "#FF4CAF50"),
        inactiveColor: ColorsUtil.hexToColor(widgetItem.inactiveColor ?? "#FF9E9E9E"),
        semanticFormatterCallback: (double newValue) {
          return '${newValue.round()} dollars}';
        },
      ),
    )

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值