鄙人iOS开发攻城狮一枚,因公司发展需求,2019年7月开始自学Flutter,于2019年11月学成并开发一款类似百度云盘APP并上架AppStore和GooglePay,开发期间的辛酸和痛苦只有自己知道,总体来说,痛并快乐着,以下是使用Flutter开发的一些基础心得,分享给即将步入Flutter坑的攻城狮们。
基础概念介绍:
Flutter 是 Google推出并开源的移动应用开发框架,主打跨平台、高保真、高性能。开发者可以通过 Dart语言开发 App,一套代码同时运行在 iOS 和 Android平台。 Flutter提供了丰富的组件、接口,开发者可以很快地为 Flutter添加 native扩展。同时 Flutter还使用 Native引擎渲染视图,这无疑能为用户提供良好的体验
Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。2018年12月5日发布正式版本1.0。
Flutter使用Dart语言开发,dart语言是由谷歌公司开发的网络编程语言,于2011年10月10日发布一种面向对象的语言,包含面向对象语言的基本特征(继承、封装、多态)。
Flutter的核心宗旨,万物皆Widget,相比较原生iOS/Android,Flutter把所有对象全部看成Widget,比如基础UI控件、手势、文本、图片、按钮、动画、渲染等等
Flutter IDE:Android Studio / VSCode
项目常见问题:
针对问题:
1)flutter开发中常见功能的解决,比如权限,导航,推送等等一般app开发中常用到的功能。
1.权限问题,第三方插件
2.导航路由使用:1.简单的路由类 2.命名路由 3.自定义路由
3.推送:iOS使用原生APNS通知、Android使用FireBase推送
4.flutter的listview是不支持拖动排序的,需要支持列表拖动排序需要用ReorderableListView
2)碰到的问题以及如何解决的,比如推送过来点击无法跳到通知详细
1.在收到通知点击跳转详情页时,没有Context上下文对象,无法使用push跳转至详情页
使用EventBus解决问题,新建Base类,Base监听接收通知,需要跳转的页面继承Base
2.相册图片和视频开始没有在一个页面内,是因为Flutter的插件太多,没有选择正确的插件使用
3.在列表有缩略图的时候,使用State刷新整个页面的时候,会有图片闪烁的问题出现
使用GlobalKey,封装想要刷新的控件,然后实现局部刷新
4.Flutter不支持操作本地文件的复制和粘贴功能
原生代码实现功能,flutter通过channel调用原生方法实现
5.相册插件的国际化语言问题
调用相册的插件把页面语言构造写死了,如果想要实现插件中的国际化语言支持,就得修改插件中的方法,可能存在每次更新插件,可能会导致修改部分失效
6.做两个项目统合的时候,Android遇到分享栏里面存在两个app问题?
7.切换本地语言后,调用api传参时,语言对应的参数变更问题?
8.本地图片发生变化后,刷新页面无效果
需要重写 本地图片清除缓存并加载新图,判断新图片文件和旧图片文件size是否一致
9.选择插件一定要慎重,部分插件细节问题较难处理和修改
上传相册中断网,调用隐藏loading,loading无法取消问题
进入下个页面loading正在加载时,调用隐藏loading无效果
上传多张图片时,插件内部写定单位为个,想调整为进度条无法实现
调用隐藏按钮角标时可能存在不隐藏状况,需重写隐藏角标方法
10.本地文件,在Android的文件管理器中可以自行修改,会导致app内本地文件丢失
3)相对于原生开发的优缺点。
Flutter优点:
1.支持热重载功能,编译更快
2.跨平台,高性能(基于DOM树渲染原生组件),一套Source,多平台使用,缩短开发周期,性能相比原生相差不大,比weex和RN要好,尤 其是在动画和列表滑动的时候
3.编码相对简单,上手难度较低,
4.开发出的app相对其他跨平台开发(WEEX、react native、webApp)更流畅、性能更好
5.敏捷开发,相比较原生,有很多插件支持,一行调用代码即可实现功能
6.类型安全,Dart是类型安全的语言,支持静态类型检测,编译前发现一些类型的错误
Flutter缺点:
1.底层开发支持相对不够完善(本地文件IO操作、状态栏的监听修改、相机相册等)
2.Native相比Flutter性能更优、CPU占用较多
3.Flutter包比原生包内存更大
4.支持的第三方工具,第三方框架相对较少
5.不能独立运行,更多内部实现依赖原生,上手需要了解基本原生
6.widget类型较多,目前已知200+,全部了解需要耗费大量时间
7.提倡控件的组合而不是继承,无法重写View实现自己需要的自定义效果,只能通过多个View组合实现
8.部分解决方案依赖梯子,国内开发资源相对比国外少
9.Dart语言是嵌套式语言,多层嵌套会代码结构比较凌乱
10.有一些优化缺陷,类似于在input输入框中选中文字时,Android剪切粘贴菜单可能会像素溢出的问题,iOS可能存在点击其他input 会把之前input的内容自动带下来
4)目前flutter的最新情况。
目前最新flutter版本1.12.13。Dart语言版本2.7.0
Samba集成版本1.7.8
SaWaKaMi集成版本1.9.1
Flutter从1.9版本开始稳定支持flutter on web、支持 macOS Catalina 和 iOS 13、引入全新的 Material 风格小部件、新增国际化支持24中国际语言、默认开发语言Swift、Kotlin,flutter on web暂时不稳定,不建议直接使用
5)flutter项目常用第三方(推荐使用:官方插件,相对稳定插件)
# WebView: flutter_webview_plugin
# 提示框: fluttertoast
# 本地存储: shared_preferences#
# 获取沙盒路径:path_provider
# 生成二维码: qr_flutter
# 网络请求: dio http
# 相机相册: image_picker
# 相册多选: multi_image_picker
# 获取设备信息: device_info
# 本地数据库: objectdb
# 获取App信息: package_info
# 判断网络状态: connectivity
# 保存图片到本地: image_gallery_saver
# 权限请求: permission_handler
# Google身份验证:firebase_auth: ^0.11.1+8
# 推送: firebase_messaging
# 分享: esys_flutter_share
# 视频播放器: video_player
参考文献:
flutter中国官方:https://flutterchina.club/
flutter中文网:https://book.flutterchina.club/
flutter官方文档:https://flutterchina.club/get-started/install/
flutter插件:https://pub.dev/
github地址:https://github.com/flutter/flutter
flutter更换语言:https://juejin.im/post/5de720676fb9a0160823573a
flutter打包iOS:https://www.jianshu.com/p/f88c57403ba4
Flutter打包Android:https://flutterchina.club/android-release/