将Bloc Provider移至单独类为何抛出ProviderNotFoundException?
问题描述
原本使用以下代码时运行正常:
MultiBlocProvider( providers: [ BlocProvider( create: (context) => CubitExample(), ), ], child: MaterialApp( home: Home(), ), );
由于需要管理大量Cubit/Bloc,我将providers列表移至单独类:
MultiBlocProvider( providers: BlocProviders.blocs(), child: MaterialApp( home: Home(), ), );
对应的类实现:
// The class class BlocProviders { static List<BlocProvider> blocs() { return <BlocProvider>[ BlocProvider( create: (context) => CubitExample(()), ), ]; } }
但此时抛出错误:
ProviderNotFoundException (Error: Could not find the correct Provider
above this BlocBuilder<ExampleCubit, ExampleState> Widget
错误原因分析
- 构造函数参数错误:对比前后代码,你在静态方法中给
CubitExample的构造函数多传了一个空闭包参数()。如果CubitExample原本的构造函数不需要参数,这会导致创建的实例不符合预期,甚至干扰Dart的类型推断,让BlocProvider无法正确识别要提供的Cubit类型。 - 泛型类型推断偏差:将providers移到静态方法后,你没有给
BlocProvider明确指定泛型类型(比如BlocProvider<CubitExample>)。Dart的类型推断在这种场景下可能出现偏差,导致MultiBlocProvider注册的Provider类型与BlocBuilder期望的ExampleCubit不匹配,最终触发找不到Provider的错误。
内容的提问来源于stack exchange,提问作者Gwhyyy
相关产品推荐
相关产品推荐

