除了屬性傳值,對於資料的跨層傳遞,flutter 還提供了三種方案:inheritedwidget,notification,eventbus。
inheritedwidget 是 flutter 中的乙個功能型 widget,適用於在 widget 樹中共享資料的場景。通過它,我們可以高效地將資料在 widget 樹中進行跨層傳遞。
theme 類是通過 inheritedwidget 實現的典型案例。
不過,inheritedwidget 僅提供了資料讀的能力,如果我們想要修改它的資料,則需要把它和 statefulwidget中的 state 配套使用。
class countcontainer extends inheritedwidget ): super(key: key, child: child);
...}
class _myhomepagestate extends state);// 修改計數器
@override
widget build(buildcontext context)
}class counter extends statelesswidget ', // 關聯資料讀方法
),floatingactionbutton: floatingactionbutton(onpressed: state.increment), // 關聯資料修改方法
);}}
如果說 inheritedwidget 的資料流動方式是從父widget 到子 widget 逐層傳遞,那notification恰恰相反,資料流動方式是從子 widget 向上傳遞至父 widget。這樣的資料傳遞機制適用於子 widget 狀態變更,傳送通知上報的場景。
想要實現自定義通知,我們首先需要繼承 notification類,notification 類提供了 dispatch 方法,可以讓我們沿著 context 對應的 element 節點樹向上逐層傳送通知。然後使用 notificationlistener 在父 widget 監聽來自子 widget 的事件。
這種是無需發布者與訂閱者之間存在父子關係的資料同步機制。
eventbus 是乙個第三方外掛程式,因此我們需要在 pubspec.yaml 檔案中宣告它:
dependencies:
event_bus: 1.1.0
分別概括屬性傳值、inheritedwidget、notification 與 eventbus 的優缺點。專案優
缺屬性傳值
使用簡單
跨越很多層傳遞給子元件繁瑣而且冗餘
inheritedwidget
跨多個父子節點方便
修改資料麻煩,傳值方向的單一,從上往下
notification
向上傳遞事件方便
監聽通知讀取麻煩,傳值方向的單一,從下往上
eventbus
訂閱、發布。全域性使用,無需元件間存在父子關係
要訂閱和解訂閱,效率不高
Flutter 事件傳遞
fluter 事件傳遞 android中可以使用eventbus來進行元件之間的事件傳遞。flutter typedef void eventcallback arg class eventbus emap eventname new list emap eventname add f 移除訂閱者 ...
Flutter元件大全
opacity 如果你想讓乙個微件在螢幕中不可見,且原來的頁面布局保持不變?那就請試一試我們的opacity微件吧!你只要設定乙個透明度的數值,它就能讓你的子褪色以便匹配。你也可以用它來混合不同子部件,或是用animatedopacity來建立動畫。opacity opacity 0.0,child...
跨頁資料傳遞
目前postbackurl屬性的控制項只有botton linkbotton imagebotton三種,所以要實現跨頁傳遞,一定要使用這三種按鈕才行。這裡我們使用botton控制項,並設定其postbackurl的屬性為target.aspx。源頁面上處理 if page.iscrosspagep...