Flutter开发初探

目前跨端开发比较热门的就是 React NativeFlutter 了,到底该选哪门技术彷佛也快成了大前端圈的一个热门话题。对于web前端来讲,基于web生态的 React Native 应该是一个更加顺畅而天然的选择;但 Flutter 让人动心的地方就是高性能和 跨端UI一致性。而React Native 发展不太明朗和 Flutter 愈加成熟的走势对比促使我从观望的心态转为加入 Flutter前端

这里主要就是记录一下学习Flutter的一些感想和见解:vue

  • 包管理
  • 布局和样式
  • json
  • 状态管理

包管理

pubspec.yaml 文件的做用相似于 npmpackage.json ,而yaml格式也比json方便。可是不能用命令行自动安装包却让习惯了npm的我以为麻烦。由于Flutter 安装依赖包是这么一个流程:react

  1. 打开pub.dev网站;
  2. 搜索须要的包,获得包的名称和版本;
  3. 把包名称和版本填入pubspec.yaml,最后才开始下载包。

我以为应该直接命令行安装包,让它帮咱们下载,名称版本自动写入pubspec.yaml。若是没有指定版本就是默认下载最新版本,由于不少时候咱们并不想知道版本号,给我个能用的最新的版本号就ok了。web

布局和样式

就和不少人想的同样,为何不使用 jsx 或者 xml 格式进行布局,由于基于代码的方式看起来太不直观了,之因此这样据说主要是能更方便的和Dart的hot reload特性配合使用,代码改动能马上反映布局变化。但我仍是期待有适配转化 DSL 的框架出现。npm

Flutter一切都是widget,可是连不少属性都当成widget 这就让人有些看不明白了,好比 CenterAlignPadding,为何不把经常使用的样式属性都加入到布局组件里面呢?这致使出现了这么一种状况:嵌套严重,一个很简单的功能须要层层嵌套才能实现,并且样式也不能方便的复用。目前比较合理的建议就是适当抽取出子组件减小嵌套。json

Json

Dart 做为强类型的语言,一切皆是对象。Dart要方便操做json就得把json转化为对象,这就意味着每用到一个json,就须要定义一个对应的类,这也是强类型语言的通病了。这绝对让人很怀念 js/ts 这种对json操做很是天然顺畅的弱类型/函数式语言。固然也不是没有妥协的解决方案,比较方便的就是 json_modelFlutter实战做者写的一个工具库,步骤也简单:框架

  1. 在工程根目录下建立一个名为 "jsons" 的目录;
  2. 建立或拷贝Json文件到"jsons" 目录中 ;
  3. 运行 pub run json_model (Dart VM工程)or flutter packages pub run json_model(Flutter中) 命令生成Dart model类,生成的文件默认在"lib/models"目录下

状态管理

Flutter 使用initStatesetState方法设置widget状态,原理相似React。固然这只是widget内部控制状态用的,跨组件通讯仍是须要其余方案的。官方推荐是使用Provider,使用下来中规中矩吧,固然还可使用大名鼎鼎的 Redux 以及 mbox。不过Redux自己就以过多的样板代码而出名,写React的时候就不喜欢用,hooks 出来后就果断就放弃Redux了。hooks才是真香啊,Flutter何时才支持相似的函数式状态管理方案呢?ide

总结

说了这么多,本质就是为何 Flutter 不向以 React 为表明的 web 生态看齐?更大的缘由是Flutter的不少理念和开发模式其实远远落后于 React 。这也是为何习惯 react/vue 的 web前端 对于Flutter 感受很别扭不顺手的缘由了。函数