build()
メソッド内で次のようにAliExpressWidgetsにアクセスできることがわかります:final inheritedWidget = ChronoApp.of(context);
しかし、別の場所、たとえばinitState()
にアクセスしたい場合はどうすればよいですか。環境。どうすればよいですか?
私がうまくいくことがわかったのは、親コンテキストを取得し、それを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を呼び出しても安全です。
私はまだこの機能を完全に理解しようとしていますが、これは私のために働いたものです
このドキュメントによると、context
はinitState
ゲッターを使用してcontext
で利用できるはずです。
https://docs.flutter.io/flutter/widgets/State/context.html
フレームワークは、StatefulWidget.createStateでオブジェクトを作成した後、initStateを呼び出す前に、StateオブジェクトをBuildContextに関連付けます。