是否可以通過類似通知/事件巴士的方式進行國際部件溝通?國際部件溝通
我需要能夠告訴一個小部件對另一個小部件發生的事情做出反應,並且不想創建硬鏈接。
通知偵聽器只會觸發,如果它在窗口小部件樹中高於兩個窗口小部件,所以這可能不是一個可行的解決方案。
是否可以通過類似通知/事件巴士的方式進行國際部件溝通?國際部件溝通
我需要能夠告訴一個小部件對另一個小部件發生的事情做出反應,並且不想創建硬鏈接。
通知偵聽器只會觸發,如果它在窗口小部件樹中高於兩個窗口小部件,所以這可能不是一個可行的解決方案。
根據您的使用情況,有很多方法可以做到這一點。
您可以讓它們爲AnimatedWidget
s,通過ValueNotifier
或ChangeNotifier
作爲listenable
。您可以在圖庫的animation example中看到此圖案。
您可以使用StreamBuilder
在Stream
發生新事件時自動重建您的小部件。在主Flutter回購中沒有很多這樣的例子,但是一旦你開始使用插件或者做網絡I/O,你可能需要這樣的例子。
您可以使用GlobalKey
來獲得currentState
並在另一個有一個State
調用方法。這是小吃店的工作方式(example)。
您還可以擴展InheritedWidget
爲小部件提供未作爲構造函數參數傳遞的信息,並且當信息發生變化時它們將自動標記爲重建。例如,Theme
就是這樣工作的。
如果您可以提供更多關於您的小部件的功能/關係的詳細信息,或理想的代碼片段,我可以幫助您決定哪種方法最適合您的情況。
而你已經排除了從小部件本身分離業務邏輯(它操縱狀態)?天真地說,業務邏輯會更新全局狀態(la redux或類似),然後再通過小部件樹級聯? –