flutter - 以编程方式完全重启(丢弃并重新创建)整个颤振应用程序
问题描述
我的应用程序在生成(构建)不同的屏幕时使用服务器响应。我在 initState 得到服务器响应。
通过 setState 重建屏幕不会触发 initState。它只会通过 setState 输入更新状态并重新构建小部件。
应用程序中的某些操作需要完全重新启动应用程序(用于获取所有最新的服务器响应并重建 UI)。
重建整个应用程序
运行应用程序(新的我的应用程序());(或通过根屏幕的 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?这样所有的状态都可以重新初始化。
非常感谢您的阅读和任何帮助!
解决方案
推荐阅读
- excel - 在excel单元格中分隔多个字符串
- java - Java 和属性重载
- apache - 我无法将 htaccess 代码转换为 nginx conf 代码
- javascript - 如何从包含子字符串的对象数组中提取元素 - Javascript和Angular 5
- node.js - 在指定文件夹中以编程方式运行 npm install
- opengl - OpenGL 仅将 glMaterial 应用于一个对象
- node.js - Ruby 等价于 Node .toString('ascii')
- c# - 如何使用 C# 将 xls 或 xlsx 转换为 XML 电子表格 2003
- php - Laravel composer 停止下载包
- mysql - 在 WHERE ... IN? 中启用重复项