Tabs 我可以将TabBar和TabBarView用作页面内小部件吗?
在探索颤振框架的过程中,我遇到了一个问题,我不知道如何解决。作为其他小部件的子部件,我可以与结合使用吗?证明它是有效的。这是相关的代码片段:Tabs 我可以将TabBar和TabBarView用作页面内小部件吗?,tabs,flutter,Tabs,Flutter,在探索颤振框架的过程中,我遇到了一个问题,我不知道如何解决。作为其他小部件的子部件,我可以与结合使用吗?证明它是有效的。这是相关的代码片段: new Container( decoration: new BoxDecoration(color: Theme.of(context).primaryColor), child: new TabBar( controller: _controller, tabs: [ new Tab( icon: c
new Container(
decoration: new BoxDecoration(color: Theme.of(context).primaryColor),
child: new TabBar(
controller: _controller,
tabs: [
new Tab(
icon: const Icon(Icons.home),
text: 'Address',
),
new Tab(
icon: const Icon(Icons.my_location),
text: 'Location',
),
],
),
),
new Container(
height: 80.0,
child: new TabBarView(
controller: _controller,
children: <Widget>[
new Card(
child: new ListTile(
leading: const Icon(Icons.home),
title: new TextField(
decoration: const InputDecoration(hintText: 'Search for address...'),
),
),
),
new Card(
child: new ListTile(
leading: const Icon(Icons.location_on),
title: new Text('Latitude: 48.09342\nLongitude: 11.23403'),
trailing: new IconButton(icon: const Icon(Icons.my_location), onPressed: () {}),
),
),
],
),
),
新容器(
装饰:新盒子装饰(颜色:主题。背景。原色),
孩子:新的TabBar(
控制器:_控制器,
选项卡:[
新标签(
图标:常量图标(Icons.home),
文本:“地址”,
),
新标签(
图标:常量图标(图标。我的位置),
文本:“位置”,
),
],
),
),
新容器(
身高:80.0,
子项:新选项卡视图(
控制器:_控制器,
儿童:[
新卡(
孩子:新的ListTile(
前导:常量图标(Icons.home),
标题:新文本字段(
装饰:常量输入装饰(hintText:“搜索地址…”),
),
),
),
新卡(
孩子:新的ListTile(
前导:常量图标(图标位置打开),
标题:新文本(“纬度:48.09342\n纬度:11.23403”),
尾随:新图标按钮(图标:const图标(Icons.my_位置),onPressed:(){}),
),
),
],
),
),
这是一个有效的例子:
导入“包装:颤振/材料.省道”;
void main(){
runApp(新的MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回新材料PP(
标题:“颤振演示”,
主页:新建MyHomePage(),
);
}
}
类MyHomePage扩展StatefulWidget{
@凌驾
_MyHomePageState createState()=>new_MyHomePageState();
}
类_MyHomePageState使用SingleTickerProviderStateMixin扩展状态{
TabController\u控制器;
@凌驾
void initState(){
super.initState();
_控制器=新的TabController(长度:2,vsync:this);
}
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:新的appBar(
标题:新文本(“TestProject”),
),
正文:新列表视图(
儿童:[
新卡(
孩子:新的ListTile(
标题:常量文本(“某些信息”),
),
),
新容器(
装饰:新盒子装饰(颜色:主题。背景。原色),
孩子:新的TabBar(
控制器:_控制器,
选项卡:[
新标签(
图标:常量图标(Icons.home),
文本:“地址”,
),
新标签(
图标:常量图标(图标。我的位置),
文本:“位置”,
),
],
),
),
新容器(
身高:80.0,
子项:新选项卡视图(
控制器:_控制器,
儿童:[
新卡(
孩子:新的ListTile(
前导:常量图标(Icons.home),
标题:新文本字段(
装饰:常量输入装饰(hintText:“搜索地址…”),
),
),
),
新卡(
孩子:新的ListTile(
前导:常量图标(图标位置打开),
标题:新文本(“纬度:48.09342\n纬度:11.23403”),
尾随:新图标按钮(图标:const图标(Icons.my_位置),onPressed:(){}),
),
),
],
),
),
新卡(
孩子:新的ListTile(
标题:const Text(“更多信息”),
),
),
新升起的按钮(
颜色:主题。背景。原色,
按下:(){},
子:常量文本(
“搜索POI”,
样式:const TextStyle(颜色:Colors.white),
),
),
],
),
);
}
}
如果在选项卡视图
中具有可变高度,则可以使用展开的
body:
...
new Expanded(
child: new TabBarView(
controller: _controller,
children: <Widget>[
new Card(
child: new ListTile(
leading: const Icon(Icons.home),
title: new TextField(
decoration: const InputDecoration(hintText: 'Search for address...'),
),
),
),//Card
....
....
],//Widget
),//TabBarView
),//Expanded
正文:
...
新扩展(
子项:新选项卡视图(
控制器:_控制器,
儿童:[
新卡(
孩子:新的ListTile(
前导:常量图标(Icons.home),
标题:新文本字段(
装饰:常量输入装饰(hintText:“搜索地址…”),
),
),
),//卡片
....
....
],//小部件
),//选项卡视图
),//扩展
在屏幕上特定位置的选项卡栏。具有滚动选项卡的选项卡栏
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: TabsPage(),
);
}
}
class TabModel {
final String title;
final Widget child;
TabModel({
@required this.title,
@required this.child,
}) : assert(title != null),
assert(child != null);
}
class TabsPage extends StatefulWidget {
@override
_TabsPageState createState() => _TabsPageState();
}
class _TabsPageState extends State<TabsPage> {
final List<TabModel> _tabs = <TabModel>[
TabModel(title: 'Название', child: Text('Название')),
TabModel(title: 'Описание', child: Text('Описание')),
TabModel(title: 'Видео', child: Text('Видео')),
TabModel(title: 'Название', child: Text('Название')),
TabModel(title: 'Описание', child: Text('Описание')),
TabModel(title: 'Видео', child: Text('Видео')),
];
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
Container(
height: 300,
),
Expanded(
child: DefaultTabController(
length: _tabs.length,
child: Scaffold(
appBar: AppBar(
toolbarHeight: 28,
backgroundColor: Colors.amber,
flexibleSpace: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
TabBar(
isScrollable: true,
tabs: [
..._tabs.map(
(tab) {
return Tab(
text: tab.title,
);
},
).toList()
],
),
],
),
),
body: TabBarView(
children: <Widget>[
..._tabs.map(
(tab) {
return tab.child;
},
)
],
),
),
),
),
],
),
);
}
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
主页:TabsPage(),
);
}
}
类TabModel{
最后的字符串标题;
最后一个孩子;
TabModel({
@需要这个标题,
@需要这个孩子,
}):assert(title!=null),
断言(child!=null);
}
类TabsPage扩展StatefulWidget{
@凌驾
_tabspagentate createState()=>tabspagentate();
}
类_tabspagentate扩展状态{
最终列表_选项卡=[
TabModel(标题:“азаааааа”,子项:文本(“азааааа,
TabModel(标题:“CharStyleПаааааа”,子项:文本(“CharStyleПаааааа”),
TabModel(标题:'b砦砦砦砦砦',子项:文本('b砦砦砦砦'),
TabModel(标题:“азаааааа”,子项:文本(“азааааа,
TabModel(标题:“CharStyleПаааааа”,子项:文本(“CharStyleПаааааа”),
TabModel(标题:'b砦砦砦砦砦',子项:文本('b砦砦砦砦'),
];
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:专栏(
儿童:[
容器(
身高:300,
),
扩大(
子级:DefaultTabController(
长度:_.length,
孩子:脚手架
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: TabsPage(),
);
}
}
class TabModel {
final String title;
final Widget child;
TabModel({
@required this.title,
@required this.child,
}) : assert(title != null),
assert(child != null);
}
class TabsPage extends StatefulWidget {
@override
_TabsPageState createState() => _TabsPageState();
}
class _TabsPageState extends State<TabsPage> {
final List<TabModel> _tabs = <TabModel>[
TabModel(title: 'Название', child: Text('Название')),
TabModel(title: 'Описание', child: Text('Описание')),
TabModel(title: 'Видео', child: Text('Видео')),
TabModel(title: 'Название', child: Text('Название')),
TabModel(title: 'Описание', child: Text('Описание')),
TabModel(title: 'Видео', child: Text('Видео')),
];
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
Container(
height: 300,
),
Expanded(
child: DefaultTabController(
length: _tabs.length,
child: Scaffold(
appBar: AppBar(
toolbarHeight: 28,
backgroundColor: Colors.amber,
flexibleSpace: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
TabBar(
isScrollable: true,
tabs: [
..._tabs.map(
(tab) {
return Tab(
text: tab.title,
);
},
).toList()
],
),
],
),
),
body: TabBarView(
children: <Widget>[
..._tabs.map(
(tab) {
return tab.child;
},
)
],
),
),
),
),
],
),
);
}
}