flutter多种底部导航栏样式

2023-11-10

1.底部导航栏 (外弧样式)

在这里插入图片描述
实现代码:

//引入flutter的dart库
import 'package:flutter/material.dart';
//启动函数
void main() => runApp(MyApp());

//自定义组件
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    //MaterialApp 是flutter的页面根组件
    return MaterialApp(
      title: 'main根页面',
      //home表示页面信息
      home: BottomNavBar2()
    );
  }
}

//导航栏组件
class BottomNavBar2 extends StatefulWidget {
  @override
  _BottomNavBar2State createState() => _BottomNavBar2State();
}

class _BottomNavBar2State extends State<BottomNavBar2> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("漂浮导航栏"),
        centerTitle: true,
      ),
      //浮动按钮
      floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
      floatingActionButton: FloatingActionButton(
        onPressed: () {},
        backgroundColor: Colors.blue,
        child: Icon(Icons.add, color: Colors.white),
      ),
      bottomNavigationBar: BottomAppBar(
        shape: CircularNotchedRectangle(),  //圆形的外弧效果
        color: Colors.blue,
        //自定义导航栏
        child: Row(
          //主轴对齐 / 两边对齐
          mainAxisAlignment: MainAxisAlignment.spaceAround,
          children: <Widget>[
            IconButton(icon: Icon(Icons.home, color: Colors.white), onPressed: () {}),
            IconButton(icon: Icon(Icons.home, color: Colors.white), onPressed: () {}),
          ],
        ),
      ),
    );
  }
}

2.底部导航栏(标准样式)

在这里插入图片描述
实现代码:

//引入flutter的dart库
import 'package:flutter/material.dart';
//启动函数
void main() => runApp(MyApp());

//自定义组件
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    //MaterialApp 是flutter的页面根组件
    return MaterialApp(
      title: 'main根页面',
      //home表示页面信息
      home: BottomNavBar()
    );
  }
}

//底部导航栏组件
class BottomNavBar extends StatefulWidget {
  @override
  _BottomNaacBarState createState() => _BottomNaacBarState();
}

class _BottomNaacBarState extends State<BottomNavBar> {
  //点击导航时显示指定内容
  List<Widget> list = [Text('自行车'), Text('汽车'), Text('飞机')];
  //当前点击的导航下标
  int _currentController = 1;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('底部导航栏'),
      ),
      //页面显示的主体内容
      body: list[_currentController],
      bottomNavigationBar: BottomNavigationBar(
          //当前选中的导航栏
          currentIndex: _currentController,
          //点击导航栏触发的事件
          onTap: (int index) {
            setState(() {
              _currentController = index;
            });
          },
          items: <BottomNavigationBarItem>[
            BottomNavigationBarItem(
                icon: Icon(Icons.directions_bike), title: Text('自行车')),
            BottomNavigationBarItem(
                icon: Icon(Icons.directions_car), title: Text('汽车')),
            BottomNavigationBarItem(
                icon: Icon(Icons.airplanemode_active), title: Text('飞机')),
          ]),
    );
  }
}

3.底部导航栏(类似咸鱼样式)

在这里插入图片描述
实现代码:

//底部导航栏组件
class BottomNavBar extends StatefulWidget {
  @override
  _BottomNaacBarState createState() => _BottomNaacBarState();
}

class _BottomNaacBarState extends State<BottomNavBar> {
  //点击导航时显示指定内容
  List<Widget> list = [Text('自行车'), Text('汽车'), Text('飞机')];
  //当前点击的导航下标
  int _currentController = 1;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('底部导航栏'),
      ),
      //页面显示的主体内容
      body: list[_currentController],
      //浮动按钮代替中间导航按钮
      floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
      floatingActionButton: Container(
        width: 60,
        height: 60,
        padding: EdgeInsets.all(8),
        decoration: BoxDecoration(
          borderRadius: BorderRadius.circular(50),
          color: Colors.white
        ),
        child: FloatingActionButton(
          child: Icon(Icons.directions_car),
          onPressed: () {
            setState(() {
              _currentController = 1;
            });
          },
        )
      ),
      bottomNavigationBar: BottomNavigationBar(
          //当前选中的导航栏
          currentIndex: _currentController,
          //点击导航栏触发的事件
          onTap: (int index) {
            setState(() {
              _currentController = index;
            });
          },
          items: <BottomNavigationBarItem>[
            BottomNavigationBarItem(
                icon: Icon(Icons.directions_bike), title: Text('自行车')),
            BottomNavigationBarItem(
                icon: Icon(Icons.directions_car), title: Text('汽车')),
            BottomNavigationBarItem(
                icon: Icon(Icons.airplanemode_active), title: Text('飞机')),
          ]),
    );
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

flutter多种底部导航栏样式 的相关文章

