【问题标题】:flutter_bloc could not find the correct providerflutter_bloc 找不到正确的提供程序
【发布时间】:2021-03-23 10:47:35
【问题描述】:

我有一个从 API 获取数据的 Cubit。我想将它连接到 UI,所以我首先在那个小部件的顶部添加了一个 BlocProvider。这给了我一个错误,所以我用 BlocProvider 包装了MaterialApp,它给出了同样的错误。之后,我尝试在我想要访问它的路线周围使用它,结果相同。

MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: getThemeData(),
      onGenerateRoute: _router.generateRoutes,
      initialRoute: _store.get('users', defaultValue: {}).isEmpty
          ? '/onboarding'
          : '/dashboard',
);

routes.dart

final PANCubit _panCubit = PANCubit(PANRepository());
  Route<dynamic> generateRoutes(RouteSettings settings) {
    switch (settings.name) {
      // case '/':
      //   return MaterialPageRoute(builder: (context) => Home());
      case '/':
      case '/onboarding':
        return MaterialPageRoute(
          builder: (context) => BlocProvider.value(
            value: _panCubit,
            child: OnBoarding(),
          ),
        );
...

我想在这里的 UI 中访问它:

OnBoardingView(
  imagePath: process_svg,
  titleWidget: BlocBuilder(
    builder: (context, state) {
      context.read<PANCubit>().getPANInformation(_panText.text);

      if (state is PANLoading) {
        return CircularProgressIndicator();
      } else if (state is PANFetched) {
        return Text(
          'Hey ${state.panInformation.fullName}!',
          style: Theme.of(context).textTheme.headline1,
        );
      } else {
        return Text('Hmmm..Something went wrong.');
      }
    },
  ),
...

【问题讨论】:

  • 你得到了什么确切的错误?

标签: flutter bloc flutter-bloc


【解决方案1】:

您需要在BlocBuilder 中明确您要访问哪个区块:

titleWidget: BlocBuilder<PANCubit, PANState>( // Replace PANState by the type of state
    builder: (context, state) {
      state.getPANInformation(_panText.text);

      if (state is PANLoading) {
        return CircularProgressIndicator();
      } else if (state is PANFetched) {
        return Text(
          'Hey ${state.panInformation.fullName}!',
          style: Theme.of(context).textTheme.headline1,
        );
      } else {
        return Text('Hmmm..Something went wrong.');
      }
    },
  ),

【讨论】:

    猜你喜欢
    • 2021-12-15
    • 2021-01-06
    • 2019-12-05
    • 2020-12-01
    • 2021-11-19
    • 2019-12-23
    • 2021-02-19
    相关资源
    最近更新 更多