我想添加一个滑块来定义地图中的搜索半径。当半径较小时,每个米都会计数,因此滑块应允许进行细粒度的更改。当半径变大时,例如5公里和6公里之间的差异很小,因此无需花费很多像素进行精细控制。
这只是非线性滑块有用的许多示例(this page details usability issues related to linear scales),但是我在Material或Flutter sliders中找不到任何引用。可惜的是,因为它们已经有离散的滑块了;唯一缺少的部分是接受值列表而不是一步一步地完成,
这是一个非线性滑块的示例,它与我所寻求的模糊地相似(取自UI Movement):
我错过了什么吗?有没有一种方法可以在Android / Flutter中快速实现此功能,还是需要为此制作一个完全自定义的组件?
答案 0 :(得分:0)
您可以通过列出可能的值,然后使用滑块为列表中的元素索引来实现类似的功能。
class ListSlider extends State{
List<String> items = ['one','two','four','eight'];
int selectedIndex = 0;
setSelected(int value) {
setState(() {
selectedIndex = value;
});
}
Widget build(BuildContext context) {
return Column(
children: [
Text(items[selectedIndex]),
Slider(
min: 0,
max: items.length -1,
divisions: items.length -1
onChanged: (double value) => setSelected(value.round())
)
]
);
}
}
另一种可能对数字特别有趣的方法是,使用范围为(0.0,1.0)的滑块,然后通过二次动画曲线变换滑块的输出。