这是一篇对 Flutter 初识的文章,通过这篇文章可以让你 Run 起来一个 Flutter 项目,窥探一下 Flutter 基本开发,书写一些自己的体会。
默认你的开发机器是 Mac
通过 flutter.io/ 下载 Flutter 的工具包,然后解压到任意一个目录,我解压的目录是 $HOME,因此我将 export PATH="$HOME/flutter/bin:$PATH" 配置在了我的 .zshrc 配置文件中。
现在,我们可以在终端上输入 flutter 来查看一下,是否安装成功:
通过官网我们可以知道它能支持 VS Code ,但是安装 Dart 后,VS Code 会报一条错误信息,包括要求你安装 JDK,这些错误信息实际上是要求你在使用之前,完成一些环境的工作,因此我就直接使用 Android Studio 了,因为我们可以通过 Android Studio 来完成这些环境的准备和使用它内置的 JDK。
从 developer.android.com/studio/ 下载 Android Studio ,然后通过 System Setting 的 SDK,下载 Android 需要的准备环境,比如:
- Android 5.0
- Support Repository (all)
- Android SDK Platform-Tools
- Android SDK Tools
待环境安装完毕之后,我们还要继续安装一个 Android Studio 的插件,在 Plugin 中选择 Flutter ,安装完成之后重启 Android Studio ,我们就可以创建一个新的 Flutter 项目了,选择模拟器或真机,由于我直接选择了 iPhone Max 模拟器,因此 Run 起来之后,你可以得到如下图所示的 App:
Flutter 的 Material UI 真心的太优雅了,很吸引人,而且还能支持热重载,我们无需重新启动应用程序就能实时的加载修改后的代码,是不是感觉上和 Webpack 一样呢?
如果我来开发 Flutter 大概率不会使用 VS Code 了,可能仅仅是快速查看文件时用,配置比 Android Studio 麻烦,So ,我个人建议直接使用 Android Studio 进行开发。
且让我们来看一下,Flutter 是如何绘制这个界面的。
和开发客户端时一样,它也有一个入口函数,就是下面这一段:
void main() => runApp(new MyApp());
大概率的一个我们可以通过入口函数来看待这个例子,在初始化的例子中,我们就能明白,它继承了 StatelessWidget ,如果你经常写 ES 2015 ,extends 关键字应该能让你明白,这是一个继承关系,我们可以像写树一样,把每一个挂件都挂载到从入口函数开始顺序流向的地方。是不是感觉到这里是不是跟写 JSX 很像?只不过我们直接写的是 React.createElement 这种形式的 JSX 而已。既然我们可以做这样的比对,那么其实 Package 你也可以视为 NPM 下载的 JS 模块(对于熟悉前端开发的开发者来说),这是一个很好的比较,会让你感觉到更快速的入门。
那么,当 Flutter 出现了客户端不能支持的功能时该怎么办?如果你有过 Weex 或 React Native 的开发经验(指客户端),那么其实你能明白,通过通信的互相调用来处理这个问题。在 Flutter 中也是如此,Android 使用 java ,iOS 使用 Objective-C (当然也包含了它们新的语言,如 Swift)来写一个插件去完成,这一点上看起来我们应该都能理解和运用自如,如果你曾经开发过 Native Module 的话。
相比之下,它的工具链,Android Studio,也许是我更喜欢的一个原因,不知道为什么感觉就是比开发 Weex 和 RN 要用的舒适的多,多数情况下,对于开发者来讲,开发体验好不好,其实也非常的重要,这让人会有兴趣和信心能持续跟进下去。由于我也没有研究那么深入,还有些不太明白,如何将它集成到现有的项目中,不过目前看起来它的侵入性会比较大,不像 Weex 给你提供一个渲染容器,我们可以自己做一个 WeexViewController 来承载这个容器来执行 Weex 的渲染,相信 Flutter 应该也有这样的机制,只是目前好像不是那么方便。
它的很多思路可以学习很借鉴
这可能就是我持续关注它的原因吧。