Разработать фронтенд приложения для поиска авиабилетов
- Kotlin
- Kotlin coroutines
- Koin
- ViewBinding
- RecyclerView, DiffUtil
- Clean Architecture (MVVM)
- Single Activity
- Multi-module
Основной функционал реализован для сценария поиска, для остальных элементов меню реализованы заглушки.
- Предложения билетов в другие города на концерты (хардкод)
- Сохранение последнего места отправления (сохранется в shared prefs)
- При нажатии на поле отправления открывается модальное окно
- Отображаются подсказки (хардкор) по разным типам билетов: на выходные, куда угодно, горящие билеты.
- Список популярных мест, при клике название города подставляется в поле назначения
- При клике на кнопку поиска на клавиатуре (в ТЗ не было указания по какой механике должен осуществляться поиск, только то, что после заполнения поля, дебаунс для текущей логики показался неподходящим) осуществляется "поиск" и переход на след экран
- Можно выбрать дату отправления / возвращения
- Предложения билетов от разных авиакомпаний с расписанием (хардкод)
- По кнопке "посмотреть все билеты" открывается след экран
- Информация о маршруте, количестве пассажиров (хардкод) и классе (хардкод)
- Список билетов с информации о времени в пути, отправлении, прибытии, аэропортах
FlightFinder.mp4
Скачать apk в релизах:
Или: Скачать код, открыть в студии и запустить на устройстве/эмуляторе
- В изначальном макете не использовался курсив и в ТЗ на скринах тоже обычный текст. Макет был в какой-то момент обновлен и некоторые текстовые элементы изменились. Я придерживалась изначального макекта (несмотря на пункт в тз, что должно быть полное соответствие макету), т.к. мне показалось, что единый стиль выглядит лучше чем микс обычного текста и курсива.
- adapter delegates не нашла где применить, т.к. все списки из одинаковых по типу элементов
- Окончательный рефакторинг и вынос всех размеров на макетах в ресурсы, выделение используемого в нескольких местах кода в одно место
- Осмысленная обработка ошибок (на данный момент списки, которые не удалось загрузить, просто не отображаются)
- Добавить состояние загрузки, т.к. не все списки моментально подгружаются.