Weather App for Friflex

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

Скриншоты экранов и возможных ошибок

menu menu menu menu menu menu menu menu menu