PageView.Builder()的索引滚动问题

时间:2020-04-04 20:25:33

标签: flutter pageviews flutter-pageview

我正在尝试制作水平可滚动小部件。它一定是无限的(或某种),所以我做到了。

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函数有时无法运行?

1 个答案:

答案 0 :(得分:0)

好吧,我认为原因是因为print()在PageView构建器必须build新建一个页面时运行。

当您返回(或前进)并转到已构建的页面时,构建器不会再次运行。 (什么都没建)

返回时已经创建了1003 1002 1001 1000页面。


请阅读PageView.builder constructor文档中的内容

使用可创建窗口小部件的逐页创建可滚动列表 是按需创建的

此构造函数适用于具有较大(或 无限)的孩子数,因为仅将构建器称为 那些实际可见的孩子