颤振: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 时触发索引的主要内容,如果未能解决你的问题,请参考以下文章
在垂直PageView中包装不同高度的项目 - Flutter