天天看點

為安卓開發者介紹的移動開發架構 Flutter

我是 TrueFace 的進階軟體工程師 Adel Boussaken。今天我要給大家介紹 Flutter 開發。歡迎加入 Dart 陣營。

我将跳過所有有關安裝和運作 Flutter 應用程式的部分,直接進行操作,如果您不确定 Flutter 是什麼,并且有許多問題,請閱讀 關于 Flutter 的演進之路 。

<a href="http://s3.51cto.com/wyfs02/M02/A6/D2/wKioL1ncTm3yXSadAABFi4g9t8M392.jpg-wh_651x-s_2333685939.jpg" target="_blank"></a>

如果你認為 Kotlin 是 Java 的替代,等到你看到 Dart 後,你會發現它是直截了當,沒有樣闆代碼的:

預設為public,通過字首“_” 進行私有化;

集合; 點選試用

一切都是對象 - 沒有“primitives”

命名參數,可選參數,預設值: 點選試用

屬性 - 無需在任何地方寫“get”方法

級聯 - 一切都是建構者

使用 strong mode 類型推導 - 隻需要在本地寫“var”

命名構造函數,自動配置設定到字段; 點選試用

字元串插值,幾種類型的字元串; 點選試用

dartfmt - 如果不想格式化 也可以不用這個工具

這裡有一個 Dart 代碼的例子,一個擷取 IP 位址的私有方法:

我很确定你已将你的 Android 技巧從無序代碼擴充到 MVC、MVP、MVVM,Dagger2、DataBinding 和 Android 架構元件 ,Flutter 基本上就是一個 V(View),響應式視圖,它可以是無狀态或有狀态的 widget,就連 AppCompatActivity 也是一個 widget。

讓我們建立一個非常簡單的 Activity,我們需要一個文本視圖和一個更新該文本的按鈕,下面是 Activity 代碼(注意沒有 XML):

在 Flutter,你不需要操縱視圖,就像 setText() 中的代碼,你可以使用 state 來替代,并且 Flutter 将會處理好螢幕更新,在 Flutter 中和上述代碼等價的是:

你也注意到,我們在 setState 中增加了 counter 的值,一旦 onPressed 被觸發(之後是 setState),Flutter 将會使用新的 counter 值來重新渲染整個 widget 和 text 對象。

分離 widget 和 state(對于 Android 開發人員來說)的最大優點是,如果你在 Java 代碼中旋轉裝置或調整視窗大小(支援多視窗),則計數器的值将被重置為零,你必須編寫大量重複代碼來管理 Activity 的生命周期。而在 Flutter 中,這是不需要的,現成的功能,無需額外的代碼。

在 Android 開發中,UI 線程非常重要,完成速度稍慢的事情工作,會顯示以下神秘行:

這種情況你隻能使用線程來處理,如下所示:

上述代碼可以很簡單的使用 Dart 完成:

這裡發生了什麼? async 修飾符标記的方法會安排稍後執行,該方法變成非阻塞的,是以你的應用程式不會丢失任何幀,await 修飾符挂起方法的執行,等待 processBitMap 完成,然後執行将會恢複。

目前有大量在 Android 之上運作的各種 OEM 軟體和皮膚,這都是可以了解的,因為每個制造商都希望為其裝置建立自己的附加值,我不能計算我究竟說了多少次“Funck S*ms*ng”,OEM 定制對 Android 開發人員引入了很多難題.。

這種方法,無法保證你的應用程式在多種裝置上看起來是一樣的,盡管并不是所有的 Flutter widget 都經過優化,可以在平闆電腦上也可以在較小螢幕的裝置上正常工作。

無論如何,這種方法也為 UI 設計的創新打開了新的大門,例如,以下的代碼可以使得使用者改變 Activity 的大小:

這讓我們得到一個非常有趣的小部件,這樣去寫可重複使用的小部件就太容易了, 我可以将以上不太友好的代碼轉換成可重用且幹淨的小部件:

重構後的代碼如下:

即時運作稱為熱重新加載,需要不到一秒鐘

Flutter 使用 CPU 繪制圖形、使用 GPU 渲染, 但是一些關于 3D 的 API 是不可用的

不用 XML 來設計布局

布局隻需一次性計算樹的大小

即使有文法錯誤,您的 APP 也不會崩潰

Flutter 小部件可以嵌入到 Android Activity 中

您不能在 Flutter 小部件中嵌入 Android 庫

至少需要 60 FPS,除非你的機器正在做别的事情

受到 React 的啟發設計 了API,但不是像 React 那樣運作的

不需要任何 POJO  

原文釋出時間為:2017-10-10

本文作者:佚名

本文來自雲栖社群合作夥伴“51CTO”,了解相關資訊可以關注。

繼續閱讀