Как создать бесконечность PageView во Flutter

Как создать PageView которые поддерживаются прокруткой круга в Flutter? Это значит, когда я стою0 страницу, я мог прокрутить влево до последней страницы.

Обновлено: я ответил на этот вопрос и также обновил основной источник.

2 ответа

Решение

Я нашел здесь решение. Я создаюCustomScrollViewс 2 щепками. Один для движения вперед, один для возврата. Однако я должен подсчитать, короток ли мой список.

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

Что я сделал со своим, я установил для своего контроллера страницы initialPage на 10000 * pageCount, и в самом просмотре страницы у меня есть itemBuilder: (context, index) => pages[index % pageCount], а также itemCount: null. Это не совсем бесконечно, но большинство пользователей не будут прокручивать 10000 страниц назад, поэтому для моего варианта использования это работает. Насколько я знаю, не существует элегантного способа сделать его действительно бесконечным. Вероятно, вы могли бы настроить слушателя так, чтобы каждый разcontroller.page собирается стать 0, вы установите его обратно на 10000 * pageCount или что-то подобное.

Другие вопросы по тегам