【问题标题】:Index scrolling problem with PageView.Builder()PageView.Builder() 的索引滚动问题
【发布时间】:2020-04-04 20:25:33
【问题描述】:

我正在尝试制作一个水平滚动的小部件。它必须是无限的(或某种),所以我已经这样做了。

Widget build(BuildContext context) {
    final int initialPage = 1000;

    return Container(
      margin: const EdgeInsets.all(10.0),
      height: 400,
      child: PageView.builder(
        controller: PageController(
          keepPage: true,
          initialPage: initialPage,
        ),

        itemBuilder: (context, position) {

          print(position);

          return Container(child:Text(position),
          );
        },
        itemCount: null,
      ),
    );
  }

然后我向右滚动 3 次,控制台显示:

I/flutter (12616): 1000
I/flutter (12616): 1001
I/flutter (12616): 1002
I/flutter (12616): 1003

但是当我向后退时,我必须滚动 4 次才能看到一些结果,但在中间它什么也没显示。

I/flutter (12616): 1000
I/flutter (12616): 1001
I/flutter (12616): 1002
I/flutter (12616): 1003
I/flutter (12616): 999
I/flutter (12616): 1004
I/flutter (12616): 1005

那是向右 3 次,向左 4 次,再次向右 6 次。 为什么 itemBuilder 函数有时不运行?

【问题讨论】:

    标签: flutter pageviews flutter-pageview


    【解决方案1】:

    嗯,我认为原因是当 PageView 构建器必须 build 一个新页面时,print() 运行。

    当您返回(或前进)时,并转到已构建的页面,构建器不会再次运行。 (无需构建)

    返回时已经创建了页面 1003 1002 1001 1000。


    请从PageView.builder constructor的文档中阅读此内容

    使用小部件创建一个可滚动列表,逐页工作 按需创建

    此构造函数适用于具有较大(或 无限)子数,因为生成器被称为 仅用于 那些实际可见的孩子

    【讨论】:

    • 谢谢!所以现在我使用“onPageChange”来获取真实位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-27
    • 2018-11-24
    • 2019-09-25
    相关资源
    最近更新 更多