2017-06-01 43 views
5

是否可以通過類似通知/事件巴士的方式進行國際部件溝通?國際部件溝通

我需要能夠告訴一個小部件對另一個小部件發生的事情做出反應,並且不想創建硬鏈接。

通知偵聽器只會觸發,如果它在窗口小部件樹中高於兩個窗口小部件,所以這可能不是一個可行的解決方案。

+0

而你已經排除了從小部件本身分離業務邏輯(它操縱狀態)?天真地說,業務邏輯會更新全局狀態(la redux或類似),然後再通過小部件樹級聯? –

回答

5

根據您的使用情況,有很多方法可以做到這一點。

您可以讓它們爲AnimatedWidget s,通過ValueNotifierChangeNotifier作爲listenable。您可以在圖庫的animation example中看到此圖案。

您可以使用StreamBuilderStream發生新事件時自動重建您的小部件。在主Flutter回購中沒有很多這樣的例子,但是一旦你開始使用插件或者做網絡I/O,你可能需要這樣的例子。

您可以使用GlobalKey來獲得currentState並在另一個有一個State調用方法。這是小吃店的工作方式(example)。

您還可以擴展InheritedWidget爲小部件提供未作爲構造函數參數傳遞的信息,並且當信息發生變化時它們將自動標記爲重建。例如,Theme就是這樣工作的。

如果您可以提供更多關於您的小部件的功能/關係的詳細信息,或理想的代碼片段,我可以幫助您決定哪種方法最適合您的情況。