Флаттер: доступ к данным из 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.

Другие вопросы по тегам