PageView.Builder() 的索引滚动问题
Index scrolling problem with PageView.Builder()
我正在尝试制作一个水平可滚动的小部件。它必须是无限的(或某种程度上),所以我这样做了。
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 函数有时不 运行?
嗯,我认为原因是 print()
运行 时 PageView 生成器必须 build
一个新页面。
当您返回(或前进)时,您转到一个已经构建的页面,构建器不再运行。 (无需构建)
返回时已经创建了页面1003 1002 1001 1000
请阅读 PageView.builder constructor
的文档
Creates a scrollable list that works page by page using widgets that
are created on demand.
This constructor is appropriate for page views with a large (or
infinite) number of children because the builder is called only for
those children that are actually visible.
我正在尝试制作一个水平可滚动的小部件。它必须是无限的(或某种程度上),所以我这样做了。
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 函数有时不 运行?
嗯,我认为原因是 print()
运行 时 PageView 生成器必须 build
一个新页面。
当您返回(或前进)时,您转到一个已经构建的页面,构建器不再运行。 (无需构建)
返回时已经创建了页面1003 1002 1001 1000
请阅读 PageView.builder constructor
的文档Creates a scrollable list that works page by page using widgets that are created on demand.
This constructor is appropriate for page views with a large (or infinite) number of children because the builder is called only for those children that are actually visible.