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

Posted

技术标签:

【中文标题】Flutter:在没有上下文的情况下从 InheritedWidgets 访问数据?【英文标题】:Flutter: Access data from InheritedWidgets without context? 【发布时间】:2018-10-02 17:31:18 【问题描述】:

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

【问题讨论】:

【参考方案1】:

根据本文档,context 应该可以在 initState 中使用 context getter。

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

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

【讨论】:

是的,我就是这个意思。我想我自己在某个地方使用过这个,但我不确定。 didChangeDependencies() 是更好的地方,因为它在 initState() 之后调用,您将在那里获得上下文。 我认为你是对的。 didChangeDependencies 可以多次调用。【参考方案2】:

我发现对我有用的是获取父上下文并在 initState 之后调用的 didChangeDependencies() 函数中使用它。像这样

@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。

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

【讨论】:

以上是关于Flutter:在没有上下文的情况下从 InheritedWidgets 访问数据?的主要内容,如果未能解决你的问题,请参考以下文章

Flutter - 如何在没有互联网的情况下从坐标获取国家?

Flutter-如何在没有 RxDart 的情况下从 Stream<String> 获取最后一个值?

Flutter 如何在没有任何第三方库的情况下从 url 下载文件

为 Web API 实施 Azure AD 身份验证,可以在有和没有用户上下文的情况下从多个客户端调用?

在上下文不工作的情况下从 AsyncTask onPostExecute 调用 Android Intent

有没有办法在不使用画布 API 的情况下从图像文件中获取二进制数据?