回答
你的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