回答
你的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. Flutter是否有「overscroll gesture recognizer」小部件?
- 2. 如何強制小部件重繪自己
- 3. 強制重繪WPF控件
- 4. 強制重繪層
- 5. 強制UIWebView重繪?
- 6. RewriteEngine強制所有重寫?
- 7. Perl Curses :: UI窗口不會繪製所有小部件
- 8. BoxLayout繪製角落中的所有小部件
- 9. 如何在更改某些小部件的屬性後強制重繪小部件?
- 10. 強制'rallychart'組件重繪容器大小
- 11. 強制JScrollPane和JPanel重繪
- 12. 如何強制TableRow重繪
- 13. WPF強制重繪畫布
- 14. 強制重繪視圖
- 15. 強制屏幕重繪
- 16. 如何強制重繪層
- 17. Android:強制MapView重繪
- 18. 強制形式重繪?
- 19. Flutter刪除所有路由
- 20. Qt:正確的方式來繪製一個小部件有效地繪製在父窗口小部件
- 21. 強制Android小部件更新
- 22. 如何強制GWT小部件更新?
- 23. 強制ConfigurationManager中重新加載所有部分
- 24. PyGame PGU更新/重繪小部件
- 25. 如何強制WebBrowser控件重新繪製並重繪網頁元素
- 26. 通過位圖繪製小部件
- 27. 如何繪製子類DrawingArea小部件?
- 28. 手動控制GTK小部件重繪打勾速率
- 29. 繪製自定義小部件後繪製
- 30. 在動作中強制更小的重繪區域
你是說我應該替換頂級小部件(root)的狀態?如果我無法訪問該小部件,該怎麼辦?我想告訴Flutter本質上重啓。 – DogeLion
你想重新加載整個應用程序? –
我想迫使應用程序(包括視圖視圖棧深)重繪(如標題所說)。從我將觸發的地方,我無法訪問根部件。 – DogeLion