Flutter开发初探

mhjjp 发布于4月前

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

这里主要就是记录一下学习 Flutter 的一些感想和看法:

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

包管理

pubspec.yaml 文件的作用类似于 npm 的 package.json ,而yaml格式也比json方便。但是不能用命令行自动安装包却让习惯了npm的我觉得麻烦。因为Flutter 安装依赖包是这么一个流程:

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

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

布局和样式

就和很多人想的一样,为什么不使用 jsx 或者 xml 格式进行布局,因为基于代码的方式看起来太不直观了,之所以这样听说主要是能更方便的和 Dart 的hot reload特性配合使用,代码改动能立刻反映布局变化。但我还是期待有适配转化 DSL 的框架出现。

Flutter 一切都是widget,但是连很多属性都当成widget 这就让人有些看不明白了,比如 Center , Align , Padding ,为什么不把常用的样式属性都加入到布局组件里面呢?这导致出现了这么一种情况:嵌套严重,一个很简单的功能需要层层嵌套才能实现,而且样式也不能方便的复用。目前比较合理的建议就是适当抽取出子组件减少嵌套。

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 使用 initState , setState 方法设置widget状态,原理类似 React 。当然这只是widget内部控制状态用的,跨组件通信还是需要其他方案的。官方推荐是使用 Provider ,使用下来中规中矩吧,当然还可以使用大名鼎鼎的 Redux 以及 mbox 。不过 Redux 本身就以过多的样板代码而出名,写 React 的时候就不喜欢用, hooks 出来后就果断就放弃 Redux 了。 hooks 才是真香啊, Flutter 什么时候才支持类似的函数式状态管理方案呢?

总结

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

查看原文: Flutter开发初探

  • greenladybug
  • goldenbutterfly
  • greenrabbit
  • bigdog
  • SophiaOctavia
  • JulianTernence
  • HearstAbraham
  • ToutTed