Flutter 如何在Flatter中创建带有“下一步”和“上一步”按钮的可滚动选项卡
我正在尝试创建一个带有“下一个”和“上一个”按钮的可滚动选项卡列表,以便当我单击这些按钮时,可以看到视图中不存在的下一个隐藏选项卡。反之亦然。 注意按钮 到目前为止,我已经知道了这些,但是我无法捕捉到视图中的标签并相应地采取行动,有人能帮忙吗Flutter 如何在Flatter中创建带有“下一步”和“上一步”按钮的可滚动选项卡,flutter,dart,flutter-layout,Flutter,Dart,Flutter Layout,我正在尝试创建一个带有“下一个”和“上一个”按钮的可滚动选项卡列表,以便当我单击这些按钮时,可以看到视图中不存在的下一个隐藏选项卡。反之亦然。 注意按钮 到目前为止,我已经知道了这些,但是我无法捕捉到视图中的标签并相应地采取行动,有人能帮忙吗 class NewEntryPage extends StatefulWidget { @override State<StatefulWidget> createState() => NewEntryPageState();
class NewEntryPage extends StatefulWidget {
@override
State<StatefulWidget> createState() => NewEntryPageState();
}
class NewEntryPageState extends State<NewEntryPage>
with SingleTickerProviderStateMixin {
final List<Tab> myTabs = <Tab>[
Tab(text: 'bro'),
Tab(text: 'bro'),
Tab(text: 'bro'),
Tab(text: 'bro'),
Tab(text: 'bro'),
Tab(text: 'bro'),
Tab(text: 'bro'),
Tab(text: 'bro'),
Tab(text: 'bro'),
Tab(text: 'bro'),
Tab(text: 'bro'),
Tab(text: 'bro'),
Tab(text: 'bro'),
Tab(text: 'bro'),
Tab(text: 'bro'),
Tab(text: 'bro'),
Tab(text: 'bro'),
Tab(text: 'bro'),
Tab(text: 'bro'),
Tab(text: 'bro'),
];
TabController _tabController;
@override
void initState() {
super.initState();
_tabController = TabController(vsync: this, length: myTabs.length);
}
@override
void dispose() {
_tabController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
double width = MediaQuery.of(context).size.width;
return Column(
children: <Widget>[
Container(
margin: EdgeInsets.symmetric(vertical: 20.0),
padding: const EdgeInsets.all(10.0),
color: Colors.white,
child: Column(
children: <Widget>[
Container(
child: Row(
children: [
IconButton(
icon: Icon(Icons.arrow_back_ios),
onPressed: () {
if (_tabController.index > 0) {
_tabController.animateTo(_tabController.index - 1);
} else {
Scaffold.of(context).showSnackBar(SnackBar(
content: Text("Can't go back"),
));
}
},
),
Expanded(
child: TabBar(
isScrollable: true,
controller: _tabController,
labelStyle: TextStyle(color: Colors.black),
unselectedLabelColor: Colors.black,
labelColor: Colors.blue,
tabs: List.generate(
20,
(index) {
return Tab(
text: "Tab $index",
);
},
),
),
),
IconButton(
icon: Icon(Icons.arrow_forward_ios),
onPressed: () {
if (_tabController.index + 1 < 20) {
_tabController.animateTo(_tabController.index + 1);
} else {
Scaffold.of(context).showSnackBar(SnackBar(
content: Text("Can't move forward"),
));
}
},
),
],
),
),
],
),
),
],
);
}
}
class NewEntryPage扩展StatefulWidget{
@凌驾
State createState()=>NewEntryPageState();
}
类NewEntryPageState扩展了状态
使用SingleTickerProviderStateMixin{
最终列表myTabs=[
选项卡(文本:“bro”),
选项卡(文本:“bro”),
选项卡(文本:“bro”),
选项卡(文本:“bro”),
选项卡(文本:“bro”),
选项卡(文本:“bro”),
选项卡(文本:“bro”),
选项卡(文本:“bro”),
选项卡(文本:“bro”),
选项卡(文本:“bro”),
选项卡(文本:“bro”),
选项卡(文本:“bro”),
选项卡(文本:“bro”),
选项卡(文本:“bro”),
选项卡(文本:“bro”),
选项卡(文本:“bro”),
选项卡(文本:“bro”),
选项卡(文本:“bro”),
选项卡(文本:“bro”),
选项卡(文本:“bro”),
];
TabController\u TabController;
@凌驾
void initState(){
super.initState();
_tabController=tabController(vsync:this,length:myTabs.length);
}
@凌驾
无效处置(){
_tabController.dispose();
super.dispose();
}
@凌驾
小部件构建(构建上下文){
double width=MediaQuery.of(context).size.width;
返回列(
儿童:[
容器(
边缘:边缘组。对称(垂直:20.0),
填充:常数边集全部(10.0),
颜色:颜色,白色,
子:列(
儿童:[
容器(
孩子:排(
儿童:[
图标按钮(
图标:图标(图标、箭头、背面),
已按下:(){
如果(_tabController.index>0){
_tabController.animateTo(_tabController.index-1);
}否则{
Scaffold.of(上下文).showSnackBar(SnackBar(
内容:文本(“无法返回”),
));
}
},
),
扩大(
孩子:TabBar(
isScrollable:是的,
控制器:\ tab控制器,
标签样式:文本样式(颜色:Colors.black),
未选择的标签颜色:Colors.black,
labelColor:Colors.blue,
选项卡:List.generate(
20,
(索引){
返回选项卡(
文本:“Tab$index”,
);
},
),
),
),
图标按钮(
图标:图标(图标。箭头\前进\ ios),
已按下:(){
如果(_tabController.index+1<20){
_tabController.animateTo(_tabController.index+1);
}否则{
Scaffold.of(上下文).showSnackBar(SnackBar(
内容:文本(“无法前进”),
));
}
},
),
],
),
),
],
),
),
],
);
}
}
这就是代码的作用
在“背面”和“下一步”按钮上,您正在更新选项卡控制器的值。您应该创建一个可滚动的选项卡列表,并让按钮更新ScrollController状态,而不是TabController。TabController正在更新当前选择的选项卡以及滚动位置。请您在手上放一点灰尘,并用一些代码提供答案,如果最后一个选项卡(项目)是视图中的一半,我希望在单击“下一步”或“上一步”按钮@Apealed时,它是第一个完全可见的选项卡