随机推荐

  • 十大管理——项目成本管理

    目录 1 成本管理概念 2 成本管理的四个过程域 2 1四个过程的整体理解 2 2四个过程的ITO口诀版记忆 2 3过程1 制定项目管理计划 2 4过程2 项目成本估算 2 5过程3 项目成本预算 2 5过程4 项目成本控制 3计算题 1
  • Nginx配置系统服务&设置环境变量

    1 Nginx操作问题 由于我们使用源码编译安装Nginx 因此 我们启动 关闭nginx或重新加载配置文件等也就比较麻烦 需要先进入nginx的可执行文件目录 才可以执行nginx相关命令 为了方便对nginx进行相关操作 我们可以将ng
  • 【图像处理】CvArr、Mat、CvMat、IplImage、BYTE转换

    一 Mat 类型 矩阵类型 Matrix 在openCV中 Mat是一个多维的密集数据数组 可以用来处理向量和矩阵 图像 直方图等等常见的多维数据 Mat有3个重要的方法 1 Mat mat imread const String file
  • selenium.chrome怎么写扩展拦截或转发请求?

    Selenium WebDriver 是一组开源 API 用于自动测试 Web 应用程序 利用它可以通过代码来控制chrome浏览器 有时候我们需要mock接口的返回 或者拦截和转发请求 今天就来实现这个功能 代码已开源 https git
  • 坑很多的一道题(含测试样例)——L1-009 N个数求和 (20分)

    L1 009 N个数求和 20分 本题的要求很简单 就是求N个数字的和 麻烦的是 这些数字是以有理数分子 分母的形式给出的 你输出的和也必须是有理数的形式 输入格式 输入第一行给出一个正整数N 100 随后一行按格式a1 b1 a2 b2
  • 微信小程序开发流程步骤 简单 详细

    微信小程序是一种不需要下载安装即可使用的应用 它搭载在目前最流行 用户量最大的社交软件 微信 中 用户通过扫一扫或搜索小程序名字即可找到使用想要的小程序并进行使用 非常的方便快捷 对于开发者而言呢 它也有非常全面 稳定 高效的接口API供开
  • 分布式消息传输系统Kafka的工作原理及其在大数据领域的应用

    引言 在大数据处理过程中 消息队列是一种非常重要的技术工具 它能够有效地解耦数据生产者和消费者之间的关系 实现高效的异步通信 而分布式消息传输系统Kafka 作为一种高性能 高可伸缩性的消息队列 已经成为了大数据领域中最受欢迎的工具之一 一
  • 一文看懂推荐系统:概要02:推荐系统的链路,从召回粗排,到精排,到重排,最终推荐展示给用户

    一文看懂推荐系统 概要02 推荐系统的链路 从召回粗排 到精排 到重排 最终推荐展示给用户 提示 最近系统性地学习推荐系统的课程 我们以小红书的场景为例 讲工业界的推荐系统 我只讲工业界实际有用的技术 说实话 工业界的技术远远领先学术界 在
  • mysql数据库卸载再安装失败_MySQL数据库——数据安装与卸载

    MySQL数据库的安装 双击msi 因为6 0之后是收费版本 所以这里我们使用5 5版本的mysql 打开下载的 mysql 安装文件双击解压缩 运行 mysql 5 5 40 win32 msi 或者 mysql 5 5 40 win64
  • vsqt中导出工程的Pro文件

    直接在qtvstools中使用Create Basic pro File所产生的Pro与Pri文件无法打开原工程 正确的做法应该是先用Export Project to pri File导出Pri文件后再使用Create Basic pro
  • C语言动态内存练习:【通讯录(动态内存版本)实现】

    全文目录 前言 目标规划 结构变化 功能实现的不同点 添加功能 AddContact 扩容检查 CheckCapacity 销毁通讯录 DestroyContact 总结 源码 前言 前面我们写了一个静态数组版本的通讯录 再结合刚学习的动态
  • bug记录 bigint数据返回前端数字精度丢失

    我的主键是bigint 9607408720124535 但是前端展示就是9607408720124536 使用postman调用就是9607408720124535 正确的 最终确定是js的number类型有个最大安全值 即2的53次方
  • JavaFX通过Controller类实现第二窗口销毁和程序退出

    Preface Q 为什么有此文 A 不能高度自定义化 网上大部分文章是通过简易的warning窗口 或者 information窗口实现的 且过于繁琐 大部分放在了Main java 不好弄 原理 Controller类中关键性代码 具体
  • MYSQL——模糊查询:like

    模糊查询指的是在数据中按照一定模糊的条件进行搜索 模糊查询的核心在于通配符的使用 通过使用通配符可以匹配不同的字符或字符串 一般模糊查询语句如下 SELECT 字段 FROM 表 WHERE 某个字段 LIKE 条件 表示任意0个或多个字符
  • css 背景效果_软件技术:我写CSS的常用套路(附demo的效果实现与源码)

    前言 本文是笔者写CSS时常用的套路 不论效果再怎么华丽 万变不离其宗 1 交错动画 有时候 我们需要给多个元素添加同一个动画 播放后 不难发现它们会一起运动 一起结束 这样就会显得很平淡无奇 那么如何将动画变得稍微有趣一点呢 很简单 既然
  • Harbor仓库介绍与搭建过程

    一 介绍 Harbor 是一个英文单词 意思是港湾 港湾是干什么的呢 就是停放货物的 而货物呢 是装在集装箱中的 说到集装箱 就不得不提到Docker容器 因为docker容器的技术正是借鉴了集装箱的原理 所以 Harbor正是一个用于存储
  • mysql数据库知识整理

    目录 InnoDB和MyISAM引擎常见区别 索引的基本原理 聚簇索引和非聚簇索引的区别 索引的数据结构及优势 索引的设计原则 innerdb主键索引自增的原因以及联合索引最左原则 锁的类型有哪些 MySQL执行计划 InnoDb引擎的执行
  • 关于网络编程里自定义序列化(字节化)遇到的坑

    1 结构体字节流化可能会出现的问题 网络编程里很多时候需要发送结构体 比如下面定义一个最简单的拥有多个元素的结构体 typedef struct msg int len char name 24 msg t 在保持客户端和服务端程序的结构体
  • Servlet实现文件上传

    定义 在Servlet3 0之前实现文件上传需要借助Apache的上传组件 在3 0中 提供了一个Servlet API标准去支持文件上传 上传前置 表单页面设置 设置enctype属性格式为multipart form data meth
  • flutter多种底部导航栏样式

    1 底部导航栏 外弧样式 实现代码 引入flutter的dart库 import package flutter material dart 启动函数 void main gt runApp MyApp 自定义组件 class MyApp