flutter - 如何在 RangeSlider 颤振中有两个范围值
问题描述
我需要一个显示一天中小时数的 RangeSlider。现在我通过 RangeValue(0,24) 显示它 我需要在左侧显示 0-12 AM,在右侧显示 1-12 PM 有没有办法像这样拆分 RangeValues
class ClockRangeWidget extends StatefulWidget {
@override
State<StatefulWidget> createState() => _ClockRangeWidget();
}
class _ClockRangeWidget extends State<ClockRangeWidget> {
RangeValues _currentRangeValues = const RangeValues(0, 24);
static String _valueToString(double value) {
return value.toStringAsFixed(0);
}
@override
Widget build(BuildContext context) {
return SliderTheme(
data: SliderThemeData(
activeTrackColor: kPrimaryColor,
inactiveTrackColor: Colors.grey[300],
trackHeight: 6.0,
thumbColor: Colors.white,
activeTickMarkColor: kPrimaryColor,
inactiveTickMarkColor:Colors.grey[300],
valueIndicatorColor: Colors.grey,
valueIndicatorTextStyle: TextStyle(
color: Colors.white,
),
),
child: RangeSlider(
values: _currentRangeValues,
min: 0,
max: 24,
divisions: 23,
labels: RangeLabels(
_currentRangeValues.start.round() >= 12 ? _currentRangeValues.start.round().toString() + '.00 PM' : _currentRangeValues.start.round().toString() + '.00 AM',
_currentRangeValues.end.round() >= 12 ? _currentRangeValues.end.round().toString() + '.00 PM' : _currentRangeValues.end.round().toString() + '.00 AM',
),
onChanged: (RangeValues values) {
setState(() {
_currentRangeValues = values;
});
},
),
);
}
}
解决方案
增加divisions
以24
使滑块正确划分。然后你应该能够基于RangeValues
.
class ClockRangeWidget extends StatefulWidget {
@override
State<StatefulWidget> createState() => _ClockRangeWidget();
}
class _ClockRangeWidget extends State<ClockRangeWidget> {
RangeValues _currentRangeValues = const RangeValues(0, 24);
static String _valueToString(double value) {
return value.toStringAsFixed(0);
}
@override
Widget build(BuildContext context) {
return SliderTheme(
data: SliderThemeData(
inactiveTrackColor: Colors.grey[300],
trackHeight: 6.0,
thumbColor: Colors.white,
inactiveTickMarkColor: Colors.grey[300],
valueIndicatorColor: Colors.grey,
valueIndicatorTextStyle: TextStyle(
color: Colors.white,
),
),
child: RangeSlider(
values: _currentRangeValues,
min: 0,
max: 24,
divisions: 24,
labels: RangeLabels(
_getLabel(_currentRangeValues.start),
_getLabel(_currentRangeValues.end),
),
onChanged: (RangeValues values) {
setState(() {
_currentRangeValues = values;
});
},
),
);
}
String _getLabel(double value) {
if (value > 12.0) {
return "${(value - 12.0).round()} PM";
} else {
return "${value.round()} AM";
}
}
}
推荐阅读
- php - 如何在codeigniter中从主模板加载选定的函数
- tcp - 为什么我的 tcp 服务器发送数据两次,我的 tcp 服务器是基于 lwip raw api
- python - 如何使用 pandas 获取特定值?
- r - 如何列出模式之间具有字符的数据框
- html - 如何在引导程序 4 模态中的 DIV 之间留出空格?
- arduino - Arduino pinmode() 作为输入/输出来检查 DRAM IC 数据引脚
- flutter - 该应用程序在尝试创建视频通话时崩溃
- graph-databases - 从原点发现一个类型的所有顶点
- javascript - 如何在 ng2-pdf-viewer 上突出显示 synctex 输出值
- loops - 一个表的 SQL 循环结果