以编程方式完全重启(丢弃并重新创建)整个flutter应用程序

时间:2018-08-31 01:20:08

标签: flutter

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

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

我主要有两个问题。

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

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

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

0 个答案:

没有答案