0

我正在尝试制作一个水平滚动的小部件。它必须是无限的(或某种),所以我已经这样做了。

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

4

1 回答 1

0

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

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

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


请从PageView.builder 构造函数的文档中阅读此内容

使用按需创建的小部件创建一个可滚动的列表,该列表逐页工作。

此构造函数适用于具有大量(或无限)子级的页面视图,因为仅对那些实际可见的子级调用构建器。

于 2020-04-04T21:15:18.550 回答