- Версия Flutter: 3.16.3
- Версия Dart: 3.2.3
Ваша ветка с выполнением задания называется study-jam-5
.
В шаблонном приложении у вас уже есть начальный экран с заготовкой для базового уровня сложности.
Эмоджи 🔥 показывает задание повышеной сложности.
Однажды, проснувшись, вы почувствовали, что хотите сделать мир вокруг вас лучше. Сделать свой вклад в развитие человечества. И тут вы вспомнили, что у вас есть знания Flutter и вы можете сделать приложение, которое поможет людям. И вот вы здесь. Чтобы написать приложение, которое позволяет генерировать мемы.
В общем смысле приложение представляет из себя конструктор для генерации картинок, позволяющий оперировать картинками и текстом.
Взаимодействие с текстом происходит путём нажатия на него. Вы также можете реализовать любые необходимые для удобства пользователя кнопки/маркеры, по которым можно нажимать для редактирования текста - как для смены самого содержимого текста, так и для изменения размера шрифта, перемещения и тд.
Взаимодействие с изображением происходит аналогично подобным действиям с текстом.
Задание имеет несколько уровней сложности, в каждом из которых приложение может быть реализовано по-разному.
Note
Крайне рекомендуем вам прочесть все задания до конца прежде чем приступать к выполнению.
На этом уровне ваша цель реализовать простой генератор демотиватора. Пример демотиватора можно увидеть ниже:
Приложение состоит только из одного экрана - экрана, на котором происходит создание демотиватора.
Функционал должен включать:
- возможность выбрать картинку из интернета (например, по ссылке)
- возможность ввести текст;
К тем требованиям, которые были на базовом уровне, добавляется:
- возможность выбирать картинки из галереи;
- возможность делиться полученным демотиватором (картинкой).
Этот уровень уже подразумевает наличие двух экранов: экрана создания мема и экрана со списком доступных шаблонов для мема.
Note
Если у вас есть другое видение организации экранов приложения (например, совместить всё на одном экране, сделав карусель шаблонов или использовав Drawer), то вы можете реализовать его так, как считаете нужным.
Функционал должен включать:
- экран со списком доступных шаблонов;
- возможность выбрать шаблон из списка и перейти на экран создания мема с выбранным шаблоном.
- шаблон представляет из себя:
- картинку;
- текстовые поля, которые можно редактировать (их местоположение и количество будут варьироваться в зависимости от шаблона);
На данном уровне сложности вы вольны использовать хардкод для задания позиции картинок/текстовых полей или задавать их динамически (что пригодится вам в следующих уровнях сложности).
На этом уровне приложение уже будет иметь три экрана: экран со списком шаблонов, экран создания мема и экран создания нового шаблона.
Функционал должен включать:
- всё перечисленное в среднем уровне;
- экран создания нового шаблона;
Note
Обратите внимание! Если вы планируете выполнять задание на этом уровне сложности и выше, исходите из того, что конфигурация каждого шаблона описывается динамически, а не хардкодом.
Функционал должен включать:
- хранение шаблонов в локальной базе данных (используйте любую библиотеку для хранения постоянных данных, которую посчитаете нужным использовать);
- CRUD для шаблонов (создание, чтение, обновление, удаление) 🔥🔥 - при условии, что вы реализовали хранение шаблонов в локальной базе данных (продвинутый уровень);
- Масштабирование и позиционирование картинки в шаблоне 🔥🔥 - приложение позволяет масштабировать и позиционировать картинку в шаблоне с помощью жестов;
- Адаптив под альбомную ориентацию, десктоп и веб 🔥🔥🔥 - приложение корректно запускается и отображается в альбомной ориентации, на десктопе и в вебе;
- Адаптация размера шрифта под размер текстового поля 🔥🔥🔥🔥 - текст корректно помещается в выделенной в шаблоне области и меняет свой размер при необходимости.
Умение защитить результаты своей работы - невероятно важный навык для разработчика.
В текущем проекте есть файл /docs/results/RESULT.md
. Этот шаблон нужен как раз для того, чтобы вы могли поделиться результатами вашей работы. Вы можете записать скринкаст, сделать скриншоты или целый README-файл, в котором будет описано, что вы успели сделать.
Это один из критериев, по которому будет оцениваться ваша работа!