So I have an InheritedWidget which holds a token.
class TokenHolder extends InheritedWidget {
final String token;
const TokenHolder({@required this.token, @required Widget child})
: assert(child != null),
super(child: child);
@override
bool updateShouldNotify(TokenHolder oldWidget) => oldWidget.token != token;
static TokenHolder of(BuildContext context) {
return context.dependOnInheritedWidgetOfExactType<TokenHolder>();
}
}
Then somewhere high up in my app, I have used it to display MyScreen
...
builder: (context) {
...
return TokenHolder(
token: token,
child: MyScreen(),
);
}
MyScreen
works as expected. It can get the TokenHolder´s token correctly.
class MyScreen extends StatefulWidget {
@override
_MYyScreenState createState() => _MYyScreenState ();
}
class _MYyScreenState extends State<MyScreen > {
@override
Widget build(BuildContext context) {
String token = TokenHolder.of(context).token; // This works
return RaisedButton(
onPressed: () {
Navigator.push(context, builder: (context) => PushedScreen());
},
child: Text(token) // This works
);
}
}
However, PushedScreen
seems to return null
when we call TokenHolder.of(context)
. Why is this? Why cannot the TokenHolder be found?
class PushedScreen extends StatefulWidget {
@override
_PushedScreenState createState() => _PushedScreenState ();
}
class _PushedScreenState extends State<PushedScreen > {
@override
Widget build(BuildContext context) {
String token = TokenHolder.of(context).token; // DOES NOT WORK -> null.token
return Text(token);
}
}