我ListView
最多缺少 10 件商品。每个列表项将包含一个DropDownButton
大约 1KDropDownMenuItems
的选项。
在原生 Android 中,我能够实现一个执行非常流畅的功能,但是使用 Flutter 需要一段时间来构建导致 UI 冻结的 ListView。
在我的情况下,我需要在其中一项的每次更改时重建 ListView,所以这将是一个主要问题。
有没有办法让 ListView 构建得更快,或者至少能够显示ProgressBar
直到它构建?
NB:使用--profile
配置来模拟发布版本可以大大提高性能,但仍然感觉冻结。
这是我的示例代码,如果您想自己测试,可以直接复制/粘贴。
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
bool showList = false;
final List<DropdownMenuItem<int>> selections = List.generate(
1000,
(index) => DropdownMenuItem<int>(
value: index,
child: Text("$index"),
),
);
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body: Container(
width: double.infinity,
child: Column(
children: [
ElevatedButton(
child: Text("toggle list visibility"),
onPressed: () {
setState(() {
showList = !showList;
});
},
),
Expanded(
child: showList
? ListView.builder(
cacheExtent: 2000,
itemCount: 10,
itemBuilder: (context, index) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: Center(
child: Container(
height: 200,
color: Colors.green,
child: Column(
children: [
Text("List Item: $index"),
DropdownButton<int>(
onChanged: (i) {},
value: 1,
items: selections,
),
],
),
),
),
);
})
: Text("List Not Built"),
),
],
),
),
),
);
}
}