InheritedWidget with Scaffold as child doesn't seem to be working
Solution 1:
MyInherited.of(context)
will basically look into the parent of the current context to see if there's a MyInherited
instantiated.
The problem is : Your inherited widget is instantiated within the current context.
=> No MyInherited
as parent
=> crash
The trick is to use a different context.
There are many solutions there. You could instantiate MyInherited
in another widget, so that the context
of your build method will have a MyInherited
as parent.
Or you could potentially use a Builder
to introduce a fake widget that will pass you it's context.
Example of builder :
return new MyInheritedWidget(
child: new Builder(
builder: (context) => new Scaffold(),
),
);
Another problem, for the same reasons, is that if you insert an inheritedWidget inside a route, it will not be available outside of this route.
The solution is simple here !
Put your MyInheritedWidget
above MaterialApp
.
above material :
new MyInherited(
child: new MaterialApp(
// ...
),
)
Solution 2:
Is it therefore not possible to use a Scaffold or a MaterialApp as the child of an InheritedWidget?
It is very possible to do this. I was struggling with this earlier and posted some details and sample code here.
You might want to make your App-level InheritedWidget the parent of the MaterialApp rather than the Scaffold widget.
I think this has more to do with how you are setting up your MaterialWidget, but I can't quite tell from the code snippets you have provided.
If you can add some more context, I will see if I can provide more.