),
),
);
}
}
在上面的代码中,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,
),
),
),
Text(
‘jonas’,
style: TextStyle(fontWeight: FontWeight.bold),
)
],
),
),
Expanded(
child: ListView(
children: [
ListTile(
leading: const Icon(Icons.add),
title: const Text(‘Add account’),
),
ListTile(
leading: const Icon(Icons.settings),
title: const Text(‘Manage accounts’),
)
],
),
)
],
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
总结
三套“算法宝典”
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
算法刷题LeetCode中文版(为例)
人与人存在很大的不同,我们都拥有各自的目标,在一线城市漂泊的我偶尔也会羡慕在老家踏踏实实开开心心养老的人,但是我深刻知道自己想要的是一年比一年有进步。
最后,我想说的是,无论你现在什么年龄,位于什么城市,拥有什么背景或学历,跟你比较的人永远都是你自己,所以明年的你看看与今年的你是否有差距,不想做咸鱼的人,只能用尽全力去跳跃。祝愿,明年的你会更好!
由于篇幅有限,下篇的面试技术攻克篇只能够展示出部分的面试题,详细完整版以及答案解析,有需要的可以关注
/921d61c147522637cff31846545fe430.png)
算法刷题LeetCode中文版(为例)
人与人存在很大的不同,我们都拥有各自的目标,在一线城市漂泊的我偶尔也会羡慕在老家踏踏实实开开心心养老的人,但是我深刻知道自己想要的是一年比一年有进步。
最后,我想说的是,无论你现在什么年龄,位于什么城市,拥有什么背景或学历,跟你比较的人永远都是你自己,所以明年的你看看与今年的你是否有差距,不想做咸鱼的人,只能用尽全力去跳跃。祝愿,明年的你会更好!