NOTE! Версия, реализованная к моменту отправки на hr@friflex.com в ветке master, дополнительный рефакторинг, продолжение тестов в ветке develop.
Тестовое приложение для получения текущей погоды и прогноза погоды на 3 дня.
Код приложения покрыт комментариями и юнит-тестами.
После клонирования выполнить:
flutter pub get
flutter pub run build_runner build --delete-conflicting-outputs
- работа с двумя запросами API погоды: запрос текущей погоды, запрос прогноза погоды на 3 дня с интервалом 3 часа
- отображение экрана текущей погоды с иконкой соответствующего состояния погоды, текстового описания состояния погоды, температуры, влажности, скорости ветра и даты актуальности прогноза
- отображение экрана списка прогнозов погоды на 3 дня с интервалом 3 часа с сортировкой прогнозов погоды по температуре, начиная с самого холодного прогноза и отображающих иконку соответствующего состояния погоды, текстовое описания состояния погоды, температуру, влажность, сокрость ветра
- поле ввода валидирует вводимый текст по длине символов и при подтверждении пустого поля ввода отображается текст ошибки
- использована библиотека для получения состояния интернет-соединения
connectivity_plus
и при всех интернет запросах проверяется состояние сети - последнее введенное значение города сохраняется в системных настройках и при следующем входе открвается сразу экран текущей погоды
- помимо обычной ошибки получения данных, отдельно выделена ошибка, сообщающая о невозможности найти запрошенный город в базе
- для управлением состоянием используется библиотека
flutter_bloc
- для зависимостей используется библиотека
get_it
- структура проекта разбита по слоям, без фич. Три слоя - data, domain, presentation
- для dto использована библиотека freezed, для кодогенерации классов - удобно так как сразу получаем и кодогенерацию для методов fromJson и также переопределяем опрератор сравнения и хэшкода, что нужно при тестировании для сравнения объектов
- классы entity имплементируют Equatable для возможности сравнивать объекты при написании тестов
- для преобразования dto в entity используются мапперы посредством расширения функций. С помощью мапперов можно изменить тип данных при переходе от dto к entity