我正在尝试制作水平可滚动小部件。它一定是无限的(或某种),所以我做到了。
Widget build(BuildContext context) {
final int initialPage = 1000;
return Container(
margin: const EdgeInsets.all(10.0),
height: 400,
child: PageView.builder(
controller: PageController(
keepPage: true,
initialPage: initialPage,
),
itemBuilder: (context, position) {
print(position);
return Container(child:Text(position),
);
},
itemCount: null,
),
);
}
然后我向右滚动3次,控制台将显示以下内容:
I/flutter (12616): 1000
I/flutter (12616): 1001
I/flutter (12616): 1002
I/flutter (12616): 1003
但是当我向后退时,我必须滚动4次才能看到一些结果,但是在中间它什么也没显示。
I/flutter (12616): 1000
I/flutter (12616): 1001
I/flutter (12616): 1002
I/flutter (12616): 1003
I/flutter (12616): 999
I/flutter (12616): 1004
I/flutter (12616): 1005
那是3倍,左4倍,再右6倍。 为什么itemBuilder函数有时无法运行?
答案 0 :(得分:0)
好吧,我认为原因是因为print()
在PageView构建器必须build
新建一个页面时运行。
当您返回(或前进)并转到已构建的页面时,构建器不会再次运行。 (什么都没建)
返回时已经创建了1003 1002 1001 1000页面。
请阅读PageView.builder constructor文档中的内容
使用可创建窗口小部件的逐页创建可滚动列表 是按需创建的。
此构造函数适用于具有较大(或 无限)的孩子数,因为仅将构建器称为 那些实际可见的孩子。