真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

關于flutter組合實例的信息

Flutter是一個什么框架

Flutter是一個移動應用程序的軟件開發(fā)工具包(SDK),具有以下特征:

創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都網(wǎng)站設計、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務,滿足客戶于互聯(lián)網(wǎng)時代的鉛山網(wǎng)站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡建設合作伙伴!

跨平臺應用的框架,沒有使用WebView或者系統(tǒng)平臺自帶的控件,使用自身的高性能渲染引擎自繪

簡化版的瀏覽器,最大限度在android和ios上統(tǒng)一UI,包括業(yè)務邏輯和用戶體驗

開發(fā)語言使用dart,結(jié)合C, C++, 和Skia(2D渲染引擎)構(gòu)建

支持hot reload,包含著完整的控件和工具鏈

一切皆控件,控件是每個Flutter應用程序的基本構(gòu)建塊,與分離視圖、控制器、布局和其他屬性的框架不同,F(xiàn)lutter具有一致的統(tǒng)一對象模型:控件。一個控件可以定義:結(jié)構(gòu)元素(比如按鈕或菜單)、風格元素(比如字體或顏色方案)、布局的方面(比如填充)、一些業(yè)務邏輯等

組合大于繼承,控件本身通常由許多小型、單用途的控件組成,結(jié)合起來產(chǎn)生強大的效果,類的層次結(jié)構(gòu)是扁平的,以最大化可能的組合數(shù)量

強化版的WebView,框架僅提供一個View層,大部分功能要依賴原生

目前只能夠運行大部分Dart代碼(不能引入dart:mirrors或dart:html庫)

Flutter狀態(tài)管理 ChangeNotifierProxyProvider的使用

這里的DynamicHabitDetailViewModel實例對象由ChangeNotifierProxyProvider提供,ChangeNotifierProxyProvider組合了兩種功能:

(1)它會自動訂閱DynamicHabitDetailViewModel中的更改(如果您只想使用此功能,只需使用ChangeNotifierProvider)

(2)它采用先前提供的對象的值(在本例中為TeamDetailViewModel,如上所述),并使用它來構(gòu)建DynamicHabitDetailViewModel的值(如果您只需要此功能,只需使用ProxyProvider,也就是項目中的ChangeNotifierProxyProvider)

Flutter PageView使用案例

現(xiàn)在的小目標是要實現(xiàn)一個 「圖片輪播」的效果,我們在 Android 中可以使用 ViewPager 結(jié)合 handler 或者 Timer 去實現(xiàn)。

而我們在 Flutter 中,其實也是類似的。

那么,在 Flutter 中,代替 Android 中的 ViewPager 組件是 PageView ,而且,這個 PageView 相比 ViewPager 擴展性更高。

我們來看一下

Flutter PageView 官網(wǎng)

根據(jù)官網(wǎng)的介紹, PageView 在需要展示的頁面很多時,有「控件復用」功能,而且,我們還可以通過

來設置滾動的方向,也就是說,我們還可以完成「縱向滾動」,真的很棒有么有?

偷的小米官網(wǎng)的輪播圖

看一下效果圖

GestureDetector ,或者直接返回一個 button 類型的 Widget 即可

ok,了解了這個PageView,接下來,我們想法子搞一個「輪播效果」,請見下一篇文章。

Flutter_定義控件StatefulWidgets和StatelessWidget

Stateful(有狀態(tài)) 和 stateless(無狀態(tài)) widgets

stateless widget 沒有內(nèi)部狀態(tài). Icon、 IconButton, 和Text 都是無狀態(tài)widget, 他們都是 StatelessWidget的子類。

stateful widget 是動態(tài)的. 用戶可以和其交互 (例如輸入一個表單、 或者移動一個slider滑塊),或者可以隨時間改變 (也許是數(shù)據(jù)改變導致的UI更新). Checkbox, Radio, Slider, InkWell, Form, and TextField 都是 stateful widgets, 他們都是 StatefulWidget的子類。

StatefulWidget類

具有可變狀態(tài)的小部件。

狀態(tài)是(1)在構(gòu)建窗口小部件時可以同步讀取的信息,以及(2)在窗口小部件的生命周期內(nèi)可能會更改的信息。這是小工具實施者的責任,以確保國家的及時通知當這種狀態(tài)的改變,使用State.setState。

有狀態(tài)窗口小部件是一個窗口小部件,它通過構(gòu)建一個更具體地描述用戶界面的其他窗口小部件來描述用戶界面的一部分。構(gòu)建過程以遞歸方式繼續(xù),直到用戶界面的描述完全具體(例如,完全由RenderObjectWidget組成,其描述具體的RenderObject)。

