微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 看到了未填充的静态类实例,并使用默认构造函数将类塞在那里。

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。