如何在 Flutter 中创建无限的 PageView

How to create infinity PageView in Flutter

如何创建 PageView Flutter 支持的圆形滚动条?这意味着当我站在 0 页面上时,我可以向左滚动到最后一页。

更新:我回答了这个问题并更新了一个要点来源。

我对我所做的是将我的页面控制器的 initialPage 设置为 10000 * pageCount,并且在我的页面视图本身中,我有 itemBuilder: (context, index) => pages[index % pageCount],itemCount: null。它并不是真正的无限,但大多数用户不会向后滚动 10000 页,因此它适用于我的用例。据我所知,没有一种优雅的方法可以让它真正无限。您可能会设置一个侦听器,以便每当 controller.page 即将变为 0 时,您将其设置回 10000 * pageCount 或类似的东西。

我在这里找到了解决办法。我用 2 个条子创建了一个 CustomScrollView。一进一退。但是,我必须计算我的列表是否短。

typedef Widget Builder(BuildContext buildContext, int index);

class InfiniteScrollView extends StatefulWidget {
  final Key center = UniqueKey();
  final Builder builder;
  final int childCount;

  InfiniteScrollView(
      {Key key, @required this.builder, @required this.childCount})
      : super(key: key);

  @override
  _InfiniteScrollViewState createState() => _InfiniteScrollViewState();
}

class _InfiniteScrollViewState extends State<InfiniteScrollView> {
  @override
  Widget build(BuildContext context) {
    return Container(
      child: CustomScrollView(
        center: widget.center,
        scrollDirection: Axis.horizontal,
        slivers: <Widget>[
          SliverList(
            delegate: SliverChildBuilderDelegate(
              (BuildContext context, int index) => widget.builder(
                  context, widget.childCount - index % widget.childCount - 1),
            ),
          ),
          SliverList(
            delegate: SliverChildBuilderDelegate(widget.builder),
            key: widget.center,
          )
        ],
      ),
    );
  }
}

更新:我写了一个新的小部件,它支持无限的 TabBar。

https://gist.github.com/MrNinja/6f6a5fc73803bdfaf2a493a35c258fee