回答
你的Widget應該有一個setState()方法,每次調用這個方法時,都會重繪該Widget。
這種類型的使用情況,您有數據,孩子可以讀,但你不希望將數據明確地傳遞給所有孩子的構造函數的參數,通常要求一個InheritedWidget
。 Flutter會自動追蹤哪些小部件依賴於數據,並重建已更改的樹部分。有一個LocaleQuery
小部件用於處理區域設置更改,您可以看到它在Stocks example app中的使用方式。
簡單地說,這裏就是股票是這樣做的:
- 放在根小部件的回調(在這種情況下,
StocksApp
),用於處理現場的變化。此回調做了一些工作,然後返回LocaleQueryData
- 註冊此回調爲
onLocaleChanged
參數需要的語言環境信息使用LocaleQuery.of(context)
的MaterialApp
構造 - 子部件的定製實例。
- 當語言環境更改時,Flutter僅重繪對語言環境數據具有依賴關係的小部件。
如果你想跟蹤比語言環境的變化以外的東西,你可以讓自己的類,它擴展InheritedWidget
,並將其包含在您的應用程序的根附近的層次結構。它的父母應該是StatefulWidget
,其密鑰設置爲GlobalKey
,兒童可以訪問該密鑰。 StatefulWidget
的State
應擁有您想要分發的數據,並公開用於更改它的方法,即調用setState
。如果子窗口小部件想要更改State
的數據,他們可以使用全局鍵獲取指向State
(key.currentState
)的指針並調用它的方法。如果他們要讀取的數據,他們可以打電話給你的InheritedWidget
子類的靜態of(context)
方法,這將告訴撲,這些部件需要重建時,您的電話State
setState
。
嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚,嘗試一下。 – hackingspirit
這個例子仍然在股票的例子? –
什麼可能適用於您的用例是使用導航器重新加載頁面。我在我的應用程序中在「真實」和「演示」模式之間切換時執行此操作。這裏有一個例子:
Navigator.of(context).push(
new MaterialPageRoute(
builder: (BuildContext context){
return new SplashPage();
}
)
);
可以更換「新SplashPage()」在任何主要部件(或屏幕),你想重新加載上面的代碼。這個代碼可以在任何你有權訪問BuildContext的地方調用(這是UI中的大部分地方)。
- 1. 如何強制小部件重繪自己
- 2. 強制重繪WPF控件
- 3. RewriteEngine強制所有重寫?
- 4. Perl Curses :: UI窗口不會繪製所有小部件
- 5. 如何在更改某些小部件的屬性後強制重繪小部件?
- 6. 強制屏幕重繪
- 7. Android:強制MapView重繪
- 8. 強制形式重繪?
- 9. 強制重繪視圖
- 10. 如何強制TableRow重繪
- 11. 如何強制GWT小部件更新?
- 12. 強制Android小部件更新
- 13. 強制ConfigurationManager中重新加載所有部分
- 14. Flutter刪除所有路由
- 15. 通過位圖繪製小部件
- 16. 如何繪製子類DrawingArea小部件?
- 17. 在動作中強制更小的重繪區域
- 18. 所有者繪製組合框的垂直大小大於非所有者繪製組合框的大小
- 19. Winforms所有者繪製的控件和調整大小
- 20. 強制GAE更新部署中的所有文件
- 21. SL 4 - 強制重繪視覺樹
- 22. Flash Bug - 強制屏幕重繪
- 23. 如何在循環中強制重繪?
- 24. 強制重繪按鈕,點擊後
- 25. iPhone:強制UIButton重繪自己
- 26. 如何強制窗口重繪?
- 27. 刷新或強制重繪片段
- 28. 在JavaFx中強制重繪節點
- 29. 強制Richtextbox重繪其前景
- 30. 如何在JS中強制重繪?
你是說我應該替換頂級小部件(root)的狀態?如果我無法訪問該小部件,該怎麼辦?我想告訴Flutter本質上重啓。 – DogeLion
你想重新加載整個應用程序? –
我想迫使應用程序(包括視圖視圖棧深)重繪(如標題所說)。從我將觸發的地方,我無法訪問根部件。 – DogeLion