从flutter's official documentation:
ListView.builder creates a scrollable, linear array of widgets that are created on demand. This constructor is appropriate for list views with a large (or infinite) number of children because the builder is called only for those children that are actually visible.
我正在做一些实验,以了解其工作原理并了解它是否仅创建了实际上可见的小部件。
我写了这个简单的代码:
List<int> numbers = [1,2,3,4,5,6,7,8,9];
void test(){
print("one widget created"+DateTime.now().toString());
}
Widget build(BuildContext context) {
return Container(
height: 300,
child: ListView.builder(
itemBuilder: (ctx, index){
test();
return Card(
Text("number "+numbers[index].toString())
);
}
现在从理论上讲,如果屏幕上显示的Cards的最大数量为3,则在控制台中我应该只读取3条消息,但是如果执行代码,我将在控制台中看到9条消息,这意味着该功能已执行9次而不是预期的3。
那么,什么是按需创建窗口小部件?
最佳答案
是的,您在这里是正确的,ListView.builder
不会创建3个元素,而是9个元素,因为它在屏幕的顶部和底部保留了一些缓冲区以保持fps。假设它仅创建了3个项目,并且用户以高速滚动,则滚动会滞后,因为Flutter需要先创建要显示的项目,然后将其渲染为,这样可以避免这些类型的情况,它已经保留了一定数量的缓冲区。它按需创建小部件,这是正确的,让我们举个例子,如果有1000个项目需要显示,一次只能显示3个,那么Flutter不会创建1000个小部件对象,而是像上面所说的那样创建只有9,并且随着用户滚动它会破坏并创建新的。
关于flutter - ListView.builder按需创建窗口小部件是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58097736/