在Flutter应用程序中,您可能需要在一个层次结构中嵌套多个Blocs,使得一些Blocs依赖于其他Blocs进行构建。其中一个解决方法是使用BlocProvider中的create一个新的Bloc, 并且将需要的前一个Bloc注入其中。例如:
class FirstBloc extends Bloc {
// ...
}
class SecondBloc extends Bloc {
final FirstBloc firstBloc;
SecondBloc({required this.firstBloc}) : super(SecondInitial());
@override
Stream mapEventToState(
SecondEvent event,
) async* {
// ...
}
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (_) => FirstBloc(),
child: BlocProvider(
// Inject FirstBloc into SecondBloc
create: (context) => SecondBloc(firstBloc: BlocProvider.of(context)),
child: MyHomePage(title: 'Flutter Demo Home Page'),
),
);
}
}
在MyApp小部件中,首先我们使用BlocProvider创建第一个Bloc,然后使用BlocProvider在子窗口小部件中创建第二个Bloc。在创建第二个Bloc时,我们注入了FirstBloc。现在,我们可以在SecondEvent中使用FirstBloc来处理事件并更新状态。