Flutter 核心技术与实战
陈航
前美团点评高级技术专家
42432 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 48 讲
Flutter 核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

44 | 如何构建自己的Flutter混合开发框架(二)?

Android构建产物封装
iOS构建产物封装
触发入口
使用FlutterPluginNetworkPlugin插件
依赖原生代码宿主提供的底层基础能力的原生插件
交由原生工程进行统一管理
统一管理以命令行的形式
抽象出开发过程中的关键节点和高频节点
确定二者的边界
抽象为对应技术栈的依赖管理方式
确定分工边界
利用原生的反射去实现插件定义的标准化
fat-aar的不足
插件依赖的手动封装
Flutter模块工程的原生组件封装形式
构建产物应该如何封装
模块工程功能实现
模块工程的依赖声明
原生代码宿主响应Dart层的接口调用
Dart层接口封装
使用第三方开源SDK进行网络通信
在混合工程中,原生工程提供网络通信功能
Flutter模块工程对原生工程的依赖
混合工程的原生依赖管理
工作模式维度
工程架构维度
设计Flutter混合框架的基本设计原则
思考题
总结
Flutter模块工程依赖管理
网络插件依赖管理实践
原生插件依赖管理原则
工程架构与工作模式
如何构建自己的Flutter混合开发框架(二)

该思维导图由 AI 生成,仅供参考

你好,我是陈航。
在上一篇文章中,我从工程架构与工作模式两个层面,与你介绍了设计 Flutter 混合框架需要关注的基本设计原则,即确定分工边界。
在工程架构维度,由于 Flutter 模块作为原生工程的一个业务依赖,其运行环境是由原生工程提供的,因此我们需要将它们各自抽象为对应技术栈的依赖管理方式,以分层依赖的方式确定二者的边界。
而在工作模式维度,考虑到 Flutter 模块开发是原生开发的上游,因此我们只需要从其构建产物的过程入手,抽象出开发过程中的关键节点和高频节点,以命令行的形式进行统一管理。构建产物是 Flutter 模块的输出,同时也是原生工程的输入,一旦产物完成构建,我们就可以接入原生开发的工作流了。
可以看到,在 Flutter 混合框架中,Flutter 模块与原生工程是相互依存、互利共赢的关系:
Flutter 跨平台开发效率高,渲染性能和多端体验一致性好,因此在分工上主要专注于实现应用层的独立业务(页面)的渲染闭环;
而原生开发稳定性高,精细化控制力强,底层基础能力丰富,因此在分工上主要专注于提供整体应用架构,为 Flutter 模块提供稳定的运行环境及对应的基础能力支持。
那么,在原生工程中为 Flutter 模块提供基础能力支撑的过程中,面对跨技术栈的依赖管理,我们该遵循何种原则呢?对于 Flutter 模块及其依赖的原生插件们,我们又该如何以标准的原生工程依赖形式进行组件封装呢?
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了构建自己的Flutter混合开发框架的相关内容,从工程架构与工作模式两个层面介绍了设计Flutter混合框架需要关注的基本设计原则。在工程架构维度,需要将Flutter模块与原生工程各自抽象为对应技术栈的依赖管理方式,以分层依赖的方式确定二者的边界。在工作模式维度,需要从Flutter模块构建产物的过程入手,抽象出开发过程中的关键节点和高频节点,以命令行的形式进行统一管理。文章还介绍了Flutter模块与原生工程的相互依存、互利共赢的关系,以及在原生工程中为Flutter模块提供基础能力支撑的原则和网络插件依赖管理实践。文章详细介绍了如何封装构建产物,包括iOS和Android构建产物的封装过程,以及处理插件依赖的方法。通过本文,读者可以了解到构建自己的Flutter混合开发框架所需的关键步骤和技术要点,为他们在实践中构建类似框架提供了有益的指导。文章内容涉及混合工程的原生依赖管理、网络插件依赖管理等技术特点,对于想要构建自己的Flutter混合开发框架的读者具有一定的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Flutter 核心技术与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(9)

  • 最新
  • 精选
  • 天空
    依赖插件为git时能声明分支或者tag版本什么的吗?

    作者回复: 分支名、tag名、commit都是可以的: dependencies: XXXX: git: url: git://github.com/cyndibaby905/XXXX.git ref: some-branch or some-tag or commit

    2019-10-08
    1
  • 天空
    flutter module中.android 是自动生成的, 打包aar有什么意义? 一个flutter project可以打成aar 集成到原生工程里面吗?

    作者回复: 1.module打包成aar就可以以原生技术栈的方式集成到现有app啊; 2.不行,需要改成module

    2019-12-12
  • Element
    老师好, 模块工程依赖插件配置这块: flutter_plugin_network: git: url: https://github.com/cyndibaby905/44_flutter_plugin_network.git 平时开发就需要将插件上传到github然后这样配置依赖吗? 能不能直接在本地依赖插件?

    作者回复: 可以的哦,本地路径、git地址和版本的方式都可以,具体可以参考第18篇分享

    2019-10-08
  • 学会〆忘记
    老师你好,我想问下iOS工程中的App.framework和类似fluttertoast,只能从Flutter工程里面拷贝出来吗?有没有好一点的方法,因为我iOS工程已经是组件化了,我现在把Flutter当成了其中一个子组件
    2020-06-08
    1
  • 时光念你
    拿iOS来说吧,定义一个单例plugin,每次flutter调用native,都去调用单例plugin,flutter的arguments参数会传递一个map对象,包含methodName和自定义的arguments。iOS端利用runtime,通过注册机制,将methodName和某一个class进行关系绑定,存入单例plugin对象内部。当flutter调用native,iOS端就会初始化一个对应的class实例对象并把参数和resultBlock传递给它,当该对象执行完毕之后,调用resultBlock把结果回传给flutter。
    2019-12-28
    1
  • Geek_Javy
    混编的项目编译很慢啊,目前我的android项目编译一次十分钟有没有方法可以优化一下?
    2021-06-17
  • Geek_cc0a3b
    这种架构应该是由三个项目:native、flutter module、flutter plugin,如何debug呢,比如从native层debug到flutter plugin,没成功。
    2021-05-11
  • flutter 调用腾讯Tim 发送视频,原生怎么把进度传回给flutter的每一个message呢?请老师指教
    2020-05-19
  • 骑着🚀看银河
    老师你好,有flutter完整实践一个App的经验吗,一个小的项目也可以,但是需要把常见的功能搞定,或者推荐一个这样的案例学习也可以
    2020-05-06
收起评论
显示
设置
留言
9
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部