0%

终于有一个完美的跨平台方案Flutter了

平台对比,个人感受。

本人玩过不少跨平台方案,排除游戏引擎外,我们这次谈的是应用的跨平台方案。

  1. WebView类框架,说白了就是h5 js,通过js一些需要本地权限的功能,通过壳来做到,近年来pwa的成熟,这类框架本人感觉,用了和没用没啥区别,还不如直接写网页。代表有cordova、electron、uniapp等。而且有的只是跨桌面端,性能在某些场景下还是不行,尤其是对使用ScreenReader的用户来说。
  2. 自绘类跨平台框架,例如openframework、CrossApp,QT等等。这类框架性能没有什么问题,但是某几个框架控件缺乏,qt虽然控件也丰富,但是入门门槛高,不同平台还需要下不同的开发包,配置环境。尤其重要的是,这些框架,对ScreenReader有的完全不支持,有的是某个平台支持,其他平台不支持等等。这些框架开发语言都是c++为主,有的之后的版本接入了js lua等脚本语言,但是学习还是以c++为主比较合适。
  3. 翻译框架,很明显就是制定某一套规则选一种简单的语言,然后吧你写的代码翻译成原生的系统调用,当中相当于搭建了一个桥梁,虽然有一定的性能损失,但是比起WebView性能可好了不少。有的还利用泛型概念,直接让脚本调用原生系统api。这类框架有rn、weex、eeui、nativeScript,nomo等等。这类框架的问题是,工作量大,有的就是个半成品,例如weex eeui,已经被放弃。有的不能被称为跨平台方案,因为你写每个平台都有平台相关的ui代码,只是语言用的一套,逻辑的代码能重用而已。
    所以,很早我就发现了flutter,有google支持,项目肯定会月发展月好。早期我不使用他是因为他的Accessibility部分还不完善,Desktop和web的accessibility还未完成。
    现在是因为有个项目使用到了,我顺便调研了下,发现3.0后不管是windows还是web platform,都支持的不错。唯一遗憾的是他只支持dart语言。

dart语言

这个语言很类似js,我是指常规部分,哈哈,例如var const……但是感觉也很复杂,例如能制空的变量申明的时候要加个问号, => 是省略写法,别当成了js里的箭头函数了。函数中的参数dart习惯用命名参数的那一套东西,什么required late final const的修饰,只有你上机后才知道有时候的靠编译器提示你哪里错了,哈哈!
class这块家_的是private的,这样的确很省略还一目了然。mixin和with的概念也不错。反正我用了4个小时才吃透了他的语法。
总而言之,不错的语言dart,比c++简单多了!我学c++是第一门语言,想起当年是2006年,c++伴我度过了一个充实的寒假。其次我学的慢一点的语言是ruby,因为他真的不一样,太艺术画了。
如今我经常用的语言有lua\c++\js,平率低点的语言有oc\java\py。将来应该还会多个dart经常用。会的语言的话就不列举了,感觉语言这玩意儿,c++掌握透了的话,其他都是浮云,c++是在是太复杂了,用到c++17熟练就行了20之后的,用到了在说吧。

flutter初体验

体验是真的棒,flutter命令是真强悍,简约。编译调试,热启动,都在命令行。
环境搭建也简单,doctor帮你解决一切,跟着提示下载配置,完成后,升级靠upgrade,降级靠downgrade,创建工程create,run家上build,i18n有gen-l10n,c r R q,是在是太好用了。
支持的平台目前够我用了,win\macos\linux\apk\ipa\web等。希望他将来支持下鸿蒙,否则鸿蒙哪里有时间开发啊,哈哈,只有大公司有钱在请个鸿蒙开发者吧(这边假设安卓开发的那套对鸿蒙没用的前提下)。
唯一要吐槽的是,flutter控件都靠代码写,嵌套是在是太多了,而且是嵌套( )函数调用嵌套,概念的确好Stateful家上Stateless,用了一下午在熟悉,否则第一次阅读真有点闷逼。
第三方库用pub管理,我还没熟悉pub上有哪些第三方,从从ruby gem用到js npm,然后用过 py pip,c++的 vcpkg,还有luarocks,感觉有的需要之中间编译的最痛苦了,例如vcpkg。

选定flutter

项目选了他,用起来目前还不错,以后有空的话可以分享下详细内容,例如控件。
国内也有很多人用还有中文官方,只是我吐槽下中文官方的翻译文档,有的widget那一块点进去都是404,也不知道还维护不维护,还是有条件的看官网原版文档,现在的翻译功能,也不比人翻译的差多少了,至少能看,我练出来的看英文文档的能力会不会退步,至少英文能看,但是有中文是不是会不看英文了。