我有一个使用 ListView.builder 显示的项目列表(5-6 项) 。每个项目都包含一个 DropdownButton 小部件,供用户从 1 到 1000 中选择一个数字,因此包含1000 个 DropdownMenuItems。
我实现它如下所示,但问题是向下滚动 ListView太慢而且卡顿。即使 listView 有 5 或 6 个项目,但请注意,每个项目都有一个嵌入的 DropdownButton,其中包含 1000 个 DropdownMenuItem。
有解决办法吗?或者另一种方式来满足我的要求?
注意:即使我将DropdownMenuItems 的数量减少到 100 ,向下滚动 ListView 时它仍然会卡顿。
class List extends StatelessWidget {
final List<Item> // Contains 5 items.
final List<int> quantityList = List<int>.generate(1000, (int i) => i);
//--
child: ListView.builder(
itemBuilder: (buildContext, i) {
return MyItem(
quantityList,
);
},
itemCount: items.length(),
)
class MyItem extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Container(
child: DropdownButton<int>(
items: quantityList
.map(
(int e) =>
DropdownMenuItem<int>(
value: e,
child: Text(e.toString()),
),
)
.toList(),
),
),
);
}
编辑
我将 MyItem 类更改为如下,但仍然存在同样的问题。
尝试使用ListView和ListView.custom而不是ListView.builder来提前构建整个列表,而不是根据这个懒惰地构建整个列表,但仍然是同样的问题。
我还尝试使用--profile配置运行应用程序来模拟发布版本。性能更好,但仍然遭受可怕的口吃和滞后。在模拟器和物理设备上测试。
class MyItem extends StatelessWidget {
List<DropDownMenuItem> quantityList; // contains 1k
@override
Widget build(BuildContext context) {
return Container(
width:300,
height:300,
child: DropdownButton<int>(
items: quantityList,
),
),
);
}