问题描述
我的应用分为两部分。它创建一个小部件树并填充一个有状态小部件Config
。
然后将其作为静态传递给我的应用程序的第二阶段。 (我尝试了各种方法)。
在干净的模拟器上,它运行正常。当我使用 Hot Restart 重新运行它时,我的 buildSitePath 传递了一个半熟的实例,该实例没有通过适当的构造函数。
因此,appCfg
是静态的Config appCfg
已确认正确填充的日志语句将在之后执行
填充,但这将是破坏应用程序的半熟实例。这种情况发生在热重启上,据说应该从头开始重启应用。
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,title));
} else {
return CupertinopageRoute(builder: (context) => buildSitePath(contextA,title));
}
}
return null;
我看了看,发现对热重启正在使用可能解释这一问题的类不了解。
我想念什么?谢谢。
解决方法
正如我在问题中所说的,我怀疑是 Flutter Hot Restart 看到了未填充的静态类实例,并使用默认构造函数将类塞在那里。
即使该类不是静态的,而是另一个类的成员,仍然存在相同的疾病。
我在这里记录了这种行为,这样其他人就不需要像我那样花太多的时间来理解问题了。