#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:
Есть несколько вариантов, которые вы можете попробовать здесь:
- Создайте подкласс блока:
class FirstBloc extends FoodCubit {} class SecondBloc extends FoodCubit {}
- Создавайте миксины блока:
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. Я излучаю одно и то же состояние, данные о состояниях разные, одно из них фильтруется. И это не может быть один блокбастер, отправляются два разных события, и их результаты отображаются в двух разных местах