我正在制作带有几个BLoC的应用程序。其中一个AuthBloc
可以从树中的任何点检索,因为它是MaterialApp
父级,并且运行良好。
我实现的任何其他BLoC都不是这种情况。在这些情况下,BLoC似乎仅可用于BLoC的直属子。
BLoC提供程序的实现方式如下:
abstract class BaseBlocProvider extends InheritedWidget {
BaseBlocProvider({Key key, Widget child}) : super(key: key, child: child);
@override
bool updateShouldNotify(_) => true;
}
class CardsBlocProvider extends BaseBlocProvider {
final bloc = CardsBloc();
CardsBlocProvider({Key key, Widget child}) : super(key: key, child: child);
static CardsBloc of(BuildContext context) {
final provider =
context.dependOnInheritedWidgetOfExactType<CardsBlocProvider>();
return provider.bloc;
}
}
当然,AuthBloc
以相同的方式实现,我也以相同的方式实例化任何BLoC:
GivenBlocProvider(
child: ChildWidget(),
);
我注意到AuthBloc
与其他BLoC之间有两个区别(我认为这没关系,但我会解释一下它的整个上下文):
*其中一个在树中的小部件之间有一个StatelessWidget(BlocProvider > StatefulWidgetAbleToGetTheBloc > StatelessWidget > StatefulWidgetThatTriesToGetThatBloc
)
*另外两个从列表中扩展树,我认为这根本不重要,因为尝试访问父级的子级应将BLoC作为祖先(根据dart开发工具,它确实如此)
以下是我在小部件中获取BLoC的方式,该方法适用于任何小部件中的AuthBloc
以及直接子级中的其他BLoC。
@override
void didChangeDependencies() {
super.didChangeDependencies();
_bloc = AuthBlocProvider.of(context);
}
知道为什么会这样吗?