在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,
),
),
Run Code Online (Sandbox Code Playgroud)
Sac*_*hin 14
您可以使用 SliderTheme 自定义滑块外观,并使用 Container 包裹 Slider 来为滑块提供自定义宽度。它将把容器宽度作为滑块宽度。
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;
});
},
),
),
),
Run Code Online (Sandbox Code Playgroud)
小智 11
这个简化的解决方案对我有用:
SliderTheme(
data: SliderTheme.of(context).copyWith(
overlayShape: SliderComponentShape.noOverlay,
),
child: Slider(),
)
Run Code Online (Sandbox Code Playgroud)
如果我正确理解你的问题,我认为你指的是滑块小部件本身左侧和右侧的固有填充。
这是因为滑块轨道需要在轨道两端留出空间来容纳拇指和覆盖层。
您可以使用自定义RoundedRectSliderTrackShape来覆盖它,并将其添加到SliderThemeDatatrackShape:
中的参数中。
@clocksmith在 Flutter 问题页面上描述了如何执行此操作的示例。基本上,代码示例是:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
显然,我对此没有任何功劳。当我在 Flutter 问题页面上看到这个答案时,我正在寻找类似的解决方案。一切功劳归原作者所有!
如果你想要父级的全宽。
用扩展包起来。
Row(
children: [
Expanded(
child: Slider(
value: 10,
onChanged: (val) {},
min: 0,
max: 100,
),
),
],
)
Run Code Online (Sandbox Code Playgroud)
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,
),
),
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
28001 次 |
最近记录: |