目前跨端开发比较热门的就是 React Native
和 Flutter
了,到底该选哪门技术彷佛也快成了大前端圈的一个热门话题。对于web前端来讲,基于web生态的 React Native
应该是一个更加顺畅而天然的选择;但 Flutter
让人动心的地方就是高性能和 跨端UI一致性。而React Native
发展不太明朗和 Flutter
愈加成熟的走势对比促使我从观望的心态转为加入 Flutter
。前端
这里主要就是记录一下学习Flutter
的一些感想和见解:vue
pubspec.yaml
文件的做用相似于 npm
的 package.json
,而yaml格式也比json方便。可是不能用命令行自动安装包却让习惯了npm的我以为麻烦。由于Flutter 安装依赖包是这么一个流程:react
pubspec.yaml
,最后才开始下载包。我以为应该直接命令行安装包,让它帮咱们下载,名称版本自动写入pubspec.yaml
。若是没有指定版本就是默认下载最新版本,由于不少时候咱们并不想知道版本号,给我个能用的最新的版本号就ok了。web
就和不少人想的同样,为何不使用 jsx 或者 xml 格式进行布局,由于基于代码的方式看起来太不直观了,之因此这样据说主要是能更方便的和Dart
的hot reload特性配合使用,代码改动能马上反映布局变化。但我仍是期待有适配转化 DSL
的框架出现。npm
Flutter
一切都是widget,可是连不少属性都当成widget 这就让人有些看不明白了,好比 Center
,Align
,Padding
,为何不把经常使用的样式属性都加入到布局组件里面呢?这致使出现了这么一种状况:嵌套严重,一个很简单的功能须要层层嵌套才能实现,并且样式也不能方便的复用。目前比较合理的建议就是适当抽取出子组件减小嵌套。json
Dart
做为强类型的语言,一切皆是对象。Dart
要方便操做json
就得把json
转化为对象,这就意味着每用到一个json
,就须要定义一个对应的类,这也是强类型语言的通病了。这绝对让人很怀念 js/ts 这种对json操做很是天然顺畅的弱类型/函数式语言。固然也不是没有妥协的解决方案,比较方便的就是 json_model,Flutter实战做者写的一个工具库,步骤也简单:框架
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
何时才支持相似的函数式状态管理方案呢?ide
说了这么多,本质就是为何 Flutter
不向以 React
为表明的 web 生态看齐?更大的缘由是Flutter
的不少理念和开发模式其实远远落后于 React 。这也是为何习惯 react/vue
的 web前端 对于Flutter
感受很别扭不顺手的缘由了。函数