最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Flutter中數(shù)據(jù)傳遞的方式

 更新時間:2022年06月27日 08:36:06   作者:老李code  
這篇文章主要和大家分享一下Flutter中常用的幾種數(shù)據(jù)傳遞方式的應(yīng)用場景以及優(yōu)缺點,文中的示例代碼講解詳細,感興趣的可以了解一下

在Flutter中,常見的數(shù)據(jù)傳遞一共有以下幾種:

1、構(gòu)造方法傳遞

Flutter的構(gòu)造方法具備著dart語言的特點,參數(shù)具備可選狀態(tài),通過構(gòu)造方法傳遞數(shù)據(jù),可以很方便的將任意數(shù)據(jù)進行傳遞,平時開發(fā)中,A跳轉(zhuǎn)B頁面最常用的方法就是通過構(gòu)造方法進行傳遞。比如我們最常見的Key就是通過構(gòu)造一級一級向下傳遞的。

優(yōu)點: 相鄰頁面之間傳遞數(shù)據(jù)非常方便,你不需要進行任何額外的操作。

缺點: 當頁面層級過多以及類過多時,需一級一級傳遞,寫起來非常麻煩,代碼耦合性高。

2、InheritedWidget

為了解決構(gòu)造函數(shù)一級一級鄉(xiāng)下傳遞的的缺點,F(xiàn)lutter派生出了功能性組件InheritedWidget,通過它可以實現(xiàn)頂級widget的數(shù)據(jù)共享,也就是說無需一級一級向下傳遞,即可獲取數(shù)據(jù),比如A頁面有一個數(shù)據(jù),需要在C頁面使用,那么就可以不經(jīng)過B頁面獲取,前提ABC三個頁面是屬于一個Widget中的,常見的 TabView布局頂層數(shù)據(jù)共享,適合復(fù)雜頁面頂層向下傳遞數(shù)據(jù),使用也很簡單。

示例代碼:

/// 數(shù)據(jù)共享
class TestData extends InheritedWidget {
  final Widget child;
  final String data; // 共享數(shù)據(jù)

  // 構(gòu)造
  const TestData({
    Key? key,
    required this.child,
    required this.data,
  }) : super(key: key, child: child);

/// 定義一個靜態(tài)方法 獲取數(shù)據(jù)
static String of(BuildContext context) {
// return context.dependOnInheritedWidgetOfExactType<TestDataestData>()?.data??"數(shù)據(jù)有誤";
return (context.getElementForInheritedWidgetOfExactType<TestData>()?.widget as TestData).data ;
}
  @override
  bool updateShouldNotify(covariant TestData oldWidget) {
    return child != oldWidget.child;
  }
}

然后在A頁面的根布局套上TestData,在C頁面通過of方法即可獲取數(shù)據(jù)。

兩種更新數(shù)據(jù)方法:

dependOnInheritedWidgetOfExactType: 子組件更新didChangeDependencies();

getElementForInheritedWidgetOfExactType: 不更新。

需要注意的點: 這種傳遞方式是樹狀結(jié)構(gòu)從上而下進行傳遞,所共享數(shù)據(jù)的頁面必須在頂層的build方法中,并且沒有延遲加載,比如這個頁面為動態(tài)加載,那么在C頁面中的initState獲取數(shù)據(jù)就會報錯,原因就是首次構(gòu)建時,沒有加載子頁面導(dǎo)致,可在build方法中獲取,或者延時獲取。

優(yōu)點: 自上而下,無需一級一級傳遞,傳遞方便。

缺點: 不能跨組件傳遞。

應(yīng)用場景: 系統(tǒng)中比如我們常見的MediaQuery設(shè)備信息和Theme應(yīng)用主題就是通過這種方式在來進行統(tǒng)一數(shù)據(jù)共享的。

3、Notification

Notification是FLutter中的一種通知機制,和 InheritedWidget相反,他可以自下而上通知父組件更新數(shù)據(jù),

定義傳遞數(shù)據(jù)類:

class TestDataN extends Notification{
  final String data;
  TestDataN(this.data);
}

子組件通知調(diào)用dispacth方法通知父組件。

TestDataN("data").dispatch(context);

在父組件進行監(jiān)聽:

NotificationListener(
    onNotification: (data){
      print("data$data");
  return true;
},child: child);

應(yīng)用場景: 比如我們的ListView滾動監(jiān)聽、就是通過Notification實現(xiàn)的。

4、Stream & event_bus

以上的2、3數(shù)據(jù)傳遞方式都是基于同一個widget樹進行傳遞的,跨組件通信我們可以使用Stream事件流進行傳遞,通過訂閱者模式監(jiān)聽數(shù)據(jù),可以在任意組件中進行數(shù)據(jù)傳遞,event_bus插件就是使用這種方式來進行數(shù)據(jù)傳遞的。

eventBus示例代碼:

// 創(chuàng)建公用對象
EventBus eventBus = EventBus();
// 監(jiān)聽數(shù)據(jù)
eventBus.on().listen((event) {

});
// 發(fā)送
eventBus.fire(event);

使用完畢在注冊接收數(shù)據(jù)頁面記得銷毀:eventBus.destroy();

優(yōu)點: 可以跨組件通信。

到此這篇關(guān)于詳解Flutter中數(shù)據(jù)傳遞的方式的文章就介紹到這了,更多相關(guān)Flutter數(shù)據(jù)傳遞內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Kotlin圖文講解多語言支持實現(xiàn)方法

    Kotlin圖文講解多語言支持實現(xiàn)方法

    這篇文章主要介紹了Kotlin多語言支持實現(xiàn)方法,在Android開發(fā)中,我們?nèi)绾沃С侄嗾Z言APP呢,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值
    2023-02-02
  • Android實現(xiàn)仿iOS菊花加載圈動畫效果

    Android實現(xiàn)仿iOS菊花加載圈動畫效果

    iOS上有一個UIActivityIndicator的控件,就是俗稱轉(zhuǎn)菊花的控件,一般UI設(shè)計師會按照iOS的風格來出設(shè)計稿,也要求使用這種Loading效果,本文將具體的講述如何實現(xiàn)這種效果,感興趣的朋友可以參考下
    2021-05-05
  • Android拍照上傳功能示例代碼

    Android拍照上傳功能示例代碼

    這篇文章主要介紹了Android拍照上傳功能用法,結(jié)合實例形式詳細分析了Android拍照上傳功能所涉及的相關(guān)知識點與功能實現(xiàn)技巧,需要的朋友可以參考下
    2016-08-08
  • Android SeekBar 自定義thumb旋轉(zhuǎn)動畫效果

    Android SeekBar 自定義thumb旋轉(zhuǎn)動畫效果

    某些音樂播放或者視頻播放的界面上,資源還在加載時,進度條的原點(thumb)會顯示一個轉(zhuǎn)圈的效果。這篇文章主要介紹了Android SeekBar 自定義thumb thumb旋轉(zhuǎn)動畫效果,需要的朋友可以參考下
    2021-11-11
  • Android11繞過反射限制的方法

    Android11繞過反射限制的方法

    這篇文章主要介紹了Android11繞過反射限制的方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Android Notification 使用方法詳解

    Android Notification 使用方法詳解

    這篇文章主要介紹了Android Notification 使用方法詳解的相關(guān)資料,這里提供實例來幫助大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-08-08
  • 一起動手編寫Android圖片加載框架

    一起動手編寫Android圖片加載框架

    這篇文章主要和大家一起動手編寫Android圖片加載框架,從內(nèi)部原理到具體實現(xiàn)來詳細介紹如何開發(fā)一個簡潔而實用的Android圖片加載緩存框架,感興趣的小伙伴們可以參考一下
    2016-04-04
  • Android適配器Adapter與ListView和RecycleView的簡單使用

    Android適配器Adapter與ListView和RecycleView的簡單使用

    本文將為大家介紹Android開發(fā)中常用的適配器(Adapter)概念,以及ListView和RecycleView的簡單使用方法,需要的朋友可以參考下
    2023-05-05
  • Android自定義對話框Dialog

    Android自定義對話框Dialog

    這篇文章主要為大家詳細介紹了Android自定義對話框Dialog的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Android 開發(fā)線程的分析

    Android 開發(fā)線程的分析

    這篇文章主要介紹了Android 開發(fā)線程的分析的相關(guān)資料,需要的朋友可以參考下
    2017-04-04

最新評論

昌乐县| 本溪市| 遂宁市| 中阳县| 新巴尔虎左旗| 北川| 新竹市| 江门市| 和林格尔县| 温州市| 柳河县| 依安县| 团风县| 新民市| 河源市| 棋牌| 临湘市| 大姚县| 余姚市| 来凤县| 特克斯县| 海阳市| 赣州市| 嘉祥县| 南江县| 稻城县| 松江区| 互助| 镇坪县| 台北县| 蒲江县| 福清市| 大余县| 南皮县| 张家界市| 明光市| 河曲县| 南雄市| 民勤县| 全州县| 秦皇岛市|