Флаттер: доступ к данным из InheritedWidgets без контекста?
Я вижу, что могу получить доступ к InheritedWidgets внутри build()
метод как это: final inheritedWidget = ChronoApp.of(context);
но что если я захочу получить к нему доступ где-то еще, скажем, в initState()
который не имеет контекста. Как бы я это сделал?
2 ответа
То, что я нашел работать для меня, это получить родительский контекст и использовать его в didChangeDependencies()
функция, которая вызывается после initState. Как это
@override
// TODO: implement context
BuildContext get context => super.context;
@override
void didChangeDependencies() {
bloc = LoginBlocProvider.of(context);
bloc.isAuthenticated.listen((bool value) {
setState(() {
isLoading = false;
});
if (value) {
Navigator.push(context, MaterialPageRoute(
builder: (BuildContext context) => HomeScreen()
));
}
});
super.didChangeDependencies();
}
Из документов de didChangeDependencies():
Этот метод также вызывается сразу после initState. Безопасно вызывать BuildContext.inheritFromWidgetOfExactType из этого метода.
Я все еще пытаюсь полностью понять эту функцию, но это то, что мне помогло
Согласно этой документации context
должен быть доступен в initState
с использованием context
добытчик.
https://docs.flutter.io/flutter/widgets/State/context.html
Каркас связывает объекты состояния с BuildContext после их создания с помощью StatefulWidget.createState и перед вызовом initState.