-
Версия при подаче заявки на стажировку. После этого был добавлен Dagger2 для DI, а также есть ветка с заменой корутин на rxjava3
Тагилов А.М.
- Только RU
- Kotlin
- Compose
- MVVM
- Kotlin Coroutines+Flow
- OkHttp, Retrofit
- Jetpack Compose Navigation
- Room
- Glide
- Геолокация+
- Подробная информация о погоде по нажатию на суточный прогноз+
- Экран ошибки+
- Полная поддержка темной темы+
- Персистентное хранилище с сохраненными городами+
- Если пользователь отказался выдать локацию, то используем geo по ip+
- SwipeToRefresh+
- Rationale для пермишена (TODO)-
- Хорошо бы собрать через ProGuard на релизе, чтобы api ключи не разбазаривать) (TODO)
- openweathermap.org
- ipgeolocation.io
// погода+
https://api.openweathermap.org/data/2.5/onecall?lon=37.6156&lat=55.7522&appid=b66745312676702b882b8e673d774421&exclude=minutely&lang=ru&units=metric
// найти город (и его гео) по названию+
https://api.openweathermap.org/geo/1.0/direct?q=Moscow&appid=b66745312676702b882b8e673d774421&limit=1
// найти название города по локации+
https://api.openweathermap.org/geo/1.0/reverse?lon=37.6156&lat=55.7522&appid=b66745312676702b882b8e673d774421&limit=1
//локация по ip+
https://api.ipgeolocation.io/ipgeo?apiKey=dd8bacba38c84ee4a11cbe0614b07322
- Название города (топ бар)+
- Отображение текущей погоды (решил делать без иконки, так красИвее, тем более чуть ниже та же инфо)+
- Погода на день (горизонтальный скролл) + иконки+
- Погода на неделю (вертикальные элементы) + иконки+
- SwipeToRefresh+
- Хорошо бы разделить ошибки подключения/сервера-
- Переключение между сохраненными городами+локацией+
- Если контент загружен, то его обновление не приведет к потере текущих данных, будет отображен снекбар+
- Да, кстати, макс и мин актуальные температуры вычисляются на основе следующих 24 часов, а не являются данными текущего дня+
- Задержка перед поиском (посмотреть модификаторы flow). upd. блин он в превью, ну ладно, пусть будет+
- Отображение сохраненных городов (TODO)+
- Удаление сохраненных городов (мб свайпом как на айфоне)+
- Основная логика такова - отображаем сохраненные, если есть что-то в строке поиска +
- Иконки переделать в ассеты+
- Проверить, не едет ли верстка на экранах маленьких размеров и на ветре > 10мс (TODO)
- Еще одна кнопка добавить? нужна ли (по центру экрана)
- свайп для удаления города+
- кнопочка текущая локация в списке сохраненных городов+
- анимации перехода между экранами-
- можно индикатор страниц снизу для переключения между сохраненными-
- Думал сделать простенький DI на основе Koin, но решил, что особо и не нужен тут.
- Пермишен можно запросить через гугловскую либу Accompanist, но хочу поработать напрямую
- Ищет, конечно, openweather не очень. Возвращает вроде список городов, а по факту всегда один, да и тот без каких-либо данных о погоде
- Плохо, что data слой напрямую мапит в ui модели,
- Все-таки решил не сохранять последнюю погоду в персистентном хранилище, это погода и нельзя надеяться на то, что она не поменяется (но добавить сохранение самого города стоит - UPD. не сделал)
- Вообще итоговая идея nullable типов для верстки мне не нравится - все-таки лучше логику шиммера и контента разграничить
- Честно так и не придумал, как правильно организовать хранение данных синглтона Networking с okhttp клиентом и апи, ведь это привязано по сути к одному экрану. Сделал в итоге не очень красиво(
- Стоит анализировать ошибки при обращении к API
- Логика сохранения города лежит на экране погоды. Если город не из текущей локации, то можно сохранить
- MVI все-таки с Compose больше вяжется(
- Тк нет особо опыта с Compose, сделал ошибку - куча стейтов. Стейт должен быть один (общий), чтобы по несколько раз не рекомпозировать
- Зря использовал Gson вместо Moshi
- Получилось долго из-за зачетной недели