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

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

【问题讨论】:

    标签: dart flutter inherited-widget


    【解决方案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。

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

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 2012-07-01
      • 2011-07-31
      • 1970-01-01
      • 2013-06-19
      • 2021-03-20
      • 2013-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多