简体   繁体   English

BlocProvider.of() 使用不包含 Cubit 类型的上下文调用

[英]BlocProvider.of() called with a context that does not contain a Cubit of type

I'm sure there is something that I did wrong, but I cant seem to find what it is exactly.我确定我做错了什么,但我似乎无法找到它到底是什么。

I have the following register_screen.dart我有以下register_screen.dart

class RegisterScreen extends StatelessWidget {
  static Route route() {
    return MaterialWithModalsPageRoute<void>(builder: (context) => RegisterScreen());
  }

  @override
  Widget build(BuildContext context) {
    final textTheme = Theme.of(context).textTheme;
    final colorScheme = Theme.of(context).colorScheme;

    return MultiBlocProvider(
      providers: [
        BlocProvider<ValidationCubit>(
          create: (BuildContext context) => ValidationCubit(context.repository<AuthenticationRepository>()),
        ),
        BlocProvider<RegisterBloc>(
          create: (BuildContext context) => RegisterBloc(),
        )
      ],
      child: MultiBlocListener(
        listeners: [
          BlocListener<ValidationCubit, ValidationCubitState>(
            listener: (context, state) {
              switch (state.status) {
                case FormzStatus.submissionSuccess:
                  Navigator.of(context).push(CodeSubmit.route());
                  break;

                default:
                  break;
              }
            },
          ),
          BlocListener<RegisterBloc, RegisterState>(
            listener: (context, state) {

            },
          ),
        ],
        child: PhoneRegister(),
      ),
    );

  }
}

When the form get's submited from PhoneRegister() a FormzStatus.submissionSuccess get's emitted.当从 PhoneRegister() 提交表单时,会发出 FormzStatus.submissionSuccess 。 This is working perfectly.这是完美的工作。 Now when I get navigated to CodeSubmit.route(), I can't seem to use the ValidationCubit现在,当我导航到 CodeSubmit.route() 时,我似乎无法使用 ValidationCubit

code_submit.dart code_submit.dart

class CodeSubmit extends StatefulWidget {
  static Route route() {
    return MaterialPageRoute<void>(builder: (context) => CodeSubmit());
  }

  @override
  _CodeSubmitState createState() => _CodeSubmitState();
}

class _CodeSubmitState extends State<CodeSubmit> {
  @override
  Widget build(BuildContext context) {
    final ValidationCubit _signUpCubit = BlocProvider.of<ValidationCubit>(context);

    final textTheme = Theme.of(context).textTheme;
    final colorScheme = Theme.of(context).colorScheme;

    return Container();
  }
}

Why is BlocProvider.of(context) failing to fetch the ValidationCubit eventho it got passed using MultiBlocProvider?为什么 BlocProvider.of(context) 无法获取使用 MultiBlocProvider 传递的 ValidationCubit 事件?

Error I'm having:我遇到的错误:

