如果我正确理解您的问题,我认为您所指的是 Slider 小部件本身左侧和右侧的固有填充。
这归结为滑块轨道需要在轨道的任一端留出空间用于拇指和覆盖。
您可以使用带有自定义RoundedRectSliderTrackShape 的a 覆盖它,并将其添加到SliderThemeData 中的trackShape: 参数中。
@clocksmith 的described here on the Flutter issues page 就是一个关于如何做到这一点的例子。基本上,代码示例是:
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
double _value = 0;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: SliderTheme(
data: SliderThemeData(
trackShape: CustomTrackShape(),
),
child: Slider(
value: _value,
onChanged: (double value) {
setState(() {
_value = value;
});
},
),
),
),
);
}
}
class CustomTrackShape extends RoundedRectSliderTrackShape {
Rect getPreferredRect({
@required RenderBox parentBox,
Offset offset = Offset.zero,
@required SliderThemeData sliderTheme,
bool isEnabled = false,
bool isDiscrete = false,
}) {
final double trackHeight = sliderTheme.trackHeight;
final double trackLeft = offset.dx;
final double trackTop = offset.dy + (parentBox.size.height - trackHeight) / 2;
final double trackWidth = parentBox.size.width;
return Rect.fromLTWH(trackLeft, trackTop, trackWidth, trackHeight);
}
}
显然,我对此不以为然。当我在 Flutter 问题页面上看到这个答案时,我正在寻找类似的解决方案。全部归功于原作者!