除了屬性傳值,對於資料的跨層傳遞,flutter 還提供了三種方案:inheritedwidget,notification,eventbus。
inheritedwidget 是 flutter 中的乙個功能型 widget,適用於在 widget 樹中共享資料的場景。通過它,我們可以高效地將資料在 widget 樹中進行跨層傳遞。
theme 類是通過 inheritedwidget 實現的典型案例。
不過,inheritedwidget 僅提供了資料讀的能力,如果我們想要修改它的資料,則需要把它和 statefulwidget中的 state 配套使用。
class countcontainer extends inheritedwidget ): super(key: key, child: child);
...}
如果說 inheritedwidget 的資料流動方式是從父widget 到子 widget 逐層傳遞,那notification恰恰相反,資料流動方式是從子 widget 向上傳遞至父 widget。這樣的資料傳遞機制適用於子 widget 狀態變更,傳送通知上報的場景。class _myhomepagestate extends state);// 修改計數器
@override
widget build(buildcontext context)
}class counter extends statelesswidget ', // 關聯資料讀方法
),floatingactionbutton: floatingactionbutton(onpressed: state.increment), // 關聯資料修改方法
);}}
想要實現自定義通知,我們首先需要繼承 notification類,notification 類提供了 dispatch 方法,可以讓我們沿著 context 對應的 element 節點樹向上逐層傳送通知。然後使用 notificationlistener 在父 widget 監聽來自子 widget 的事件。
這種是無需發布者與訂閱者之間存在父子關係的資料同步機制。
eventbus 是乙個第三方外掛程式,因此我們需要在 pubspec.yaml 檔案中宣告它:
分別概括屬性傳值、inheritedwidget、notification 與 eventbus 的優缺點。專案優dependencies:
event_bus: 1.1.0
缺屬性傳值
使用簡單
跨越很多層傳遞給子元件繁瑣而且冗餘
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...