Как передать параметр области в Bloc? Параметризованный блок или событие с параметрами?

Представьте себе базу данных, в которой каждая таблица имеет соответствующий блок флаттера.

Ситуация: мой BLOC зависит от некоторого параметра XXX. Похож на запрос SELECT ... FROM ... WHERE id_category = XXX

Я мог бы создать свой BLOC с этим параметром XXX следующим образом.

BlocProvider<PupilBloc>(
              create: (BuildContext context) =>
                  PupilBloc(XXX)..add(LoadPupil()))

В моем коде разные PupilBloc экземпляры зависят от навигации (выбор категории XXX на предыдущей странице). Так что, я думаю, между разными PupilBloc нет совпадения.

Я мог бы также поместить параметр в событие.

BlocProvider<PupilBloc>(
              create: (BuildContext context) =>
                  PupilBloc()..add(LoadPupil(XXX)))

Это событие загрузит только значения с соответствующим XXX. В следующий раз, когда событие LoadPupil() будет сгенерировано с другим параметром, оно будет повторно использовать тот же PupilBloc, но получит новые данные, соответствующие параметру.

Эти два подхода кажутся мне эквивалентными. 1. Множественные параметризованные блоки BLOC. 2. Один блок BLOC, извлекающий разные данные в зависимости от параметра события.

Какой способ лучше?


person Slawa    schedule 12.01.2020    source источник


Ответы (1)


Если ваш блок имеет зависимость от любых тех же экземпляров (например, репозиторий или объект класса), тогда подход A - это путь, но если ваш блок не имеет такой зависимости и ему просто нужно другое значение для получения разных данных, тогда вы идете с подходом Б. Я не совсем уверен в вашем объяснении вашего дела, но я думаю, что подход Б лучше.

person Federick Jonathan    schedule 12.01.2020