Skip to content

kanntim/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

Анимация расположена поверх всей крайней правой колонки слов. Я не стал использовать Positioned виджет ввиду того, что изначальный размер анимации не равен размеру кнопок, что сильно усложняет привязку расположения анимации к кнопке. Поместив же анимацию в строку, расположенную внутри контейнера, равного размеру всей колонки, я смог привязать размер анимации к размеру кнопок и получил возможность задавать виджету анимации относительное положение внутри этой строки.

Внутри GameViewModel я добавил несколько условий для отображения анимации:

  • проверку наличия фокуса на слове (Для отключения анимации на время показа диалога ввода слова)
  • проверку, что активен 1 уровень
    • и немного модифицировал основное задание, поставив условием отключения анимации - наличие хотя бы одного угаданного слова, а не только верхнего.

Предложения/замечания/исправления:

  1. При перезагрузке приложения из меню настроек, появляется ошибка "No element (List out of range)" - это происходит в результате очистки базы в методе SettingsViewModel().clear() и отсутствия обновления доступных уровней (который реализован в методе DbService().initDb()). То есть достаточно просто добавить await _db.initDb() после вызова метода _db.clean().
  2. Не совсем понятно обертывание в Stack widget кнопки сброса приложения и поля с версией - они перекрывают друг друга. Плюс ко всему при текущем размере кнопки происходит Overflow всего диалога. На мой взгляд, стоит вынести их из Stack в главную Column и убрать ограничение по высоте для всего диалога - потому что в режиме Production кнопка "Сбросить приложение" исчезнет, и диалог станет вновь квадратным по форме (если это необходимо, можно добавить проверку if(kDebugMode) и для высоты диалога).
  3. Такая же проблема с виджетом LevelCompleteDialog - предлагаю убрать ограничение по высоте и избавиться от Overflow.

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.5%
  • HTML 3.1%
  • Ruby 1.7%
  • Swift 1.5%
  • Kotlin 0.1%
  • Makefile 0.1%