先和原生程序比较一下代码量:
Dart + macOS plugin:
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
Dart 4 61 25 360
Objective C++ 1 32 8 152
C/C++ Header 1 2 0 5
-------------------------------------------------------------------------------
SUM: 6 95 33 517
-------------------------------------------------------------------------------
纯 macOS Objective-C 版本代码:
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
Objective C 20 381 249 1703
C/C++ Header 21 134 142 222
-------------------------------------------------------------------------------
SUM: 41 515 391 1925
-------------------------------------------------------------------------------
代码数相比约 1:3.7,并且 Flutter macOS 版本比纯OC版本多了权限检查等功能。新技术、新语言必然会带来效率提升和维护成本的降低。
该程序规模不大,使用某云的投屏 SDK 简单封装一下而已。发现要写那么多端(macOS, Windows, iOS和Android),遂冒险使用了 flutter desktop。云家不提供 Dart 版本SDK。
![65bc3a476898f32adb8be8e331ff7cf6.png](https://i-blog.csdnimg.cn/blog_migrate/4e5d4694beafe6db2727da038f525ba9.png)
耗时16个小时做完了 macOS 版本
大部分时间都花在摸索可行的方法和搜索 Obective-C、Swift 的语法了。先草草写了界面部分。在集成 SDK 时遇到问题,尝试了一下独立的 plugin,发现不可能解决 cocoapods 依赖私有 framework,遂放弃了,改为程序(App)内 plugin。
Flutter 方面几乎未发现特别难的问题,beta 版本也已经很成熟了。
后来 Catalina 录屏权限上遇到一些问题,无关不表。
无从下手的 Windows 版本
Flutter for Windows 似乎还在 Technical Preview 状态。在几番辛勤劳作后能构建 Dart 版本 Windows 程序了,但是绝望的发现云家提供的 Windows SDK 是32位的,绞尽猪脑子也没有明白人家为何只提供 32 位 SDK。遂放弃了 Windows 集成。
如果不懂 C++, 不会 Visual Studio C++,建议不要轻易尝试构建 Windows 端。
还算顺利的 Android 版本
Flutter 已经能集成一切原生代码了,花费几个小时就堆出来了。
号外
现在正在做一个界面超级复杂的App,虽然只需要发布 iPhone/Android,但是开发过程大部分时间都是使用 macOS 程序在调试,过程很顺利。优点有:手势操作比虚拟机里快一些、顺畅一些,耗费资源也少很多(一个进程和整个iOS的虚拟机相比)。最后大体完工后,在虚拟机里测试一下 SafeArea 等即可。
Dart DevTools
InteliJ 和 VSCode 的 Flutter 插件都集成了部分功能,但是直接从 github 下载的版本功能多了一些。
![c138ea81568bf0f9c432f226e6c9b363.png](https://i-blog.csdnimg.cn/blog_migrate/70fe7432fc097574fac08720f3f953b9.jpeg)
如 Network 记录对网络请求分析很有帮助。
该 Git 里还有如何分析内存泄漏的案例。当然还可以打包为 MacApp 直接使用。
个人感觉 Dart Devtools 本身就是一套代码构建出 Mac/Web 的范例工程,其次对 Dart/Flutter 开发人员来说这几乎等价于前端开发和 Chrome 的 Developer Tools 的关系。