【Flutter】Flutter 创建每个页面公用的底部框

news2024/11/25 19:51:36

文章目录

    • 一、 前言
    • 二、 创建公用底部框的步骤
      • 1. 创建一个公用的底部框 Widget
      • 2. 在页面中使用公用的底部框 Widget
    • 三、 示例:电商应用中的公用底部框
      • 1. 创建电商应用的底部框 Widget
      • 2. 在电商应用的各个页面中使用底部框 Widget
    • 四、 完整代码示例
    • 五、 一些注意事项
    • 六、 总结

一、 前言

在 Flutter 的开发中,我们经常会遇到需要在多个页面共享某些组件的情况。底部框,也就是我们常说的底部导航栏,就是一个很常见的例子。在一些应用中,底部导航栏会在多个页面中重复出现,而且功能和样式基本相同。如果我们在每个页面都重新定义底部导航栏,无疑会增加代码的冗余性,而且也不便于我们对底部导航栏的管理和修改。

如果你想深入学习 Flutter,掌握更多的技巧和最佳实践,我有一个好消息要告诉你:我们有一个全面的 Flutter专栏->Flutter Developer 101 入门小册 等待着你。在那里,你将获得完整的、系统的 Flutter 学习资料,包括详细的代码示例和深入的概念解析。更重要的是,我们的专栏正在不断更新和完善,而价格也会随着内容的丰富而逐渐上调。所以,现在加入,你将以最优惠的价格获得所有的内容。现在,让我们开始今天的学习吧!

二、 创建公用底部框的步骤

我们主要经过以下两个步骤来创建一个公用的底部框:

1. 创建一个公用的底部框 Widget

在 Flutter 中,我们可以创建一个新的 Widget,作为我们的公用底部框。我们可以定义这个 Widget 的样式,以及它包含的元素。在定义这个 Widget 时,我们可以根据需要添加更多的功能,比如点击事件、动画效果等。

class CommonBottomBar extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return BottomNavigationBar(
      items: const <BottomNavigationBarItem>[
        BottomNavigationBarItem(
          icon: Icon(Icons.home),
          label: '首页',
        ),
        BottomNavigationBarItem(
          icon: Icon(Icons.business),
          label: '业务',
        ),
        BottomNavigationBarItem(
          icon: Icon(Icons.school),
          label: '我的',
        ),
      ],
      // 其他需要的配置
    );
  }
}

2. 在页面中使用公用的底部框 Widget

在我们需要使用公用底部框的页面中,我们只需要在页面的布局中添加这个 Widget 就可以了。这样,我们就可以在多个页面中共享这个底部框,而不需要在每个页面中都重新定义。

class HomePage extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('首页'),
      ),
      body: Center(
        child: Text('这是首页'),
      ),
      bottomNavigationBar: CommonBottomBar(),  // 使用公用的底部框
    );
  }
}

三、 示例:电商应用中的公用底部框

我们来看一个具体的例子,假设我们正在开发一个电商应用,这个应用有四个页面:首页、分类、购物车、个人中心。这四个页面都需要使用到同样的底部导航栏。

1. 创建电商应用的底部框 Widget

在电商应用中,我们可以创建一个包含四个导航项的底部框 Widget。每个导航项都由一个图标和文字标签组成。我们可以根据实际的业务需求,为每个导航项添加点击事件。

class EcommerceBottomBar extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return BottomNavigationBar(
      items: const <BottomNavigationBarItem>[
        BottomNavigationBarItem(
          icon: Icon(Icons.home),
          label: '首页',
        ),
        BottomNavigationBarItem(
          icon: Icon(Icons.category),
          label: '分类',
        ),
        BottomNavigationBarItem(
          icon: Icon(Icons.shopping_cart),
          label: '购物车',
        ),
        BottomNavigationBarItem(
          icon: Icon(Icons.person),
          label: '个人中心',
        ),
      ],
      // 其他需要的配置
    );
  }
}

2. 在电商应用的各个页面中使用底部框 Widget

在电商应用的每个页面中,我们都可以使用这个公用的底部框。这样,我们就可以确保在每个页面中,底部导航栏的样式和功能都是一致的。

class HomePage extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('首页'),
      ),
      body: Center(
        child: Text('这是首页'),
      ),
      bottomNavigationBar: EcommerceBottomBar(),  // 使用电商应用的底部框
    );
  }
}

四、 完整代码示例

// 公用底部框
class EcommerceBottomBar extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return BottomNavigationBar(
      items: const <BottomNavigationBarItem>[
        BottomNavigationBarItem(
          icon: Icon(Icons.home),
          label: '首页',
        ),
        BottomNavigationBarItem(
          icon: Icon(Icons.category),
          label: '分类',
        ),
        BottomNavigationBarItem(
          icon: Icon(Icons.shopping_cart),
          label: '购物车',
        ),
        BottomNavigationBarItem(
          icon: Icon(Icons.person),
          label: '个人中心',
        ),
      ],
      // 其他需要的配置
    );
  }
}

// 首页
class HomePage extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('首页'),
      ),
      body: Center(
        child: Text('这是首页'),
      ),
      bottomNavigationBar: EcommerceBottomBar(),  // 使用电商应用的底部框
    );
  }
}

