Flutter Hot Restart-怀疑它错误地填充了类实例

问题描述

我的应用分为两部分。它创建一个小部件树并填充一个有状态小部件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 看到了未填充的静态类实例,并使用默认构造函数将类塞在那里。

即使该类不是静态的,而是另一个类的成员,仍然存在相同的疾病。

我在这里记录了这种行为,这样其他人就不需要像我那样花太多的时间来理解问题了。