Как создать бесконечность 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
или что-то подобное.