Flutter 全局控制底部导航栏和自定义导航栏的方法
1. 介绍
导航栏在移动应用中扮演着至关重要的角色,它是用户与应用之间进行导航和交互的核心组件之一。无论是简单的页面切换,还是复杂的应用导航,导航栏都能够帮助用户快速找到所需内容,提升用户体验和应用的易用性。
在移动应用开发中,通常有两种常见的导航栏类型:底部导航栏(BottomNavigationBar)和自定义导航栏(CustomNavigationRail)。底部导航栏通常位于屏幕底部,以图标和标签的形式展示应用的不同功能或页面,用户可以通过点击不同的图标来切换页面。而自定义导航栏则是一种更加灵活的导航栏形式,可以根据应用的需求自定义布局、样式和交互方式,适用于一些特定场景或者需要更多定制化的应用。
然而,在某些情况下,我们可能需要在应用中灵活切换底部导航栏和自定义导航栏,以满足不同用户群体或特定场景下的需求。例如,在平板电脑或大屏幕设备上,使用自定义导航栏能够更好地利用屏幕空间,提供更丰富的导航和功能;而在手机端,底部导航栏可能更符合用户的使用习惯和操作方式。因此,全局控制底部导航栏和自定义导航栏的需求就变得十分重要。通过在应用中实现全局控制,我们可以根据不同的设备或用户需求动态切换导航栏类型,从而提升应用的灵活性和适用性。接下来,我们将探讨如何实现这一目标。