當您描述的用戶界面部分可以動態(tài)更改時(例如由于具有內(nèi)部時鐘驅(qū)動狀態(tài)或依賴于某些系統(tǒng)狀態(tài)),狀態(tài)窗口小部件非常有用。對于僅依賴于對象本身中的配置信息以及窗口小部件膨脹的 BuildContext的組合,請考慮使用 StatelessWidget。

StatefulWidget實例本身是不可變的,并且將它們的可變狀態(tài)存儲在由createState方法創(chuàng)建的單獨State對象中 ,或者存儲在State訂閱的對象中,例如Stream或ChangeNotifier對象,其引用存儲在StatefulWidget的最終字段中本身。

框架在膨脹StatefulWidget時 調(diào)用createState,這意味著如果該窗口小部件已插入到多個位置的樹中,則多個State對象可能與同一StatefulWidget關聯(lián)。同樣,如果StatefulWidget從樹中移除,后來在樹再次插入時,框架將調(diào)用createState再創(chuàng)建一個新的國家目標,簡化的生命周期狀態(tài)的對象。

如果StatefulWidget的創(chuàng)建者使用GlobalKey作為其 鍵,則StatefulWidget在從樹中的一個位置移動到另一個位置時保持相同的State對象。由于具有GlobalKey的窗口小部件可以在樹中的至多一個位置使用,因此使用GlobalKey的窗口小部件最多只有一個關聯(lián)元素。當通過將與該窗口小部件關聯(lián)的(唯一)子樹從舊位置移植到新位置(而不是在該位置重新創(chuàng)建子樹)時,框架利用此屬性將全局鍵從樹中的一個位置移動到另一個位置時利用此屬性。新的位置)。與StatefulWidget關聯(lián)的State對象與子樹的其余部分一起被移植,這意味著State對象在新位置被重用(而不是被重新創(chuàng)建)。但是,為了有資格進行嫁接,必須將窗口小部件插入到從舊位置移除它的同一動畫幀中的新位置。

StatefulWidget有兩個主要類別。

首先是其中一個分配資源State.initState并在他們的處置State.dispose,但不依賴于InheritedWidget S或致電State.setState。這些小部件通常在應用程序或頁面的根目錄中使用,并通過ChangeNotifier, Stream或其他此類對象與子小部件進行通信。遵循這種模式的有狀態(tài)小部件相對便宜(就CPU和GPU周期而言),因為它們構(gòu)建一次然后永不更新。因此,它們可能有一些復雜和深刻的構(gòu)建方法。

第二類是使用State.setState或依賴于 InheritedWidget的小部件。這些通常會在應用程序的生命周期內(nèi)重建多次,因此最小化重建此類窗口小部件的影響非常重要。(他們也可以使用State.initState或 State.didChangeDependencies并分配資源,但重要的是他們重建。)

可以使用幾種技術(shù)來最小化重建有狀態(tài)窗口小部件的影響:

StatelessWidget類

一個不需要可變狀態(tài)的小部件。

無狀態(tài)窗口小部件是一個窗口小部件,它通過構(gòu)建一個更具體地描述用戶界面的其他窗口小部件來描述用戶界面的一部分。構(gòu)建過程以遞歸方式繼續(xù),直到用戶界面的描述完全具體(例如,完全由RenderObjectWidget組成,其描述具體的RenderObject)。

當您描述的用戶界面部分不依賴于對象本身的配置信息以及窗口小部件膨脹的BuildContext時,無狀態(tài)窗口小部件非常有用。對于可以動態(tài)更改的組合,例如由于具有內(nèi)部時鐘驅(qū)動狀態(tài)或依賴于某些系統(tǒng)狀態(tài),請考慮使用StatefulWidget。

無狀態(tài)窗口小部件的構(gòu)建方法通常僅在以下三種情況下調(diào)用:第一次將窗口小部件插入樹中,窗口小部件的父窗口更改其配置時,以及何時依賴于更改的InheritedWidget。

如果窗口小部件的父級將定期更改窗口小部件的配置,或者它依賴于經(jīng)常更改的繼承窗口小部件,則優(yōu)化構(gòu)建方法的性能以保持流暢的呈現(xiàn)性能非常重要。

可以使用幾種技術(shù)來最小化重建無狀態(tài)窗口小部件的影響:

Flutter(六)Android與Flutter混合開發(fā)(Hybird)

如果我們目前的項目是Android的,但是接下來我們希望部分頁面可以使用Flutter進行開發(fā),甚至我們希望在Native頁面中嵌入FlutterUI組件,那么我們該如何實現(xiàn)呢?

假設你現(xiàn)在Android項目的目錄的結(jié)構(gòu)是這樣的

