Блок флаттера — есть ли способ предоставить различные экземпляры блока на экране

#flutter #dart #bloc #flutter-bloc #flutter-cubit

Вопрос:

У меня есть локоть с именем FoodCubit, который выполняет две функции:

-getAllFoods()

-getFilteredFoods(категория)

И у меня есть экран, как показано ниже Рабочий стол

Как вы можете видеть, верхняя часть экрана-это блокбастер, возвращающий состояния, создаваемые моей первой функцией, которая вызывается в didChangeDependency (), А нижняя часть-это другой блокбастер того же FoodCubit, который я хочу вернуть состояния, создаваемые второй функцией, Но результаты в верхнем блокбастере и нижнем блокбастере одинаковы. Я использовал blocprovider в родительском приложении для материалов, предоставляющем FoodCubit. Я блуждал, есть ли способ предоставить два экземпляра одного и того же блока и использовать его. Кое-как похоже

 MultiBlocProvider( Providers:[ //first bloc provider BlocProvider(),  //second bloc provider BlocProvider()  )  

Но тогда как я могу добраться до него в blocbuilder??

Я думаю, что один из обходных путей-использовать два блока для верхней и нижней части экрана, но разве это не уничтожит цель использования блоков? Есть ли какой-нибудь способ обойти это? Есть ли лучший способ?

Ответ №1:

Есть несколько вариантов, которые вы можете попробовать здесь:

  1. Создайте подкласс блока:
 class FirstBloc extends FoodCubit {} class SecondBloc extends FoodCubit {}  
  1. Создавайте миксины блока:
 mixin FirstBloc on Bloc {}  mixin SecondBloc on Bloc {}  class FoodCubit extends Bloc with FirstBloc, SecondBloc {  getAllFoods()   getFilteredFoods(category) } // Then in your widget ...  BlocProviderlt;FirstBlocgt;(  create: (_) =gt; FoodCubit(),  child: ... BlocProviderlt;SecondBlocgt;(  create: (_) =gt; FoodCubit(),  child: ...  

Комментарии:

1. Спасибо, но в смешанном подходе, как я могу вызывать функции, предоставленные в исходном локте. Ни одна из функций не существует : context.readlt;SecondBlocgt;() не имеет никаких функций, кроме функций Cubit по умолчанию

Ответ №2:

Вы можете просто выдать одно и то же состояние для обоих событий, в котором есть список «все» и список «отфильтрованный».

Вам также не понадобились бы два сборщика блоков, это мог бы быть только один.

Комментарии:

1. Я излучаю одно и то же состояние, данные о состояниях разные, одно из них фильтруется. И это не может быть один блокбастер, отправляются два разных события, и их результаты отображаются в двух разных местах