}
class _BottomNavigationWidgetState extends State {
///定义底部导航栏字体的颜色
final _BottomNavigationColor = Colors.blue;
///需要点击的item索引
int _currentIndex = 0;
///定义装有 4 个页面组件用到的 List ,所以范型用的 Widget
List mList = List();
///重写StatefulWidget抽象类中的initState()方法,用于初始化的操作
@override
void initState() {
///使用 List 的 …add()方法,写法比逐个去 mList.add()要简单
mList
…add(HomeScreen())
…add(EmailScreen())
…add(PagesScreen())
…add(AirplayScreen());
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: mList[_currentIndex],
bottomNavigationBar: BottomNavigationBar(
///这是添加的4个item
items: [ BottomNavigationBarItem(
icon: Icon(
Icons.home,
color: _BottomNavigationColor,
),
title: Text(
“home”,
style: TextStyle(color: _BottomNavigationColor),
)),
BottomNavigationBarItem(
icon: Icon(
Icons.email,
color: _BottomNavigationColor,
),
title: Text(
“email”,
style: TextStyle(color: _BottomNavigationColor),
)),
BottomNavigationBarItem(
icon: Icon(
Icons.pages,
color: _BottomNavigationColor,
),
title: Text(
“pages”,
style: TextStyle(color: _BottomNavigationColor),
)),
BottomNavigationBarItem(
icon: Icon(
Icons.airplay,
color: _BottomNavigationColor,
),
title: Text(
“airplay”,
style: TextStyle(color: _BottomNavigationColor),
))
],
///item的索引赋值
currentIndex: _currentIndex,
///item点击事件
onTap: (int index) {
setState(() {
///当前索引等于点击后的item索引
_currentIndex = index;
});
},
),
);
}
}
复制代码
因为我们需要定义的组件是可变化的,所以我们继承了 StatefulWidget 组件 ,这里简单说下StatelessWdiget组件和 StatefulWidget 组件的区别。
-
StatelessWdiget 组件:无状态的组件,复用某种组件。
-
StatefulWidget 组件:有状态的组件,数据处理,逻辑处理。
这里我们就把一般App 使用的底部导航栏功能实现了,顺便还带有选中之后放大的效果。
自定义不规则底部导航栏
老规矩,先上效果图
一般我们做APP的都知道,很多APP 底部导航栏采用这样的样式,如果用原生开发还是比较费劲的,但是用Flutter 开发还是很便捷的,原理大概就是将 Flutter 中的 FloatActionButton 悬浮按钮融合到底部导航栏中去实现,上代码!
这里我们还是采用刚开始那段入口代码,只是我们的 bottomNavigationBar 属性实现的组件我们去单独定义,将这个自定义底部导航栏的功能单独写一个组件。
import ‘dart:ui’;
import ‘package:flutter/material.dart’;
import ‘flutter/BottomAppBarDemo.dart’;
import ‘flutter/BottomNavigationWidget.dart’;
import ‘study/study.dart’;
void main() {
runApp(MyApp());
}
///自定义组件 StatelessWidget(无状态组件)
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: “Flutter底部导航栏”,
home: Scaffold(
// appBar: AppBar(
// title: Text(“Flutter底部导航栏”),
// ),
///自定义的BottomAppBarDemo组件
bottomNavigationBar: BottomAppBarDemo(),
),
theme: ThemeData.light(),
);
}
}
复制代码
来我们看自定义的 BottomAppBarDemo 组件。
import ‘package:flutter/material.dart’;
import ‘bottom_navigation/each_view.dart’;
///自定义不规则底部导航栏
class BottomAppBarDemo extends StatefulWidget {
@override
_BottomAppBarDemoState createState() => _BottomAppBarDemoState();
}
class _BottomAppBarDemoState extends State {
List _eachView;
int _index = 0;
@override
void initState() {
super.initState();
_eachView = List();
_eachView
…add(EachViewState(“Home”))
…add(EachViewState(“email”))
…add(EachViewState(“pages”))
…add(EachViewState(“airplay”));
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: _eachView[_index],
floatingActionButton: FloatingActionButton(
///响应事件,push 生成新的页面,即点击中间的按钮跳转的页面
onPressed: () {
Navigator.of(context)
.push(MaterialPageRoute(builder: (BuildContext context) {
return EachViewState(“这是新的页面”);
}));
},
///长按
tooltip: “狗哥最帅”,
child: Icon(
Icons.add,
color: Colors.white,
),
),
bottomNavigationBar: BottomAppBar(
color: Colors.white,
shape: CircularNotchedRectangle(),
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
IconButton(
icon: Icon(Icons.home),
color: Colors.blue,
onPressed: () {
setState(() {
//手动赋值索引
_index = 0;
});
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
![](https://i-blog.csdnimg.cn/blog_migrate/c610009d087a03533b813b4eadf5b83a.jpeg)
文末
很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,对此我整理了一些资料,需要的可以免费分享给大家
这里笔者分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
【视频教程】
天道酬勤,只要你想,大厂offer并不是遥不可及!希望本篇文章能为你带来帮助,如果有问题,请在评论区留言。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
免费分享给大家
这里笔者分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
[外链图片转存中…(img-cWOh2SIr-1712265168783)]
[外链图片转存中…(img-KL8D5WZA-1712265168783)]
【视频教程】
[外链图片转存中…(img-yqrptz3H-1712265168783)]
天道酬勤,只要你想,大厂offer并不是遥不可及!希望本篇文章能为你带来帮助,如果有问题,请在评论区留言。