我的应用在生成(构建)不同的屏幕时使用服务器响应。我在initState收到服务器响应。
通过setState重新构建屏幕不会触发initState。它将仅通过setState输入来更新状态并重新构建窗口小部件。
应用程序中的某些操作需要完全重新启动应用程序(以获取所有最新的服务器响应并重建UI)。
通过以下方式重建整个应用程序
runApp(new MyApp()); (或通过根屏幕的setState重建所有屏幕) 可以刷新UI小部件。 但是,它无法刷新保存服务器响应的所有屏幕状态。
例如
// MyState
String serverResponse;
@override
void initState() {
super.initState();
serverResponse = await http.get(url....
}
@override
Widget build(BuildContext context) {
return new Text(serverResponse);
}
应用程序用户可以同时打开许多类似的屏幕。 当他们更改状态时,它将全局影响所有屏幕。 我不能
setState(() {
serverResponse = await http.get(url....
});
当我想重置整个应用程序时,对于每个打开的屏幕。
我主要有两个问题。
如果我想保留打开的屏幕及其状态。 我是否可以做类似flutter markneedsbuild的事情? 除了只触发构建,我还想在再次访问屏幕时触发initState和构建。它是否违反了抖动设计/流程?
如果事情不能像这样,我认为一种简单的方法应该丢弃所有先前的屏幕和状态。一切都重新开始。 有什么方法可以丢弃旧的MyApp并重新创建新的MyApp? 这样所有状态都可以再次初始化。
非常感谢您的阅读和帮助!