Flutter开发初探

目前跨端开发比较热门的就是 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_model , Flutter实战 作者写的一个工具库,步骤也简单:

  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 什么时候才支持类似的函数式状态管理方案呢?

秒收目录站https://www.tomove.com.cn

总结

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

原文地址:https://www.cnblogs.com/qianxiaox/p/13704849.html