這時候如果你想創(chuàng)建一個Flutter模塊,使得Android模塊和Flutter模塊之間可以進行交互,我們可以通過Android Studio新建一個Flutter Module,具體過程是:File — New — New Module ,之后選擇Flutter Module,指定Project Location的路徑為

也就是說,最終你的項目結(jié)構(gòu)會是這樣的

接下來在Android Module的 build.gradle 文件中添加flutter依賴

先創(chuàng)建一個Flutter頁面

這里比較重要的是 window.defaultRouteName 這個字段,這個字段可以接收從Native傳遞過來的參數(shù) (下文我們會介紹原生傳遞參數(shù)的方法),也就是說通過這個字段我們就可以進行Flutter頁面的路由的分發(fā)

我們可以直接在Android的 MainActivity 中啟動一個 FlutterActivity ,這里的 initialRoute 方法中傳遞的參數(shù)就對應Flutter層的 window.defaultRouteName

注意:需要在 AndroidManifest.xml 注冊 FlutterActivity

自己創(chuàng)建一個 FlutterAppActivity 繼承自 FlutterActivity

在 MainActivity 中啟動 FlutterAppActivity (另外別忘了在 AndroidManifest.xml 中注冊 FlutterAppActivity )

兩種啟動方式的區(qū)別

如果單純只是想打開一個Flutter頁面,兩種方式實際上基本沒有太大區(qū)別,第一種方式也許還會更簡單一點。但是,在Flutter開發(fā)中,我們往往還需要開發(fā)一些Native插件供Flutter調(diào)用,如果使用復寫 FlutterActivity 的方式更有利于我們在 FlutterActivity 中注冊我們的Native插件,所以實際開發(fā)中一般推薦使用第二種方式

擴展思考

initialRoute 從名稱上看起來是Flutter提供給我們進行Native與Flutter交互的路由跳轉(zhuǎn)的,但是實際上他就是一個字符串,我們不僅僅可以傳遞一個路由名稱,有時候我們也可以通過這個參數(shù)傳遞一串JSON數(shù)據(jù),然后在Flutter端進行解析,這樣我們就可以通過這個參數(shù)做更多的事情

activity_main.xml

FrameLayout 用于承載Flutter組件

MainActivity.java

使用 FragmentManager 將 FlutterFragment 添加到 FrameLayout 容器中

運行結(jié)果

上半部分是原生的TextView,下半部分是Flutter的Text組件

本節(jié)主要介紹了Native和Flutter之間的頁面跳轉(zhuǎn),以及同一個頁面中Native與Flutter組件的組合。接下來會介紹如何編寫Android插件與Flutter進行數(shù)據(jù)交互

Flutter 6種構(gòu)造函數(shù)詳解

Flutter有生成構(gòu)造函數(shù)、默認構(gòu)造函數(shù)、命名構(gòu)造函數(shù)、重定向構(gòu)造函數(shù)、常量構(gòu)造函數(shù)、工廠構(gòu)造函數(shù)

生成構(gòu)造函數(shù)是最常見的構(gòu)造函數(shù),即生成實體類對象。

如果未聲明構(gòu)造函數(shù),則會提供默認構(gòu)造函數(shù)。 默認構(gòu)造函數(shù)沒有參數(shù),并調(diào)用父類無參數(shù)構(gòu)造函數(shù)。

默認情況下,子類中的構(gòu)造函數(shù)調(diào)用父類的未命名無參數(shù)構(gòu)造函數(shù)。 父類的構(gòu)造函數(shù)在子類構(gòu)造函數(shù)體的開頭被調(diào)用。 如果還使用初始化了列表,則會在調(diào)用父類構(gòu)造函數(shù)之前執(zhí)行。 執(zhí)行順序如下:

如果父類沒有未命名的無參數(shù)構(gòu)造函數(shù),則必須手動調(diào)用父類中的一個構(gòu)造函數(shù)。 在子類的構(gòu)造函數(shù)體之后用冒號(:)指定父類構(gòu)造函數(shù)

當需要定義一個有特別含義的構(gòu)造函數(shù)的時候,可以通過命名構(gòu)造 形式:構(gòu)造函數(shù).XXX來命名構(gòu)造函數(shù)

有時構(gòu)造函數(shù)需要重定向到同一個類中的另一個構(gòu)造函數(shù),在冒號后面用this:

如果你的類需要成為永遠不會更改的對象,則可以使這些對象成為編譯時常量。 定義const構(gòu)造函數(shù)要確保所有實例變量都是final。

不用直接創(chuàng)建對象(可以通過調(diào)用其他構(gòu)造函數(shù)創(chuàng)建)


本文標題:關于flutter組合實例的信息
文章源于:http://weahome.cn/article/dssjjcj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部