Flutter 颤振中如何增加滑块轨迹宽度
在Flutter 颤振中如何增加滑块轨迹宽度,flutter,dart,Flutter,Dart,在SliderThemeDatatrackheight中已给出,但我想增加轨迹的宽度 这是我目前的代码: SliderTheme( data: SliderThemeData( trackHeight: 1, ), child: RangeSlider( min: 0.0, max: 4.0, onChanged: _onChange, values: state.value, onChangeEn
SliderThemeData
trackheight
中已给出,但我想增加轨迹的宽度
这是我目前的代码:
SliderTheme(
data: SliderThemeData(
trackHeight: 1,
),
child: RangeSlider(
min: 0.0,
max: 4.0,
onChanged: _onChange,
values: state.value,
onChangeEnd: _onChangeEnd,
inactiveColor: Colors.grey,
activeColor: Theme.of(state.context).accentColor,
),
),
RangeSlider
根据其父宽度更改其宽度,因此将RangeSlider
与容器包装在一起,并赋予容器width
属性
Container(
width: 300,
child: RangeSlider(
min: 0.0,
max: 4.0,
onChanged: _onChange,
values: state.value,
onChangeEnd: _onChangeEnd,
inactiveColor: Colors.grey,
activeColor: Theme.of(state.context).accentColor,
),
),
您可以使用SliderTheme自定义滑块外观,并使用容器包裹滑块以提供滑块的自定义宽度。它将容器宽度作为滑块宽度
SliderTheme(
data: SliderTheme.of(context).copyWith(
activeTrackColor: Colors.blue,
inactiveTrackColor: Colors.blue,
trackShape: RectangularSliderTrackShape(),
trackHeight: 4.0,
thumbColor: Colors.blueAccent,
thumbShape: RoundSliderThumbShape(enabledThumbRadius: 12.0),
overlayColor: Colors.red.withAlpha(32),
overlayShape: RoundSliderOverlayShape(overlayRadius: 28.0),
),
child: Container(
width: 400,
child: Slider(
min: 0,
max: 1000,
divisions: 5,
value: _currentFontSize,
onChanged: (value) {
setState(() {
_currentFontSize = value;
});
},
),
),
),
如果我正确理解了您的问题,我认为您指的是滑块小部件本身左右两侧的固有填充 这取决于滑块轨迹,该轨迹的两端需要为拇指和覆盖留出空间 您可以使用带有自定义项的重写,并将其添加到中的
trackShape:
参数中
@clocksmith提供了一个如何实现这一点的示例。基本上,代码示例是:
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);
}
}
导入“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主题:主题数据(
主样本:颜色。蓝色,
),
主页:MyHomePage(标题:“颤振演示主页”),
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
双_值=0;
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:中(
孩子:幻灯片主题(
数据:SliderThemeData(
trackShape:CustomTrackShape(),
),
子:滑块(
值:_值,
一旦更改:(双值){
设置状态(){
_价值=价值;
});
},
),
),
),
);
}
}
类CustomTrackShape扩展了RoundedRectSliderTrackShape{
Rect getPreferredRect({
@必需的RenderBox父框,
偏移量=偏移量.0,
@所需幻灯片主题数据幻灯片主题,
bool isEnabled=false,
bool isDiscrete=false,
}) {
最终双轨高度=滑块Theme.trackHeight;
最终双轨左=offset.dx;
最终双轨顶=offset.dy+(parentBox.size.height-轨高)/2;
最终双轨迹宽度=parentBox.size.width;
从LTWH返回Rect.fromLTWH(trackLeft、trackTop、trackWidth、trackHeight);
}
}
很明显,我不认为这是我的功劳。当我在颤振问题页面上看到这个答案时,我正在寻找一个类似的解决方案。一切归功于原作者 你可以添加UI或图像吗?添加的图像UI请查看上面的链接无法查看图像或url。