作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
从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())
);
}
最佳答案
是的,您在这里是正确的,ListView.builder
不会创建3个元素,而是9个元素,因为它在屏幕的顶部和底部保留了一些缓冲区以保持fps。假设它仅创建了3个项目,并且用户以高速滚动,则滚动会滞后,因为Flutter需要先创建要显示的项目,然后将其渲染为,这样可以避免这些类型的情况,它已经保留了一定数量的缓冲区。它按需创建小部件,这是正确的,让我们举个例子,如果有1000个项目需要显示,一次只能显示3个,那么Flutter不会创建1000个小部件对象,而是像上面所说的那样创建只有9,并且随着用户滚动它会破坏并创建新的。
关于flutter - ListView.builder按需创建窗口小部件是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58097736/
我是一名优秀的程序员,十分优秀!