日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

淺談Flutter入門知識(shí)

 碼農(nóng)9527 2021-04-16

  Flutter是Google的移動(dòng)UI框架,可以在iOS和Android上快速構(gòu)建高質(zhì)量的本地用戶界面。一個(gè)代碼可以同時(shí)生成兩個(gè)高性能、高保真的iOS和Android應(yīng)用。Flutter的目標(biāo)是讓開發(fā)者在不同的平臺(tái)上交付自然流暢的高性能應(yīng)用,兼容滾動(dòng)行為、排版、圖標(biāo)等方面的差異。Flutter的開發(fā)語言是Dart。如果你用過Java或JavaScript等語言,你可以很快上手,甚至有些Flutter應(yīng)用是沒有編程經(jīng)驗(yàn)的人寫的!世界上,F(xiàn)lutter被越來越多的開發(fā)者和組織使用,F(xiàn)lutter完全免費(fèi)開源。

web

    跨平臺(tái)自繪引擎

    Flutter不同于其他大多數(shù)跨平臺(tái)框架,因?yàn)镕lutter不使用網(wǎng)絡(luò)或操作系統(tǒng)的本地控制。相反,F(xiàn)lutter使用自己的高性能渲染引擎繪制widget。這不僅可以保證安卓和iOS上用戶界面的一致性,還可以避免依賴本地控制帶來的限制和高昂的維護(hù)成本。

    使用Skia作為其2D渲染引擎的Flutter,Skia是一個(gè)2D繪圖引擎庫,它的前身是一個(gè)向量繪圖軟件,Chrome和Android都使用Skia作為繪圖引擎。Skia提供了非常友好的API,并且在圖形轉(zhuǎn)換,文本渲染,位圖渲染等方面都有友好高效的表現(xiàn)。Skia是跨平臺(tái)的,因此可以嵌入到Flutter的iOSDK中,而不需要研究iOS閉源的CoreGraphics/CoreAnimation。

    現(xiàn)在Flutter默認(rèn)支持iOS,Android,Fuchsia三個(gè)移動(dòng)平臺(tái)(Google新的自主開發(fā)操作系統(tǒng))。但是Flutter也可以支持Web開發(fā)和PC開發(fā),這本書的例子和介紹主要是基于iOS和Android平臺(tái),其他平臺(tái)的讀者可以自己了解。

    Flutter的優(yōu)點(diǎn)

    開發(fā)高效毫秒級(jí)的熱負(fù)荷。修改后,您的應(yīng)用界面將立即更新。使用豐富可定制的widget在幾分鐘內(nèi)構(gòu)建本地界面。

    富有表現(xiàn)力和靈活的用戶界面快速發(fā)布專注于本地體驗(yàn)的功能。分層結(jié)構(gòu)允許您完全定制,從而實(shí)現(xiàn)難以置信的快速渲染和豐富的表現(xiàn)力和靈活的設(shè)計(jì)。

    本機(jī)性能Flutter包含許多核心widget,例如滾動(dòng),導(dǎo)航,圖標(biāo)和字體等等,這些都能在iOS和Android上實(shí)現(xiàn)本機(jī)應(yīng)用程序的相同性能。

    Flutter開發(fā)語言

    Flutter使用Dart作為開發(fā)框架和widget語言。

    為何選擇Dart語言?

    Flutter評(píng)估了四個(gè)主要維度,并考慮了框架作者、開發(fā)者和最終用戶的需求。我們發(fā)現(xiàn)不同的語言在不同的層面上滿足了一些要求,但是Dart在所有的評(píng)估維度上都得分很高,符合我們所有的要求和標(biāo)準(zhǔn)。

    在Dart運(yùn)行過程中,編譯器支持Flutter關(guān)鍵特征的組合:

    基于JIT的快速開發(fā)周期:允許使用類型的語言改變形狀狀態(tài)的熱負(fù)荷

    AOT編譯器可以生成高效的ARM代碼,可以快速啟動(dòng),具有可預(yù)測(cè)的生產(chǎn)部署性能。

    另外,flutter開發(fā)團(tuán)隊(duì)與Dart社區(qū)緊密合作,Dart社區(qū)正積極投入資源,以改善Dart在Flutter中的應(yīng)用。舉例來說,當(dāng)我們使用Dart時(shí),這種語言并沒有提供工具鏈來生成本地二進(jìn)制文件(這對(duì)實(shí)現(xiàn)可預(yù)測(cè)的高性能非常有幫助),但現(xiàn)在已經(jīng)實(shí)現(xiàn)了,因?yàn)镈art團(tuán)隊(duì)已經(jīng)為Flutter構(gòu)建了它。類似地,DartVM以前已經(jīng)對(duì)吞吐量進(jìn)行了優(yōu)化,但是團(tuán)隊(duì)現(xiàn)在正在優(yōu)化VM的延遲時(shí)間,這對(duì)Flutter的工作負(fù)荷更為重要。

    Dart以下主要標(biāo)準(zhǔn)獲得高分:

    Flutter的主要價(jià)值主張之一是讓開發(fā)者使用相同的代碼庫為iOS和Android創(chuàng)建應(yīng)用程序,從而節(jié)省工程資源。高效率的語言能進(jìn)一步加快開發(fā)周期,使Flutter更具吸引力。它對(duì)于我們的framework團(tuán)隊(duì)和開發(fā)者來說都很重要。大多數(shù)Flutter功能都是通過Dart實(shí)現(xiàn)的,所以我們需要在100,000行代碼時(shí)保持高效率,而不會(huì)犧牲framework和widget的可讀性。

    雖然我們可以使用非面向?qū)ο蟮恼Z言,但這意味著我們應(yīng)該重新解決幾個(gè)問題。此外,大多數(shù)開發(fā)者都有面向?qū)ο箝_發(fā)的經(jīng)驗(yàn),所以更容易學(xué)會(huì)如何使用Flutter進(jìn)行開發(fā)。

    可預(yù)測(cè)性和高性。借助于Flutter,我們希望開發(fā)人員能夠快速創(chuàng)建流暢的用戶體驗(yàn)。為了實(shí)現(xiàn)這一目標(biāo),我們需要在每個(gè)動(dòng)畫框架中運(yùn)行大量代碼。這意味著我們需要一種語言,它不僅能提供高性能,還能提供可預(yù)測(cè)性能,而且不會(huì)導(dǎo)致丟幀的周期性暫停。

    Flutter框架采用函數(shù)式流,它在很大程度上依賴于底層的內(nèi)存分配器,因此有效地處理小的、短期的內(nèi)存分配是非常重要的,因此Flutter不能在缺乏該功能的語言中有效地工作。

    Flutter框架結(jié)構(gòu)

    Flutter框架是一個(gè)分層結(jié)構(gòu),每一層都建立在前一層。

    這個(gè)設(shè)計(jì)的目標(biāo)是幫助你用更少的代碼做更多的事情。比如Material層是通過組合來自Widget層的基本W(wǎng)idget而構(gòu)建的,Widgets層本身是通過低級(jí)物體渲染層構(gòu)建的。

    層為構(gòu)建應(yīng)用程序提供了許多選項(xiàng)。選擇一種定制的方法來釋放框架的所有表現(xiàn)力,或者使用構(gòu)件層中的構(gòu)建塊或混合匹配。您可以實(shí)現(xiàn)Flutter提供的所有現(xiàn)成widget,或者使用Flutter團(tuán)隊(duì)用于構(gòu)建框架的相同工具和技術(shù)來創(chuàng)建您自己的定制widget。

    沒什么是隱藏的。您可以從高層次、統(tǒng)一的widget概念中獲得開發(fā)效率優(yōu)勢(shì),而不會(huì)犧牲您想要深入下層的能力。

    Flutter框架分為三層Framework,Engine,Embedder。

    FlutterFramework

    Framework使用dart語言,包括UI、文字、圖片、按鈕等Widgets、渲染、動(dòng)畫、手勢(shì)等。這部分的核心代碼是flutter倉庫下的flutterpackage,sky_engine倉庫下的io,async,ui(dart:ui庫提供Flutter框架和引擎之間的界面)等。

    FlutterEngine

    Engine使用C++實(shí)現(xiàn),主要包括:Skia、Dart和Text。-Skia是一個(gè)開源的二維圖形庫,提供適合各種軟硬件平臺(tái)的通用API。作為GoogleChrome、ChromeOS、Android、MozillaFirefox、FirefoxOS等多種產(chǎn)品的圖形引擎,支持平臺(tái),包括Windows、macOS、iOS、Android、Ubuntu等。-Dart部分主要包括:Dartruntime、GarbageCollection(GC),如果是Debug模式,也包括JIT(Justime)支持。在Release和Profile模式下,是AOTime編譯成原生的arm代碼,不存在于Debug模式,也不存在于后端。

    Embedder

    Embedder是通過這個(gè)層將Flutter嵌入到各個(gè)平臺(tái)中的嵌入層,Embedder的主要工作包括渲染Surface設(shè)置、線程設(shè)置、插件等。該平臺(tái)(例如iOS)只提供一個(gè)畫布,其余的所有渲染相關(guān)邏輯都在Flutter中,從而使其具有良好的跨端一致性。

    總結(jié)

    Flutter框架本身有很好的分層設(shè)計(jì)。本節(jié)旨在讓讀者對(duì)Flutter的整體框架有一個(gè)大致的印象。相信到目前為止,讀者已經(jīng)對(duì)Flutter有了初步的印象。在我們正式開始之前,我們還需要了解Flutter的開發(fā)語言。

   如何學(xué)習(xí)Flutter?

    本節(jié)給你一些學(xué)習(xí)建議,分享作者在學(xué)習(xí)Flutter方面的一些經(jīng)驗(yàn),希望能幫你提高學(xué)習(xí)效率,避免不必要的坑。

    資源

    網(wǎng)站:閱讀Flutter網(wǎng)站的資源是快速入門的最佳方式,同時(shí)網(wǎng)站也是了解Flutter最新發(fā)展動(dòng)態(tài)的地方,由于Flutter目前仍處于快速發(fā)展階段,因此建議讀者還是不時(shí)地到網(wǎng)站查看是否有新動(dòng)態(tài)。

    源代碼和注釋:源代碼注釋應(yīng)該是學(xué)習(xí)Flutter的第一文檔。FlutterSDK的源代碼是開源的,注釋非常詳細(xì)。有很多例子。其實(shí)Flutter官方SDK文檔是通過注釋生成的。源代碼和注釋可以幫你解決大部分問題。

    Github:如果遇到的問題在StackOverflow上找不到答案,可以去githubflutter項(xiàng)目提issue。

    Gallery源代碼:Gallery是Flutter官方示例APP,有豐富的示例,讀者可以在線下載安裝。Gallery的源代碼在Flutter源代碼examples目錄下。

    社區(qū)

    StackOverflowkOverflow,那么StackOverflow就是目前世界上最大的程序員問答社區(qū),而且現(xiàn)在也是Flutter問答社區(qū)。除了Flutter用戶在StackOverflow上的交流外,F(xiàn)lutter開發(fā)團(tuán)隊(duì)的成員也經(jīng)常在上面回答問題。

    博客:隨著Flutter技術(shù)的普及,相信網(wǎng)上有很多與Flutter相關(guān)的文章和博客,讀者可以閱讀很多。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多