Приложение - онлайн магазин косметических средств. Приложение состоит из 5 главных экранов и нескольких дополнительных.
Реализована регистрация пользователя с сохранением данных для следующего входа (данные хранятся в базе данных). Осноные экраны - каталог, детали товара и просмотр избранных товаров.
Стартовый экран и экран регистрации
В приложении реализован стартовый экрна, логика которого определяет есть ли сохраненный пользователь в базе данных или у нас новый пользователь. В случае нового пользователя - старнтовый экране откроет регистрации, в противном случае - сразу каталог
. Экран регистрации валидирует вводимые значения и сохраняет данные пользователя в базу данных; при успешном вводе открывает каталог.
Экран "Каталог"
На экране каталога отображаются товары. Пользователь может отсортировать товары тремя способами - по популярности, по возрастанию и убыванию цены. На экране также присутствуют теги (chip group) с помощью которых можно отфильтровать
список отображемых товаров. Сортировка на отфильтрованном списке сохраняется и её можно поменять. На элементе списка товаров есть кнопки добавить и удалить из избранного. Для лучшего визуального восприятия товара реализована карусель изображений.
Экран "Детали"
При клике на товар пользователь попадет на экран деталей, где сможет посмотреть подробности, цену, увеличенное изображение товара и т.д. На экране деталей также есть кнопки добавить/удалить из избранного, при изменеии статуса товара в избранном
статус также поменяется и на экране "Каталог".
Экран "Профиль"
На экране профиля пользователь видит данные о себе и избранных товарах. Выход из приложения осуществляется по нажатию на кнопку выйти, в этом случае стираются все данные о пользователе и его избранных товарах.
Экран "Избранное
Экран реализован в виде двух табов, между которыми можно перемещатся свайпом или нажатием. На экране отображаются избранные товары, есть возможность удалить товар из избранного или перейти в детали товара.
Остальные экраны находятся в разработке.
- Приложение создано по принципам чистой архитектуры и SOLID, есть 3 слоя (data, domain, presentation). Связь между слоями осуществляется через интерфейсы.
- Используется паттерн MVVM в презентейшн слое.
- В качетсве библиотеки для DI выбрана библиотека Hilt.
- Приложения реализовано по принципу единой активити с фрагментами, навигация через navigation component и safe args.
- Получение данных реализовано с помощью Retrofit и корутин.
- Избранные товары и данные о пользователе хранятся в SQlite базе данные, библиотека Room и корутины.
- Списки сделаны через recyclerView и ListAdapter + Diffutil.
- Все по работе с данными лежит в data слое, некоторая часть бизнес логики (фильтрация и сортировка) в domain.
- На экране каталога и избранного реализована LCE модель управления состоянием экрана (loading, content, error).
- Валидация вводимого номера телефона реализована с помощью библиотеки Tinkoff decoro. Работа с UI через viewBinding.
- Карусели избражений и табы в избранном реализованы через viewPager2 и tabLayout.
- Kotlin
- Clean Architecture
- Hilt
- Retrofit
- Room
- SOLID
- MVVM (ViewModel, LiveData)
- RecyclerView
- ViewBinding
- Navigation Component
- Glide
- Tinkoff decoro
- Coroutines