FloatingActionButton学习

  • 利用FloatingActionButton实现底部凸起的导航栏

利用FloatingActionButton实现底部凸起的导航栏

FloatingActionButton就是如图样式的组件,简称FAB

属性名称 属性值
child 子视图,一般为 Icon,不推荐使用文字
tooltip FAB 被长按时显示,也是无障碍功能
backgroundColor 背景颜色
elevation 未点击的时候的阴影
hignlightElevation 点击时阴影值,默认 12.0
onPressed 点击事件回调
shape 可以定义 FAB 的形状等
mini 是否是 mini 类型默认 false

接下来我们要利用FloatingActionButton来实现一个如图样式的底部凸起的导航栏


如图可以看出,实际上就是将FloatingActionButton放在了我们导航栏中间的位置
准备的五个页面

CategoryPage.dart

// ignore_for_file: prefer_const_constructors_in_immutables, avoid_unnecessary_containers, prefer_const_constructors, prefer_const_literals_to_create_immutablesimport 'package:flutter/material.dart';class CategoryPage extends StatefulWidget {CategoryPage({Key? key}) : super(key: key);@override_CategoryPageState createState() => _CategoryPageState();
}class _CategoryPageState extends State<CategoryPage> {@overrideWidget build(BuildContext context) {return DefaultTabController(length: 2,child: Scaffold(appBar: AppBar(title: Row(children: [Expanded(child: TabBar(isScrollable: true,tabs: [         Tab(text: "热门"),Tab(text: "切换")],))],),// bottom: TabBar(//   tabs: [//     Tab(text: "热门"),//     Tab(text: "切换")//   ],// ),),body: TabBarView(children: [ListView(children: [ListTile(title: Text("第一个Tab"),),ListTile(title: Text("第一个Tab"),)],),ListView(children: [ListTile(title: Text("第二个Tab"),),ListTile(title: Text("第二个Tab"),)],)],),),);}
}

EmailPage.dart

// ignore_for_file: avoid_unnecessary_containers, prefer_const_constructors, prefer_const_constructors_in_immutablesimport 'package:flutter/material.dart';class EmailPage extends StatefulWidget {EmailPage({Key? key}) : super(key: key);@override_EmailPageState createState() => _EmailPageState();
}class _EmailPageState extends State<EmailPage> {@overrideWidget build(BuildContext context) {return Container(child: Text("这是邮件页面"),);}
}

HomePage.dart

// ignore_for_file: prefer_const_constructors_in_immutables, prefer_const_constructorsimport 'package:flutter/material.dart';class HomePage extends StatefulWidget {HomePage({Key? key}) : super(key: key);@override_HomePageState createState() => _HomePageState();
}class _HomePageState extends State<HomePage> {@overrideWidget build(BuildContext context) {return Column(children: [ElevatedButton(onPressed: (){Navigator.pushNamed(context, '/appbar');}, child: Text("点击转跳"),),ElevatedButton(onPressed: (){Navigator.pushNamed(context, '/tabBarController');}, child: Text("点击转跳TabBarController"),),ElevatedButton(onPressed: (){Navigator.pushNamed(context, '/tabBarController');}, child: Text("点击转跳TabBarController"),)],);}
}

SettingPage.dart

// ignore_for_file: prefer_const_literals_to_create_immutablesimport 'package:flutter/material.dart';class SettingPage extends StatefulWidget {SettingPage({Key? key}) : super(key: key);@override_SettingPageState createState() => _SettingPageState();
}class _SettingPageState extends State<SettingPage> {@overrideWidget build(BuildContext context) {return ListView(children: [ListTile(title: Text("我是设置页面"),)],);}
}

AddPage.dart(这个页面对应的导航按钮会被FloatingActionButton遮住),给FloatingActionButton设置点击事件改变页面也可以达到页面切换的效果

// ignore_for_file: avoid_unnecessary_containers, prefer_const_constructorsimport 'package:flutter/material.dart';class AddPage extends StatelessWidget {const AddPage({Key? key}) : super(key: key);@overrideWidget build(BuildContext context) {return Container(child: Text("这是添加页面"),);}
}

Tabs.dart

