Flutter:在没有上下文的情况下从InheritedWidgets访问数据吗?

Jus*_*s10 6 dart flutter inherited-widget

我看到我可以build()像这样在方法内部访问InheritedWidgets :final inheritedWidget = ChronoApp.of(context);但是如果我想在其他地方访问它(例如在initState()没有上下文的情况下)怎么办。我该怎么做?

Gün*_*uer 5

根据此文档contextinitState使用contextgetter时应该可用。

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

在使用StatefulWidget.createState创建状态对象之后,在调用initState之前,框架将State对象与BuildContext关联。

  • 我想你是对的。不过,可以多次调用`didChangeDependencies`。 (3认同)

Seb*_*ian 5

我发现对我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();
  }
Run Code Online (Sandbox Code Playgroud)

来自de didChangeDependencies()文档:

在initState之后也立即调用此方法。从此方法调用BuildContext.inheritFromWidgetOfExactType是安全的。

我仍在尝试完全了解此功能,但这对我有用