Jus10
Jus10

Reputation: 15699

Flutter: Access data from InheritedWidgets without context?

I see that I can access InheritedWidgets inside the build() method like this: final inheritedWidget = ChronoApp.of(context); but what if I want to access it somewhere else, say in initState() which has no context. How would I do this?

Upvotes: 8

Views: 8085

Answers (2)

Sebastian
Sebastian

Reputation: 3894

What I found to work for me is getting the parent context and using it in the didChangeDependencies() function that is called after initState. Like this

@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();
  }

From de didChangeDependencies() docs:

This method is also called immediately after initState. It is safe to call BuildContext.inheritFromWidgetOfExactType from this method.

I'm still trying to fully understand this feature but this is what worked for me

Upvotes: 9

Günter Zöchbauer
Günter Zöchbauer

Reputation: 658077

According to this docs context should be available in initState using the context getter.

https://docs.flutter.io/flutter/widgets/State/context.html

The framework associates State objects with a BuildContext after creating them with StatefulWidget.createState and before calling initState.

Upvotes: 5

Related Questions