【发布时间】:2020-10-18 23:41:04
【问题描述】:
我的应用分为两部分。它创建一个小部件树并填充一个有状态的小部件Config。
然后我将它作为静态传递给我的应用程序的第 2 阶段。 (我尝试了各种方法)。
在干净的模拟器上运行良好。当我使用 Hot Restart 再次运行它时,我的 buildSitePath 传递了一个未通过正确构造函数的半生不熟的实例。
因此appCfg 是一个静态Config appCfg
已确认已正确填充以下日志语句将在之后执行
填充,但它将是破坏应用程序的半生不熟的实例。这发生在 Hot Restart 上,它应该从头开始重新启动应用程序。
routes:<String,WidgetBuilder>{
"/site":(BuildContext context) {assert(log("site: $appCfg"));
return buildSitePath(context,appCfg,title);}
},
解决方案是不使用静态并使用 onGenerateRoute 并将实际实例作为参数传递。因此,这行得通。
onGenerateRoute: (settings) {
log("onGenerateRoute ${settings.name}");
if (settings.name == "/site") {
Config appCfg = settings.arguments;
log("onGenerateRoute $appCfg");
if (isMaterial(contextA)) {
return MaterialPageRoute(builder: (context) => buildSitePath(contextA, appCfg, title));
} else {
return CupertinoPageRoute(builder: (context) => buildSitePath(contextA, appCfg, title));
}
}
return null;
我查看并发现不了解 Hot Restart 对可能解释这一点的类做了什么。
我错过了什么?谢谢。
【问题讨论】:
标签: class flutter instance restart