09*:Flutter之AppBar、工具栏、导航栏
问题
目录
1:参数详解
预备
Flutter AppBar组件是应用的工具栏,是由多个组件组成。下面详细介绍appBar使用方法、TabBar使用方法、去掉头部的appBar、仿美团发现AppBar(可滚动TabBar)
官方常用属性图文简要说明:
正文
1:参数详解
AppBar
属性 | 说明 |
leading |
在标题前面显示的一个控件,在首页通常显示应用的 logo或菜单; 在其他界面通常显示为返回按钮 |
automaticallyImplyLeading |
默认true leading为null,并且堆栈中存在页面,则自动推导为BackButton。 leading不为null,则此参数无效
为false时不会推导,使中间/标题拉伸 |
title | 标题,通常显示为当前界面的标题文字,可以放组件 |
actions | 通常使用 IconButton 来表示,可以放按钮组 |
flexibleSpace | 可伸展、折叠部件 |
bottom | 通常放 tabBar,标题下面显示一个 Tab 导航栏 |
elevation | 阴影高度 |
shape | 形状 |
backgroundColor | 导航背景颜色 |
brightness | 亮度 |
iconTheme | 图标样式 |
actionsIconTheme | actions样式 |
textTheme | 文字样式 |
primary | 默认true |
centerTitle | 标题是否居中显示 |
titleSpacing | 默认NavigationToolbar.kMiddleSpacing |
toolbarOpacity | 应用工具栏透明度 |
bottomOpacity | 应用栏底部透明度 |
下表面对bottom做简单介绍
bottom 通常放 tabBar,标题下面显示一个 Tab 导航栏
Scaffold外层为DefaultTabController组件(嵌套),有三个属性length(TabBar个数)、initialIndex(默认显示tabbar下标)、child(子组件)。
注意事项:必须给定length属性、bottom中子组件个数与TabBarView中子组件个数相对应(不明白可以看示例代码)。
属性 | 说明 |
tabs | 子组件集合 |
controller | tab控制器 |
isScrollable | 是否可滚动。默认false |
indicatorColor | 指示器颜色 |
indicatorWeight | 指示器高度。默认2.0 |
indicatorPadding | 指示器内边距。默认EdgeInsets.zero |
indicator | 指示器装饰/样式 |
indicatorSize | 指示器大小计算方式,TabBarIndicatorSize.label 跟文字等宽,TabBarIndicatorSize.tab 跟每个 tab 等宽 |
labelColor | 选中label文字颜色 |
labelStyle | 选中label字样式 |
labelPadding | label内边距 |
unselectedLabelColor | 未选中label文字颜色 |
unselectedLabelStyle | 未选中label字样式 |
dragStartBehavior | 默认DragStartBehavior.start |
代码示例
1:appBar的基本用法:
return MaterialApp( //去掉debug标签 debugShowCheckedModeBanner: false, home: Scaffold( appBar: AppBar( title: Text('Flutter AppBar 组件'), //标题不居中 centerTitle: false, leading: IconButton( icon: Icon(Icons.menu), onPressed: () { print('我是leading按钮'); }, ), actions: <Widget>[ IconButton( icon: Icon(Icons.add_a_photo), onPressed: () { print('我是右3按钮'); }, ), IconButton( icon: Icon(Icons.save), onPressed: () { print('我是右2按钮'); }, ), IconButton( icon: Icon(Icons.close), onPressed: () { print('我是右1按钮'); }, ), ], ), ), );
效果
2:appBar中Bottom使用方法:
return MaterialApp( home: DefaultTabController( //指定tabbar个数 length: 3, initialIndex:0, child: Scaffold( appBar: AppBar( title: Text('Flutter AppBar 组件'), bottom: TabBar( tabs: <Widget>[ Tab(text: 'PageA',), Tab(text: 'PageB',), Tab(text: 'PageC',), ], ), ), body: TabBarView( children: <Widget>[ TabPageA(), TabPageB(), TabPageC(), ], ), ), ), ); } }
效果图
3:去掉头部的appBar :
//去掉头部的appBar(其实就是将TabBar组件放在了title中) return MaterialApp( home: DefaultTabController( //指定tabbar个数 length: 3, initialIndex:0, child: Scaffold( appBar: AppBar( title: TabBar( tabs: <Widget>[ Tab(text: 'PageA',), Tab(text: 'PageB',), Tab(text: 'PageC',), ], ), ), body: TabBarView( children: <Widget>[ TabPageA(), TabPageB(), TabPageC(), ], ), ), ), );
效果图
4:仿 美团 发现 AppBar:
return MaterialApp( home: DefaultTabController( //指定tabbar个数 length: 9, initialIndex:0, child: Scaffold( appBar: AppBar( title: Text('发现',style: TextStyle(fontSize: 22,color: Color(0xff000000)),), centerTitle: true, backgroundColor:Color(0xffffffff), elevation: 0, bottom: TabBar( labelColor: Color(0xff000000), labelStyle: TextStyle(fontSize: 19), unselectedLabelColor: Color(0xff000000), unselectedLabelStyle: TextStyle(fontSize: 13), isScrollable: true, indicatorColor: Color(0xff00BF00), indicatorSize:TabBarIndicatorSize.label, indicatorWeight:3.0, tabs: <Widget>[ Tab(text: '推荐',), Tab(text: '丽人',), Tab(text: '旅行',), Tab(text: '电影',), Tab(text: '结婚',), Tab(text: '购物',), Tab(text: '教培',), Tab(text: '家装',), Tab(text: '亲子',), ], ), ), body: TabBarView( children: <Widget>[ // Widgets ...... ), ], ) ), ), );
注意