Flutter

Posted by ooftf on April 12, 2021

问题

  • 为什么要考虑移动端跨平台开发
  • 为什么选择Flutter
  • Flutter如果做到跨平台
  • Flutter内部架构
  • Flutter对比RN和小程序有什么优缺点
  • Flutter对于热更新的支持
  • 现有项目如何引入Flutter
  • Flutter和本地通讯
  • Android控件和Flutter控件的对应关系
  • Flutter布局
  • Flutter和Android通讯
  • Flutter现状(现在和展望)

    Flutter初时

    Flutter架构图 Android架构图 Web架构图 React Native 和前端开发不同,react native 所有的标签都不是真实控件,JS代码中所写控件的作用,类似 Map 中的 key 值。JS端通过这个 key 组合的 Dom ,最后Native端会解析这个 Dom ,得到对应的Native控件渲染,如 Android 中 标签对应 ViewGroup 控件。

双方的通讯通过C++层会被转为String字符串传输

Flutter是谷歌2018年发布的跨平台移动UI框架

Fluttter热更新

webview、rn/weex,都有一个特点,可以远程动态载入js代码,可以更新本地的js代码。前端开发者认为动态性是天经地义的,但其实flutter并不支持。 flutter是有编译优化概念的,如果它提供动态性支持,会影响它的性能。 网上有个方案是:改造flutter,用一个独立的v8/jscore来加载动态js代码,去操作flutter布局引擎的渲染,flutter本来没有跨环境通信的问题,结果又弄了一个js引擎进来搞出了通信问题,造成性能下降,还把包体积增加了很大,还不如直接用rn/weex。

暂存区

其他Hot Reload (热重载) Flutter 采用的是类似 React 的响应式编程模型。UI 在运行时视觉上的变化是由应用的状态来驱动的

库介绍

| 库 | 功能 | | ————————– | ————– | | dio | 网络框架 | | shared_preferences | 本地数据缓存 | | fluttertoast | toast | | flutter_redux | redux | | device_info | 设备信息 | | connectivity | 网络链接 | | flutter_markdown | markdown解析 | | json_annotation | json模板 | | json_serializable | json模板 | | url_launcher | 启动外部浏览器 | | iconfont | 字库图标 | | share | 系统分享 | | flutter_spinkit | 加载框样式 | | get_version | 版本信息 | | flutter_webview_plugin | 全屏的webview | | sqflite | 数据库 | | flutter_statusbar | 状态栏 | | flutter_svg | svg | | photo_view | 图片预览 | | flutter_slidable | 侧滑 | | flutter_cache_manager | 缓存管理 | | path_provider | 本地路径 | | permission_handler | 权限 | | scope_model | 状态管理和共享 | | lottie | svg动画 | | flare | 路径动画 |

名词解析

咸鱼Flutter

移动端跨平台开发深度解析

Dart第三方库搜索

UI渲染