如果要滑动的项目很多,则滑块会挂起
Slider is hanging if lot of items to slide
我有大约 10000 个项目的水平列表,要滚动我使用的是 flutter 滑块,但它一点也不流畅。我认为在换向阀上设置状态不是正确的方法。
Slider(
key: ValueKey('slider'),
activeColor: Colors.blue,
inactiveColor: Colors.white,
min: 0.0,
max: scrollController.hasClients
? scrollController
.position.maxScrollExtent
: 10000.0,
value: value,
onChanged: (double value) {
scrollController.position
.jumpTo(value);
if (mounted)
setState(
() => this.value = value);
},
onChangeStart: (double value) {},
onChangeEnd: (double value) {
},
)```
这里有一些提高速度的技巧:
- 而不是使用
min: 0.0
和 max: 10000.0
你可以离开
从 0.0
到 1.0
的默认值,然后乘以
value * 10000.0
,这样 Slider
就不用计算了
从 0.0
到 10000.0
但从 0.0
到
1.0
.
- 如果
setState()
只更新 Slider
就好了
而不是整个小部件树。为此,您可以将
Slider
在 StatefulWidget
中,或者您可以将 Slider
换成
StatefulBuilder
.
- 运行
release
模式下的应用程序将比在 release
模式下更快
debug
模式。
这是一个简单的例子,使用 StatefulBuilder
:
StatefulBuilder(
builder: (context, setState) {
return Slider(
value: value,
onChanged: (value) {
_scrollController.position.jumpTo(value * 10000);
setState(() {
this.value = value;
});
},
);
},
)
我有大约 10000 个项目的水平列表,要滚动我使用的是 flutter 滑块,但它一点也不流畅。我认为在换向阀上设置状态不是正确的方法。
Slider(
key: ValueKey('slider'),
activeColor: Colors.blue,
inactiveColor: Colors.white,
min: 0.0,
max: scrollController.hasClients
? scrollController
.position.maxScrollExtent
: 10000.0,
value: value,
onChanged: (double value) {
scrollController.position
.jumpTo(value);
if (mounted)
setState(
() => this.value = value);
},
onChangeStart: (double value) {},
onChangeEnd: (double value) {
},
)```
这里有一些提高速度的技巧:
- 而不是使用
min: 0.0
和max: 10000.0
你可以离开 从0.0
到1.0
的默认值,然后乘以value * 10000.0
,这样Slider
就不用计算了 从0.0
到10000.0
但从0.0
到1.0
. - 如果
setState()
只更新Slider
就好了 而不是整个小部件树。为此,您可以将Slider
在StatefulWidget
中,或者您可以将Slider
换成StatefulBuilder
. - 运行
release
模式下的应用程序将比在release
模式下更快debug
模式。
这是一个简单的例子,使用 StatefulBuilder
:
StatefulBuilder(
builder: (context, setState) {
return Slider(
value: value,
onChanged: (value) {
_scrollController.position.jumpTo(value * 10000);
setState(() {
this.value = value;
});
},
);
},
)