我应该在哪里初始化flatter_bloc中的bloc



我正在使用Flutter_bloc包来处理Flutter中的bloc模式,但我想知道在主函数中使用MultiBlocProvider并像这样添加我的所有bloc是否是一个好的做法:

void main()async{
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(Mafqood());
}
class Mafqood extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiBlocProvider(
providers : [
BlocProvider<AuthBloc>(
create:  (context) => AuthBloc(AuthInitialState(), AuthRepository()),
),
BlocProvider<LoginBloc>(
create: (context) => LoginBloc(LoginInitialState(), AuthRepository()),
),
BlocProvider<ProfileBloc>(
create:  (context) => ProfileBloc(ProfileInitialState(), AuthRepository()),
),
],
child: MaterialApp(

还是最好在我需要的地方加入这个集团?为什么?提前谢谢。

您应该像以前一样在主函数中使用MultiBlocProvider。这是最好的做法。这就是供应商的目标。

编辑:

现在我意识到这里还有另一个答案。

MultiBlocProvider的主要用途是在您必须定义哪个区块依赖于另一个区块之前,在应用程序中的不同位置使用区块对象。

如果你有一个应用程序,每个屏幕都使用自己的区块,那么你就不需要MultiBlocProvider,因为你可以在屏幕的构建功能中创建区块

class ParentScreen extends StatelessWidget {
const ParentScreen ({Key? key, this.data}) : super(key: key);
final data;
@override
Widget build(BuildContext context) {
return BlocProvider<MyBloc>(
create: (_) => MyBloc()),
child: MyScreenBody());
}
}
Class MyScreenBody extends StatefulWidget {
const MyScreenBody({Key? key}) : super(key: key);
@override
_MyScreenBodyState createState() => _MyScreenBodyState();
}
class _MyScreenBodyState  extends State<MyScreenBody> {
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: BlocBuilder<MyBloc, MyState>(
builder: (context, state) {
return //... your code
}
)
);
}

最新更新