2. 底部导航栏与自定义导航栏简介
在移动应用开发中,底部导航栏(BottomNavigationBar)和自定义导航栏(CustomNavigationRail)是两种常见的导航栏形式,它们各具特点并在不同的应用场景下发挥着重要作用。
底部导航栏:
底部导航栏通常位于屏幕底部,以图标和标签的形式展示应用的不同功能或页面。它的特点包括:
- 简洁直观:底部导航栏的设计简洁直观,用户可以通过点击不同的图标来快速切换页面,易于上手和操作。
- 易于使用:底部导航栏符合用户的使用习惯和操作方式,使用户能够轻松找到所需功能,提升了应用的易用性。
- 适用性广泛:底部导航栏适用于各种类型的应用,特别是那些功能较少或页面切换频繁的应用。
自定义导航栏:
自定义导航栏是一种更加灵活的导航栏形式,开发者可以根据应用的需求自定义布局、样式和交互方式。它的特点包括:
- 灵活定制:自定义导航栏可以根据应用的特定需求进行灵活定制,包括布局、样式、交互方式等,满足不同应用场景的需求。
- 丰富功能:自定义导航栏可以集成更丰富的功能和交互,如侧边栏、抽屉式导航、手势操作等,提供更多的导航和功能选择。
- 适用特定场景:自定义导航栏通常适用于一些特定场景或需要更多定制化的应用,如平板电脑、桌面应用等,能够更好地利用屏幕空间和提供更丰富的导航体验。
优缺点分析:
底部导航栏和自定义导航栏各有优缺点,适用于不同的应用场景:
- 底部导航栏适用于功能简单、页面切换频繁的应用,它简洁直观、易于使用,适合手机端的应用。
- 自定义导航栏适用于需要定制化导航和丰富功能的应用,如平板电脑、桌面应用等,它灵活定制、功能丰富,能够提供更好的用户体验。
根据应用的实际需求和用户群体,开发者可以选择合适的导航栏形式,或者在不同设备和场景下动态切换导航栏类型,以提升应用的用户体验和适用性。接下来,我们将探讨如何实现全局控制底部导航栏和自定义导航栏的方法。
3. 枚举类型的使用
在Flutter中,枚举类型(Enum)是一种有限的、离散的数据类型,用于表示一组相关的常量值。枚举类型在表示一组可能的选项时非常有用,可以提高代码的可读性和可维护性。
介绍枚举类型及其在Flutter中的应用:
枚举类型是一种由一组命名的常量值组成的数据类型。在Flutter中,枚举类型通常用于表示一组相关的选项或状态,例如不同的导航栏类型、主题模式、状态等。通过使用枚举类型,我们可以更清晰地表达代码的意图,避免使用散乱的数字或字符串来表示选项,提高了代码的可读性和可维护性。
在Flutter中,枚举类型的声明方式如下所示:
enum NavigationType {bottomNavigationBar,customNavigationRail,
}
在上面的示例中,我们定义了一个名为NavigationType的枚举类型,它包含了两个常量值:bottomNavigationBar和customNavigationRail。这些常量值可以被用作代码中的标识符,并且它们的类型都是NavigationType。
定义一个枚举类型来表示导航栏的选择:
在全局控制底部导航栏和自定义导航栏的情景下,我们可以使用枚举类型来表示当前选择使用哪种导航栏。例如,在Flutter应用中,我们可以定义一个枚举类型来表示导航栏的选择,如下所示:
enum NavigationType {bottomNavigationBar,customNavigationRail,
}
然后,我们可以在应用中使用这个枚举类型来控制底部导航栏和自定义导航栏的显示和切换。通过这种方式,我们可以清晰地表达当前使用的导航栏类型,并且可以在代码中方便地引用这些选项。接下来,我们将探讨如何利用枚举类型实现全局控制导航栏的方法。
4. 全局控制方法
在移动应用开发中,有时我们需要根据不同的场景或用户需求来动态切换导航栏类型,以提供更好的用户体验。全局控制导航栏的目的是让开发者能够在应用的整个生命周期内灵活地选择和切换导航栏类型,从而满足不同设备、屏幕尺寸或用户需求下的导航需求。
讨论全局控制导航栏的需求和方法:
全局控制导航栏的需求通常包括:
- 根据设备类型切换导航栏:例如,在手机端使用底部导航栏,在平板电脑或桌面端使用自定义导航栏。
- 根据用户偏好切换导航栏:例如,提供一个设置选项,让用户自由选择喜欢的导航栏类型。
为了实现全局控制导航栏,我们可以借助枚举类型来表示不同的导航栏类型,并在应用的各个部分使用这个枚举类型来决定当前显示的导航栏。通过这种方式,我们可以轻松地切换导航栏类型,而不需要修改大量的代码。
介绍如何使用枚举类型来控制显示不同的导航栏:
首先,我们需要定义一个枚举类型来表示导航栏的选择,如下所示:
enum NavigationType {bottomNavigationBar,customNavigationRail,
}
然后,在应用的各个部分,我们可以根据这个枚举类型来决定当前显示的导航栏。例如,在build方法中根据枚举类型选择显示底部导航栏还是自定义导航栏:
Widget build(BuildContext context) {// 根据枚举类型选择显示不同的导航栏Widget navigationBar;switch (navigationType) {case NavigationType.bottomNavigationBar:navigationBar = BottomNavigationBar(...);break;case NavigationType.customNavigationRail:navigationBar = CustomNavigationRail(...);break;}return Scaffold(...bottomNavigationBar: navigationBar,...);
}
通过这种方式,我们可以在应用的任何地方轻松地切换导航栏类型,并且保持代码的简洁和可维护性。这样的全局控制方法使得应用的导航栏更加灵活,能够更好地适应不同的用户需求和设备环境。
5. 应用案例
在这个应用案例中,我们将展示如何在一个 Flutter 应用中实现全局控制导航栏,根据用户的偏好动态切换底部导航栏和自定义导航栏。假设我们的应用是一个新闻阅读应用,用户可以选择使用底部导航栏或者自定义导航栏来浏览新闻内容。
场景描述:
- 当用户首次打开应用时,默认使用底部导航栏来显示新闻分类。
- 应用提供一个设置页面,用户可以在设置页面中选择使用底部导航栏或者自定义导航栏来浏览新闻。
实现步骤:
- 定义枚举类型
NavigationType来表示导航栏的选择。 - 在应用的根部件中,使用
NavigationType来决定当前显示的导航栏类型。 - 在设置页面中,提供一个开关按钮或者下拉菜单,让用户选择喜欢的导航栏类型。
- 根据用户的选择,更新应用中的导航栏类型,并重新构建应用以应用新的设置。
示例代码:
import 'package:flutter/material.dart';// 定义枚举类型
enum NavigationType {bottomNavigationBar,customNavigationRail,
}void main() {runApp(MyApp());
}class MyApp extends StatefulWidget {_MyAppState createState() => _MyAppState();
}class _MyAppState extends State<MyApp> {// 默认使用底部导航栏NavigationType _navigationType = NavigationType.bottomNavigationBar;Widget build(BuildContext context) {return MaterialApp(title: 'Navigation Control Demo',theme: ThemeData(primarySwatch: Colors.blue,),home: Scaffold(appBar: AppBar(title: Text('News App'),),body: Center(child: Text('News Content'),),bottomNavigationBar: _buildNavigationBar(),),);}// 根据枚举类型选择显示不同的导航栏Widget _buildNavigationBar() {switch (_navigationType) {case NavigationType.bottomNavigationBar:return BottomNavigationBar(items: const <BottomNavigationBarItem>[BottomNavigationBarItem(icon: Icon(Icons.home),label: 'Home',),BottomNavigationBarItem(icon: Icon(Icons.category),label: 'Categories',),BottomNavigationBarItem(icon: Icon(Icons.bookmark),label: 'Bookmarks',),],currentIndex: 0,selectedItemColor: Colors.blue,onTap: (index) {},);case NavigationType.customNavigationRail:return CustomNavigationRail(selectedIndex: 0,onDestinationSelected: (index) {},);}}
}// 自定义导航栏组件
class CustomNavigationRail extends StatelessWidget {final int selectedIndex;final Function(int) onDestinationSelected;CustomNavigationRail({required this.selectedIndex,required this.onDestinationSelected,});Widget build(BuildContext context) {// 自定义导航栏的实现return Container(width: 80,color: Colors.grey[200],child: Column(mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[IconButton(icon: Icon(Icons.home),onPressed: () {},),IconButton(icon: Icon(Icons.category),onPressed: () {},),IconButton(icon: Icon(Icons.bookmark),onPressed: () {},),],),);}
}
在这个示例中,我们通过定义枚举类型 NavigationType 来表示底部导航栏和自定义导航栏两种选择。根据用户的选择,我们在应用的根部件中选择显示不同类型的导航栏,并且在设置页面中让用户选择喜欢的导航栏类型。通过这样的全局控制方法,我们可以实现根据用户偏好动态切换导航栏类型的功能,提供更好的用户体验。
6. 代码实现
在这一部分,我们将展示如何在 Flutter 中实现全局控制导航栏,并给出详细的代码示例和解释。
示例代码:
import 'package:flutter/material.dart';// 定义枚举类型
enum NavigationType {bottomNavigationBar,customNavigationRail,
}void main() {runApp(MyApp());
}class MyApp extends StatefulWidget {_MyAppState createState() => _MyAppState();
}class _MyAppState extends State<MyApp> {// 默认使用底部导航栏NavigationType _navigationType = NavigationType.bottomNavigationBar;Widget build(BuildContext context) {return MaterialApp(title: 'Navigation Control Demo',theme: ThemeData(primarySwatch: Colors.blue,),home: Scaffold(appBar: AppBar(title: Text('Navigation Control Demo'),),body: Center(child: Text('Current Navigation Type: $_navigationType',style: TextStyle(fontSize: 18),),),bottomNavigationBar: _buildNavigationBar(),floatingActionButton: FloatingActionButton(onPressed: () {// 切换导航栏类型setState(() {_navigationType = _navigationType == NavigationType.bottomNavigationBar? NavigationType.customNavigationRail: NavigationType.bottomNavigationBar;});},child: Icon(Icons.swap_horizontal_circle),),),);}// 根据枚举类型选择显示不同的导航栏Widget _buildNavigationBar() {switch (_navigationType) {case NavigationType.bottomNavigationBar:return BottomNavigationBar(items: const <BottomNavigationBarItem>[BottomNavigationBarItem(icon: Icon(Icons.home),label: 'Home',),BottomNavigationBarItem(icon: Icon(Icons.category),label: 'Categories',),BottomNavigationBarItem(icon: Icon(Icons.bookmark),label: 'Bookmarks',),],currentIndex: 0,selectedItemColor: Colors.blue,onTap: (index) {},);case NavigationType.customNavigationRail:return CustomNavigationRail(selectedIndex: 0,onDestinationSelected: (index) {},);}}
}// 自定义导航栏组件
class CustomNavigationRail extends StatelessWidget {final int selectedIndex;final Function(int) onDestinationSelected;CustomNavigationRail({required this.selectedIndex,required this.onDestinationSelected,});Widget build(BuildContext context) {// 自定义导航栏的实现return Container(width: 80,color: Colors.grey[200],child: Column(mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[IconButton(icon: Icon(Icons.home),onPressed: () {},),IconButton(icon: Icon(Icons.category),onPressed: () {},),IconButton(icon: Icon(Icons.bookmark),onPressed: () {},),],),);}
}
代码解释:
-
首先,我们定义了一个枚举类型
NavigationType来表示底部导航栏和自定义导航栏两种选择。 -
在
MyApp类的状态中,我们维护了一个_navigationType变量来表示当前选择的导航栏类型,默认为底部导航栏。 -
在
build方法中,我们根据_navigationType的值选择显示不同类型的导航栏,并且在底部导航栏上添加了一个浮动动作按钮,点击按钮可以切换导航栏类型。 -
底部导航栏和自定义导航栏分别在
_buildNavigationBar方法和CustomNavigationRail类中实现,并且根据_navigationType的值进行切换。
通过这样的代码实现,我们可以在 Flutter 应用中实现全局控制导航栏的功能,根据用户的偏好动态切换导航栏类型,提供更好的用户体验。
7. 总结
在本文中,我们讨论了在 Flutter 应用中实现全局控制导航栏的方法。通过使用枚举类型和条件判断,我们可以轻松地根据用户的偏好动态切换底部导航栏和自定义导航栏,从而提供更好的用户体验。以下是本文的主要总结:
-
全局控制导航栏的需求: 在某些场景下,用户可能希望能够根据自己的偏好选择使用底部导航栏还是自定义导航栏。因此,实现全局控制导航栏可以提高应用的灵活性和适用性。
-
方法概述: 我们使用枚举类型来表示不同的导航栏类型,并在应用的根部件中根据用户的选择动态切换导航栏。通过在
build方法中根据枚举类型选择不同的导航栏实现,我们可以轻松地控制导航栏的显示。 -
代码实现: 我们展示了一个完整的代码示例,演示了如何在 Flutter 应用中实现全局控制导航栏的功能。通过定义枚举类型、状态管理和条件判断,我们可以根据用户的选择显示不同类型的导航栏,并且提供一个浮动按钮来切换导航栏类型。
综上所述,实现全局控制导航栏是一个简单而有效的方法,可以根据用户的偏好提供个性化的导航体验,增强应用的用户友好性和适用性。通过合理地设计和实现导航栏控制逻辑,我们可以为用户带来更加愉快和便捷的应用体验。
| 作者信息 作者 : 繁依Fanyi CSDN: https://techfanyi.blog.csdn.net 掘金:https://juejin.cn/user/4154386571867191 |
相关文章:
Flutter 全局控制底部导航栏和自定义导航栏的方法
1. 介绍 导航栏在移动应用中扮演着至关重要的角色,它是用户与应用之间进行导航和交互的核心组件之一。无论是简单的页面切换,还是复杂的应用导航,导航栏都能够帮助用户快速找到所需内容,提升用户体验和应用的易用性。 在移动应用…...
检索增强生成(RAG)技术:实现流程、作用及应用案例
一. RAG简介 在自然语言处理(NLP)领域中,检索增强生成(Retrieval-Augmented Generation, RAG)技术巧妙地结合了信息检索与神经网络生成模型的力量,通过在生成过程中引入相关的外部信息,实现了在…...
Ubuntu安装和使用
Ubuntu 安装和配置 修改下载源 打开软件与更新, 选择其它站点, 选择中国, 选择阿里云源 谷歌中文输入法配置 Ctrl Alt T打开终端, 执行下述命令下fcitx框架 输入密码进行安装 sudo apt-get install -y fcitx-googlepinyinWin呼出菜单, 选择语言支持, 第一次打开会显示语言…...
【Unity】Stream最好用的Selfhost开源轻量服务
【背景】 有好几种场景的投屏或者远控应用希望实现,无论用哪种方式,都绕不开如何构建服务这一关。 【分析】 外网有很多直接付费使用的信令传输类型或是提供流服务的服务器,但我的目标场景是断绝外网的局域网,而且付费也总觉得…...
Web 常见的攻击方式有哪些?
常见的 Web 攻击方式有以下几种: 跨站脚本攻击(XSS 攻击) 跨站请求伪造(XSRF 攻击) SQL 注入 XSS 攻击 MDN 定义如下: 跨站脚本攻击(Cross-site scripting,XSS)是一…...
Rancher(v2.6.3)——Rancher部署Redis(单机版)
Rancher部署Redis详细说明文档]:https://gitee.com/WilliamWangmy/snail-knowledge/blob/master/Rancher/Rancher%E4%BD%BF%E7%94%A8%E6%96%87%E6%A1%A3.md#6rancher%E9%83%A8%E7%BD%B2redis ps:如果觉得作者写的还行,能够满足您的需求&#…...
stm32-模拟数字转化器ADC
接线图: #include "stm32f10x.h" // Device header//1: 开启RCC时钟,包括ADC和GPIO的时钟//2:配置GPIO将GPIO配置为模拟输入模式//3:配置多路开关将左边的通道接入到规则组中//4:配置ADC转…...
[Repo Git] manifests的写法
manifests是个啥 在Repo中manifests描述了Repo客户端的结构,也就是可以从manifests中知道各个模块的代码应该从代码管理仓库当中哪个位置去获取。 manifests的基本结构是一个Git存储库,在顶层目录中持有一个default.xml文件。 由于m…...
位置编码与长度外推
位置编码 位置编码从前到后包括:绝对位置编码、余弦位置编码、旋转位置编码、ALiBi相对位置编码。 1 绝对位置编码(Absolute Positional Encoding) 应用的模型:BERT、GPT等Transformer基础模型广泛使用绝对位置编码来处理序列数据。 算法思想:绝对位置编码通过为序列中的…...
Linux信号补充——信号发送和保存
三、信号的发送与保存 3.1信号的发送 必须有操作系统来保存信号,因为他是管理者; 信号给进程的task_struct发送信号,在task_struct中维护了一个整数signal有0-31位,共32个bit位;对于信号的管理使用的是位图结…...
Vue3 中应该使用 Ref 还是 Reactive?
一、引言 在Vue 3中,构建响应式数据结构是构建用户界面和交互体验的核心部分。而在创建这些响应式数据时,我们有两个主要工具:reactive和ref。选择使用哪一个,实际上取决于你的数据结构和访问需求。 reactive主要用于处理复杂的数…...
红外相机和RGB相机标定:实现两种模态数据融合
1. 前期准备 RGB相机:森云智能SG2-IMX390,1个红外相机:艾睿光电IR-Pilot 640X-32G,1个红外标定板:https://item.taobao.com/item.htm?_ujp3fdd12b99&id644506141871&spma1z09.2.0.0.5f822e8dKrxxYI 2.操作步…...
前端项目,个人笔记(五)【图片懒加载 + 路由配置 + 面包屑 + 路由行为修改】
目录 1、图片懒加载 步骤一:自定义全局指令 步骤二:代码中使用 编辑步骤三:效果查看 步骤四:代码优化 2、封装组件案例-传对象 3、路由配置——tab标签 4、根据tab标签添加面包屑 4.1、实现 4.2、bug:需要…...
【MySQL】2.MySQL数据库的基本操作
目录 数据库基本操作 查看数据库信息 查看数据库结构 显示数据表的结构(字段) 常用的数据类型 数据库管理操作 SQL语句概述 SQL分类 1.DDL:数据定义语言 1.1创建数据库和表 创建数据库 创建数据表 1.2删除数据库和表 删除数据表…...
常见技术难点及方案
1. 分布式锁 1.1 难点 1.1.1 锁延期 同一时间内不允许多个客户端同时获得锁; 1.1.2 防止死锁 需要确保在任何故障场景下,都不会出现死锁; 1.2.3 可重入 特殊的锁机制,它允许同一个线程多次获取同一个锁而不会被阻塞。 1.2…...
c#关键字 static
static 修饰符可用于声明 static 类。 在类、接口和结构中,可以将 static 修饰符添加到字段、方法、属性、运算符、事件和构造函数。 static 修饰符不能用于索引器或终结器 尽管类的实例包含该类的所有实例字段的单独副本,但每个 static 字段只有一个副…...
redis 如何保证数据同步(数据变化时)
redis 如何保证数据同步(数据变化时) 思路 1.新增、删除和修改都先对数据库进行操作,这时数据库的数据将域缓存中数据不同。 2.数据库进行变动后,返回结果,根据返回的结果判断数据库操作是否成功。 3.如果数据库操…...
Ubuntu18.04桌面版设置静态IP地址
引用: Ubuntu配置静态IP_ubuntu配置静态ip地址-CSDN博客 正文 默认Unbuntu 18.04 Desktop桌面版使用 netplan 管理网卡网络地址。使用Unbuntu 18.04 桌面版配置,可以通过桌面上的设置图标配置网卡的静态IP地址。 点击桌面右上角下拉框,点击“设置”按…...
Aztec的客户端证明
1. 引言 隐私保护 zk-rollup 的证明生成与通用 zk-rollup 的证明生成有很大不同。原因是给定交易中存在特定数据(由私有函数处理),我们希望保持完全私有。在本文中,我们探讨了用于证明私有函数正确执行的客户端证明生成ÿ…...
面试官:小伙子知道synchronized的优化过程吗?我:嘚吧嘚吧嘚,面试官:出去!
写在开头 面试官:小伙子,多线程中锁用过吗? 我:那是自然! 面试官:那你知道synchronized的优化吗? 我:synchronized作为重锁,开销大,在早期不被推荐使用&…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...
