Flutter 总结
-
优势:
- 两端公用一套代码
- 搭建UI方式简单,快捷
- 相比RN,需要适配的地方少,且流畅度高
- 热重载,dart支持JIT,开发时可以不需要重新build就修改UI
- 单线程语言,不需要注意在子线程访问UI的问题,
- Dart 中并没有线程,只有 Isolate(隔离区)。Isolates 之间不会共享内存,就像几个运行在不同进程中的 worker,通过事件循环(Event Looper)在事件队列(Event Queue)上传递消息通信。
2.缺点:
- 相对RN不能动态发版本
- 相对原生目前只支持简单UI控件渲染,对于webView,视频播放,仍然需要和原生混编
- 对于混编,原生页面和Flutter页面叠加跳转由于Flutter Engine重复创建而导致内存暴增,对于这个问题引入FlutterBoost库
- flutter不支持像(java的反射,iosRuntime)这样的动态机制,导致服务动态的进行json转转model,解决方案:通过android sdutio插件解决
1,dart特点:
Dart
入门教程:
1,https://flutterchina.club/docs/
接入flutter_boost
androin:
https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps
https://juejin.im/post/5cf52fa851882534566917e5
ios:
https://blog.csdn.net/lizubing1992/article/details/90954195
咸鱼混编实现方案:
https://zhuanlan.zhihu.com/p/40528502
咸鱼文章:
https://www.infoq.cn/article/xianyu-cross-platform-based-on-flutter
编译模式文章
https://www.jianshu.com/p/f44db0d088e5
坑:flutter1.8之后androin产物修改
https://www.sohu.com/a/345947027_670669
混编总结:目前两种,
1,通过配置引用关系,ios(androin)主工程通过pod(gradle)与flutter建立引用关系然后进行变异,相当于把三个工程紧密的耦合到一起,缺点是其他不开发flutter业务到同学也需要进行复杂到配置
2,把flutter编译产物做成子库ios(framework),android(不同版本flutter编译产物不同),
未解决问题记录:
1,混编在vivo部分机型无法内嵌webview
2,flutter 打iosdebug环境包失败
解决问题记录:
flutter ios端使用stoaryboard布局,如果有子view需要紧贴底部布局,会出现跳动问题?
问题定位:经过xcode查看布局,发现UI错乱端View是flutter端view而不是ios默认启动图view,确定问题为flutter自定义了一套启动图但是有bug
解决方案:经过查看FlutterViewController暴漏Api,发现了splashScreenView属性,测试结论,它是异常的View,解决方式,拿到它的子view,重新用frame布局,经过测试可以显示正常。
不足点:需要维护两套布局,stoaryboard和重写端FlutterViewController,本来计划采用公用一套View,用snap布局,但发现其他问题,后先放弃,以后在尝试。
常见问题参考文章: