只接受发布货源信息,不可发布违法信息,一旦发现永久封号,欢迎向我们举报!
1064879863
16货源网 > 餐饮行业新闻资讯 > 软件开发 >  Flutter 在 2019 年会有怎样的表现?


Flutter 在 2019 年会有怎样的表现?

发布时间:2019-09-01 20:02:58  来源:网友自行发布(如侵权请联系本站立刻删除)  浏览:   【】【】【
按照rn的发展历程,flutter的生态大概两年后能撑起一个生产项目的研发。所以这一年大概是修bug为主吧...
Flutter 在 2019 年会有怎样的表现?

按照rn的发展历程,flutter的生态大概两年后能撑起一个生产项目的研发。所以这一年大概是修bug为主吧...

赞同上面的看法,起码要一年甚至两年体验才能成熟。


Flutter现在的状态真不是我黑,真的是才刚刚达到能用的标准就强行发了1.0。看下Github上的Milestone就能知道了,有2000+的Open Goals。而且Flutter筛Issue的老哥把关也挺严的,历史上总共15000+的Issue只放了3000个进Goals,重复的基本全被关掉。那现在2000+的Open Goals基本上就对应着Flutter真真切切需要改的地方。

2019年就看Flutter团队工作效率怎么样了。


2019年生态肯定会迎来一波发展的。UI的轮子、native的轮子肯定会大批量出现。最终肯定能达到RN级别,Flutter毕竟对原生开发转过来的还是相当友好的,Google不反水的话肯定能发展起来。

(唯一一个比较疑惑的点是,我在那些陈年老Issue里面翻出了Google内部一大堆等待完成的UI轮子设计,有的功能非常基础但1.0就是没实现。以后这些设想如果要实现的话,要么break现在的material库,要么在material库里面一个轮子造两份。不知道以后Google怎么解决)(我之前还想写UI轮子的,这一翻就有点不想写了)


还有就是Desktop embedding了,看起来很好,如果能用的话是个非常吸引人的选项。目前就是等社区轮子,外加等待上游Flutter为desktop进行调整(现在的Flutter很明显没考虑过桌面环境)。但我觉得Flutter团队这么忙,这些东西他们能做多少是多少吧。

flutter的1.0并不是真正的1.0,他依然是一个半成品,但是可能因为非技术原因赶鸭子上架了。


现在的问题是玩家们愿不愿意在这个半成品身上投入更多的精力了,我个人还是持观望态度。


目前大型app主要还是以native+hybrid,或者native+rn为主,rn目前生态已经趋于成熟,加上今年底层的重构完成,其可靠性会更进一步。


flutter团队今年首要任务还是把flutter高达4000+的issue干掉,完成一个真正意义上的flutter 1.0。


当然已经有一些巨头陆陆续续地在一些非核心产品上尝试flutter了,这是一个好的信号,今天应该是flutter打基础的一年,今年的目标一定是一个可用的框架和够用的生态。


目前我们也没有引入flutter的计划,现在主要还是以native+rn+hybrid+web的一套技术栈,flutter可以很好的支持混编,即使之后引入flutter也会是局部引入,我们可能会逐步用flutter代替部分rn,也可以尝试用flutter代替部分native,flutter的定位像是在native和rn之间的模糊地带,理想情况下所有UI层的绘制包括动画我们都可以用flutter完成,这就是rn做不到的了,rn的性能不足以支持复杂UI,但是rn的动态性显然更强,所以在动态性强的场景中我们还会保留rn。


所以我个人认为flutter今年主要的发展是,核心生态的可用,周边生态的够用,大玩家局部引入,总体还是夯实基础,各个玩家浅层次尝试的一年。


至于未来的趋势,只要谷歌不跳票,毕竟有自家操作系统加持,配合上flutter有一定先进性的技术,完全可以取得比en更高的上限

我们用flutter做的游戏已经在申请版号了

你们愿意等就继续等

我看到有人老是拿那4000个issues说事,笑死了

那里面一大堆重复的,我曾经解决过一个阿三提的issue

阿三大呼感谢,结果发现有四五个issues跟那个issue是同样的问题

那些issues是个人都可以提,热度高自然提的人多

很多issue其实是question,就是一堆人不会做,然后过去问问题

Google的人懒得搭理的时候,就会留在那边

类似的情况你多参与开源项目就知道了,老外一般都比较有礼貌

明知道你的问题是不合理,比如你自己Google一下就有答案的问题

一般遇到了就不太愿意搭理

不愿意回复你的时候,一般都是留个open issue在那边

很少会直接给你close掉,就类似你投简历时候的默拒,一般hr有点素质的,都会选择默拒

所以issue多并不是意味着它真的有问题

非常好上手,表现应该不错。

我们使用 Flutter 开发的APP马上要上架了,对比使用 Weex、RN、Kotlin开发要简单太多了,上手简单。常用的功能都有,官方给的文档比较完善,Awesome Flutter 上面也有很多实例。个人比较看好 Flutter,如果 Fuchsia 发布,Flutter 会更加火爆。还有一个 Flutter 是真“一次编写到处运行”

适合阅读本文的读者:1. 单纯对前端技术感兴趣的朋友;2. 帮助公司进行前端架构选型的大佬;3. 公司用Flutter,但是自己还是一脸懵逼的朋友。此文算是介绍Flutter整体格局的“科普”文。

特别一提:4月中旬,原生flutter库已经在desktop平台发力了。有兴趣的朋友可以提前自己摸索摸索。我是打算等它desktop相对成熟些了,再抽空开个title来写个相关的导读。不过话说回来,下个stable版本可能原生flutter库就能支持desktop平台咯。
简介:https://github.com/flutter/flutter/issues/30726

(至于关评论的原因,大部分老哥还是挺正常的。但总有些智力发展有障碍的同学,文章看一半,就断章取义地无脑开抬杠。呵呵,怕了)


内容太多,想看特定内容请根据标题目录:Ctrl+F

标题目录:

  • 总结
  • 现在谁不适合使用flutter?
  • flutter官方遇到issues的态度
  • 为什么是大势所趋?(1.从google的角度来说,这是一盘大棋+2.既然有无敌万金油H5技术栈,那flutter有啥优势?)
  • 用原生开发?用flutter开发?
  • 听说Flutter还能开发桌面端应用?
  • 从几个主要的点聊聊flutter当前本身的优缺点
  • WebView插件
  • 其他常用的插件

    (PS:最近在业余开发高可用+方便快速集群的即时通信服务端程序,到时会用同一套flutter项目代码做iOS/Android/Windows/Linux/Mac(网页版应该是没得做,目前谷歌上都很少有关于hummingbird的文章),5个平台的客户端,对即时通讯服务端架构感有兴趣的朋友可以看看架构设计:写一个即时通信的app,服务器端需要用到哪些技术?)


4月6日+7日+8日更新内容:

  • 应该是在18年末,我写了一个“2019年不适合使用flutter的人群”。现在flutter与其生态圈都经过了5个月的发展,士别三日,刮目相待,更新为“现在谁不适合使用flutter?”
  • WebView内容更新(很多大问题,现在都不是问题咯)。由于WebView过于重要,又有热心小伙伴提醒我多聊聊WebView。因此单开个标题聊聊:
    1.WebView在Flutter项目中到底是什么地位?JS通信有什么用吗?
    2.WebView的功能兼容性测评
  • 更新了部分模块的内容(因为它们自身更新了+WebView也大更新了,所以局势又变了,这部分内容也更新了)

总结

flutter就是站在巨人的肩膀上进行开发(因为flutter就是与原生API通信的。目前这些巨人是:Android/iOS原生开发。别谈Windows、Mac、Linux,仅仅是预览版,哪个神仙公司会不选久经沙场的SDK,偏偏选择preview版本),单纯从开发角度来说,绝对是大势所趋。

(注意:其实现在已经能用一套flutter项目代码放移动端+桌面端跑了,只是桌面端还处于开发阶段,没高调宣传而已。估计5年后,在前端开发界,将无人不知flutter,历史趋势就应该如此。我之前还有调侃说“只要谷歌爸爸不弃坑”,只是调侃罢了,谷歌是不可能弃坑flutter的。看看下面聊到的谷歌布局问题就明白了)

现在谁不适合使用flutter?

由于时过境迁,国内教程多了,WebView也更新好几个版本,因此这部分的观点也更新了。什么样的人不适合使用flutter?之前因为国内教程太少,入门麻烦;WebView贼难用,导致无法使用一些非常成熟+好使的JS库,直接使得项目的开发停滞不前,陷入僵局。
所以我当时建议不喜欢折腾+加班严重的同学,放过自己(当时可是连flutter-go那个项目都没有。至于具体它是啥,下面会聊)。
然而那个阶段已经可以翻篇了,因为国内小伙伴很给力,教程哗哗就好多好多,WebView也不负众望,更新勤快,已经很好使了,很多大问题都不是问题了。
一些尚未入局的同学主要都是因为对flutter周边生态环境(尤其各种细节功能)存在疑问,不放心。然而,现在基本都有解决方案了(请看:“WebView插件”)
现在谁不适合使用flutter?传统项目就没有不适合的,有兴趣的话就大胆往前走。(你要拿flutter开发游戏,我只能说大佬你真猛)

flutter官方遇到issues的态度

我基本每天刷flutter的github里的commits,看看更新了啥,对flutter社区也算是比较熟悉了。flutter官方遇到issues的态度是:不错,你们提的issues确实算是不错的new features,我们决定下辈子就提供这些feature。

不信?2016年#5422号带有63个thumb up和8个heart的issue“Text Selection”,至今还没搞定,还有数不胜数的这类实用+拖老久的feature不给提供。真的是:你们提你们的new features(所以周边很多packages就是给他们擦屁股的啊!),我们自己搞自己的

你现在去给flutter提new features,等到官方给解决方案可能要等几个月/年(你没看错,可能是年。还不信?你去看flutter官方github里的2015年的issue,给richText提供内嵌image功能的issue,2018年结束都没搞定,最近说是要2019年4月搞定。当然,这个有第三方库解决了)...不过你要是工作不饱和,闲得慌+会Android/iOS双端原生开发,完全可以自己做插件,什么问题也都不是问题了,自己开发第三方库(大哥,你这种人我最欣赏了!做好插件call我!)。

html遇到问题,那能叫问题?就怕第三方库挑不过来。

为什么是大势所趋:

  1. 从google的角度来说,这是一盘大棋。一是为了给fuchsia系统的诞生打下坚实的群众/技术基础,毕竟flutter项目未来直接上fuchsia是板上钉钉的事,又因为fuchsia和flutter都算是谷歌的战略项目(下面会将原因),谷歌要是弃坑,那真等于自己作死,所以这点大可放心。二是你以为fuchsia只会替代Android的份额?不不不,连封闭的iOS它都不打算放过(当然还有其他平台,这个先不说)。一套dart代码,既能跑Android又能跑iOS(当然未来还会有Windows/Linux等平台,但这暂时先不考虑。毕竟flutter连preview都不算,只是“探索性尝试”阶段),性能指不定比原生项目跑的还快(因为flutter项目调用的都是Native代码),未来除了历史遗留/暂时的三反馈短缺问题,谁还用原生开发?除非有抖M喜欢加班...

    这就跟下棋一样,苹果公司要是看不懂google下的棋,感觉google下棋单凭感觉,跟我好像没啥关系,但等google把棋势摆好,就可以直接来个将死(PS:这是近日在QQ象棋中,被虐的感言...),留下的只是苹果公司(苹果原生开发的市场份额会将逐步下降,无力回天)一脸懵逼。这也是为什么像任正非、马云这样的大佬,还会“危言耸听”说担心自己的企业哪天就GG的原因,因为真的不是危言耸听,要是看不透/看不到时代趋势和对手的招式。哪天就给某个黑马降维打击,自以为做好自己事就OK的你又找谁说理去。要是倒时苹果才想举措放手一搏,也回天乏术。

所以说,google这棋要是下的好,那可能真是要统一江山。

2. 既然有无敌万金油H5技术栈,那flutter有啥优势?

H5技术栈的核心优势:三方库数量/质量 + 共享/统一代码等 = 宇宙第一。要写桌面端?用Electron等;要写移动端,用Cordova/Ionic等;要写网站?这还用说!这代码维护起来何等爽。
但是H5技术栈其实算“伪全平台”,仅仅是语言通用,但SDK更自为营。实际敲代码,我们面对的都是都是各种各样的框架,组织架构各不相同。比如你移动端用ionic,而ionic的项目关键结构是由模块+组件+路由+服务等。而你桌面端用electron,不仅代码迁移非常麻烦,还容易出错,这种“又麻烦,又容易出错”的问题不正是程序员应该解决的问题嘛。

flutter的<核心>优势:
1. 真正的一套flutter框架/dart代码,跑手机端+桌面端(其实现在已经可以跑桌面端了,只是桌面端还算是“预览版”,离成型还早)。
2. 高性能(Native代码)->省电;
3. 基于原生平台的SDK(Android/iOS,2019年别扯桌面端!),能直接使用原生API(HTML派生出的框架需要bridge,并不完美),无需担心“我原生能实现的,Flutter也能嘛?”,只要你会写原生,你就能写flutter;
4. 无需看各厂家对WebView容器实现(HTML和它的小伙伴要),只要你手机能跑原始app,flutter就能无差别地跑(Native代码)

一些谈“未来”的同学,说未来手机性能贼快,HTML性能不是问题。那我也能说:未来flutter一套框架/dart代码,能跑android/ios/windows/mac/linux等(确实如此),性能直接c++(确实如此),还能当物联网的客户端
而html还得分别用不同的框架来实现(如ionic、rn、electron等)。要不H5技术栈也搞出一个框架,用一个框架来统一所有手机/桌面端?[笑]

而且我们进一步“假象未来”,专注物联网的Google,有没有可能未来用flutter开发谷歌眼镜应用呢?开发各种用在穿戴式的设备上的?所以,真别扯未来HTML性能会很牛。flutter能更“扯”。当然,HTML确实很牛,很好用,但不代表它真是万能的。
(3月22日的PS:flutter现在还真可以作为IoP物联网中MQTT协议的客户端。。。我曾天真地以为flutter想统治前端界,没想到连物联网也不放过)

mqtt_client | Dart Package

用原生开发?用flutter开发?

平心而论,其实最“简单”的开发手段真的是原生开发,因为你想实现啥,就实现啥,真的是:指哪打哪。就怕第三方库挑不过来,搞个AR都没问题。缺点就是得维护俩个平台

flutter在目前的环境是起点高,天花板相对低(比如在2019年这环境),起点高就是我在本文中说的它的所有优点,天花板相对低是因为下文会提到的国内大厂SDK尚未入局(因为官方WebView的更新,这些基本也不是问题了,详情看下方简单的兼容性测评

具体天花板多底,参考我下文说的缺点即可(比如没国内大厂SDK支持),我就不重复。起点高主要就是说,它可以很轻松地开发双平台app,并提供非常多便捷控件,满足绝大多数APP的开发需求,下文也一样会谈到。

听说Flutter还能开发桌面端应用?

尽管Flutter官方目前还没高调声明,但google工作人员已经提供了桌面端开发的实现。

只是要注意的是:

“This is not an officially supported Google product.

  • This is an exploratory effort. See the Flutter FAQ for Flutter's official stance on desktop development. The code and examples here, and the desktop Flutter libraries they use, are not intended for production use.”

即:这个桌面端实现,虽然确实是Google内部人员开发的,但是Google公司并不承诺对它进行支持,只是“探索性质的尝试”。因此一些同学要是感兴趣的话,可以提前玩玩,了解了解。

桌面端实现方案:

4.4K stars。目前只有一位同学专门负责开发(从contributor判断的)。。。

google/flutter-desktop-embedding

下面的链接是Flutter官方团队做的关于flutter-desktop-embedding的presentation,他们这次的presentation用的“幻灯片展示”软件就是用这个desktop库开发的。总而言之,非常期待推出正式版(再次强调,现在已经可以用了。只是这库还在开发阶段,不方便+一些功能不太全而已+容易遇坑)

https://www.youtube.com/watch?v=5SZZfpkVhwk

特别补充:不仅是在桌面端,其实flutter现在也实验性在浏览器中内嵌flutter项目了(即自动将flutter项目转换成JavaScript),虽然我感觉目前没啥实际用途,了解有这回事就ok。不过确实能看出flutter野心是真的大,android/iOS/windows/linux/mac/物联网设备/浏览器,只要能被称作“客户端”,就一个不放过,你说谷歌爸爸不可怕嘛。

从几个主要的点聊聊flutter当前本身的优缺点:

缺点:

  • 关于官方文档与周边资料。官方一堆UI + Animation文档/教程连个图都不发,全靠自己脑补(几个月过了,依旧如此...)。至于某些类的官方文档...别去了,直接看源代码资料更全,真的,真的是看源码资料更全+快。
    但这些也不是什么大问题,就是麻烦一些。未来把官方或周边(比如StackOverflow)补全了这些资料,新手上手也就能更快。
    补充:刚才说了官方文档基本没啥实例图,阿里爸爸搞了这个,很适合用来记住/熟悉各种UI(良心推荐):
alibaba/flutter-go
  • flutter目前致命缺点就是成熟度不足,国内各SDK大厂尚未入局。flutter本身快的话,至少也得大半年才勉强成熟。虽然flutter目前确实处在快速成长期,但是作为排头兵的我们!确实很“命苦”啊!
    推荐的解决方式是:
    1. 一些国人把国内大厂在iOS/Android的SDK封装成了flutter包,直接拿过来用就行;
    2. (重点!!!)用flutter的webview来使用国内大厂的H5实现(非常推荐此方法);
    3.自己封装Android与iOS端的SDK
    结合以上三个方案,其实大部分问题真不算问题。
  • 目前插件这块,各领域基本都处于初期发展阶段,只能凑合用,没法像Android那样“拿来就能爽用”的程度,并且爽到还得慢慢挑哪个更好用。
    除此之外,除了官方插件,其他的开源插件基本都是由个人发起的,没有看见什么其他大厂参与进来。因此靠谱性很悬,万一你天天指望的那插件作者弃坑,跑路了,你慌不慌!
    (4月6日补充:经过数个月的观察,至今为止,我关注的数十个插件的作者一个跑路的都没有,老外还是挺靠谱的。突然想到当年的dubbo,呵呵)
  • 没官方可视化UI布局。可视化这块不说了,iOS与Android原始可视化开发多爽,用过的人都懂的(PS:iOS的可视化开发让我想起Unity游戏开发。。。太爽了)。尽管这块已经有人提供了flutter可视化UI开发软件了(如下链接),但超不好用,只能说可视化布局如今并不难实现,只能等等官方实现呗(我不大所谓,反正代码敲熟了,也很快)。
Widget Maker
  • 优点:
  • (之前这是缺点,不过与时俱进咯)国内相关资料之前贫瘠,现在开花啦。只要多折腾一点,基本不会遇到什么问题
    B站视频教程(特别推荐有语言基础,但是又懒得学dart的同学,因为dart真不用别人教,你看别人敲,你就会了)https://search.bilibili.com/all?keyword=flutter&from_source=banner_search
    靠谱文档教程:https://flutterchina.club/tutorials/
    专家教程:https://www.yuque.com/xytech/flutter/
    至于平日会遇到的一些细节问题,都是上bing、StackOverflow,基本坑都给外国佬填了(有条件上google)。
    遇到new feature上官方github提提,小问题自己复制份源码来改。
  • 关于开发体验,开发一般商业app绝对爽死你(前提是控件搞熟了,毕竟官方文档非常差...得脑补),因为上层控件齐全,也很贴心。放心,要是你开发一般的商用App,控件早给你写全了,个别控件去
Dart Packages

逛逛就有了。就算遇到稍微复杂点的,自己很容易就组合了。缺点就是有时候偏底层基础控件还要自己写(比如我用PopupRoute自己写PopupWindow,我就纳闷为什么谷歌不自己搞个PopupWindow)。
(事后补充:原来Flutter是有类似PopupWindow功能的控件,叫Overlay。。。我看名字还以为是遮罩(PS:flutter里遮罩叫barrier。。。)一类的东西!这就是谷歌官方文档打死不发图导致的后果。。。毕竟控件太多,不可能一个个去试)

  • (也不太算优点,就放这)至于Dart语言,这也用学?就async/await概念可能要了解了解,对于有面向对象开发语言基础的同学,上手写代码,可能都不用学5分钟。我都想不到比dart更简单的语言了...而且还结合了java+js各自优点,在提供花式写代码的同时,又保证了后期易于拓展+维护(js维护大点的项目,什么参数、字段全是any类型,无fuck说)。
    我见过最多的就是吐槽Dart写布局的代码很复杂(太多人无脑吐槽这个了)。讲真的,大哥们,自己不行,真别怪别人。Android的XML布局+iOS的布局文件,你见过了吗?都见过了?那好意思说Dart的布局代码很复杂?要不要给你装个根据脑电波自动敲代码的设备?代码分层这么简单+常识的代码设计,不用别人来教吧。既然你都会代码分层了,那还能说Dart布局复杂?大哥,你确定不是故意来抬杠的?

官方WebView插件

各种问题基本都被解决啦。不用考虑那个“flutter-webview-plugin”插件咯。基本HTML/CSS渲染+JS运行自然不用说,H5版百度地图也能使了。

1.WebView在Flutter项目中到底是什么地位?JS通信有什么用吗?
刚刚我们聊了在没有WebView的flutter世界,它起点高,天花板相对低。那我们要如何打破这场天花板呢?就靠WebView。在没有WebView的flutter世界中,flutter自身确实能解决绝大部分场景,但是也有很让非常头疼的问题:各大厂没有flutter的SDK,我也不可能闲着自己去给它封装一套。那么多好使的js库,干嘛要白白浪费,再造轮子呢?
这时候我们就可以用WebView爽用js库啦,百度地图呀,各种富文本编辑器啦,统统拿下。

可是,还有一个问题,你看我用WebView跑文本编辑器,那问题来了?我想从WebView取出文本编辑器生成的数据,怎么搞?
“JavaScript channels”JS通信,你值得拥有。通过dart代码向WebView中的JS发送请求,JS代码则返回响应数据(类似于http通信中的:请求-响应机制)。这就搞定了,so easy(具体教程https://www.jianshu.com/p/2c721bf5f6e1)

2.*****WebView的功能兼容性测评*****
想知道WebView插件对H5的兼容性?
http://html5test.com/。测一测就知道了。扔个WebView控件到你的项目中,并让它访问上述网址(可能要科学上网,否则它会无限转圈圈),用你的实机跑flutter。它会告诉你各个支持细节。
本人用将webview(0.3.5+3版本)放在800块的三星GALAXY J7(Android 5.1),跑分是492(这破手机估计免费送人,都没人要...)
本穷人用的iphone6p,用原生safari浏览器跑了464分(低分的主要原因是safari为了安全,关闭了一些特性),我电脑上的Chrome 73.0.3683.86 on Windows 10跑分509。
总之一句话,如果WebView跑不起来某个页面,可能该检讨的是你,而不是WebView。当然,具体还要结合实际业务场景。
额外:如果遇到err_cleartext_not_permitted(PS这是Android原生的错误,跟flutter里的webview没有关系),请查阅https://www.cnblogs.com/gggggggxin/p/10518324.html。自行解决。

其他常用的插件:

  • 关于Rich Text Editor插件这块(参考手机版知乎里的富文本),目前依旧只有zefyr(0.5.0)这个插件,优点是:这插件的保存格式是基于quill(quill在网页端好用到想哭)里的delta,因此如果你在网页端有用到quill,那zefyr就可以很好地与网页端共享文本数据了,总体来说使用还是不错的。但缺点就是,zefyr目前还不能自定义文本格式按钮(但是已经在作者的todo名单上了),所以又得等等咯。memspace/zefyr
  • 以及“配套”的,主要用于显示复杂html格式文章的插件。我个人感觉这块其实还不错。一方面,尽量别用WebView,不管是现在的,还是未来的。因为flutter里的WebView在Android端得调AndroidView,官方自己都说“Embedding Android views is an expensive operation and should be avoided when a Flutter equivalent is possible.”,能不用就别用。另一方面,除非你写死高度,否则WebView是不可以放到ScrollView当中的,因为WebView的默认高度是double.infinity,无穷高。而ScrollView是“我儿子们有多高,我就有多高”,于是!当他们结合在一起的时候就,Bong!所以只有等到未来WebView开放提供WebView内容高度的API才能解决这问题。
    个人感觉最优雅的方式,其实是用flutter_html插件,它可以自动将html树解析成对应的List,并提供默认显示样式,并且你也可以对每个标签自定义映射成任何的原生Widget,因此显示复杂html格式文章这块,算是已经能爽用了。
    当然,具体还是要结合实际业务,以上观点仅供参考。
  • 传感器(官方提供。比如可以用来实现:摇一摇的功能)

flutter/plugins

  • 国内支付/分享/OAuth。fluwx支持微信系列功能。

fluwx | Flutter Package

tobias | Flutter Package

  • 拍照+选相册图片(官方库。PS:我竟然看到有人说flutter不支持这些功能...)

image_picker | Flutter Package

  • SQLite数据库(注意无加密)
    tekartik/sqflite
  • 推送

flutter_local_notifications | Flutter Package(本地推送)

best-flutter/flutter_jpush(极光推送)

  • 这是官方维护的plugins(点开packages目录,你就知道有啥了):flutter/plugins
  • HTTP网络请求库
    flutterchina/dio
  • 音频播放
    luanpotter/audioplayers
  • 高德地图
    OpenFlutter/amap_base_flutter
  • “上拉刷新”
    xuelongqy/flutter_easyrefresh
  • 依赖注入
    google/inject.dart
  • 获取/管理联系人
    fluttercommunity/flutter_contacts
  • Awesome图标库
    brianegan/font_awesome_flutter
  • Svg显示控件
    dnfield/flutter_svg
  • 图表
    google/charts
    mzimmerm/flutter_charts
  • “加载中”图标动画
    jogboms/flutter_spinkit
  • Skeleton页面加载占位符
    hnvn/flutter_shimmer
  • Staggered Grid View
    letsar/flutter_staggered_grid_view
  • 加密/解密Util库
    leocavalcante/encrypt
  • UDID
    GigaDroid/flutter_udid
  • Toast
    https://pub.flutter-io.cn/packages/fluttertoast
  • 轮播图
    best-flutter/flutter_swiper
  • 能内嵌图片的RichTextView
    bytedance/RealRichText
  • 自动调节Text大小
    leisim/auto_size_text
  • 带各种动画的Text
    aagarwal1012/Animated-Text-Kit
  • 屏幕适配工具
    OpenFlutter/flutter_screenutil
  • 城市三级联动选择器
    hanxu317317/city_pickers
  • 日期时间三级联动选择器
    Realank/flutter_datetime_picker
  • PhotoView
    renancaraujo/photo_view
  • PDF阅读器
    albo1337/flutter_full_pdf_viewer
  • 多选图片
    Sh1d0w/multi_image_picker
  • QR二维码生成+识别
    lukef/qr.flutter(生成)
    facundomedica/fast_qr_reader_vie(识别)
  • 搜索框自动提示
    AbdulRahmanAlHamali/flutter_typeahead
  • Snackbar效果
    AndreHaueisen/flushbar
  • PIN输入框
    LiewJunTung/pin_code_text_field
  • 范围选择器
    boeledi/RangeSlider
  • 可侧滑互动ListItem
    letsar/flutter_slidable
  • List拖放
    Norbert515/flutter_list_drag_and_drop
  • 可“划掉”的View
    Ivaskuu/tinder_cards
  • 这个是个Flutter精品开源项目/插件/教程等的集合,推荐收藏,方便了解每个领域的插件:flutter/plugins这个是个Flutter精品开源项目/插件/教程等的集合,推荐收藏,方便了解每个领域的插件:
Solido/awesome-flutter

未来继续补充,方便各大佬参考。


  • 补充一点和它“类似”的Ionic。我刚开始挑选App混合开发框架,其实是很偏心Ionic的,因为我官网是用Angular写的,Angular用得还是比较熟得,搞搞Ionic也就没有什么学习成本。而且各种可以npm install各种插件,简直不要太爽。但是!Ionic太难用了...这里我就说下我用Ionic当时开发几天的“肤浅”的体验(后来换flutter了)。首先让我shock的就是,在我没有写其他任何控件的情况下,使用默认生成的tabs项目,那个自带的底部导航栏,一直一直一直一直一直一直一直一直自动给我改变样式。我已经把html标签上的mode,和底部导航栏的mode都锁定成了ios/md(我两个都有试),在电脑的谷歌浏览器上,开启手机设备,锁定分辨率。刷新下浏览器,那个底部导航栏时而改变样式,时而不改变样式,我都怀疑人生了你知道嘛,什么代码都没敲,只是单纯刷新下浏览器,样式又变了,WTF!我学软件开发也有将近10年了,从后端框架开发到前途框架,就没有这么被“耍”过。不管还有什么其他原因,这点就让我极其不爽了,太难控制了。之后,我想想算了,大不了我自己CSS撸一个出来。然后我继续看代码。发现Ionic也有路由这概念,我当时就mmp呀,Angular路由已经很好用了,我也用得比较溜了,你这Ionic嫌着没事做,自己还要搞一套?
  • 还用就是热更新这块,太慢啦大哥!我flutter热更新,可能等2、3秒就能看到效果。由于Ionic基于Angular,哥们只是做了一个小小小的改动,这等待过程可以去打杯水。哥们我Java后端开发启动都比这快的多的多的多。
  • 控件贼难控制,不如自己重写。没事还画蛇添足搞新概念,又想到我之前用Android原生中的WebView,加载复杂一点的HTML,画面都是从上往下慢慢加载的(不是一次性显示出来),而我印象中Ionic又是寄生在WebView当中...。于是我决定溜了,也难怪小鲜肉flutter比Ionic的stars高那么多。

第三方sdk不支持是硬伤啊

地图,支付,统计,推送

之前一直做前端开发,偏爱研究跨平台 先后做过hybrid,RN weex 对native也略有了解,近半年对Flutter 有些研究,很是喜爱,于是用Flutter写了一些Demo 个人比较看好,结合自己的体验对Flutter的优点以及不足简单总结一下

主要优点

  • 跨全平台 不止是Android 和 iOS 目标剑指所有主流平台UI 开发、PC桌面以及 包括正在搞的Hummingbird来实现web的支持。
  • HotReload 开发效率提升很大。
  • 性能 Dart AOT 性能这块文章很多 就不多说了
  • 非常丰富的Widget库。举个例子:比如列表拖动,也有现成的Widget ReorderableListView,对material design支持也非常好,对iOS的支持也有cupertino主题
  • React Style。 Flutter官方也表明过其设计思想最初也是受React个启发,一切都是Widget,没有像android ios 那些些Activity、 Fragment 杂七杂八的概念,写应用的模式与React几乎是一模一样,感觉就是用Dart写React。Flex布局思想可以直接用、React的Component 和 PureComponent,对应Flutter里面有StateFullWidget 和 StateLessWidget,Context 对应Flutter中的 InheritWidget,状态管理Redux 对应Flutter_Redux,React里面可以用RxJS,Flutter里面可以用RxDart,都是Reactive UI风格、都是基于虚拟DOM实现UI更新,甚至React新出的Hooks,在Flutter 里面也有了第三方的支持-flutter_hooks。个人感觉相比React Native 。Flutter才是真正的在Native App中React思想的实现,实现了曾经我对RN的一些期待(比如高频率交互动画)
  • Flutter SDK 高度自由灵活,上层有丰富UI套件,除了Material Design的主题之外 还有一套ios的主题的配套组件,除此之外,对于复杂UI 自己也可以从底层Canvas入手 自己来绘制。灵活度堪比系统的SDK。
  • 开发工具 Android Studio, IntelliJ,VS Code都提供了Flutter的开发插件,且完善度很高,自动提示用起来也非常爽。比如支持断点调试,堆栈信息查看,直接跳入源码等 。
  • 文档,官方文档 API文档 也是非常完善,也为其他开发者(Android iOS Web ReactNative Xamarin) 准备了详细的文档,可以对照学习,UI的思想都差不多。帮助其他的开发者快速入坑Flutter,文档完善度方面这点要比RN强不少了。
  • 社区 国内有中文的翻译网站,目前有很多学习资料可供参考,谷歌官方也有一些视频。YouTube上也有一大堆的视频 我在这里也整理了一些资料
  • 其他 除了动态更新的支持之外,感觉生态上已经超过RN了 官方也有相关动态更新的issue,不懂为啥看到不少同学说Flutter生态不如RN的。

不足之处

  • 截止目前(2019年 1月初) 。Flutter在 Github上issue, 处于open状态的有些多 ,数量在4k以上 ,closed 为1.1W。相比RN的数据则为600+ 和1.4W。当然也从另一个方面反映了Flutter受关注度很大,毕竟也是从18年开始火起来的,官方还没来得及解决。这个数据半年后再看
  • 在开发过程中偶遇两个问题在模式下工作正常 在release模式下,无法work。 并在release模式下调试体验不好。debug 与release模式下运行渲染效果不一样。并且一旦发生了这种问题,调试起来也很棘手,一般跟底层机制有关 比如我最近遇到的这个问题 issues-23339 (在最新的FLutter中已经修复了)
  • 与现有的App 集成起来坑不少。
  • 异常错误提示不是很友好,解决起来不是很方便
  • 虽然号称高性能,但目前综合一些评测评测以及个人体验来看,debug模式下有的卡顿问题,在release模式下基本可以做到流畅, 但距离真正的Native 还是有点差距。
  • UI写法,写不好容易发生多层次嵌套,形成嵌套地域,可读性也不高,很快看不懂自己写代码了,写UI感觉XML更舒服一些,github也开了两个issue 建议出一套类似JSX的UI规范11609 issues-15922 被否了,有第三方搞出来一个DSX
  • Webview: Flutter本身不提供自绘的webview组件,利用Platform view的能力,使用Native UI层面的组件,以Plugin的形式提供, 可以使用Flutter社区提供的flutter_webview_plugin插件,本质通过使用系统SDK的webview来实现,这样可以使用Dart对webview进行基本的操作,但是并没有提供Dart 和 JavaScript通信机制以及对Webview发出请求的拦截,当然开发者完全可以自己去定义,webview 跟系统SDK通信,然后系统SDK使用channel机制与Dart通信,目前支持的Dart与webview的交互也是这种套路。
  • 地图 国内的地图官方还没有提供Flutter的SDK, 通过包装Native的SDK结合Platform view 来实现,可以参考文档 阿里云云栖社区:在Flutter中嵌入Native组件的正确姿势是... 、 Exploring Google Maps in Flutter
  • 图片缓存,Flutter的Image组件本身不支持离线缓存(支持运行时最大1000张图片以及上限100M运行时缓存),比如浏览过的图片,断网重启APP查看,无法加载了,可以结合第三方插件cached_network_image。
  • 实战了一个例子, Release打包之后 Android下有 6M。iOS打包之后有12M。Native的反馈这个包不算小了。

总结,小问题不少,但没有太大的硬伤,大部分都有解决方案,随着时间一些问题应该可以优雅的解决,或者被慢慢接受,Flutter对前端开发很友好,毕竟Flutter的初创人员都是来自Chrome团队,现代化的开发方式,让写APP更简单。Fuchsia 和 Hummingbird Release 之后应该能带来更多的流量。目前谷歌对Flutter的投入也非常大,内部多个团队合作,未来可期。

简单化 高效率是趋势。Flutter正是这种简单化的代表之一。你只管负责岁月静好,谷歌替你负重前行

2019-01-18 更新一下 Flutter 2019的RoadMap出来了,对刚才说的那些不足进行完善,

  • 增强基础设施 完善生态、工具等来提高开发体验
  • 更好的与现有的app集成,
  • 支持动态更新(Android下支持从sever端下发代码)
  • 发布Web版(继续试验桌面版)
  • 其他 bug修复、性能优化 完善webview和map 支持 local notifications 以及 local data storage. 、错误捕获 等 总之不断变的更好
flutter/flutter


2019-03-01 更新,升级到了Flutter 1.2 遇到的问题 issues-23339 已经被修复。并且推出了新的web调试工具 : devtools 这个生态完善又迈进了一大步

Widget 检查器: 对 Flutter 用于渲染的树状分级结构实现可视化和直观的探索

时间线视图: 可帮助您逐帧诊断自己的应用,并识别可能造成应用动画 “卡顿” 的渲染和计算问题;
源代码级调试器: 支持单步执行代码,设置断点并检查调用堆栈;
日志记录视图: 显示应用所记录的活动以及网络、框架和垃圾回收等事件。


2019-05-11 继续更新一波

很遗憾官方暂时停止了对动态更新的支持 issues14330

Flutter Web 版发布了预览版,借助大量canvas+Dom来完成渲染,体验了下Demo 还不错,同时也把自己的demo编译为了Web版,布局基本是与APP端一致,触摸体验还不错,比传统的web要好,官方也说了有很多优化的空间(部分网友体验说有卡顿, )作为预览版 能搞成这样 还是超越了期待的 http://kunkun12.com/Flutter_shop/

Flutter 潜力很大,值得投资,也可能给今后前端(客户端+web)开发模式带来变革。

更多学习总结

已开发完成一款App(客户是某空),写过rn,用过dcloud,感觉Flutter值得等待。

flutter android版本热更新即将出来,如果ios版本也能出来,那么flutter必定爆发,react native问题太大了,flatlist快速滑动会白屏,也是吐血,还始终搞不定。


热更新这个功能太重要了,没有大公司真心不敢乱耍,万一来个大bug,等苹果爸爸审核,年底绩效到时候哭去吧。


flutter的一个小工具:Flutter自动生成widget代码

大力推荐 对于我这种做机器学习算法的 花两周就能撸一个app之前想都不敢想。谷歌爸爸帮我解决了前端的难题 我就能专注于tensorflow上了(哦 还是谷歌爸爸的东西 所以跟对大佬很重要)

谢邀,作为开源2个flutter项目的阿里-闲鱼团队,回答如下:

Flutter的趋势

  • 在移动端,受成本和效率的驱使,跨平台一站式开发慢慢成为一个趋势。从Hybird,RN,WEEX,Flutter,到各种小程序或快应用的大量涌现,虽然很多跨平台方案都有各自的优缺点,目前还没有完美无缺的终极方案,但这已是未来移动端开发不可逆转的一大方向。而Google推出并开源的移动应用开发框架Flutter,更是其中的明星。
  • 笔者从自身在做Flutter相关的分享中,特别强烈的感受是,有非常非常多的Native技术栈的同学在学习和使用Flutter,有非常多的前端技术栈的同学在时刻关注Flutter的hummingbird和desktop-embedding的进展。尤其自Flutter1.0 发布后,Flutter受到了业界更多的关注和期待。

跨平台解决方案比较

  • 目前几个主流的跨平台解决方案:
  • 1. 基于浏览器技术的Hybird
  • 2. 基于桥接Native组件,如RN、WEEX
  • 3. 基于底层统一渲染,如Flutter
  • 它们有各种的优缺点,但浏览器技术无疑是其中的历史最长、标准最完善、用户最多、生态最丰富的。RN、WEEX也可以归类为javascript生态的一个小分支。
    而Flutter走的是和前两者截然不同的路线,它是一个新兴的挑战者,通过底层统一渲染,得到高度一致的跨端效果;通过引入dart,得到AOT的接近原生的性能,和JIT的快速开发体验;通过上层完善的组件体系(material design & cupertino),得到高保真的UI体验。但它也并非尽善尽美。同时基于底层统一渲染的跨平台方案有很多,在移动端有实际应用的如QT、cocos2d等。
  • 对比Flutter和QT,最大的区别在语言和背后团队。
    • 语言:Flutter选择了Dart,QT是C++。Dart相比C++,对开发者来说无疑于相比骑自行车和开飞机的区别,Dart更容易编写,除此以外,Dart还拥有AOT和JIT两种模式、类型安全、快速内存分配等等特点,确实如Flutter团队所述,同时拥有一两条这些优点的语言不少,但是将所有这些优点集于一身的,只有Dart。
    • 背后团队:Flutter的背后是Google,QT的背后是TrollTech,从社区影响力和号召力而言不可同日而语。
    • 但同时也必须要认识到的是通过底层统一渲染的跨平台方案,也有它天然的劣势。它很难复用系统天然提供的组件。在摆脱对操作系统的依赖和复用操作系统的能力上,要考虑如何达到了一个最佳的平衡。

Flutter的生态

如果拿Flutter生态同React和Native进行比较的话

  • 基于核心UI表达层向上,这一层会更接近前端的体系,以React生态为参照物,主要的几部分
    • 路由体系
      • 一种面向以Flutter为主的应用,它的路由以Flutter为主,Native的路由部分往往以简易桥接的形态存在。
      • 一种面向混合技术栈为主的应用,它的路由以Native为主,Flutter为辅。
    • 状态管理体系 | 应用框架
      • 基本上在React生态下有的状态管理,Flutter也有,同时有一些是Flutter独有的。
        • 开源的代表有:flutter_redux, google的BLoc,scoped_model,及闲鱼的fish-redux,它在真实的复杂场景下得到了非常好的验证。
      • UI库体系
        • 目前已有不少UI库,包含常见的组件。
      • 基于核心UI表达层向下,这一层会更接近Native的体系,以Native生态为参照物,主要的几部分
        • 核心的一些基础中间件,如网络,图片,音视频,存储,埋点,监控等。
          • 目前和Native相比还是有非常大的差距。所以也导致了目前大部分这些问题的解决方案,都趋向于桥接的形态。通过复用Native能力来短期补齐Flutter能力不足的。但它不一定是未来的最佳的方案。
        • 一些重量级的基础组件,如WebView,MapView等。
          • 目前已经能通过PlatformView的形式,得到能力拓展。但是它有使用的局限性和性能上的损失。

Flutter今年几个重要的突破点

  • Code-Push
    • 在当下国内应用生态环境,热修复或者热部署能力在很多公司和团队做技术选型中,往往是其中非常重要的一个选项。如果有Google官方推出,不管是hotfix,还是dynamic-boundle都将极大的推动Flutter在国内的发展。
    • 而基于dart语言的特性判断,在Flutter上做code-push理论上会比目前任何Native的code-push方案有更强的能力。闲鱼团队一直和Flutter团队就这方便保持紧密的联系,在之前的验证中,目前在android端是可以支持的,但还留有一些瑕疵。
  • Humming-Bird
    • 在跨平台之外,还有一层更高级别的诉求,多应用投放,打破应用之间的孤岛壁垒,实现更多的商业价值。而要完成多应用的投放,首选的是基于浏览器的方案。Humming-Bird方案为这样的设想,提供了可能。
    • 同时Humming-Bird也将大大扩张了Flutter的边界,吸引更多的开发者和厂商的加入,同时让面向终端的全栈解决方案成为可能。Dart语言也有可能成为javascript生态的更好的补充和演进。


Flutter面向未来

基础架构设计决定了一个软件的发展上限,它带来了更多的想象力。使用Flutter和Dart,既是Google为摆脱和Oracle纠缠多年的“Java 侵权案”提前下的一颗棋,也是Google为下一代操作系统Fusion下的一颗棋,是即Google通过chromium项目渐进的统一浏览器领域,着眼于更多的终端,为了一个更大终端生态的大一统做准备。这让Flutter和Dart充满了更高层次的可能。如果没有这些可能,Flutter的生命无疑是会短暂的,因为它还未能建立被广泛被认可的标准,就像我们终端里走过的那么多的技术一样,都是有限的解决了当下的诉求,但随着终端的更替,操作系统的演进,慢慢变成了明日黄花。而正是这些更多的可能,是Flutter持续演进的源泉,是Flutter相比其他的跨平台方案中最吸引人的部分。

淡定一点。这种跨平台UI库或者说是App框架SDK啥的 要搞好很难。

或者准确来说是——搞不好的。

我怀疑谷歌是否有这个能力。

最近刚开始研究flutter,跨平台效果还是很给力的,我本身是Android开发,开发工具用的Android studio,说实话,第一次看到程序在iphone上跑起来还是挺激动的。

但是不得不说,个人感觉现在的flutter还不是特别成熟,我甚至觉得github上5000+的issue还都只是冰山一角,有些槽实在不吐不快:

  • 打开Android项目的时候如果按照提示升级gradle版本的话Android项目会编译出错,所以千万别升级,强迫症也只能忍着orz。
  • UI都是代码写的,稍微复杂一点的布局代码可读性就变得很差。
  • 导入图片之后居然还需要在pubspec.yaml中写出路径,完全不知道这样做意义何在,而且pubspec.yaml写依赖的时候居然要注意缩进,不然无法成功get,这又是什么鬼
  • 对中文的支持很不友好,如果你添加了国际化的库,并添加中文支持,那么长按或者点击TextField都会直接导致程序崩溃;TextField实现数据双向绑定在iOS设备上输入中文时会导致重复输入,本来觉得这是个很普遍的需求,应该是早就有人踩过的坑了,但是找了半天不知道该怎么解决,有知道的大神麻烦带带我这只菜鸡;另外dart pub上很多第三方库都自带英文,比如image_picker,barcode_scanner。
  • 国内大厂普遍都还没有跟进,很多功能只能依赖于混合开发。
  • 还有些比如show一个只有GridView的bottom sheet也会莫名其妙卡顿什么的...

当然上面这些都是小问题,我对flutter的了解也不够多,更多的也只是浅尝辄止,flutter团队也一直在努力。只是个人觉得以目前的flutter来说,还是比较适合做一些简单的项目,最后放一张最开始做的项目截图:

issue越来越多,ios下面的控件问题还是很多,官方不打算把动态更新放在今年的计划中了,所以大公司还是以试水为准。插件还是太少,特别应对国内服务的各种插件,几乎是空白。

作为音视频开发者,我们发布了针对RTSP/RTMP的Flutter平台播放器。

https://github.com/daniulive/SmarterStreaming

推进Flutter平台下的RTSP和RTMP流延迟到毫秒级。

iOS程序员老老实实native,等系统层Swift稳定下来,这些RN、Flutter在Apple平台都得死,在这上面填坑的时间Swift不知道能写多少代码了

优点肯定是有的,但是绝对没有吹嘘的那么厉害,你撸点demo.,搞几个小型app,没问题,体验貌似还可以,一旦上马复杂应用,各种小坑让你不要不要的,其实跨平台方案也有好几个,成熟的也有,但是国内猿们对google大厂有种蜜汁崇拜,曾经我也是一员,现在么,啥成熟用哪个,幻想在项目早期介入,成为业界大拿,多少还是有点不自信的因素在里面的。语言,框架只是工具,工具,当然是捡最安全,最成熟的用

挺好的,用 flutter 写了个开源项目,大家可以看一下。

Panda看书

责任编辑:
热门阅读排行
© 16货源网 1064879863