flutter - Flutter Tabcontroller 不要滑动标签直到填充当前
问题描述
在tabController
我定义侦听器时,它仅适用于 onTap,但当用手指滑动时,它的工作方式不同。我正在测试的是,给定一个条件或填写一个表格,用户可能会或可能不会进入下一个选项卡,它仅在用户使用onTap
但如果他刷它不起作用时才有效,迫使我放physics: NeverScrollableScrollPhysics()
,带走可能性让用户这样做。
class BookingHotel extends StatefulWidget {
@override
_BookingHotelState createState() => _BookingHotelState();
}
class _BookingHotelState extends State<BookingHotel>
with SingleTickerProviderStateMixin {
late TabController _tabController;
int _selectedIndex = 0;
bool flag = true;
List<Widget> tabs = [
Tab(text: 'Datos Reserva', icon: Icon(Icons.card_travel)),
Tab(text: 'Datos Cliente', icon: Icon(Icons.person_add)),
Tab(text: 'Envío', icon: Icon(Icons.description)),
];
@override
void initState() {
// TODO: implement initState
super.initState();
// Create TabController for getting the index of current tab
_tabController = TabController(length: tabs.length, vsync: this);
_tabController.addListener(() {
if (_tabController.indexIsChanging) {
//print('UndexIsChanging');
if (flag) {
setState(() {
_selectedIndex = _tabController.index;
_tabController.animateTo(0);
print("Selected Index: " + _tabController.index.toString());
});
} else {
print('else');
setState(() {
_tabController.animateTo(_selectedIndex);
});
}
}
//print("Selected Index: " + _tabController.index.toString());
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
bottom: TabBar(
indicator: BoxDecoration(
borderRadius: BorderRadius.circular(20), color: Colors.red),
indicatorWeight: 10.0,
controller: _tabController,
tabs: tabs,
),
),
body: TabBarView(
physics: NeverScrollableScrollPhysics(),
controller: _tabController,
children: [
Center(
child: Text(
_selectedIndex.toString() + 'Tab1',
style: TextStyle(fontSize: 40),
)),
Center(
child: Text(
_selectedIndex.toString() + 'Tab2',
style: TextStyle(fontSize: 40),
)),
Center(
child: Text(
_selectedIndex.toString() + 'Tab3',
style: TextStyle(fontSize: 40),
)),
],
),
);
}
}
解决方案
推荐阅读
- swift - 动态更改语言后交互式弹出手势工作奇怪
- spring - Spring Cloud Hystrix 项目真的被弃用了吗?
- json - WSO2 - 将字段添加到现有的 json
- r - 如何在国家边界内乘以栅格的像元值
- javascript - 如何从 vue 3 设置函数返回 watchEffect 中的变量
- html - 使弹性项目占据溢出容器的全部高度
- ios - 键盘显示iOS15后UITableViewCell删除
- wpf - 具有不同文本对齐方式的工具提示 DataGridCell
- c# - IOrderedEnumerable
' 不包含 'WithPrevious' 的定义 - node.js - 如何使用 mongodb 将多条记录更新到某个限制