无法从小部件树的上层获取BLoC

时间:2020-03-25 10:56:11

标签: flutter dart bloc

我正在制作带有几个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);
}

知道为什么会这样吗?

0 个答案:

没有答案