如何使用 flutter HookWidget 访问 didChangeAppLifecycleState 生命周期钩子中的 Context?

Fre*_*nga 2 flutter flutter-dependencies flutter-layout

我正在尝试访问上下文,以便可以读取我的提供程序,但由于此生命周期挂钩位于小部件树之外。它无法访问。有没有办法访问上下文?

Geo*_*lex 5

我做了一些研究,最后与 flutter bloc 社区的 narcodico 进行了讨论,所以学分归他所有。

因此,WidgetsBindingObserver在状态类上混合,context即使在覆盖中也可用,didChangeAppLifecycleState因为它们是状态类的一部分。

另外,请考虑移至状态小部件上方的 BlocProvider。

例子

class HomePageProvider extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return BlocProvider(
      create: (context) => getIt<InAppPurchasesBloc>(),
      child: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _HomePageState();
  }
}

class _HomePageState extends State<HomePage> with WidgetsBindingObserver {
...
  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    if (state == AppLifecycleState.resumed) {
      context
          .read<InAppPurchasesBloc>()
          .add(const InAppPurchasesEvent.getPurchaserInfo());
    }
  }
...
}
Run Code Online (Sandbox Code Playgroud)