Skip to content

assylman/olympian-flutter-test

 
 

Repository files navigation

Тестовое задание на позицию Flutter-разработчика

Это тестовое задание на вакансию ведущего Flutter разработчика в компанию One Clue. У вас должен быть практический опыт разработки приложений. В этой задаче я ожидаю умение погружаться в существующий проект, реализовывать новую логику в существующем приложения и формулировать свои мыли и решения в текстовом виде. Для разработки обязательно иметь установленный эмулятор iOS либо реальное устройство.

Задача

Необходимо добавить анимацию на игровое поле. Анимация должна отображаться до того момента как слово угадают. Screen как должно выглядеть

Что сделать:

  1. Развернуть приложение на локальном окружении, запустить на ios в эмуляторе или реальном устройстве. После установке при нажатии на кнопку Play вы должны оказаться на экране с 3мя дощечками.

  2. Добавить lottie анимацию на экран как показано на изобажении выше (см. Задача). Данная анимация должна появляться только на первом уровне и только на левой верхней дощечке. После того как пользователь отагадает первое слово ("камень", слово может меняться) анимация отображаться не должна.

  3. Обосновать свое решение в текстовом виде, положительные и отрицательные моменты реализации на ваш взгляд. Закоммитить в корневой Readme.

Дополнительное задание (опционально):

Сформулиромать в текстовом виде 3 предложения по рефакторингу чтобы вы хотели изменить в приложении, и обоснование почему считаете что это необходимо сделать. Закоммитить в Readme.

Как выполнять?

  1. Вы можете форкнуть этот репозиторий или клонировать к себе его код
  2. После выполнения задания отправляйте ссылку на ваш репозиторий в телеграм @makarovilya

Ссылки:

  1. Lottie Animation
  2. Preview Lottie Animation
  3. GitHub

Мнение на счет тестового задания

  1. Изначально пытался анимацию добавить в WordItem виджет, но нижний виджет перекрывал анимацию, IndexedStack не помог выйти из ситуаций, поэтому перенес его на parent класс - AreaScreen. Здесь я добавил отдельный виджет в Stack, и позицию скалькулировал с минимальной высотой данного контейнера, который дан в minHeight констрейнте главного контейнера. После этого, я занимался с логикой показа данной анимаций, нужно было взять самое первое слово и мониторить его state, для того, чтобы понять, успешно ли угадано данное слово, а также через GameViewModel взял текущий level, чтобы отображать только на первом уровне.
  2. Единственная сложность возникла в покраске анимаций, программно удавалось только изменить stroke color у анимаций, любые возможности залить его белым цветом были неуспешными. Это мне удалось только через LottieEditor, в первом слое, первой группы фигуры, я добавил fillColor параметер, который залил его белым цветом.
  3. Также на анимацию добавил IgnorePointer, иначе у нижнего WordItem виджета, GestureDetector не воспринимал касание.

Опицональное задание

  1. Первым делом хотелось бы внедрить линтеры, чтобы убрать все ошибки аналайзера
  2. Сделать folder менеджмент, разбить на features и core, в кору отправить config, utils, а также widgets папку, только с теми виджетами, которые используются во многих местах (типа button, dialog виджеты). В папке features, добавить game, menu, onboarding и levels папки, внутрь них отправить все ui касательно каждой страницы
  3. Вместо Provider использовать Cubit, разделить GameViewModel на несколько кюбитов. Например: GameCubit - в нем была бы вся логика игры со словами; HintsCubit - она управляла бы со всеми монетами и покупками; AdsCubit управлял бы рекламой; LeafCubit - листьями. Убрать всю навигацию и showDialog из GameViewModel и перенести на виджеты модели
  4. Добавить в каждую feature по виджет модели, который будет сохранять все переменные и контроллеры, который и будет обрабатывать показ Dialog и навигацию

About

Test for a flutter developer role in One Clue

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Dart 93.4%
  • HTML 3.2%
  • Ruby 1.7%
  • Swift 1.5%
  • Kotlin 0.1%
  • Makefile 0.1%