// 其他页面
// ...

五、 一些注意事项

在使用公用底部框时,我们需要注意以下几点:

  1. 尽量保持底部框的样式和功能简单,这样更利于代码的复用。
  2. 在添加新的功能时,考虑到这个底部框可能会在多个页面中使用,所以要尽量避免添加页面特定的功能。
  3. 如果需要

在某些页面中对底部框进行特殊处理(比如改变样式或者添加特定的点击事件),我们可以在创建页面时传入参数来进行自定义,而不是直接修改公用底部框的代码。

六、 总结

在本文中,我们学习了如何在 Flutter 中创建一个公用的底部框,并在每个页面中调用。通过创建公用的底部框,我们可以避免在每个页面中都重新定义底部导航栏,减少了代码的冗余性,也使得底部导航栏的管理和修改变得更加方便。

创建公用底部框只是复用代码的一个例子,实际上,在我们的开发过程中,还有很多其他的场景也可以使用到这种方法,比如头部导航栏、侧边菜单等等。希望通过这篇文章,你能对 Flutter 的复用性有更深的理解,也能在你的开发过程中更好的利用这一特性。

如果你对 Flutter 感兴趣,想要更深入地学习,那么我要推荐你一个很棒的资源:我们的 Flutter专栏->Flutter Developer 101 入门小册。在那里,你将获得完整的、系统的 Flutter 学习资料,包括详细的代码示例和深入的概念解析。比如,你知道如何使用 Flutter 构建一个完整的应用吗?在我们的专栏中,你将找到答案。更重要的是,我们的专栏正在不断更新和完善,而价格也会随着内容的丰富而逐渐上调。所以,现在加入,你将以最优惠的价格获得所有的内容。让我们一起在 Flutter 的世界中继续探索吧!如果你想了解更多,可以先阅读我们的 一站式解决你的需求,Flutter Developer 101 入门小册 专栏指引

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/647439.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第一次ubuntu wsl ssh远程登录各种报错+解决

第一次ubuntu wsl ssh远程登录各种报错+解决 最新推荐文章于 2023-04-13 20:23:43 发布 kh3064 于 2020-11-03 15:12:16 发布 1869 收藏 5 文章标签: ubuntu

计算理论导引实验三:构造图灵机

计算理论导引实验三&#xff1a;构造图灵机 实验描述形式化定义图灵机M的状态图 算法设计与描述状态转移关系类键盘输入及逻辑处理类 编码实现测试运行 实验描述 要求构造一个能够识别语言L的图灵机。语言L的描述和实验内容如下图所示 形式化定义 根据实验描述&#xff0c;可…

【批量修改后缀名】如何批量去修改文件后缀名(亲测图文结合)

【写在前面】前段时间&#xff0c;因为素材需要&#xff0c;就去之前我制作相册的一个网站上下载了一批照片&#xff0c;但是照片下载下来的格式居然是.png!600*0&#xff0c;这种格式的也打不开&#xff0c;于是乎我自己就吭哧吭哧的去一个个的修改&#xff0c;然后我一想他娘…

EBU5476 Microprocessor System Design 知识点总结_5 GPIO

GPIO General Purpose Input Output, Memory-Mapped IO 把设备&#xff0c;控制等寄存器映射到内存里。好处就是访问设备方式和内存一样&#xff0c;也不用设计复杂的IO电路&#xff0c;便捷&#xff1b;缺点在于占用了内存空间。 Peripheral-Mapped IO IO有一块专门的存储…

Vue|单文件组件与脚手架安装

一、单文件组件1.1 介绍1.2 文件组成1.3 加深认知 二、脚手架安装2.1 什么是脚手架?2.2 使用镜像2.3 全局安装vue/cli2.4 创建并启动项目 一、单文件组件 1.1 介绍 [.vue]文件&#xff0c;称为单文件组件&#xff0c;是Vue.js自定义的一种文件格式&#xff0c;一个.vue文件就…

AST使用(二)

//在此之前&#xff0c;先了解下path和node/*path指的是路径 其常用的方法当前路径所对应的源代码 : path.toString判断path是什么type&#xff0c;使用path.isXXX 这个方法 : if(path.isStringLiteral()){}获取path的上一级路径 : let parent path.parentPath;获取path的子…

nginx的安装及代理和负载均衡设置

一、通过yum方式进行安装 官网参考地址&#xff1a;https://nginx.org/en/linux_packages.html#RHEL 1.1 安装好依赖 执行下面的命令安装 sudo yum install yum-utils1.2、 先配置好yum源 新建文件/etc/yum.repos.d/nginx.repo&#xff0c;文件内容&#xff1a; [nginx-s…

一个成熟的软件测试工程师应该具备那些“技能”

1、良好的沟通 相信大家都在网上看到过各种吐槽程序员不解风情的段子&#xff0c;开怀大笑之余深思&#xff0c;作为一个测试工程师又何尝不是如此&#xff1f;通常沟通技能成为横亘在测试工程师与其他合作部门之间的万丈鸿沟&#xff0c;也成为测试工程师成长的最大瓶颈。下面…

