Метод сборки BlocBuilder не вызывается при добавлении события в этот блок c из другого блока. - PullRequest
1 голос
/ 20 июня 2020

У меня есть bloc A, созданный и предоставленный, прежде всего, виджеты моего приложения.

У меня есть Bloc B, созданный и предоставленный в screen 1.

Bloc B имеет ссылка на Bloc A и может добавлять события в Bloc A внутри mapEventToState из Bloc B.

Теперь странная вещь:

Внутри экрана 1, у меня есть BlocBuilder of Bloc A,

Если я добавляю события напрямую (blocAReference.add(blockAEvent) BlocBuilder вызывается при изменении состояния),

Однако, когда я добавляю событие косвенно к Bloc A ( blocBrefrence.add(blockBEvent), а затем внутри mapEventToState из Bloc B я добавляю событие в Bloc A), тогда BlocBuilder не вызывается (но я могу заверить print в консоли, что событие было добавлено в Bloc A)

Я использую библиотеку flutter_bloc.

1 Ответ

1 голос
/ 20 июня 2020
• 1000 my Bloc A as @Injectable(),

, поэтому, когда библиотека хочет вставить Bloc A в конструктор Bloc B,

он создавал новый экземпляр Bloc A каждые time, и этот экземпляр отличался от того, который я слушал в BlocBuilder (тот, который я слушаю, находится в верхней части дерева виджетов, я ищу его, используя context.bloc<BlocA>())

Итак, есть 2 решения:

  1. Я сохраняю аннотацию @Injectable() на Bloc A, но теперь я не вставляю Bloc A в Bloc B, а отправляю экземпляр Bloc A с каждым событием, добавленным к Bloc B (т.е. как параметр функции)
  2. Я удаляю аннотацию @Injectable() из Bloc A и заменяю ее на @LazySingleton, чтобы все поиски с использованием context.bloc<BlocA>() Библиотека injectable дает мне тот же экземпляр Bloc A, который я создал над всеми моими виджетами
...