准备工作
- 安装 Android Studio
- 安装 Xcode
- 安装 Flutter
我们需要配置镜像站点的环境变量,打开~/.bash_profile 文件,在文件最后添加以下代码,来配置镜像站点的环境变量:
// 完成镜像的配置
export PUB_HOSTED_URL=https://pub.flutter-io.cn
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
// 将 flutter 命令的执行路径追加到环境变量 PATH 中,完成Flutter SDK 的安装
export PATH=~/Documents/flutter/bin:$PATH
hello_world 示例为例
-
进入 hello_world 目录,输入 flutter emulators 命令,查看当前可用的模拟器:
- 我们启动 iOS 模拟器, 运行 Flutter 项目:flutter emulators --launch apple_ios_simulator
Dart 语言概览
- JavaScript实际上是两类编程语言的混合产物:(简化的)函数式编程风格与(简化的)面向对象编程风格。所以Dart的最开始的定位也是一种运行在浏览器中的脚本语言
- 原本JavaScript只能在浏览器中运行,但是Node.js的出现让它开始有能力运行在服务端,很快手机应用与桌面应用也成为了JavaScript的宿主容器。进而,JavaScript成为了前后端通吃的全栈语言。
- 2015 年,在听取了大量开发者的反馈后,Google 决定将内置的 Dart VM 引擎从 Chrome 移除,这对 Dart 的发展来说是重大挫折,替代 JavaScript 就更无从谈起了。
- 但,Dart 也借此机会开始转型:在 Google 内部孵化了移动开发框架 Flutter,弯道超车进入了移动开发的领域;而在 Google 未来的操作系统 Fuchsia 中,Dart 更是被指定为官方的开发语言。
- Dart 的特性
1. 同时支持JIT 与 AOT
JIT 在运行时即时编译:在开发周期中使用,可以动态下发和执行代码,开发测试效率高,但运行速度和执行性能则会因为运行时即时编译受到影响。
AOT 即提前编译:可以生成被直接执行的二进制代码,运行速度快、执行性能表现好,但每次执行前都需要提前编译,开发测试效率低。
总的来说:Dart 具有运行速度快、执行性能好的特点。
2. 内存分配与垃圾回收
Dart VM 的内存分配策略比较简单,创建对象时只需要在堆上移动指针,内存增长始终是线性的,省去了查找可用内存的过程。
Dart 的垃圾回收,则是采用了多生代算法。回收过程中,Dart 只需要操作少量的“活跃”对象,没有引用的大量“死亡”对象则被忽略,这样的回收机制很适合 Flutter 框架中大量 Widget 销毁重建的场景。
3. 单线程模型
Dart 是单线程模型的优势就体现出来了,因为它天然不存在资源竞争和状态同步的问题。这就意味着,一旦某个函数开始执行,就将执行到这个函数结束,而不会被其他 Dart 代码打断。
Dart 中并没有线程,只有 Isolate(隔离区)。Isolates 之间不会共享内存,就像几个运行在不同进程中的 worker,通过事件循环(Event Looper)在事件队列(Event Queue)上传递消息通信。
4. 无需单独的声明式布局语言
Dart 声明式编程布局易于阅读和可视化,使得 Flutter 并不需要类似 JSX 或 XML 的声明式布局语言。所有的布局都使用同一种格式,也使得 Flutter 很容易提供高级工具使布局更简单。
开发过程也不需要可视化界面构建器,因为热重载可以让我们立即在手机上看到运行效果。