(一)什么是 Flutter
Flutter是谷歌的移動UI框架,可以快速在iOS和Android上構(gòu)建高質(zhì)量的原生用戶界面。Flutter可以與現(xiàn)有的代碼一起工作。在全世界,Flutter正在被越來越多的開發(fā)者和組織使用,并且Flutter是完全免費、開源的。
從官方的的介紹來看可以總結(jié)成三點:
跨平臺 現(xiàn)在
Flutter至少可以跨 4 種平臺,甚至支持嵌入式開發(fā)。我們常用的有Linux、Android、IOS,甚至可以在谷歌最新的操作系統(tǒng)上Fuchsia進(jìn)行運行,經(jīng)過第三方擴(kuò)展,甚至可以跑在MacOS和Windows上,到目前為止,Flutter算是支持平臺最多的框架了,良好的跨平臺性,直接帶來的好處就是減少開發(fā)成本。原生用戶界面: 它是原生的,讓我們的體驗更好,性能更好。用官方的話講就是平滑而自然的滑動效果和平臺感知,為您的用戶帶來全新的體驗。
開源免費:同
Android系統(tǒng)一樣,這些都是免費開源的。
(二)主流跨平臺框架對比
ReactNative 和 Weex:執(zhí)行效率是硬傷,首頁不能用
RN已是共識,而且目前在同一Android和iOS代碼方面尚存在不足。PWA:用純
Web的方式統(tǒng)一三端,很好的idea。但是需要借助Google play Service和瀏覽器支持,國外大部分Android手機(jī)和iOS的新版本都可以支持PWA,但遺憾的是,國內(nèi)的瀏覽器很難統(tǒng)一支持PWA,這還需要時間。微信小程序:屬于微信內(nèi)的生態(tài)閉環(huán),更適合工具類和小游戲,一般都作為原生
APP的延伸入口。Flutter:在渲染技術(shù)上,
Flutter選擇了自己實現(xiàn)GDI,由于有更好的可控性,使用了新的語言Dart,避免了RN的那種通過橋接器與Javascript通訊導(dǎo)致效率低下的問題,所以在性能方面比RN更高一籌;有經(jīng)驗的開發(fā)者可以打開Android手機(jī)開發(fā)者選項里面的顯示邊界布局,發(fā)現(xiàn)Flutter的布局是一個整體。說明Flutter的渲染沒用使用原生控件進(jìn)行渲染。
| 技術(shù)類型 | UI渲染方式 | 性能 | 開發(fā)效率 | 動態(tài)化 | 框架代表 |
|---|---|---|---|---|---|
| H5 + 原生 | WebView 渲染 | 一般 | 高 | ?? | Cordova、Ionic |
| JavaScript + 原生渲染 | 原生控件渲染 | 好 | 高 | ?? | RN、Weex |
| 自繪UI + 原生 | 調(diào)用系統(tǒng)API渲染 | 好 | 高 | 默認(rèn)不支持 | Flutter |
(三)Flutter 的特點
-
快速開發(fā)
毫秒級的熱重載,修改后,您的應(yīng)用界面會立即更新。使用豐富的、完全可定制的widget在幾分鐘內(nèi)構(gòu)建原生界面。
富有表現(xiàn)力和靈活的UI
使用Flutter內(nèi)置美麗的Material Design和Cupertino的widget、豐富的motion API、平滑而自然的滑動效果和平臺感知,為您的用戶帶來全新體驗。響應(yīng)式框架
使用Flutter的響應(yīng)式框架和一系列基礎(chǔ)widget,可以輕松構(gòu)建您的用戶界面。使用功能強(qiáng)大且靈活的API(針對2D、動畫、手勢、效果等)可以幫助開發(fā)者解決艱難的UI挑戰(zhàn)。
class CounterState extends State<Counter> {
int counter = 0;
void increment() {
// 告訴Flutter state已經(jīng)改變, Flutter會調(diào)用build(),更新顯示
setState(() {
counter++;
});
}
Widget build(BuildContext context) {
// 當(dāng) setState 被調(diào)用時,這個方法都會重新執(zhí)行.
// Flutter 對此方法做了優(yōu)化,使重新執(zhí)行變的很快
// 所以你可以重新構(gòu)建任何需要更新的東西,而無需分別去修改各個widget
return new Row(
children: <Widget>[
new RaisedButton(
onPressed: increment,
child: new Text('Increment'),
),
new Text('Count: $counter'),
],
);
}
}
瀏覽 widget 目錄 ,了解更多關(guān)于 響應(yīng)式框架.
訪問本地功能和SDK并支持插件
Flutter可以復(fù)用Java、Swift或ObjC代碼,訪問Android和iOS上的原生系統(tǒng)功能。另外通過Flutter插件也可以訪問原生系統(tǒng)功能,比如藍(lán)牙、相機(jī)、WiFi等等。跨平臺自繪引擎
Flutter與Hybrid App、React Native這些跨平臺技術(shù)不同,Flutter既沒用使用WebView,也沒有使用各個平臺的原生控件,而是本身實現(xiàn)一個統(tǒng)一接口的渲染引擎來繪制UI,這樣做可以保證不同平臺UI的一致性。另外采用自繪引擎后,Flutter在布局過程中不需要像RN那樣要在JavaScript和Native之間通信,可以節(jié)省性能開銷。Flutter使用Skia作為其2D渲染引擎,Skia是Google的一個2D圖形處理函數(shù)庫,包含字型、坐標(biāo)轉(zhuǎn)換,以及點陣圖都有高效能且簡潔的表現(xiàn),Skia是跨平臺的,并提供了非常友好的API。采用Dart開發(fā)
Flutter App采用Dart語言來開發(fā)。與JavaScript相比,Dart在JIT(即時編譯)模式下,速度與JavaScript基本持平。但是當(dāng)Dart以AOT(運行前編譯)模式運行時,Dart性能要高于JavaScript。
