準(zhǔn)備工作
- 安裝 Android Studio
- 安裝 Xcode
- 安裝 Flutter
我們需要配置鏡像站點(diǎn)的環(huán)境變量,打開~/.bash_profile 文件,在文件最后添加以下代碼,來配置鏡像站點(diǎn)的環(huán)境變量:
// 完成鏡像的配置
export PUB_HOSTED_URL=https://pub.flutter-io.cn
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
// 將 flutter 命令的執(zhí)行路徑追加到環(huán)境變量 PATH 中,完成Flutter SDK 的安裝
export PATH=~/Documents/flutter/bin:$PATH
hello_world 示例為例
-
進(jìn)入 hello_world 目錄,輸入 flutter emulators 命令,查看當(dāng)前可用的模擬器:
image.png - 我們啟動(dòng) iOS 模擬器, 運(yùn)行 Flutter 項(xiàng)目:flutter emulators --launch apple_ios_simulator
Dart 語言概覽
- JavaScript實(shí)際上是兩類編程語言的混合產(chǎn)物:(簡化的)函數(shù)式編程風(fēng)格與(簡化的)面向?qū)ο缶幊田L(fēng)格。所以Dart的最開始的定位也是一種運(yùn)行在瀏覽器中的腳本語言
- 原本JavaScript只能在瀏覽器中運(yùn)行,但是Node.js的出現(xiàn)讓它開始有能力運(yùn)行在服務(wù)端,很快手機(jī)應(yīng)用與桌面應(yīng)用也成為了JavaScript的宿主容器。進(jìn)而,JavaScript成為了前后端通吃的全棧語言。
- 2015 年,在聽取了大量開發(fā)者的反饋后,Google 決定將內(nèi)置的 Dart VM 引擎從 Chrome 移除,這對(duì) Dart 的發(fā)展來說是重大挫折,替代 JavaScript 就更無從談起了。
- 但,Dart 也借此機(jī)會(huì)開始轉(zhuǎn)型:在 Google 內(nèi)部孵化了移動(dòng)開發(fā)框架 Flutter,彎道超車進(jìn)入了移動(dòng)開發(fā)的領(lǐng)域;而在 Google 未來的操作系統(tǒng) Fuchsia 中,Dart 更是被指定為官方的開發(fā)語言。
- Dart 的特性
1. 同時(shí)支持JIT 與 AOT
JIT 在運(yùn)行時(shí)即時(shí)編譯:在開發(fā)周期中使用,可以動(dòng)態(tài)下發(fā)和執(zhí)行代碼,開發(fā)測(cè)試效率高,但運(yùn)行速度和執(zhí)行性能則會(huì)因?yàn)檫\(yùn)行時(shí)即時(shí)編譯受到影響。
AOT 即提前編譯:可以生成被直接執(zhí)行的二進(jìn)制代碼,運(yùn)行速度快、執(zhí)行性能表現(xiàn)好,但每次執(zhí)行前都需要提前編譯,開發(fā)測(cè)試效率低。
總的來說:Dart 具有運(yùn)行速度快、執(zhí)行性能好的特點(diǎn)。
2. 內(nèi)存分配與垃圾回收
Dart VM 的內(nèi)存分配策略比較簡單,創(chuàng)建對(duì)象時(shí)只需要在堆上移動(dòng)指針,內(nèi)存增長始終是線性的,省去了查找可用內(nèi)存的過程。
Dart 的垃圾回收,則是采用了多生代算法?;厥者^程中,Dart 只需要操作少量的“活躍”對(duì)象,沒有引用的大量“死亡”對(duì)象則被忽略,這樣的回收機(jī)制很適合 Flutter 框架中大量 Widget 銷毀重建的場景。
3. 單線程模型
Dart 是單線程模型的優(yōu)勢(shì)就體現(xiàn)出來了,因?yàn)樗烊徊淮嬖谫Y源競爭和狀態(tài)同步的問題。這就意味著,一旦某個(gè)函數(shù)開始執(zhí)行,就將執(zhí)行到這個(gè)函數(shù)結(jié)束,而不會(huì)被其他 Dart 代碼打斷。
Dart 中并沒有線程,只有 Isolate(隔離區(qū))。Isolates 之間不會(huì)共享內(nèi)存,就像幾個(gè)運(yùn)行在不同進(jìn)程中的 worker,通過事件循環(huán)(Event Looper)在事件隊(duì)列(Event Queue)上傳遞消息通信。
4. 無需單獨(dú)的聲明式布局語言
Dart 聲明式編程布局易于閱讀和可視化,使得 Flutter 并不需要類似 JSX 或 XML 的聲明式布局語言。所有的布局都使用同一種格式,也使得 Flutter 很容易提供高級(jí)工具使布局更簡單。
開發(fā)過程也不需要可視化界面構(gòu)建器,因?yàn)闊嶂剌d可以讓我們立即在手機(jī)上看到運(yùn)行效果。
