如何在 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
如何创建 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