{"id":21748338,"url":"https://github.com/surfstudio/surf-flutter-study-jam-4","last_synced_at":"2025-07-08T14:04:31.126Z","repository":{"id":183644002,"uuid":"670483069","full_name":"surfstudio/surf-flutter-study-jam-4","owner":"surfstudio","description":null,"archived":false,"fork":false,"pushed_at":"2023-12-17T09:11:38.000Z","size":2703,"stargazers_count":3,"open_issues_count":2,"forks_count":124,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-01-25T22:58:02.759Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/surfstudio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-07-25T06:46:27.000Z","updated_at":"2024-01-02T19:22:09.000Z","dependencies_parsed_at":"2025-01-25T22:49:40.098Z","dependency_job_id":"d9d4229b-f9bb-42f3-927c-f01c155167c1","html_url":"https://github.com/surfstudio/surf-flutter-study-jam-4","commit_stats":null,"previous_names":["surfstudio/surf-flutter-study-jam-4"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/surfstudio%2Fsurf-flutter-study-jam-4","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/surfstudio%2Fsurf-flutter-study-jam-4/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/surfstudio%2Fsurf-flutter-study-jam-4/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/surfstudio%2Fsurf-flutter-study-jam-4/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/surfstudio","download_url":"https://codeload.github.com/surfstudio/surf-flutter-study-jam-4/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244723746,"owners_count":20499326,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-26T08:13:07.486Z","updated_at":"2025-03-21T02:25:13.495Z","avatar_url":"https://github.com/surfstudio.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Surf Flutter Study Jam 4\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://surf.ru/wp-content/themes/surf/assets/img/logo.svg\" height=\"120\" /\u003e\n\u003c/p\u003e\n\n## Требования к приложению\n\n- Версия Flutter: **3.10.3**\n- Версия Dart: **3.0.3**\n\nВаша ветка с выполнением задания называется `study-jam-4`.\n\nВ шаблонном приложении у вас уже есть начальный экран.\n\nВ процессе реализации вы можете опираться на [этот дизайн](https://www.figma.com/file/8eGQl9M0NzIkCDszJpbKk1/Magic-ball?type=design\u0026node-id=12-32196\u0026mode=design\u0026t=EUnH2x1B5XyiVSI2-0).\n\nЭмоджи 🔥 показывает задание повышеной сложности.\n\n---\n\n### Описание фичи\n\n\u003e Данное задание взято из новых [Flutter-курсов Surf](https://education.surf.ru/).\n\n```\nВы, начинающий и наивный фрилансер в поисках своего первого заказа, получаете сообщение на свою почту:\n\nОт: Кармелита Честная \nКому: [Ваше имя]\n\nТема: Заказ на разработку приложения \"Магический Шар\"\n\nЗдравствуйте,\n\nМоё имя Кармелита Честная и я ищу опытного разработчика для создания мобильного приложения, имитирующего магический шар.\n\nЯ верю, что такое приложение может принести много счастья и радости в жизни людей. И я готова поделиться своими богатствами и обещаю удачу в личной жизни тому, кто поможет мне воплотить эту идею в жизнь.\n\nСогласно моим требованиям, приложение должно состоять из одного экрана, на котором будет изображён магический шар. Пользователь мысленно задаёт вопрос, после чего нажимает на шар (или трясёт телефоном), и приложение выдаёт ответ.\n\nС нетерпением жду вашего ответа и возможности начать работу над этим проектом.\n\nС уважением, \nКармелита Честная\n```\n## Техническое задание\n\n### Источник данных\n\nВам предстоит отправить запрос на сервер для того, чтобы узнать, что готовит судьба.\n\nДокументация API для ознакомления: https://www.eightballapi.com/docs\n\nБазовый URL для отправки запросов: `https://eightballapi.com/api`\n\nПример ответа по GET-запросу: `{\"reading\":\"My reply is no.\"}`\n\n### Флоу работы шара\n\n#### Начальное состояние \n\nШар активен, но не имеет текста внутри. \n\n\u003cp align=\"center\"\u003e\u003cimg src=\"docs/assets/not_active.png\" width=\"250\"\u003e\u003c/p\u003e\n\n#### Алгоритм\n\n##### Сценарий 1\n\n1. Пользователь нажимает на шар / пользователь трясет телефоном.\n2. Шар начинает затемняется изнутри. Текст предыдущего ответа (если он был) исчезает.\n   \n   \u003cp align=\"center\"\u003e\u003cimg src=\"docs/assets/loading.png\" width=\"250\"\u003e\u003c/p\u003e\n3. Отправляется запрос на получение ответа шара.\n4. Запрос выполнен...\n    - успешно — в шаре текст полученного ответа, затемнение исчезает;\n\n       \u003cp align=\"center\"\u003e\u003cimg src=\"docs/assets/success.png\" width=\"250\"\u003e\u003c/p\u003e\n\n    - неудачно — шар заполняется красным светом.\n       \n       \u003cp align=\"center\"\u003e\u003cimg src=\"docs/assets/error.png\" width=\"250\"\u003e\u003c/p\u003e\n\n\n##### Сценарий 2\n\nПредусловия: идёт загрузка ответа шара.\n\n1. Пользователь нажимает на шар / пользователь трясет телефоном.\n2. Ничего не происходит.\n\n \n## Итак, давайте начнём!\n\n\u003e Небольшие рекомендации: \n\u003e \n\u003e - Не забывайте писать комментарии к классам и методам чтобы другим разработчикам было сразу понятно, что тут происходит. \n\u003e Умение писать понятный код это важный навык для командной разработки.\n\u003e - Помните про форматирование кода 👆.\n\n### Задание 1\n\nРеализуйте интерфейс экрана с магическим шаром.\n\n### Задание 2\n\nРеализуйте бизнес-логику нажатия на шар для получения ответа. Используйте мок-данные для отображения.\n\n### Задание 3\n\nДобавьте логику для обработки пользовательского вопроса и получения ответа от API.\n\nПри нажатии на шар отправьте GET-запрос к API и получите ответ.\nОбработайте успешный ответ от API и отобразите его внутри магического шара.\nОбработайте ошибочный ответ от API и отобразите сообщение об ошибке внутри магического шара.\n\n### Задание 4\n\nРеализуйте отправку запроса при тряске телефона.\n\n\u003e Для отслеживания тряски можно использовать пакет [shake](https://pub.dev/packages/shake).\n\n\n### Задание 5\n\nАдаптируйте приложения для запуска на десктоп/веб-платформах, а также планшетах. \n\n### Задание 6 🔥\n\nДобавьте анимацию движения шара:\n- при обычном состоянии шар должен плавно парить вверх-вниз\n- шар отбрасывает цветную тень\n- при выполнении запроса шар сотрясается и пульсирует светом (или затемняется) внутри\n\n### Задание 7 🔥\n\nДобавьте в приложение экран настроек, где вы сможете:\n- менять цвет шара \n- менять скорость и кривую анимации шара в спокойном положении \n- настраивать анимацию шара при тряске \n\n\n### Задание 8 🔥\n\nПри выдаче ответа/ошибки можете добавить аудио-эффект для шара. \n\nЕсли у вас реализован экран настроек - добавьте возможность настройки звука оттуда. 🔥\n\nТакже можете добавить возможность выбора звука с устройства. 🔥🔥\n\n\n### Задание 9 🔥\n\nДобавьте воспроизведение ответа с помощью голосового помощника! \n\nЕсли у вас есть экран настроек - вынесите возможность включения/отключения этой функции туда. \n\n### Задание 10 🔥🔥\n\nАнимируйте появление текста внутри шара - например, его плавное проявление из размытия и прозрачности или имитация его печати. \n\nЕсли у вас реализован экран настроек - добавьте возможность настройки анимации текста туда. 🔥\n\n### Задание 11 🔥🔥🔥\n\nДобавьте в ваш шар звёзды и оживите их с помощью параллакс-эффекта!\n\n### Задание 12 🔥🔥🔥🔥\n\nЕсть интересная идея, как добавить в ваш шар ещё больше магии? Дерзайте!\n\n\n## Что стоит знать при выполнении заданий\n\n- Вашей целью не является выполнение **всех** заданий. Выбирайте для выполнения то, что вам по силам и интереснее реализовывать лично для вас.\n- Предоставленный дизайн является только референсом - вам необязательно повторять его в точности. Фантазируйте и делайте так, как вам подсказывает ваше чувство прекрасного 🥰\n- За использованией фичей [Dart 3](https://habr.com/ru/companies/surfstudio/articles/733532/) полагаются дополнительные баллы 🤑.\n\n# Предоставление результатов\n\nУмение защитить результаты своей работы - невероятно важный навык для разработчика.\n\nВ текущем проекте есть файл `/docs/RESULT.md`. Этот шаблон нужен как раз для того, чтобы вы могли поделиться результатами вашей работы. Вы можете записать скринкаст, сделать скриншоты или целый README-файл, в котором будет описано, что вы успели сделать.\n\nЭто один из критериев, по которому будет оцениваться ваша работа!","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsurfstudio%2Fsurf-flutter-study-jam-4","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsurfstudio%2Fsurf-flutter-study-jam-4","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsurfstudio%2Fsurf-flutter-study-jam-4/lists"}