Dart 卡片小部件中的选项卡栏导航
我有一个使用脚手架和底部导航的主页。在脚手架的主体中,我有一个包含2个卡片小部件的页面。我正在尝试为第二张独立于底部导航的卡实现一个“子”选项卡栏导航。有没有一种方法可以实现卡片小部件的选项卡式栏导航?我试过使用脚手架,但是标签栏的高度太大了。从文档中可以看出,这似乎是由于flexiblespace小部件造成的,但我还没有找到消除/扩展它的方法,指针将受到赞赏Dart 卡片小部件中的选项卡栏导航,dart,flutter,Dart,Flutter,我有一个使用脚手架和底部导航的主页。在脚手架的主体中,我有一个包含2个卡片小部件的页面。我正在尝试为第二张独立于底部导航的卡实现一个“子”选项卡栏导航。有没有一种方法可以实现卡片小部件的选项卡式栏导航?我试过使用脚手架,但是标签栏的高度太大了。从文档中可以看出,这似乎是由于flexiblespace小部件造成的,但我还没有找到消除/扩展它的方法,指针将受到赞赏 import 'package:flutter/material.dart'; void main() { runApp(new
import 'package:flutter/material.dart';
void main() {
runApp(new MaterialApp(home: new MyTabs()));
}
class MyTabs extends StatefulWidget {
@override
MyTabsState createState() => new MyTabsState();
}
class MyTabsState extends State<MyTabs> with SingleTickerProviderStateMixin {
TabController controller;
@override
void initState() {
super.initState();
controller = new TabController(vsync: this, length: 3);
}
@override
void dispose() {
controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text("Pages"),
backgroundColor: Colors.deepOrange,
),
bottomNavigationBar: new Material(
color: Colors.deepOrange,
child: new TabBar(controller: controller, tabs: <Tab>[
new Tab(icon: new Icon(Icons.arrow_forward)),
new Tab(icon: new Icon(Icons.arrow_downward)),
new Tab(icon: new Icon(Icons.arrow_back)),
])),
body: new TabBarView(controller: controller, children: <Widget>[
new First(),
new Second(),
new Third()
]));
}
}
class First extends StatefulWidget {
@override
FirstState createState() => new FirstState();
}
class FirstState extends State<First> with SingleTickerProviderStateMixin {
TabController controller1;
@override
void initState() {
super.initState();
controller1 = new TabController(vsync: this, length: 3);
}
@override
void dispose() {
controller1.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return new Column(children: [
new Expanded(
child: new Card(
child: new Center(
child: new Icon(Icons.favorite,
size: 150.0, color: Colors.redAccent))),
),
new Expanded(child: new Card(
child: new Center(
child: new Container(
child: new Scaffold(
appBar: new AppBar(
bottom: new TabBar(
controller: controller1,
tabs: <Tab>[
new Tab(icon: new Icon(Icons.arrow_forward)),
new Tab(icon: new Icon(Icons.arrow_downward)),
new Tab(icon: new Icon(Icons.arrow_back)),
]
)),
body: new TabBarView(
controller: controller1,
children: <Widget>[
new Text("Hello"),
new Text("world"),
new Text("Hi")
]
)
)
)
))),
]);
}
}
class Second extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Container(
child: new Center(
child: new Icon(Icons.favorite, size: 150.0, color: Colors.redAccent)
)
);
}
}
class Third extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Container(
child: new Center(
child: new Icon(Icons.favorite, size: 150.0, color: Colors.redAccent)
)
);
}
}
导入“包装:颤振/材料.省道”;
void main(){
runApp(新材料应用程序(主页:new MyTabs());
}
类MyTabs扩展StatefulWidget{
@凌驾
MyTabsState createState()=>新建MyTabsState();
}
类MyTabsState使用SingleTickerProviderStateMixin扩展状态{
tab控制器;
@凌驾
void initState(){
super.initState();
控制器=新的TabController(vsync:this,长度:3);
}
@凌驾
无效处置(){
controller.dispose();
super.dispose();
}
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:新的appBar(
标题:新文本(“页面”),
背景颜色:Colors.deepOrange,
),
底部导航栏:新材质(
颜色:颜色。深橙色,
子项:新选项卡栏(控制器:控制器,选项卡:[
新建选项卡(图标:新建图标(图标.箭头向前)),
新建选项卡(图标:新建图标(图标。向下箭头)),
新建选项卡(图标:新建图标(图标.箭头返回)),
])),
主体:新TabBarView(控制器:控制器,子级:[
新的第一个(),
新的第二个(),
新第三()
]));
}
}
类首先扩展StatefulWidget{
@凌驾
FirstState createState()=>新的FirstState();
}
类FirstState使用SingleTickerProviderStateMixin扩展状态{
tabcontroller1;
@凌驾
void initState(){
super.initState();
controller1=新的TabController(vsync:this,长度:3);
}
@凌驾
无效处置(){
控制器1.dispose();
super.dispose();
}
@凌驾
小部件构建(构建上下文){
返回新列(子项:[
新扩展(
孩子:新卡(
孩子:新中心(
子项:新图标(Icons.favorite,
尺寸:150.0,颜色:Colors.redAccent),
),
新扩展(子:新卡)(
孩子:新中心(
子容器:新容器(
儿童:新脚手架(
appBar:新的appBar(
底部:新选项卡栏(
控制员:控制员1,
选项卡:[
新建选项卡(图标:新建图标(图标.箭头向前)),
新建选项卡(图标:新建图标(图标。向下箭头)),
新建选项卡(图标:新建图标(图标.箭头返回)),
]
)),
正文:新选项卡视图(
控制员:控制员1,
儿童:[
新文本(“你好”),
新文本(“世界”),
新文本(“Hi”)
]
)
)
)
))),
]);
}
}
第二类扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
退回新货柜(
孩子:新中心(
子项:新图标(Icons.favorite,大小:150.0,颜色:Colors.redAccent)
)
);
}
}
第三类扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
退回新货柜(
孩子:新中心(
子项:新图标(Icons.favorite,大小:150.0,颜色:Colors.redAccent)
)
);
}
}
代码是从修改而来的此代码应该执行您想要的操作。您不需要使用嵌套的
Scaffold
或AppBar
,只需要一个简单的列即可
作为一个旁白,您可能需要考虑<代码> ButoMeavigabsBar < /C> >,因为 TabBar 是一个通常出现在导航内容的顶部的材质小部件。
import 'package:flutter/material.dart';
void main() {
runApp(new MaterialApp(home: new MyTabs()));
}
class MyTabs extends StatefulWidget {
@override
MyTabsState createState() => new MyTabsState();
}
class MyTabsState extends State<MyTabs> with SingleTickerProviderStateMixin {
TabController controller;
@override
void initState() {
super.initState();
controller = new TabController(vsync: this, length: 3);
}
@override
void dispose() {
controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text("Pages"),
backgroundColor: Colors.deepOrange,
),
bottomNavigationBar: new Material(
color: Colors.deepOrange,
child: new TabBar(controller: controller, tabs: <Tab>[
new Tab(icon: new Icon(Icons.arrow_forward)),
new Tab(icon: new Icon(Icons.arrow_downward)),
new Tab(icon: new Icon(Icons.arrow_back)),
])),
body: new TabBarView(controller: controller, children: <Widget>[
new First(),
new Second(),
new Third()
]));
}
}
class First extends StatefulWidget {
@override
FirstState createState() => new FirstState();
}
class FirstState extends State<First> with SingleTickerProviderStateMixin {
TabController controller1;
@override
void initState() {
super.initState();
controller1 = new TabController(vsync: this, length: 3, initialIndex: 0);
}
@override
void dispose() {
controller1.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return new Column(children: [
new Expanded(
child: new Card(
child: new Center(
child: new Icon(Icons.favorite,
size: 150.0, color: Colors.redAccent))),
),
new Expanded(
child: new Card(
child: new Column(
children: <Widget>[
new Expanded(
child: new TabBarView(
controller: controller1,
children: <Widget>[
new Text("Hello"),
new Text("world"),
new Text("Hi")
]
),
),
new Container(
color: Colors.blue,
child: new TabBar(
controller: controller1,
tabs: <Tab>[
new Tab(icon: new Icon(Icons.arrow_forward)),
new Tab(icon: new Icon(Icons.arrow_downward)),
new Tab(icon: new Icon(Icons.arrow_back)),
]
),
),
],
),
)
),
]);
}
}
class Second extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Container(
child: new Center(
child: new Icon(Icons.favorite, size: 150.0, color: Colors.redAccent)
)
);
}
}
class Third extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Container(
child: new Center(
child: new Icon(Icons.favorite, size: 150.0, color: Colors.redAccent)
)
);
}
}
导入“包装:颤振/材料.省道”;
void main(){
runApp(新材料应用程序(主页:new MyTabs());
}
类MyTabs扩展StatefulWidget{
@凌驾
MyTabsState createState()=>新建MyTabsState();
}
类MyTabsState使用SingleTickerProviderStateMixin扩展状态{
tab控制器;
@凌驾
void initState(){
super.initState();
控制器=新的TabController(vsync:this,长度:3);
}
@凌驾
无效处置(){
controller.dispose();
super.dispose();
}
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:新的appBar(
标题:新文本(“页面”),
背景颜色:Colors.deepOrange,
),
底部导航栏:新材质(
颜色:颜色。深橙色,
子项:新选项卡栏(控制器:控制器,选项卡:[
新建选项卡(图标:新建图标(图标.箭头向前)),
新建选项卡(图标:新建图标(图标。向下箭头)),
新建选项卡(图标:新建图标(图标.箭头返回)),
])),
主体:新TabBarView(控制器:控制器,子级:[
新的第一个(),
新的第二个(),
新第三()
]));
}
}
类首先扩展StatefulWidget{
@凌驾
FirstState createState()=>新的FirstState();
}
类FirstState使用SingleTickerProviderStateMixin扩展状态{
tabcontroller1;
@凌驾
void initState(){
super.initState();
controller1=新的TabController(vsync:this,长度:3,初始索引:0);
}
@凌驾
无效处置(){
控制器1.dispose();
super.dispose();
}
@凌驾
小部件构建(构建上下文){
返回东北