有没有办法在Flutter中使用PageView进行无限循环?

fad*_*sdh 3 dart flutter

有没有办法在Flutter中使用PageView进行无限循环?例如,如果我的PageView有5页,在刷到第5页后,我将能够以相同的方向再次滑动以进入第1页.

Rém*_*let 12

默认情况下,PageView是无限的.除非你提供itemCount.

以下将无限打印0到4页

final controller = new PageController(initialPage: 999);
 ...

new PageView.builder(
      controller: controller,
      itemBuilder: (context, index) {
        return new Center(
          child: new Text('${index % 5}'),
        );
      },
)
Run Code Online (Sandbox Code Playgroud)

  • 随着页面的继续,这会不断消耗内存吗?或者以前的页面会从内存中释放吗? (4认同)
  • 但这不是黑客吗?好的,也许没有人会向左滚动999页,但是如果他这样做的话,那就结束了。据我所知,它更像是一条“半线”。不过,很高兴知道有一种方法可以给出初始页面。 (3认同)
  • 哦,我认为 itemCount 是必需的,谢谢您的澄清。 (2认同)
  • @MobileMon 它们将从内存中释放,除非您明确告诉框架保留它们。 (2认同)

小智 10

如果您有预定义的小部件列表,则可以使用以下方法实现连续滚动:

return PageView.builder(
  itemBuilder: (context, index) {
    return _children[index % _children.length];
  },
  controller: pageController,
);
Run Code Online (Sandbox Code Playgroud)

  • 这是行不通的,因为如果没有任何黑客攻击, pageController 不会低于零。 (2认同)

小智 7

我使用这个库找到了一个很好的解决方案 https://pub.dev/packages/infinity_page_view

只需导入库并使用InfinityPageView而不是PageView

InfinityPageView(
  controller: infinityPageController,
  itemCount: colorList.length,
  itemBuilder: (context, index) {
    return Container(
      color: colorList[index];
    );
  },
)
Run Code Online (Sandbox Code Playgroud)