{"id":21748309,"url":"https://github.com/surfstudio/surf-flutter-study-jam-5","last_synced_at":"2025-04-13T07:13:34.454Z","repository":{"id":223437071,"uuid":"744973840","full_name":"surfstudio/surf-flutter-study-jam-5","owner":"surfstudio","description":null,"archived":false,"fork":false,"pushed_at":"2024-03-06T13:58:41.000Z","size":130,"stargazers_count":1,"open_issues_count":4,"forks_count":67,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-13T07:13:29.943Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Dart","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}},"created_at":"2024-01-18T11:40:00.000Z","updated_at":"2024-02-21T11:46:21.000Z","dependencies_parsed_at":"2024-02-20T08:50:50.471Z","dependency_job_id":null,"html_url":"https://github.com/surfstudio/surf-flutter-study-jam-5","commit_stats":null,"previous_names":["surfstudio/surf-flutter-study-jam-5"],"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-5","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/surfstudio%2Fsurf-flutter-study-jam-5/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/surfstudio%2Fsurf-flutter-study-jam-5/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/surfstudio%2Fsurf-flutter-study-jam-5/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/surfstudio","download_url":"https://codeload.github.com/surfstudio/surf-flutter-study-jam-5/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248675422,"owners_count":21143768,"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:00.521Z","updated_at":"2025-04-13T07:13:34.418Z","avatar_url":"https://github.com/surfstudio.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# surf-flutter-study-jam-5\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.16.3**\n- Версия Dart: **3.2.3**\n\nВаша ветка с выполнением задания называется `study-jam-5`.\n\nВ шаблонном приложении у вас уже есть начальный экран с заготовкой для базового уровня сложности.\n\nЭмоджи 🔥 показывает задание повышеной сложности.\n\n---\n\n## Описание фичи\n\nОднажды, проснувшись, вы почувствовали, что хотите сделать мир вокруг вас лучше. Сделать свой вклад в развитие человечества. И тут вы вспомнили, что у вас есть знания Flutter и вы можете сделать приложение, которое поможет людям. И вот вы здесь. Чтобы написать приложение, которое позволяет генерировать мемы. \n\n## Техническое задание\n\nВ общем смысле приложение представляет из себя конструктор для генерации картинок, позволяющий оперировать картинками и текстом. \n\n### Способ взаимодействия с текстом\n\nВзаимодействие с текстом происходит путём нажатия на него. Вы также можете реализовать любые необходимые для удобства пользователя кнопки/маркеры, по которым можно нажимать для редактирования текста - как для смены самого содержимого текста, так и для изменения размера шрифта, перемещения и тд.\n\n### Способ взаимодействия с изображением\n\nВзаимодействие с изображением происходит аналогично подобным действиям с текстом. \n\n## Уровни сложности\n\nЗадание имеет несколько уровней сложности, в каждом из которых приложение может быть реализовано по-разному.\n\n\u003e [!NOTE]\n\u003e Крайне рекомендуем вам прочесть все задания до конца прежде чем приступать к выполнению.\n\n\n### **Базовый уровень**\n\nНа этом уровне ваша цель реализовать простой генератор [демотиватора](https://ru.wikipedia.org/wiki/%D0%94%D0%B5%D0%BC%D0%BE%D1%82%D0%B8%D0%B2%D0%B0%D1%82%D0%BE%D1%80). Пример демотиватора можно увидеть ниже:\n\n\u003cimg src=\"docs/images/demotivator_example.png\" width=\"250\"\u003e\n\nПриложение состоит только из одного экрана - экрана, на котором происходит создание демотиватора.\n\nФункционал должен включать:\n- возможность выбрать картинку из интернета (например, по ссылке)\n- возможность ввести текст;\n\n### **Средний уровень**🔥\n\nК тем требованиям, которые были на базовом уровне, добавляется:\n- возможность выбирать картинки из галереи;\n- возможность делиться полученным демотиватором (картинкой).\n\n### **Продвинутый уровень**🔥🔥\n\nЭтот уровень уже подразумевает наличие двух экранов: экрана создания мема и экрана со списком доступных шаблонов для мема. \n\n\u003e [!NOTE]\n\u003e Если у вас есть другое видение организации экранов приложения (например, совместить всё на одном экране, сделав карусель шаблонов или использовав Drawer), то вы можете реализовать его так, как считаете нужным.\n\nФункционал должен включать:\n- экран со списком доступных шаблонов;\n- возможность выбрать шаблон из списка и перейти на экран создания мема с выбранным шаблоном.\n- шаблон представляет из себя:\n  - картинку;\n  - текстовые поля, которые можно редактировать (их местоположение и количество будут варьироваться в зависимости от шаблона);\n\nНа данном уровне сложности вы вольны использовать хардкод для задания позиции картинок/текстовых полей или задавать их динамически (что пригодится вам в следующих уровнях сложности).\n\n### **Очень продвинутый уровень**🔥🔥🔥🔥\n\nНа этом уровне приложение уже будет иметь три экрана: экран со списком шаблонов, экран создания мема и экран создания нового шаблона. \n\nФункционал должен включать:\n- всё перечисленное в среднем уровне;\n- экран создания нового шаблона;\n\n\u003e [!NOTE]\n\u003e Обратите внимание!\n\u003e Если вы планируете выполнять задание на этом уровне сложности и выше, исходите из того, что конфигурация каждого шаблона описывается динамически, а не хардкодом.\n\n\n### **Уровень: Безумие**🔥🔥🔥🔥🔥\n\nФункционал должен включать:\n- хранение шаблонов в локальной базе данных (используйте любую библиотеку для хранения постоянных данных, которую посчитаете нужным использовать);\n\n### Бонусные задания\n\n - **CRUD для шаблонов (создание, чтение, обновление, удаление)** 🔥🔥 - при условии, что вы реализовали хранение шаблонов в локальной базе данных ([продвинутый уровень](#продвинутый-уровень🔥🔥🔥));\n - **Масштабирование и позиционирование картинки в шаблоне** 🔥🔥 - приложение позволяет масштабировать и позиционировать картинку в шаблоне с помощью жестов;\n - **Адаптив под альбомную ориентацию, десктоп и веб** 🔥🔥🔥 - приложение корректно запускается и отображается в альбомной ориентации, на десктопе и в вебе;\n - **Адаптация размера шрифта под размер текстового поля** 🔥🔥🔥🔥 - текст корректно помещается в выделенной в шаблоне области и меняет свой размер при необходимости.\n\n\n# Представление результатов\n\nУмение защитить результаты своей работы - невероятно важный навык для разработчика.\n\nВ текущем проекте есть файл `/docs/results/RESULT.md`. Этот шаблон нужен как раз для того, чтобы вы могли поделиться результатами вашей работы. Вы можете записать скринкаст, сделать скриншоты или целый README-файл, в котором будет описано, что вы успели сделать.\n\nЭто один из критериев, по которому будет оцениваться ваша работа!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsurfstudio%2Fsurf-flutter-study-jam-5","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsurfstudio%2Fsurf-flutter-study-jam-5","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsurfstudio%2Fsurf-flutter-study-jam-5/lists"}