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.