首页 > 解决方案 > 以编程方式完全重启(丢弃并重新创建)整个颤振应用程序

问题描述

我的应用程序在生成(构建)不同的屏幕时使用服务器响应。我在 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....
});

当我想重置整个应用程序时,对于每个打开的屏幕。

我主要有两个问题。

  1. 如果我想保留打开的屏幕及其状态。我可以知道是否可以做类似flutter markneedsbuild之类的事情?我不想只触发构建,而是想在再次访问屏幕时同时触发 initState 和构建。它是否违反了颤振设计/流程?

  2. 如果事情不能这样工作,我认为一个简单的方法应该是丢弃所有以前的屏幕和状态。一切重新开始。有什么方法可以丢弃旧的 MyApp 并重新创建一个新的 MyApp?这样所有的状态都可以重新初始化。

非常感谢您的阅读和任何帮助!

标签: flutter

解决方案


推荐阅读