══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following assertion was thrown building CodeSubmit(dirty, state: _CodeSubmitState#cc39e):
        BlocProvider.of() called with a context that does not contain a Cubit of type
ValidationCubit.
        No ancestor could be found starting from the context that was passed to
BlocProvider.of<ValidationCubit>().

        This can happen if the context you used comes from a widget above the BlocProvider.

        The context used was: CodeSubmit(dirty, state: _CodeSubmitState#cc39e)


The relevant error-causing widget was:
  CodeSubmit
  file:///home/lamba/Projects/Flutter/myapp/lib/screens/register/view/phone_register/code_submit.dart:15:58

When the exception was thrown, this was the stack:
#0      BlocProvider.of (package:flutter_bloc/src/bloc_provider.dart:113:7)
#1      _CodeSubmitState.build (package:myapp/screens/register/view/phone_register/code_submit.dart:25:55)
#2      StatefulElement.build (package:flutter/src/widgets/framework.dart:4663:28)
#3      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4546:15)
#4      StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4719:11)
#5      Element.rebuild (package:flutter/src/widgets/framework.dart:4262:5)
#6      StatefulElement.update (package:flutter/src/widgets/framework.dart:4751:5)
#7      Element.updateChild (package:flutter/src/widgets/framework.dart:3245:15)
#8      SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5881:14)
#9      Element.updateChild (package:flutter/src/widgets/framework.dart:3245:15)
#10     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4571:16)
#11     Element.rebuild (package:flutter/src/widgets/framework.dart:4262:5)
#12     StatelessElement.update (package:flutter/src/widgets/framework.dart:4627:5)
#13     Element.updateChild (package:flutter/src/widgets/framework.dart:3245:15)
#14     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5881:14)
#15     Element.updateChild (package:flutter/src/widgets/framework.dart:3245:15)
#16     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5881:14)
#17     Element.updateChild (package:flutter/src/widgets/framework.dart:3245:15)
#18     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4571:16)
#19     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4719:11)
#20     Element.rebuild (package:flutter/src/widgets/framework.dart:4262:5)
#21     StatefulElement.update (package:flutter/src/widgets/framework.dart:4751:5)
#22     Element.updateChild (package:flutter/src/widgets/framework.dart:3245:15)
#23     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5881:14)
#24     Element.updateChild (package:flutter/src/widgets/framework.dart:3245:15)
#25     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5881:14)
#26     Element.updateChild (package:flutter/src/widgets/framework.dart:3245:15)
#27     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4571:16)
#28     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4719:11)
#29     Element.rebuild (package:flutter/src/widgets/framework.dart:4262:5)
#30     StatefulElement.update (package:flutter/src/widgets/framework.dart:4751:5)
#31     Element.updateChild (package:flutter/src/widgets/framework.dart:3245:15)
#32     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4571:16)
#33     Element.rebuild (package:flutter/src/widgets/framework.dart:4262:5)
#34     StatelessElement.update (package:flutter/src/widgets/framework.dart:4627:5)
#35     Element.updateChild (package:flutter/src/widgets/framework.dart:3245:15)
#36     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4571:16)
#37     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4719:11)
#38     Element.rebuild (package:flutter/src/widgets/framework.dart:4262:5)
#39     StatefulElement.update (package:flutter/src/widgets/framework.dart:4751:5)
#40     Element.updateChild (package:flutter/src/widgets/framework.dart:3245:15)
#41     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5881:14)
#42     Element.updateChild (package:flutter/src/widgets/framework.dart:3245:15)
#43     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4571:16)
#44     Element.rebuild (package:flutter/src/widgets/framework.dart:4262:5)
#45     ProxyElement.update (package:flutter/src/widgets/framework.dart:4906:5)
#46     _InheritedNotifierElement.update (package:flutter/src/widgets/inherited_notifier.dart:183:11)
#47     Element.updateChild (package:flutter/src/widgets/framework.dart:3245:15)
#48     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5881:14)
#49     Element.updateChild (package:flutter/src/widgets/framework.dart:3245:15)
#50     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4571:16)
#51     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4719:11)
#52     Element.rebuild (package:flutter/src/widgets/framework.dart:4262:5)
#53     StatefulElement.update (package:flutter/src/widgets/framework.dart:4751:5)
#54     Element.updateChild (package:flutter/src/widgets/framework.dart:3245:15)
#55     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4571:16)
#56     Element.rebuild (package:flutter/src/widgets/framework.dart:4262:5)
#57     ProxyElement.update (package:flutter/src/widgets/framework.dart:4906:5)
#58     Element.updateChild (package:flutter/src/widgets/framework.dart:3245:15)
#59     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4571:16)
#60     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4719:11)
#61     Element.rebuild (package:flutter/src/widgets/framework.dart:4262:5)
#62     StatefulElement.update (package:flutter/src/widgets/framework.dart:4751:5)
#63     Element.updateChild (package:flutter/src/widgets/framework.dart:3245:15)
#64     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4571:16)
#65     Element.rebuild (package:flutter/src/widgets/framework.dart:4262:5)
#66     StatelessElement.update (package:flutter/src/widgets/framework.dart:4627:5)
#67     Element.updateChild (package:flutter/src/widgets/framework.dart:3245:15)
#68     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5881:14)
#69     Element.updateChild (package:flutter/src/widgets/framework.dart:3245:15)
#70     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4571:16)
#71     Element.rebuild (package:flutter/src/widgets/framework.dart:4262:5)
#72     ProxyElement.update (package:flutter/src/widgets/framework.dart:4906:5)
#73     Element.updateChild (package:flutter/src/widgets/framework.dart:3245:15)
#74     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4571:16)
#75     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4719:11)
#76     Element.rebuild (package:flutter/src/widgets/framework.dart:4262:5)
#77     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2667:33)
#78     WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:866:20)
#79     RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:286:5)
#80     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1117:15)
#81     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1056:9)
#82     SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:865:7)
(elided 4 frames from class _RawReceivePortImpl, class _Timer, and dart:async-patch)

You need to wrap your new page with a BlocProvider to be able to use the bloc on your new route.您需要使用 BlocProvider 包装您的新页面,以便能够在您的新路线上使用该集团。

Navigator.of(context).push(
  MaterialPageRoute(
    builder: (_) => BlocProvider.value(
      value: BlocProvider.of<ValidationCubit>(context),
      child: CodeSubmit(),
    ),
  ),
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 BlocProvider.of() 使用不包含 CounterBloc 类型的 Cubit 的上下文调用 - BlocProvider.of() called with a context that does not contain a Cubit of type CounterBloc BlocProvider.of() 调用的上下文不包含 WeatherBloc 类型的 Bloc/Cubit - BlocProvider.of() called with a context that does not contain a Bloc/Cubit of type WeatherBloc BlocProvider.of() 调用的上下文不包含 MyBloc 类型的 Bloc/Cubit - BlocProvider.of() called with a context that does not contain a Bloc/Cubit of type MyBloc Flutter Bloc Cubit Navigator Problem BlocProvider.of() 调用的上下文不包含 CityCubit 类型的 Bloc/Cubit - Flutter Bloc Cubit Navigator Problem BlocProvider.of() called with a context that does not contain a Bloc/Cubit of type CityCubit BlocProvider.of() 使用不包含 OfflineBloc 类型的 Bloc 的上下文调用 - BlocProvider.of() called with a context that does not contain a Bloc of type OfflineBloc Flutter:使用不包含 Bloc 类型的上下文调用 blocprovider.of() - Flutter: blocprovider.of() called with a context that does not contain a Bloc of type 使用不包含 Bloc 类型的上下文调用 BlocProvider.of() - BlocProvider.of() called with a context that does not contain a Bloc of type BlocProvider.of() 使用不包含 TrackingBloc 类型的 Bloc 的上下文调用 - BlocProvider.of() called with a context that does not contain a Bloc of type TrackingBloc 使用不包含 FicheMvtBloc 类型的 Bloc 的上下文调用 BlocProvider.of() - BlocProvider.of() called with a context that does not contain a Bloc of type FicheMvtBloc 使用不包含 RegisterCubit 的上下文调用 BlocProvider.of() - BlocProvider.of() called with a context that does not contain a RegisterCubit
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM