web-dev-qa-db-ja.com

Flutter:コンテキストなしでAliExpressウィジェットからデータにアクセスしますか?

build()メソッド内で次のようにAliExpressWidgetsにアクセスできることがわかります:final inheritedWidget = ChronoApp.of(context);しかし、別の場所、たとえばinitState()にアクセスしたい場合はどうすればよいですか。環境。どうすればよいですか?

7
Jus10

私がうまくいくことがわかったのは、親コンテキストを取得し、それを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を呼び出しても安全です。

私はまだこの機能を完全に理解しようとしていますが、これは私のために働いたものです

6
Sebastian

このドキュメントによると、contextinitStateゲッターを使用してcontextで利用できるはずです。

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

フレームワークは、StatefulWidget.createStateでオブジェクトを作成した後、initStateを呼び出す前に、StateオブジェクトをBuildContextに関連付けます。

5