-1

My app is in 2 parts. It creates a widget tree and populates a Stateful Widget Config.

I then pass this to phase 2 of my app as a static. (I tried various ways).

On a clean emulator it runs fine. When I run it again using Hot Restart my buildSitePath is passed a half-baked instance that did not go thru the proper constructors.

Thus where appCfg is a static Config appCfg that has been confirmed to be populated properly the log statement in the following will execute after the populating and yet it will be the half-baked instance that breaks the app. This happens on Hot Restart which supposedly restarts the app from the beginning.

  routes:<String,WidgetBuilder>{
          "/site":(BuildContext context) {assert(log("site: $appCfg"));
          return  buildSitePath(context,appCfg,title);}
        },

The solution was to not use a static and to use a onGenerateRoute and pass the actual instance as a parameter. Thus, this worked.

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;

I looked and found no understanding as to what Hot Restart is doing with classes that might explain this.

What am I missing? Thanks.

Steve Pritchard
  • 207
  • 3
  • 5

1 Answers1

0

As I said in my question my suspicion is that Flutter Hot Restart sees the static class instance that is not populated and jams the class in there using a default constructor.

Even if the class was not static but a member of another class the same ailment persisted.

I record this behavior here so that others need not waste as much time as I did to understand the problem.

Steve Pritchard
  • 207
  • 3
  • 5