TabBar属性 说明
tabs 一系列标签控件
controller 标签选择变化控制器
isScrollable 是否可滚动,默认false
indicatorColor 指示器颜色
indicatorWeight 指示器粗细
indicator 指示器,可自定义形状等样式
indicatorSize 指示器长短,tab:和tab一样长,label:和标签label 一样长
labelColor 标签颜色
labelStyle 标签样式
labelPadding 标签padding
unselectedLabelColor 未选中标签颜色
unselectedLabelStyle 未选中标签样式
TabBarView属性说明:
children 一系列子控件,如果和TabBar一起使用注意和TabBar的长度一样
controller 控制器,如果和TabBar一起使用注意和TabBar使用同一个controller
____tabs 不可缺少,必要items
——controller不可缺少,与tabs进行一一对应,显示相应的页面
——isScrollable:是否可以滚动,是指tab是否可以滚动显示,而不是指左右滑动,默认false
——label选中颜色
——unSelectedLabelColor:未选中颜色
import 'package:flutter/material.dart';
class AppBarDemoPage extends StatelessWidget {
const AppBarDemoPage({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return DefaultTabController(
length: 2,
child: Scaffold(
appBar: AppBar(
title: Text("AppBarDemoPage"),
backgroundColor: Colors.red,
centerTitle: true,
bottom: TabBar(
tabs: [Tab(text: "热门"), Tab(text: "推荐")],
),
),
body: TabBarView(
children: [
ListView(
children: [
ListTile(title: Text("tab1")),
ListTile(title: Text("tab1")),
ListTile(title: Text("tab1"))
],
),
ListView(
children: [
ListTile(title: Text("tab2")),
ListTile(title: Text("tab2")),
ListTile(title: Text("tab2"))
],
)
],
),
),
);
}
}
import 'package:flutter/material.dart';
class TabBarControllerPage extends StatefulWidget {
TabBarControllerPage({Key key}) : super(key: key);
_TabBarControllerPageState createState() => _TabBarControllerPageState();
}
class _TabBarControllerPageState extends State with SingleTickerProviderStateMixin {
TabController _tabController;
@override
void dispose() { //生命周期函数
// TODO: implement dispose
super.dispose();
_tabController.dispose();
}
@override
void initState() { //生命周期函数
// TODO: implement initState
super.initState();
_tabController=new TabController(
vsync: this,
length: 10
);
//进行切换监听
_tabController.addListener((){
print(_tabController.index);
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("TabBarControllerPage"),
bottom: TabBar(
controller: this._tabController, //注意
isScrollable: true,
labelColor: Colors.red,
unselectedLabelColor: Colors.green,
tabs: [
Tab(text:"热销"),
Tab(text:"推荐"),
Tab(text:"热销"),
Tab(text:"推荐"),
Tab(text:"热销"),
Tab(text:"推荐"),
Tab(text:"热销"),
Tab(text:"推荐"),
Tab(text:"热销"),
Tab(text:"推荐"),
],
),
),
body: TabBarView(
controller: this._tabController, //注意
children: [
Center(child: Text("热销")),
Center(child: Text("推荐")),
Center(child: Text("热销")),
Center(child: Text("推荐")),
Center(child: Text("热销")),
Center(child: Text("推荐")),
Center(child: Text("热销")),
Center(child: Text("推荐")),
Center(child: Text("热销")),
Center(child: Text("推荐"))
],
),
);
}
}
import 'package:flutter/material.dart';
/**
* 有状态StatefulWidget
* 继承于 StatefulWidget,通过 State 的 build 方法去构建控件
*/
main() {
runApp(App());
}
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text("container组件"),
),
body: BotomeMenumTabBarPage(),
),
);
}
}
class BotomeMenumTabBarPage extends StatefulWidget {
//通过构造方法传值
BotomeMenumTabBarPage();
//主要是负责创建state
@override
BotomeMenumTabBarPageState createState() => BotomeMenumTabBarPageState();
}
/**
* 在 State 中,可以动态改变数据
* 在 setState 之后,改变的数据会触发 Widget 重新构建刷新
*/
class BotomeMenumTabBarPageState extends State
with SingleTickerProviderStateMixin {
BotomeMenumTabBarPageState();
TabController tabController;
@override
void initState() {
///初始化,这个函数在生命周期中只调用一次
super.initState();
tabController = new TabController(
initialIndex: currentIndex, length: pages.length, vsync: this);
}
@override
Widget build(BuildContext context) {
//构建页面
return buildBottomTabScaffold();
}
//当前显示页面的
int currentIndex = 2;
//点击导航项是要显示的页面
final pages = [
ChildItemView("1"),
ChildItemView("2"),
ChildItemView("3"),
ChildItemView("4")
];
Widget buildBottomTabScaffold() {
return new Scaffold(
body: new TabBarView(controller: tabController, children: pages),
bottomNavigationBar: new Material(
color: Colors.blue,
child: new TabBar(
controller: tabController,
tabs: [
new Tab(text: "首页", icon: new Icon(Icons.home)),
new Tab(text: "视频", icon: new Icon(Icons.find_in_page)),
new Tab(text: "新闻", icon: new Icon(Icons.message)),
new Tab(text: "我的", icon: new Icon(Icons.person)),
],
indicatorWeight: 0.1,
),
),
);
}
/*切换页面*/
void _changePage(int index) {
/*如果点击的导航项不是当前项 切换 */
if (index != currentIndex) {
setState(() {
currentIndex = index;
});
}
}
}
//子页面
class ChildItemView extends StatefulWidget {
String _title;
ChildItemView(this._title);
@override
_ChildItemViewState createState() => _ChildItemViewState();
}
class _ChildItemViewState extends State {
@override
Widget build(BuildContext context) {
return Container(
child: Center(child: Text(widget._title)),
);
}
}