Vector-常用CAN工具 - 以太网报文收发方向

目录 Rx 和 Tx 标记 Example&#xff1a;从 CANoe 向 ECU 发送以太网数据包 用例 2&#xff1a;从 ECU 接收以太网数据包 如何仅显示物理或虚拟通信 如何仅显示 Rx 或 Tx 以太网数据包 VN5000以太网包过滤 1、什么是硬件过滤&#xff1f; 2、什么时候使用硬件过滤&…

useEffect,useLayoutEffect的基础知识和底层机制

useEffect 是 React 中一个重要的 Hook&#xff0c;用来处理组件的副作用操作。它的基础知识包括两个方面&#xff1a;执行时机和参数。 执行时机&#xff1a; useEff ect 的执行时机包括两种情况&#xff1a; 组件挂载时&#xff0c;即第一次渲染之后。组件更新时&#xff…

智能垃圾分类小程序,流量主变现,外卖cps权益变现,uniCloud云开发无需购买服务器和域名,助力每一位创业者。

技术优势 基于 uniapp uniCloud 研发&#xff0c;无需购买服务器和域名&#xff0c;uniCloud 是 DCloud 联合阿里云、腾讯云 serverless 构建。从此不用关心服务器运维、弹性扩容、大并发承载、防DDoS攻击等&#xff0c;轻松应对高并发应用&#xff0c; 传统小程序开通流量主…

Qt 多语言实现

简介 Qt Linguist 提供了一套加速应用程序翻译和国际化的工具。Qt 使用单一的源码树和单一的应用程序二进制包就可同时支持多个语言和书写系统。 使用 QTranslator 来加载生成的 qm 文件&#xff0c;就可以让程序显示指定的语言。 // 国际化翻译 QString language "CH…

项目Es、kafka、mysql容量评估方案和服务器资源预估方案

目录 1、Es 评估计划 一个接口jmeter压测qps 1万, logstash 读取日志文件写入es Logstash配置 Es容量变化前后差值/1万 * 1.67 * &#xff08;1副本数&#xff09; ~ 次接口es 容量 &#xff08;日志数据30kb&#xff09; 影响es存储的主要原因 通过 kibana 查看 堆栈》索…

管理类联考——英语——技巧篇——阅读理解

一、阅读理解A节选项的点 1.正确答案的五大特征 (1)“主题为王”原则&#xff1a;即正确答案通常与文章的中心思想、主旨大意有关。 (2)正确答案的特点&#xff1a;语言简化、反话正说、正话反说、关键词替换。 (3)正确答案要选相对的&#xff0c;不选绝对的。正确答案通常含有…

编译原理期末速成-LL(1)文法、FIRST集、FOLLOW集

文章目录 LL(1)文法的条件LL(1)分析法构造FIRST(α)构造FOLLOW(A)习题强化 LL(1)文法的条件 文法不含左递归 对于文法中每一个非终结符A的各个产生式的候选首符集两两不相交。即若 对于文法中的每个非终结符A&#xff0c;若它存在某个候选首符集包含ε&#xff0c;则 这里&am…

面试被问到:测试计划和测试方案有什么区别?

面试的时候&#xff0c;很多小伙伴都被面试官问过这个问题 “测试计划和测试方案有什么区别”&#xff1f; 到底有什么区别呢&#xff1f;我们先好好了解下这两个文档。 一、测试计划 1、测试计划是什么&#xff1f; 测试计划是组织管理层面的文件&#xff0c;从组织管理的…

Jetpack Compose 中使用 CameraX 拍照和录制视频

在 Android 开发的历史中&#xff0c;Camera 的 API 是一直受人诟病的&#xff0c;使用过的人都知道&#xff0c;直观的感觉就是配置复杂、臃肿、难用、不易理解&#xff0c;从官方关于 Camera 的 API 迭代路线可以看出官方也在尝试着不断改进开发者关于Camera的使用体验&#…

ChatGPT编程

ChatGPT问答 问题一&#xff1a;如何合理分配时间问题二&#xff1a;以下是提高工作效率的建议&#xff1a;问题三&#xff1a;如何培养兴趣问题四&#xff1a;软件和硬件谁重要问题五: 设计模式如何熟练运用问题六:C语言编程冒泡排序 问题一&#xff1a;如何合理分配时间 这里…

Java实训第八天——2023.6.14

文章目录 一、vue的环境搭建&#xff1a;二、文本数据绑定三、属性数据绑定四、事件绑定五、案例1——全选/全不选六、案例2——切换图片主要内容&#xff1a; v-if 、v-show指令 七、表单数据绑定八、综合练习总结步骤&#xff1a; 一、vue的环境搭建&#xff1a; 官方文档&a…

Mysql数据库中的约束、用户管理与授权

文章目录 一、Mysql中常见的约束总结 二、数据表高级操作2.1克隆表&#xff0c;将数据表的数据记录生成到新的表中2.2清空表&#xff0c;删除表内的所有数据2.3创建临时表2.4创建外键约束&#xff0c;保证数据的完整性和一致性。 三、数据库用户管理3.1新建用户3.2查看用户信息…