讓咱們一塊兒來了解Flutter與其餘跨平臺框架的優點,以及這些優點在開發流程中的做用。git
就我目前的職業開發生涯中,目擊了太多太多項目不知道該選擇哪一種跨平臺方案的例子。這些項目都是不一樣的,可是咱們都但願這些項目可以運行在更多平臺和更多設備上,常見的做法就是在不一樣的客戶端招聘不一樣的開發人員來進行開發工做,好比手機端有iOS程序員和Android程序員等等。
我記得在2013年,我第一次看到了比較完善的跨平臺遊戲開發方案,那時候我就在想,爲何App端沒有這種工具能夠知足咱們跨平臺的需求呢?
可是,如今咱們有了,它就是Flutter!我將在下面介紹我使用Flutter作了些什麼,但願能對你有所幫助或啓發。
我有過一些iOS開發經驗,也有過一些遊戲開發經驗,能夠說Flutter就是我一直在尋找的跨平臺解決方案。它不只使用簡單,還能保持跨平臺UI的一致性時,而且很容易的與原生進行交互。是很是好的體驗。程序員
你以前可能會了解到,全部的跨平臺框架都會在節約開發時間上有所幫助。可是,Flutter在有些地方跟其餘框架有不少不一樣,讓咱們來看看,究竟Flutter比其餘跨平臺框架在哪些地方作的更好。github
咱們知道,基本上全部的跨平臺框架都提供了一種在目標平臺之間共享代碼的實現方式。可是沒有任何一個平臺像Flutter這樣容許共享UI代碼以及UI自己。
爲了說明這一點,下面咱們來看一下其中一個跨平臺框架UI的實現邏輯:
canvas
React Navite 的渲染過程看起來像是在每一個平臺上都很簡單。可是從圖中咱們不難發現,這種渲染過程須要依然各個平臺原生組件來進行渲染,React Native 就是幫咱們實現了對各個平臺應用層UI控件的映射。這就須要將每一個動畫每一個UI映射到各個平臺的動畫和UI上,顯然這比較繁瑣。
相比之下,Flutter不須要依賴熱任何平臺的UI組件就能生成UI界面。Flutter惟一須要的就是一個畫布,也就是咱們常說的Canvas。
下面是Flutter的渲染過程:
瀏覽器
Flutter可以在任何平臺上構建徹底如出一轍的的UI,這種獨特的渲染方式是它脫穎而出的關鍵。
簡而言之,使用Flutter來實現UI和業務邏輯可以節省時間和精力,而且同時不影響最終產品的性能。原來iOS、Android須要每一個平臺都要配備相應的程序員,使用Flutter只須要一組程序員就能夠了,還節省了程序員!框架
依據我我的的開發經驗,從編譯到運行一個Android App至少須要40秒的時間。同時,在調試UI的過程當中須要不停的編譯和運行,這就須要消耗大量的時間。誠然,Android Studio是具備佈局預覽功能的,可是總有一點不足的是:Android Studio 不能每次都像預期那樣運行,特別是在自定義View的時候。
Flutter的 「熱重載」功能可讓咱們實時看到應用的變化,而且不會丟失當前應用程序的狀態。這就是使用Flutter節省開發時間的根本緣由。
此外,Flutter團體還付出了不少努力來提供各類控件。這些控件大多數均可以自定義,這就在構建UI上給咱們節省了很多時間。除了衆多的核心控件外,Flutter還提供了大量的Material(Android風格)和Cupertino(iOS風格)的控件能夠知足不一樣的設計風格。
以下圖:
ide
總而言之,使用Flutter來開發,咱們能夠繞過幾個程序開發過程當中比較耗時的步驟,這樣使整個開發過程更快,更簡單且更省心。工具
使用Flutter來開發迭代產品會更快。在大多數狀況下,咱們研發一個App須要Android端和iOS端都須要進行開發和維護,而Flutter只要一組人員就能夠完成這個任務。在開發時間上至少節省了一倍。緣由很簡單,咱們只須要編寫一套代碼就能夠獲得在各個應用平臺相同的交互效果。任何基於2D的UI均可以在Flutter中實現,且不須要調用原生代碼。
除此以外,Flutter使用聲明式語法構建UI,根據個人經驗,它能夠顯著提升開發速度。當涉及到UI效果調整時這是最明顯的。佈局
咱們知道,App的性能是好的用戶體驗的關鍵。
儘管很難說出確切的數字,可是能夠確定地說,在大多數狀況下,Flutter應用程序的性能與本機應用程序沒有區別,甚至在複雜的UI動畫場景中表現的更好。
爲何呢?與大多數跨平臺框架不一樣的是,Flutter不依賴任何中間代碼作映射。Flutter應用直接調用了底層代碼,這就極大的提升了性能。
咱們一樣可使用Flutter徹底編譯和發佈應用程序。性能
Flutter的一個最大的優點就是能夠隨時修改屏幕上的任何控件,不管這個控件有多複雜。一樣也支持直接使用原生控件來作UI動畫。
下面是一個簡單的自定義動畫的示例:
一樣的,使用Flutter生成動畫更加靈活和通用,而且不會額外增長工做量。過渡動畫、圓角、顏色、陰影、變換等,Flutter都能輕鬆實現。
這裏給你們提供更多的Demo。讓咱們更好的熟悉這些動畫。
與其餘框架相比,Flutter應有更多的能力。顯然,這須要框架自己很是強大,且須要框架自己是一個高性能的框架。
Flutter是使用Skia做爲底層的渲染引擎。有了Skia的支持,UI層能夠在任何平臺上進行渲染,且保持一致性。換句話說,咱們不須要調整任何代碼就能夠將UI呈如今其餘平臺上,這極大的簡化了開發過程。
除了UI以外,咱們還有不少功能須要依賴原生的支持,好比獲取GPS信息,藍牙通訊,傳感器,照相機,相冊等等。這些功能均可以經過Flutter的插件來實現。
固然有些時候這些插件也是不足以知足咱們的需求。可是不用擔憂,Flutter使用的開發語言(Dart語言)與原生代碼通訊很是簡單。只須要幾行代碼咱們就能夠實現原生與Flutter之間的交互,就能夠實現任何你想調用原生功能的需求。
交互流程以下圖:
Flutter不只是能夠在移動設備上使用,還支持Web端和桌面端。在2018年的I / O會議上,Google展現了Flutter Web的技術,這使得在瀏覽器中運行純Flutter應用程序成爲可能,且不須要修改任何源代碼。
下面是演示視頻:
https://www.bilibili.com/vide...
不能打開視頻的能夠點擊這裏查看
官方的這一操做,意味着Flutter從移動開發框架升級到了全平臺開發框架的行列。
若是咱們不須要在移動端作部署和使用,技術嫺熟的Flutter程序員可讓Flutter在熱門平臺上運行,包括但不限於Android、iOS、Web瀏覽器、Windows、macOS、Linux甚至是嵌入式設備。一樣的代碼能夠在這些任何平臺上運行,且不須要修改任何Dart代碼。
是的!是的!是的!
軟件產品能保證性能和穩定性、人員容易招聘、產品可以快速的迭代和開發這些優點都可以給企業帶來巨大的價值。一旦技術方案出現缺陷和存在任何方面的問題,都會給企業帶來直接或間接的損失。
從這個角度來看,Flutter都是能夠下降咱們的風險的:
讓咱們總結一下Flutter的最突出優勢:
因此說,想開發跨平臺的,性能優良的應用,Flutter是不二選擇。Flutter正式成爲最終的跨平臺UI框架只是時間問題。