8

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

4

2 回答 2

9

我发现对我有用的是获取父上下文并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 是安全的。

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

于 2018-07-29T21:16:50.483 回答
5

根据this docscontext应该可以initState使用contextgetter。

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

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

于 2018-04-22T16:21:01.527 回答