Не удается получить BLo C с верхнего уровня в дереве виджетов - PullRequest
0 голосов
/ 25 марта 2020

Я делаю приложение с несколькими BLoC. Один из них, AuthBloc, может быть извлечен из любой точки дерева, потому что это родительский элемент MaterialApp, и он отлично работает.
Это не относится к любым другим реализованным мной BLoC. В этих случаях BLo C кажется доступным только для прямого потомка BLo C.
Поставщики 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 реализован таким же образом, и я тоже создаю экземпляр любого BLo C:

GivenBlocProvider(
  child: ChildWidget(),
);

Я заметил два различия между AuthBloc и другими BLoC (которые, как я думал, не не имеет значения, но я объясню, что у меня есть весь контекст): * У одного из них был виджет StatelessWidget между виджетами в дереве (BlocProvider > StatefulWidgetAbleToGetTheBloc > StatelessWidget > StatefulWidgetThatTriesToGetThatBloc) * Два других раскрывают дерево из списка, чего я не делаю думаю, что это вообще должно быть важно, потому что у ребенка, который пытается получить доступ к родителю, должен быть BLo C в качестве предка (в соответствии с инструментами dart dev, он делает).

Способ получения BLoC в виджетах есть следующее, которое работает для AuthBloc в любом виджете и для других BLoC в прямых потомках.

@override
void didChangeDependencies() {
  super.didChangeDependencies();
  _bloc = AuthBlocProvider.of(context);
}

Есть идеи, почему это происходит?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...