flutter - 颤动 scollable.ensurevisible 不能反向工作
问题描述
请查看视频/gif:
我有一个页面浏览量,可以使当前选项卡处于活动状态。即使用户多次滑动屏幕,我也需要确保活动选项卡始终可见。它从左到右工作。但是当我们从右到左尝试返回时,它的行为并不像预期的那样。
页面浏览文件
PageView(
controller: pageController,
onPageChanged: (int page) {
_duaWidgetState.currentState.updateBtn(page + 1);
Scrollable.ensureVisible(
_duaWidgetState.currentState.activeBtn.currentContext);
},
children: loaded
带有滚动视图文件的 TabBarWidget
GlobalKey activeBtn = GlobalKey();
var _selectedTab = 1;
@override
Widget build(BuildContext context) {
return Container(
padding: EdgeInsets.symmetric(vertical: 20),
child: SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Row(
children: List.generate(widget.numberOfTab,
(index) => tabBarItem(index + 1, widget.numberOfTab, activeBtn)),
),
),
);
}
使用密钥的容器
Container(
key: activeBtn,
margin: EdgeInsets.only(left: 20),
padding: EdgeInsets.symmetric(
vertical: 10,
horizontal: 24,
),
解决方案
没有人回答我的问题。但是,经过大量的努力和时间。我找到了解决此问题的解决方法。希望这是一个错误,并会在即将到来的更新中由颤振团队修复。
Scrollable.ensureVisible(_duaWidgetState.currentState.activeBtn.currentContext);
此函数有一个称为对齐的可选参数,可以对其进行调整以确保所选元素/按钮位于视口的中心。(在我的情况下水平居中)。
我的小部件是水平滚动的,所以我需要根据 PageView() 的结果更新页码,这里当我使用
alignment: 0
从左到右滑动页面视图,它工作正常。但是,当我从右向左滑动页面以转到 PageView 小部件中的上一页时,通过这种对齐方式,ensureVisible 无法按预期工作。选定的元素/按钮不在视图中。我实验发现,当我使用
aligment: 1
从右向左滑动,ensureVisible 工作正常,但同时。当我从左到右滚动时,发生了同样的问题。
最后,所以我设法做一些解决方法来解决这个问题。解决方案是将最后一页索引存储在一个变量中,然后检查最后一页是否大于新页面alignment: 0
以及最后一页是否小于新页面aligment:1
。
PageView(
onPageChanged: (int page) {
if (lastPage < page) {
Scrollable.ensureVisible(
_duaWidgetState.currentState.activeBtn.currentContext,
alignment: -0.0100,
);
} else {
Scrollable.ensureVisible(
_duaWidgetState.currentState.activeBtn.currentContext,
(Perfect For font size 24)
alignment: 1.005,
);
}}
希望我的回答对以后的人有所帮助。
推荐阅读
- kotlin - 是否可以在 Kotlin 中将类属性作为函数参数传递?
- amazon-s3 - 当数据驻留在 s3 上的多个文件中时,如何在脚本模式下在 sagemaker 上训练 tensorflow?
- regex - 是否有一个正则表达式来获取所有分隔键值对的空格
- reactjs - 用户点击“提交”后在 React JS 中创建一个新的唯一 ID
- twitter - 如何使用 tweepy 从推文中获取图像
- visual-studio-code - Vscode(版本:1.46.1)未索引所有文件以进行搜索(更新后)
- splunk - Splunk 查询:为每个匹配的搜索事件检索前 5 个先前的 _raw 事件
- php - 您可以在原生 PHPWord 模板中使用 Word 内容控制字段作为占位符吗?
- angular - 如何通过服务改进列表组件?
- .net - 如何在浏览器 Azure C# 函数中打开容器文件