#flutter #dart #bloc #flutter-provider #flutter-bloc
#трепетание #дротик #блок #flutter-поставщик #трепещущий блок
Вопрос:
В настоящее время я создаю прототип проекта, который реализует множество функций, таких как управление навигацией, управление ошибками, управление хранилищем и т. Д. И т. Д
Теперь я столкнулся с вопросом с блоками. Я хочу знать, какие лучшие практики используют блоки, на самом деле, представьте, что у меня есть система продуктов, например, список продуктов, сведения о продукте, выберите продукт.
Должен ли у меня быть только один блок, который может принимать 3 события, например
- Получить список продуктов
- Получить идентификатор продукта
- Выберите продукт
с различными состояниями, такими как GetListInitial, GetProductInitial, SelectProductInitial и другими для «загружено», «готово», например
И затем на моих 2 страницах я могу использовать blockconsumer, который прослушивает на странице списка продуктов GetListInitial, GetListFinished и на странице сведений о продукте GetProductInitial, GetProductFinished ? Я также могу использовать 2 BlocConsumer на одной странице, которые прослушивают разные состояния, например, перечисляя продукты, а затем выбирают один.
Или
Нужно ли мне иметь три разных блока, которые могут принимать 1 событие и выполнять один и тот же процесс с каждым блоком.
Мы можем считать, что 1-е решение может группировать события по функциям, но на самом деле не учитывает, что Flutter хочет, как работает с виджетом, потому что в моем примере 3 blockconsumer будет обработан, если произошло одно событие, но только 1 будет что-то делать.
Но во 2-м решении это означает, что если я получу огромное приложение, у меня будет очень много блоков, верно? Какое лучшее решение?
Спасибо
Ответ №1:
Я думаю, что хороший способ — это иметь блок для каждой функции и один репозиторий или хранилище.
Обычно я создаю навигацию, передавая уникальный идентификатор объекта в конструктор виджета, а затем открываю модальную страницу с собственным блоком, который обрабатывает описание загрузки и т. Д.
Например, мне нужно загрузить список продуктов. Я оборачиваю свой основной экран продукта с помощью RepositoryProvider, который предоставляет репозиторий продуктов. Репозиторий содержит всю необходимую мне логику (выборка, сортировка, выбор одного элемента из списка элементов с уникальным идентификатором и т.д.)
Затем я завершаю свою страницу с помощью поставщика блоков и передаю свой репозиторий конструктором, так что теперь у блока должен быть доступ к моему репозиторию. Блок управляет только подключением репозитория к пользовательскому интерфейсу. В моем списке элементов я передаю идентификатор элемента, поэтому, если я нажму на элемент, я могу передать его идентификатор другому блоку, который выполняет другую логику (например, открывает модальную страницу с описанием)