// ignore_for_file: prefer_final_fields, deprecated_member_use, prefer_const_literals_to_create_immutables, prefer_const_constructorsimport 'package:flutter/material.dart';
import 'package:flutterapp/pages/User.dart';
import 'package:flutterapp/pages/tabs/add.dart';
import 'tabs/Category.dart';
import 'tabs/Email.dart';
import 'tabs/Home.dart';
import 'tabs/Setting.dart';
import '../pages/User.dart';class Tabs extends StatefulWidget {const Tabs({Key? key}) : super(key: key);@override_TabsState createState() => _TabsState();
}class _TabsState extends State<Tabs> {int currentIndex = 0;List _pageList = [HomePage(),CategoryPage(),AddPage(),SettingPage(),EmailPage()];@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text('Flutter Demo'),),floatingActionButton: Container(height: 70,width: 70,padding: EdgeInsets.all(10),margin: EdgeInsets.only(top: 30),decoration: BoxDecoration(borderRadius: BorderRadius.circular(35),color: Color.fromARGB(255, 250, 250, 250)),child: FloatingActionButton(onPressed: () {setState(() {currentIndex = 2;});},child: Icon(Icons.add),backgroundColor: currentIndex==2?Colors.yellow:Colors.blue,),),floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,drawer: Drawer(child: Column(children: [Row(children: [Expanded(child: UserAccountsDrawerHeader(accountEmail: Text("1658554314@qq.com"),accountName: Text("sky"),currentAccountPicture: CircleAvatar(backgroundImage: NetworkImage("https://cdn.stocksnap.io/img-thumbs/960w/goose-flock_7EARMYLNXB.jpg")),decoration: BoxDecoration(image: DecorationImage(image: NetworkImage("https://cdn.stocksnap.io/img-thumbs/960w/ice-nature_PHKM6CXBLQ.jpg"),fit: BoxFit.cover),),otherAccountsPictures: [Image.network("https://cdn.stocksnap.io/img-thumbs/960w/flower-bloom_NZWKWLNPYX.jpg"),Image.network("https://cdn.stocksnap.io/img-thumbs/960w/flower-bloom_KAKMFZ02RH.jpg"),],))],),ListTile(leading: CircleAvatar(child: Icon(Icons.home)),title: Text("我的空间"),),//设置分割线Divider(),ListTile(leading: CircleAvatar(child: Icon(Icons.people)),title: Text("用户中心"),onTap: () {Navigator.of(context).pop();Navigator.of(context).push(MaterialPageRoute(builder: (BuildContext context) {return UserPage();}));},),Divider(),ListTile(leading: CircleAvatar(child: Icon(Icons.settings)),title: Text("设置中心"),)],),),endDrawer: Drawer(child: Text("右侧边栏"),),body: _pageList[currentIndex],bottomNavigationBar: BottomNavigationBar(type: BottomNavigationBarType.fixed,currentIndex: currentIndex,onTap: (int index) {setState(() {currentIndex = index;});},items: [BottomNavigationBarItem(icon: Icon(Icons.home),label: "首页",),BottomNavigationBarItem(icon: Icon(Icons.category), label: "分类"),BottomNavigationBarItem(icon: Icon(Icons.add), label: "添加"),BottomNavigationBarItem(icon: Icon(Icons.mail), label: "邮件"),BottomNavigationBarItem(icon: Icon(Icons.settings), label: "设置"),],),);}
}

把相关代码再摆出来方便查看

/*按钮摆放的位置和APPBar同级,因为不能设置floatingActionButton大小,
因此在外面嵌套一个Container来设置大小,我们也可以通过margin: EdgeInsets.only(top: 30),
改变来只遮住图案不遮住文字(我们这里把文字图案都遮住了)*/floatingActionButton: Container(height: 70,width: 70,padding: EdgeInsets.all(10),margin: EdgeInsets.only(top: 30),//把Container设置为圆形decoration: BoxDecoration(borderRadius: BorderRadius.circular(35),color: Color.fromARGB(255, 250, 250, 250)),child: FloatingActionButton(onPressed: () {setState(() {currentIndex = 2;});},child: Icon(Icons.add),//点击时改变按钮颜色backgroundColor: currentIndex==2?Colors.yellow:Colors.blue,),),//设置floatingActionButton位置在底部中间floatingActionButtonLocation:  FloatingActionButtonLocation.centerDocked,


利用FloatingActionButton实现底部凸起的导航栏相关推荐

  1. android自定义底部中间突出导航栏,Android选中突出背景效果的底部导航栏功能

    今天在群里看到一个底部导航选中突出效果像这样 就想着 这个应该怎么做呢,我记得类似咸鱼那种的是中间突出,不像这种 是选中哪个,哪个就突出 第一种方法 简单快捷,让UI帮忙切几张带突出背景的图片, 选中 ...

  2. 利用CSS浮动制作一个简易导航栏

    初学CSS,利用CSS浮动和无序列表制作一个简易导航栏: <!DOCTYPE html> <html lang="en"> <head>< ...

  3. android仿咸鱼底部导航栏,Flutter沉浸式状态栏/AppBar导航栏/仿咸鱼底部凸起导航栏效果...

    如下图:状态栏是指android手机顶部显示手机状态信息的位置. android 自4.4开始新加入透明状态栏功能,状态栏可以自定义颜色背景,使titlebar能够和状态栏融为一体,增加沉浸感. 如上 ...

  4. Flutter 凸起效果底部导航栏一

    大多app中都会带有底部导航栏,系统默认自带的导航条不够新颖.今天我们改造一下导航条,将中间的按钮起到凸起的效果,特别有的app,中间常用扫一扫功能. Flutter为我们提供了一个控件BottomN ...

  5. bootstrap 固定最底部_固定在页面顶部或底部的导航栏《 Bootstrap 3 基础 》

    Bootstrap 里面的导航栏有两种样式,你现在看到的是默认的样式,这里我们把 navbar-default 这个类 ... 换成 navbar-inverse ... 这样会得到一个暗色背景的导航 ...

  6. BottomBarLayout——方便快捷地实现底部导航栏

    转载请注明出处:http://blog.csdn.net/chay_chan/article/details/73715607 轻量级的底部导航栏   目前市场上的App,几乎都有底部页签导航栏,所以 ...

  7. vue---museui解决底部/顶部导航栏位置固定问题

    移动端页面通常会包括顶部导航或底部导航栏,导航栏一般固定在页面上. 问题描述如下: 导航栏未固定,顶部红色导航栏会随着页面下滚而消失,底部的蓝色导航栏会根据页面内容变化而上下浮动,视觉体验非常不好. ...

  8. 小牛的安卓笔记-----底部导航栏的实现以及用TabLayout+ViewPager+Fragment实现页面滑动切换

    昨夜西风凋碧树,独上高楼,望尽天涯路. 今天难得有时间,准备写一写我们在APP中经常用到的页面形式,废话不多说,直接一张图看看页面效果你就知道为啥是常用的页面形式.先看看逻辑和最后的效果是怎么样的: ...

  9. 利用layui实现侧边导航栏

    主要利用element模块插件实现侧边导航栏 第一种展示的侧边导航栏是依据菜单展示的内容来展示其背景样式的 <link rel="stylesheet" type=" ...

最新文章

  1. 数字断路器获得商用认证
  2. 数据分析利器:XGBoost算法最佳解析
  3. (idea)设置鼠标移到类、方法、变量上时,显示相关提示信息
  4. java中的mod运算_Java源码中Integer类位运算分析
  5. cube云原生机器学习平台-架构(二)
  6. python取列表前几个元素_从Python列表中获取前n个唯一元素
  7. 正态分布中的半正定矩阵(协方差矩阵)
  8. Ubuntu傻瓜式录制GIF图—— Peek
  9. 华为、拼多多上线新应用功能,多厂商蓝牙存在漏洞
  10. python flask-sqlalchemy flask-marshmallow基本使用
  11. windows10专业版安装应用商店方法
  12. 字节跳动最新开源!java后端工程师简历模板
  13. 利用NEO与Unity制作游戏(第1部分)
  14. 【论文翻译】Cluster Contrast for Unsupervised Person Re-Identification(2021)
  15. 大学生数码装备推荐,2022年值得入手的数码好物
  16. Python 1~500 求和(循环遍历求和,高斯求和,定义函数求和)
  17. 直线二阶倒立摆之数学建模
  18. 将电脑本地视频转成rtsp和rtmp视频流
  19. 安装了java但是系统显示没安装_我的世界 已经安装了java,但还是显示没有安装,怎么办...
  20. Unity制作批量配音制作工具

热门文章

  1. jello框架V1.6用户手册
  2. web前端期末大作业(月饼美食网站) html+css+javascript网页设计实例 企业网站制作
  3. 如何零基础学习“人工智能”?
  4. magic Grid
  5. Cell综述:人类转录因子(The Human Transcription Factors)
  6. 玻璃手机不仅是产品 更是一种信念
  7. 氧化硅湿蚀刻中枝晶状缺陷的去除方法
  8. MATLAB图形界面设计
  9. git clone老是失败,试试设置代理
  10. 文字在盒子内放不下,超出或溢出部分如何省略号显示