赞
踩
//抽屉菜单
leading: Builder(builder: (context){
return IconButton(
icon: Icon(Icons.dashboard,color:Colors.white),
onPressed: (){},
);
},),
//标题
title: Text(‘导航栏’),
//导航栏右侧菜单
actions: [
IconButton(
icon: Icon(Icons.share),
onPressed: (){},
)
],
),
),
);
}
}
在 Material
组件库中,提供了 TabBar
组件用于快速生成 Tab
菜单。在导航栏的底部通常是一组 Tab
菜单,可以通过上面 AppBar
的 bottom
属性来指定这组菜单。示例:
class _HomeContentState extends State with SingleTickerProviderStateMixin{
TabController _tabController;
List tabs = [“新闻”,“历史”,“图片”];
void initState(){
super.initState();
_tabController = TabController(length: tabs.length, vsync: this);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
//抽屉菜单
leading: Builder(builder: (context){
return IconButton(
icon: Icon(Icons.dashboard,color:Colors.white),
onPressed: (){},
);
},),
//标题
title: Text(‘导航栏’),
//导航栏右侧菜单
actions: [
IconButton(
icon: Icon(Icons.share),
onPressed: (){},
)
],
//导航栏底部Tab
bottom: TabBar(
controller: _tabController,
tabs: tabs.map((item) => Tab(text: item)).toList()
),
),
);
}
}
在上面的代码中,TabBar
用于生成一个 Tab
菜单, TabController
用于控制/监听 Tab
菜单的切换,Tab
组件代表一个菜单,定义如下:
Tab({
Key key,
this.text, // 菜单文本
this.icon, // 菜单图标
this.child, // 自定义组件样式
})
通过上面的 TabBar
只能生成一个静态的菜单,Tab
菜单和 Tab
页面切换需要同步,然而实现这一功能的就需要通过 TabBarView
组件了。TabBarView
组件不仅可以轻松实现 Tab
,而且可以非常容易配合 TabBar
来实现同步切换和滑动状态同步。示例:
class _HomeContentState extends State with SingleTickerProviderStateMixin{
TabController _tabController;
List tabs = [“新闻”,“历史”,“图片”];
void initState(){
super.initState();
_tabController = TabController(length: tabs.length, vsync: this);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
//抽屉菜单
leading: Builder(builder: (context){
return IconButton(
icon: Icon(Icons.dashboard,color:Colors.white),
onPressed: (){},
);
},),
//标题
title: Text(‘导航栏’),
//导航栏右侧菜单
actions: [
IconButton(
icon: Icon(Icons.share),
onPressed: (){},
)
],
//导航栏底部Tab
bottom: TabBar(
controller: _tabController,
tabs: tabs.map((item) => Tab(text: item)).toList()
),
),
body: TabBarView(
controller: _tabController,
children: tabs.map((e){
return Container(
alignment: Alignment.center,
child: Text(e,textScaleFactor:5),
);
}).toList(),
),
);
}
}
运行项目后发现效果出来了,无论是点击导航按钮还是手势滑动屏幕,都实现了切换导航的功能。那么,他们是如何同步的呢?答案是:同一个 controller
,在上面的例子中,导航 TabBar
中的 controller
和 TabBarView
中的 controller
是同一个对象。
Scaffold
组件提供了 drawer
、endDrawer
两个属性用于表示一个页面的左、右抽屉菜单。示例:
class MyDrawer extends StatelessWidget{
const MyDrawer({Key key}) : super(key:key);
@override
Widget build(BuildContext context) {
return Drawer(
child: MediaQuery.removePadding(//用于移除Drawer默认的留白
context: context,
removeTop: true,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.only(top: 38),
child: Row(
children: [
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: ClipOval(
child: Image.asset(
‘images/avatar.png’,
width: 80,
),
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,对此我整理了一些资料,需要的可以免费分享给大家
这里笔者分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
【视频教程】
天道酬勤,只要你想,大厂offer并不是遥不可及!希望本篇文章能为你带来帮助,如果有问题,请在评论区留言。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
[外链图片转存中…(img-5HEz5cHI-1712754202443)]
[外链图片转存中…(img-zRquePRB-1712754202444)]
【视频教程】
[外链图片转存中…(img-St9li74A-1712754202444)]
天道酬勤,只要你想,大厂offer并不是遥不可及!希望本篇文章能为你带来帮助,如果有问题,请在评论区留言。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。