颤振:PageView.builder onPage 属性 - 我可以更改以便在全页面滑动而不是 0.50 时触发索引

Posted

技术标签:

【中文标题】颤振:PageView.builder onPage 属性 - 我可以更改以便在全页面滑动而不是 0.50 时触发索引【英文标题】:FLUTTER: PageView.builder onPage property - can i change so the index is triggered upon a FULL page swipe instead of 0.50 【发布时间】:2021-08-22 09:30:57 【问题描述】:

在 Flutter 中使用 PageView.builder,我做了一个基本测验,随机重新填充问题,以及一些我想在每次看到新页面时触发的动画。

另外,相关的是,用户只有在回答了每个页面上的问题后才能进入下一页。 (因此为了控制滑动,我在物理属性上创建了一个三元运算符,其中 onScroll 布尔值在 onPage 方法被触发时设置为 false,(稍后用户通过按下按钮回答问题时将其更改回 true) )。

所以,除了一个烦人的副作用之外,一切都运行良好:

onPageChange 属性是“当视口中心中的页面发生变化时调用。”并且为新页面设置的动画将在上一页从视图中消失时播放,因为 onScroll 布尔值所需的 onState 方法在滚动过程中被触发,从而导致重建。

一个简单的解决方法是,如果我可以将 onPageChange 属性更改为仅在 FULL 页面滑动完成后触发......但我不知道如何实现这一点......?

谢谢!


       @override
  Widget build(BuildContext context) 
    return Material(
        child: PageView.builder(
    
            onPageChanged: (int i) 

          print('page changed! + i');
          setState(() _canScroll = false;);
      ,
      physics: _canScroll
          ? AlwaysScrollableScrollPhysics()
          : NeverScrollableScrollPhysics(),
      pageSnapping: true,
      itemBuilder: (context, index) 
        _index = index;
        return WordCardWidget(
          word1: _word1,
          word2: _word2,
          answer: answer,
          animationType: _cardAnimType,
          buttonSelected: buttonSelected,
        );
      ,
    ));
  

【问题讨论】:

【参考方案1】:

在触发 setState() 之前尝试使用mounted 属性。 这样,它将确保小部件在更改状态之前完全挂载。

【讨论】:

感谢您的提示。在这种特殊情况下,mounted 属性似乎不起作用,但只是阅读它,看起来像是一个有用的属性,可以在构建等出现问题时使用。【参考方案2】:

留下这个,以防它对任何未来的读者有所帮助。

我通过使用 itemCount 属性并使用局部变量递增来实现这一点,因此我不需要在 onPage 属性上使用 setState 方法。用户只有在尝试回答一个 itemCount 加一的问题后才能继续浏览每一页。

(我已经修改了我原来的帖子,我错误地认为这不起作用)。

这里是相关的工作代码sn-p供参考:)


       child: PageView.builder(
          itemCount: itemCount,
            onPageChanged: (int i) 
          print('page changed! + i');
      ,

【讨论】:

以上是关于颤振:PageView.builder onPage 属性 - 我可以更改以便在全页面滑动而不是 0.50 时触发索引的主要内容,如果未能解决你的问题,请参考以下文章

Flutter PageView 属性使用详解

在垂直PageView中包装不同高度的项目 - Flutter

Flutter:如何在对话框中使用路由器

如何创建水平 ListView.builder

如何在 Flutter 中实现类似视频流和视频滚动的 Tiktok

GridviewPager 不路由 onpaging 事件