我在一个类中声明了一个 BlocProvider,并在它下面的类中使用了 Bloc Builder,它起作用了。
但是,当使用Navigator并在该子类的子类中声明BlocBuilder并使用上面声明的相同Bloc时,发生了错误。
但是,在主方法(MaterialApp 上方)中声明 BlocProvider 时,您可以使用多个 BlocBuilder,而在任何一层只能使用一个 BlocProvider。
我只想声明一次 BlocProvider,在多个地方使用 BlocBuilder 并共享状态。除了main方法就没有别的办法了吗?
根据情况,如果希望是全局状态,可以在MaterialApp之上声明BlocProvider。如果您只想在 PageA 导航到 PageB 时 PageB 使用与 PageA 相同的块,您可以通过以下方式实现:
var pageABloc= BlocProvider.of<PageABloc>(context);
Navigator.push(context, MaterialPageRoute(builder: (context) {
return BlocProvider.value(
value: pageABloc, child: const PageB());
}));