flutter - 如何防止单向滚动?
问题描述
我有一个TabBarView
我只想在一个方向上滚动的。这是我迄今为止尝试过的:
class NoForwardNavScrollPhysics extends ClampingScrollPhysics {
const NoForwardNavScrollPhysics({ ScrollPhysics parent }) : super(parent: parent);
@override
NoForwardNavScrollPhysics applyTo(ScrollPhysics ancestor) {
return new NoForwardNavScrollPhysics(parent: buildParent(ancestor));
}
@override
double applyPhysicsToUserOffset(ScrollMetrics position, double offset) {
return 0.0;
}
}
...
TabBarView(
physics: NoForwardNavScrollPhysics(),
...
);
但它似乎只是禁用了拖动动作的视觉部分,因为选项卡在拖动结束时仍然会发生变化。我该怎么做?
解决方案
TabController
在上定义 aTabBarView
并使用控制器的addListener
方法检查控制器的index
、previousIndex
和indexIsChanging
属性。
class MyTabbedPage extends StatefulWidget {
const MyTabbedPage({ Key key }) : super(key: key);
@override
_MyTabbedPageState createState() => new _MyTabbedPageState();
}
class _MyTabbedPageState extends State<MyTabbedPage> with SingleTickerProviderStateMixin {
final List<Tab> myTabs = <Tab>[
new Tab(text: 'LEFT'),
new Tab(text: 'RIGHT'),
];
TabController _tabController;
@override
void initState() {
super.initState();
_tabController = new TabController(vsync: this, length: myTabs.length);
_tabController.addListener(_denyForwardsTab);
}
void _denyForwardsTab() {
if (_tabController.index == _tabController.previousIndex + 1) {
setState(() => _tabController.index = _tabController.previousIndex);
}
}
@override
void dispose() {
_tabController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
bottom: new TabBar(
controller: _tabController,
tabs: myTabs,
),
),
body: new TabBarView(
controller: _tabController,
children: myTabs.map((Tab tab) {
return new Center(child: new Text(tab.text));
}).toList(),
),
);
}
}
推荐阅读
- angular - 检查输入中输入的数字在数学上是否有效
- pandas - 为什么 pandas DataFrame.append() 会给出时区值错误?
- regex - Bash pgrep 正则表达式函数
- python - 列表的可变性,因为它与函数的参数有关
- python - ListCreateAPIView 创建一个新对象,即使一个已经存在。Django-Rest-Framework
- python - to_sql pyodbc 计数字段不正确或语法错误
- php - 如何在 PHP 中为 Active Record 设计模式创建自定义迭代器?
- python - 如何在 Beautifulsoup4 for Python 3.6 中使用 soup.find() 挑选出结果?
- asp.net-core - 如何从 .Net Core 2.1 RC1 升级到 .NET Core 2.1 的稳定版?
- javascript - 使用 setInterval 播放音频时 Safari 出现问题