【问题标题】:Flutter Hot Restart - suspect it populates class instances incorrectlyFlutter Hot Restart - 怀疑它错误地填充了类实例
【发布时间】: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


    【解决方案1】:

    正如我在问题中所说,我怀疑 Flutter Hot Restart 看到了未填充的静态类实例,并使用默认构造函数将类阻塞在其中。

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

    我在此处记录此行为,以便其他人不必像我一样浪费时间来理解问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-11
      • 2015-08-06
      • 2020-12-06
      • 2013-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多