Домашнее задание Flutter. State management. Внедряем один из ранее рассмотренных механизмов управления состоянием приложения Цель: Цель домашнего задания - получить навык работы с одним из рассмотренных ранее state management подходов (Redux, Bloc, MobX). Потребуется: переписать ранее использованные stateful виджеты с использованием одного из рассмотренных ранее подходов. - Склонировать соотвествующий github репозиторий с заготовкой проекта для этого урока (для соот-щего подхода к управлению состоянием приложения - redux, bloc mobx версии) (https://github.com/guid-empty/otus-cocktail-app-lessons) - Внести изменения в классы описания состояний для экрана FavouriteCocktailsPage (будут помечены /// todo) - Открыть класс экрана FavouriteCocktailsPage - Внести изменения в код экрана, выделив логику для получения состояния используя один из ранее рассмотренных подходов к state management - Внести изменения в экран CocktailDetailPage (CocktailTitle) для управления состояния isFavourite текущей модели (коктейль должен появиться или удалиться в списке избранного в соот-щем блоке состояния приложения) - Убедиться, что изменения состояния isFavourite для конкретного коктейля отражается в поведении экрана FavouriteCocktailsPage (появляется новый избранный коктейль, удаляется ранее убранный из favourites) На усмотрение студента: - Можно выполнить любую декомпозицию класса FavouriteCocktailsPage для внесения изменений в управление состоянием (рефакторинг) - Можно выполнить любую декомпозицию класса CocktailDetailPage (CocktailTitle) для внесения изменений в управление состоянием (рефакторинг) - Можно выполнить любую декомпозицию в самих классах управления состоянием приложения (store, block etc) - Можно выполнить рефакторинг кнопки isFavourite, выделив ее в отдельный виджет и используя на обоих экранах Где могут возникнуть сложности: - Наше АПИ не имеет возможности добавлять в избранное какие-либо коктейли, таким образом мы приходим к тому, что - Список favorite cocktails хранится локально - Мы не можем хранить только id-шники коктейлей из избранного, так как для входа в экран Избранное нам не нужно получать абсолютно весь список коктейлей - Таким образом, мы локально должны хранить хранить сериализованные состояния CocktailDefinition - той информации, которая нам достаточна для отрисовки карточки коктейля в списке Избранное (смотри мокапы) - Для хранения локальных сериализованных состояний избранных коктейлей вы можете использовать любой подход из урока 15 (Persistence. Работа с БД, файлами и SharedPreference) - проще всего будет заиспользовать Hive или SQLLite, но можно и проще через создание одной большой коллекции и ее сериализации в файле. - AsyncCocktailRepository - этот репозиторий для получения данных на лету, который профетчит вам коктейли, но без признака isFavorite. Для понимания isFavorite нужно будет внести изменения в этот репозиторий, который будет по id коктейля определять, входит этот коктейль в избранное или нет. В качестве одного из подходов можно создать еще один репозиторий - FavoriteCocktailsRepository, который будет уметь работать с локальным хранилищем. Форма сдачи: - ДЗ Сдается в виде pull request на основной github репозиторий с проектом Куда сдать ДЗ: - Отправляется напрямую в ЛК (bloc - на Никиту, redux - Илья, mobx - Всеволод). Мокап экрана Избранное (FavouriteCocktailsPage): https://www.figma.com/file/UKHKopXpDy02I232c9mdwZ/%D0%9A%D0%BE%D0%BA%D1%82%D0%B5%D0%B9%D0%BB%D0%B8?node-id=24%3A441 В этом экране используется точно такая же верстка, как и на экране фильтрации (то есть можно переиспользовать экран выдачи результатов по категориям) Критерии оценки: Критерии оценки: - Функциональность кнопки isFavourite работает корректно (c синхронизацией состояния в список избранного) - 4 балла - Нет ошибок (errors & warnings & infos) от dart analyzer - 3 балла - Выполнен рефакторинг кнопки isFavourite, выделив ее в отдельный виджет и используя на обоих экранах для получения функциональности пометки В Избранное в обоих экранах - 4 балла Статус "Принято" ставится от 4 баллов.