Тестовое задание: "Список персонажей Рика и Морти"
Мобильное приложение на Flutter, которое загружает список персонажей мультсериала "Рик и Морти" с публичного API.
Приложение позволяет добавлять персонажей в избранное, поддерживает оффлайн-доступ к данным и хранит избранных персонажей в локальной базе данных.
Документация API: Rick and Morty API
- Отображение списка персонажей в виде карточек.
- Карточка персонажа содержит:
- Изображение персонажа.
- Имя персонажа.
- Дополнительные характеристики (статус, вид, локация и т.д.).
- Кнопка "звездочка" для добавления/удаления из избранного (заполненная — в избранном, пустая — не в избранном).
- Пагинация: подгрузка новых персонажей при скролле вниз.
- Кеширование: данные сохраняются локально для работы без интернета.
- Список избранных персонажей с такими же карточками, как на главном экране.
- Сортировка по имени, статусу или полу.
- Возможность удаления персонажей из избранного.
- Обновление в реальном времени при изменении избранных на главном экране.
- BottomNavigationBar для переключения между экраном персонажей и экраном избранного.
- Поддержка темной и светлой темы с возможностью переключения.
- Кастомные анимации при добавлении/удалении персонажей в избранное.
- Flutter (Dart)
- State management: Bloc + Freezed
- Слои по принципу чистой архитектуры:
data— работа с API и локальной базойdomain— репозитории и бизнес-логикаpresentation— экраны, виджеты и bloc
- Работа с сетью: Dio + Retrofit
- Локальное хранилище: Hive (для кеша и избранных персонажей)
- Кодогенерация: Freezed + JsonSerializable
- Реализован Bloc для главного экрана и экрана избранного с отдельными событиями и состояниями.
- Используется Stream из Hive для отслеживания изменений в избранных персонажах в реальном времени.
- Поддержка пагинации и кеширования данных.
- Возможность сортировки и удаления избранных персонажей на экране избранного.
- Кастомные анимации для плавного добавления и удаления из избранного.
- Темная и светлая тема с сохранением выбора пользователя.
- Клонируйте репозиторий:
git clone <repo_url>
cd <repo_folder>- Установите зависимости:
git clone <repo_url>
cd <repo_folder>- Сгенерируйте файлы:
flutter pub run build_runner build --delete-conflicting-outputs- Запустите приложение:
flutter run