Gwh*_*yyy 3 dart flutter bloc flutter-provider flutter-bloc
我有这个代码:
MultiBlocProvider(
providers: [
BlocProvider(
create: (context) => CubitExample(),
),
],
child: MaterialApp(
home: Home(),
),
);
Run Code Online (Sandbox Code Playgroud)
它工作正常,我有很多肘节/块,所以我决定将提供者列表移动到一个单独的类:
MultiBlocProvider(
providers: BlocProviders.blocs(),
child: MaterialApp(
home: Home(),
),
);
Run Code Online (Sandbox Code Playgroud)
// The class
class BlocProviders {
static List<BlocProvider> blocs() {
return <BlocProvider>[
BlocProvider(
create: (context) => CubitExample(()),
),
];
}
}
Run Code Online (Sandbox Code Playgroud)
现在抛出通常的块错误:
ProviderNotFoundException (Error: Could not find the correct Provider<ExampleCubit> above this BlocBuilder<ExampleCubit, ExampleState> Widget
Run Code Online (Sandbox Code Playgroud)
我不知道为什么当我尝试第二个代码时会抛出错误,为什么会抛出错误?
小智 6
我想我已经获得了一些见解
每当我们用 包装一个小部件时MultiBlocProvider,我们都会用一个子小部件给出其中的提供者列表。
所以我研究了它的实现,发现它接受BlocProviderSingleChildWidgetMultiBlocProvider类型的 List ,并且它是定义的 mixin ,这意味着我们不能使用 List。SingleChildWidget
现在,在您的情况下,您定义了这样的小部件类:
MultiBlocProvider(
providers: BlocProviders.blocs(),
child: MaterialApp(
home: Home(),
),
);
Run Code Online (Sandbox Code Playgroud)
和你的集团类是这样的:
class BlocProviders {
static List<BlocProvider> blocs() {
return <BlocProvider>[
BlocProvider(
create: (context) => CubitExample(()),
),
];
}
}
Run Code Online (Sandbox Code Playgroud)
在此您创建了类型为 的列表List<BlocProvider>,它不是BlocProviderSingleChildWidget. 因此它向您展示了您正在谈论的错误。
一个人通过使用该getter方法而不是静态函数回答了这个问题,并且它正在工作,因为他没有为列表提供任何类型(它是动态的),因此错误消失了。
现在,如果您想像您提到的那样使用您的类和函数,您几乎可以通过给它动态类型来使用它,如下所示:
class BlocProviders {
static blocs() {
return [
BlocProvider(
create: (context) => CubitExample(),
),
];
}
}
Run Code Online (Sandbox Code Playgroud)
希望它能解决您所有与之相关的问题和疑问。此外,如果您想了解它,您可以查看 的实现MultiBlocProvider。
| 归档时间: |
|
| 查看次数: |
456 次 |
| 最近记录: |