Flutter分模块开发、模块可单独启动、包含Provider

embedded/2024/9/23 20:15:21/

前言

目前Flutter都是在一个项目中,创建不同目录进行模块开发,我进行Android原生开发时,发现原生端,是可以将每个模块独立运行起来的,灵感来自这;

折腾了几天,终于给整出来了。

1、创建根目录

新建一个空文件夹,我这里给其命名为 flutter_module_develop

2、创建模块

就是在 flutter_module_develop 文件夹中,创建Flutter项目;

2.1、创建主模块

命名为app,我是照着Android原生的来命名的,这个命名大家自定义;

2.2、创建子模块

命名为 homeorderpersonalcommon

3.1、给每个模块创建启动文件

找到有入口函数的文件,什么是入口函数?就是这玩意,这样每个模块都可以独立启动,算是分模块开发的核心

void main() {runApp(...);
}

所有模块都是一样的创建流程,最后的效果。

4、建立依赖

4.1、在common模块的pubspec.yaml中添加相关依赖库

我在这里添加了provider 库;

4.2、在home、order、personal的pubspec.yaml中添加common模块

4.3、在app模块的pubspec.yaml中添加home、order、personal模块

5、Provider

common 模块中声明 状态,这样所有模块都可以找到;

import 'package:flutter/cupertino.dart';class Counter extends ChangeNotifier {int count = 0;void compute() {count++;notifyListeners();}
}

6、问题

6.1、跨模块无法访问静态资源

我将 图片字体 放在 common 模块中,本以为其他模块也可以引用,事实证明不可以

因为它默认找到是启动模块的包路径,当前启动的是 app 模块,所以找不到 common 模块下的本地资源文件;

但我找到了解决方向,这些加载本地资源的Widget,很多都提供了 package 属性,遗憾的是,我没有找到正确的使用方式,如果哪位同学解决了,麻烦评论区留言,目前解决方案,就是每个模块各管各的静态资源。

7、注意事项

7.1、依赖的模块发生更改所有关联的模块,都需要重新 pub get,不然找不到更新的内容

7.2、引用依赖模块的对象时,编译器没有提示,需要手动导包 ( import 'xx/xx.dart' ) ,不过好在导包的时候有提示

7.3、Android原生的gradle需要统一版本不仅仅是Android原生,或者说所有模块原生平台的构建工具,都需要统一版本,不然可能会出问题;

7.4、Flutter项目,占电脑的磁盘空间会变大,大2.5倍,这个应该不是问题,除非是大型游戏项目,几十G,就算翻倍,大不了加硬盘;

总结

项目依赖图

效果图

打包体积

新建的单一Flutter项目,打包体积为 17.4MB,而事例中包含五个模块的Flutter项目,打包体积为 17.9MB,体积还算合理

官方

我已经将这种方式给官方过了目,官方回复效率也非常高,后期如果有新进展,会时时更新,比如那个跨模块无法访问静态资源的问题。

Flutter is developed in modules, and each module can run independently · Issue #147847 · flutter/flutter · GitHub

项目地址

GitHub - LanSeLianMa/flutter_module_develop


http://www.ppmy.cn/embedded/34720.html

相关文章

linux查看ip和端口

1. ip addr ip addr 或者 ip addr show 输出包含了网络接口的名称、状态、MTU(Maximum Transmission Unit)、链路层地址(如MAC地址)、IPv4和IPv6地址等信息。 2. 只需要 ip地址 ipV4 ip addr | grep inet ipV6 3.查看端口 s…

从论文中看AI绘画

个人博客:Sekyoro的博客小屋 个人网站:Proanimer的个人网站 主要看是看Diffusion Models,CLIP,ControlNet,IP-Adapter这种经典论文,尝试总结论文写作的一些方式以及图像生成模型的一些内在思想. 对于其中的数学原理和代码不过深究. DDPM 使用扩散模型得到高质量图像,证明了这…

电源管理芯片该如何测试?

电源管理芯片作为电子产品的重要组成部分,其性能测试必不可少。通过各项指标测试,评估电源管理芯片是否符合设计规范,及其稳定性和可靠性。 可通过检测以下指标参数来评估电源芯片的性能: 输入/出电压范围、输出纹波、电压调整率、…

38-5 Web应用防火墙 - WAF绕过基础知识及Web Server(服务器)层绕过

环境准备:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 绕过WAF Bypass WAF(Web Application Firewall)实际上是利用位于 WAF 设备之后处理应用层数据包的硬件/软件特性。这些特性使得攻击载荷可以绕过防护,而不被WAF检测到。这些特…

0079__几则gdb使用技巧

几则gdb使用技巧_gamessite igdb-CSDN博客

Docker-Compose编排LNMP并部署WordPress

前言 随着云计算和容器化技术的快速发展,使用 Docker Compose 编排 LNMP 环境已经成为快速部署 Web 应用程序的一种流行方式。LNMP 环境由 Linux、Nginx、MySQL 和 PHP 组成,为运行 Web 应用提供了稳定的基础。本文将介绍如何通过 Docker Compose 编排 …

redis之地理空间GEO

使用中文时会乱码,我们可以在启动添加命令 redis-cli -a 密码 -- raw 即可 由名字知其是和地理位置相关的,其将三维地球划分为二维平面进行存储。 命令如下: geoadd name 经度 纬度 名称 :在name中添加一个坐标 zrang name 0…

YOLOv5网络结构解析

YOLOv5的实现细节解析:基础组件与实现细节 YOLO(You Only Look Once)系列作为目标检测领域的重要算法,以其速度快、性能好而著称。YOLOv5是该系列的最新版本,它在保持YOLO一贯的简洁高效特点的同时,进一步…