Flutter 颤振选项卡控制器在填充电流之前不滑动选项卡
在Flutter 颤振选项卡控制器在填充电流之前不滑动选项卡,flutter,Flutter,在选项卡controller中,当我定义Listener时,它只在onTap中工作,但当用手指滑动时,它的工作方式不同。我正在测试的是,给定一个条件或填写一个表单,用户可能会也可能不会进入下一个选项卡,它只在用户使用onTap时起作用,但如果他滑动它不起作用,则迫使我放入物理:NeverScrollableScrollPhysics(),从而消除了用户这样做的可能性 class BookingHotel extends StatefulWidget { @override _Bookin
选项卡controller
中,当我定义Listener时,它只在onTap中工作,但当用手指滑动时,它的工作方式不同。我正在测试的是,给定一个条件或填写一个表单,用户可能会也可能不会进入下一个选项卡,它只在用户使用onTap
时起作用,但如果他滑动它不起作用,则迫使我放入物理: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),
)),
],
),
);
}
}
class BookingHotel扩展了StatefulWidget{
@凌驾
_BookingHotelState createState()=>\u BookingHotelState();
}
类BookingHotelState扩展状态
使用SingleTickerProviderStateMixin{
late-TabController\u-TabController;
int _selectedIndex=0;
布尔标志=真;
列表选项卡=[
选项卡(文本:“Datos Reserva”,图标:图标(Icons.card_travel)),
选项卡(文本:“Datos客户”,图标:图标(Icons.person_add)),
选项卡(文本:“Envío”,图标:图标(Icons.description)),
];
@凌驾
void initState(){
//TODO:实现initState
super.initState();
//创建TabController以获取当前选项卡的索引
_tabController=tabController(长度:tabs.length,vsync:this);
_tabController.addListener((){
if(tab controller.indexIsChanging){
//打印(“不改变方向”);
国际单项体育联合会(旗){
设置状态(){
_selectedIndex=\u tabController.index;
_tabController.animateTo(0);
打印(“所选索引:”+_tabController.Index.toString());
});
}否则{
打印(‘其他’);
设置状态(){
_tabController.animateTo(_selectedIndex);
});
}
}
//打印(“所选索引:”+_tabController.Index.toString());
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
底部:选项卡栏(
指标:盒子装饰(
边界半径:边界半径。圆形(20),颜色:颜色。红色),
指示器重量:10.0,
控制器:\ tab控制器,
标签:标签,
),
),
正文:选项卡视图(
物理学:NeverscrollableScroll物理学(),
控制器:\ tab控制器,
儿童:[
居中(
子:文本(
_已选择dex.toString()+“Tab1”,
样式:TextStyle(字体大小:40),
)),
居中(
子:文本(
_已选择dex.toString()+“Tab2”,
样式:TextStyle(字体大小:40),
)),
居中(
子:文本(
_已选择dex.toString()+“Tab3”,
样式:TextStyle(字体大小:40),
)),
],
),
);
}
}