美文网首页Flutter
Flutter使用心得(基础篇)

Flutter使用心得(基础篇)

作者: HanOBa | 来源:发表于2020-02-19 16:35 被阅读0次

    鄙人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/

    相关文章

      网友评论

        本文标题:Flutter使用心得(基础篇)

        本文链接:https://www.haomeiwen.com/subject/jhiafhtx.html