Открытый вебинар «Онлайн-интенсив «Создаем приложение на Flutter для Web, iOS и Android». День 1» 18.05.2021 в 20:00 | OTUS >
🔥 Скидка 10% на Подписки Standard и Pro
Составьте план обучения под свои цели и начните экономить с подпиской на курсы
Подробнее
+7 499 938-92-02
Проходил 18 мая 2021 года в 20:00

Открытый вебинар
Онлайн-интенсив «Создаем приложение на Flutter для Web, iOS и Android». День 1

Открытый вебинар онлайн

На бесплатном интенсиве узнаем, что такое Flutter. Как именно Flutter позволяет создавать приложения для Web-платформы, и почему теперь это стабильный функционал. Как именно работает Web-сборка.

Начнём писать приложение (это будет приложение с работой по сети - загрузка списка сущностей + их фильтрация + сделаем блок настроек в приложении, где можно будет менять тему приложения (цвета)).

День 1:

Общая архитектура приложения (папочки, что где лежит + выбор инструмента для state management). Верстка интерфейса для мобильных устройств.

Регистрируйтесь сейчас - напомним в день интенсива!
Преподаватель
Михаил Альфа

Запись

О курсе

Flutter Mobile Developer
86 000 ₽ 77 400 ₽
6 месяцев
Начало 28 августа
  • Научитесь использовать инструменты необходимые для Flutter-разработчика: Dart, Platform-Specific Code, Skia, MWWM, Bloc, Redux, MobX и др.
  • Создадите свой аналог WhatsApp и Telegram, CoinMarketCap, Todoist в рамках разработки индивидуальной проектной работы, которая пополнит ваше портфолио
  • Общение напрямую с преподавателями на лекциях и в Telegram-чате, обсуждение кейсов, задач, которые стоят перед вами

Этот курс подходит вам, если:
— у вас уже …

Программа курса
Модуль 1
Введение в Dart
Модуль 2
Flutter Framework
Модуль 3
Асинхронность и сетевое взаимодействие
Модуль 4
Анимация и мультимедиа в Flutter
Модуль 5
Архитектура приложений, управление состоянием и навигация
Модуль 6
Flutter Engine и взаимодействие с платформой.
Модуль 7
Оптимизация производительности
Модуль 8
Тестирование и публикация
Модуль 9
Курсовой проект
Введение в Dart
В модуле рассматривается синтаксис языка Dart (с учетом Null Safety и новых конструкций последней версии Dart) и инструментальные средства компиляции и анализа приложений, создания и установки пакетов.
Введение в язык программирования Dart
создавать простые приложения на Dart;
определять функции;
использовать стандартную библиотеку для работы со строками и числами.
28 августа, 20:00 — 21:30
Лектор: Руслан Цицер
Алгоритмы на языке Dart
описывать структуры данных и алгоритмы на языке Dart;
использовать шаблоны проектирования и выполнять различные типовые задачи, необходимые для разработки реальных приложений и прохождения собеседований.
4 сентября, 20:00 — 21:30
Лектор: Константин Иванов
Объектно-ориентированное программирование на Dart
использовать внешние модули из pub.dev;
создавать и расширять классы;
выполнять переопределение операторов.
8 сентября, 20:00 — 21:30
Лектор: Руслан Цицер
Инструментальная поддержка Dart
применять инструменты анализа управления зависимостями;
создавать snapshot-артефакты и выполняемые образы для использования на целевых операционных системах и Web.
11 сентября, 20:00 — 21:30
Лектор: Дмитрий Золотов
Домашние задания: 1
ДЗ
Создание интерпретатора математических выражений с поддержкой переменных. План работы:
1. Разработать алгоритм разбора строки с учетом приоритета операций (при необходимости можно вносить изменения в строку)
2. Реализовать функцию (итеративную или рекурсивную) для выполнения последовательности операций
3. Создать класс для вычисления значения произвольной функции с заданными значениями переменных
4. Написать тесты с проверкой результата на выражениях, содержащих операции и их сочетания (например, 2+3*4)
5. Опционально сделать поддержку унарного минуса (например, в выражении -3+5)

Преобразователь должен быть оформлен как класс (конструктор принимает строку с математической функцией) с методом преобразования, принимающим Map с переменными (ключ - название переменной, значение - числовое значение, которое подставляется вместо переменной) и возвращающей значение типа double.

При вычислении значения выражения необходимо учитывать приоритет математических операций. За основу можно взять любой алгоритм (например, https://dev.to/brunooliveira/writing-a-mathematical-expression-evaluator-in-java-1ka6), либо разработать собственный. Для тестирования корректности можно использовать минимум три выражения (x=10).
1) 10*5+4/2-1 (результат 51)
2) (x*3-5)/5 (результат 5)
3) 3*x+15/(3+2) (результат 33)

Должно быть создано не менее 5 тестов (обязательно должны быть тесты на сочетание операций и на использование скобок). Если поддерживается унарный минус, то тесты должны быть сделаны и на эти выражения.

Опционально можно сделать поддержку отрицательных констант с унарным минусом.




### Рекоменуем для начала проверить решение в тренажере, далее по готовности прислать ссылку на github в чат по ДЗ.
Flutter Framework
В модуле подробно изучаются виджеты разметки, ввода информации и отображения содержания в Flutter, архитектурные подходы к декомпозиции виджетов и выделению бизнес-логики, разбираются алгоритмы определения и обработки жестов, особенности разработки Desktop (для Windows, Linux и MacOS) и Web-приложений.
Концепция реактивного пользовательского интерфейса, основные графические примитивы ui.Window
понимать и применять реактивный подход к разработке интерфейсов;
использовать возможности ui.Window для создания простого графического интерфейса.
15 сентября, 20:00 — 21:30
Лектор: Константин Иванов
Анатомия отрисовки виджетов
использовать инструменты для отладки дерева виджетов;
понимать механизмы отрисовки виджетов и концепцию однопроходного размещения и оптимизаций построения дерева виджетов;
применять ключи для корректной обработки виджетов в списке.
18 сентября, 20:00 — 21:30
Лектор: Константин Иванов
Домашние задания: 1
ДЗ
Размещение объектов по вертикали . План работы:
1. Создать простой менеджер размещения, который будет использовать информацию о размере, полученную от объектов (с учетом родительских ограничений) для размещения вертикально на экране (левый край объектов должен быть расположен по одной линии)
2. Написать функцию main с привязкой к ui.window (или WidgetsBinding.instance.platformDispatcher.views.first) для расположения не менее 3-х объектов. В качестве объектов можно использовать как простые примитивы (например, цветной прямоугольник), так и растровые изображения
3. Внешними ограничениями для менеджера размещения должны быть (0,0) в качестве минимального размера и размер экрана (WidgetsBinding.instance.platformDispatcher.views.first.physicalSize) как максимальный размер
Понятие и жизненный цикл виджета
создавать собственные виджеты и определять методы жизненного цикла виджетов;
использовать флаги отладки для диагностики отрисовки виджетов.
22 сентября, 20:00 — 21:30
Лектор: Константин Иванов
Консультация: что внутри Flutter Framework и почему он устроен так
получить ответы на вопросы.
25 сентября, 20:00 — 21:30
Лектор: Руслан Цицер
Базовые виджеты содержания (текст, изображения, пиктограммы). Составные виджеты. Виджеты разметки
использовать встроенные виджеты Flutter Framework;
использовать pub.dev для добавления сторонних виджетов.
29 сентября, 20:00 — 21:30
Лектор: Константин Иванов
Виджеты разметки. Создание прокручиваемых виджетов.
применять виджеты-контейнеры для относительного позиционирования виджетов на экране;
создавать виджеты с возможностью прокрутки содержания.
2 октября, 20:00 — 21:30
Лектор: Гуванч Авезов
Домашние задания: 1
ДЗ
Создание страницы списка рецептов. Дизайн приложения: [****тут****](https://www.figma.com/file/alUTMeT3w9XlbNf3orwyFA/Otus-Food-App?node-id=135%3A691) (эскизы с возможностью получить цвета, размеры и отступы)
и [**тут** ](https://www.figma.com/proto/alUTMeT3w9XlbNf3orwyFA/Otus-Food-App?node-id=102%3A3&scaling=scale-down&page-id=0%3A1&starting-point-node-id=135%3A691) (навигация по приложению)

План работы:
1. Использовать StatelessWidget с получением в качестве аргумента конструктора списка объектов с описанием блюд
2. Список блюд создать в соответствии со схемой данных с сервера (https://app.swaggerhub.com/apis/dzolotov/foodapi/0.2.0), для доступа к списку нужно реализовать класс менеджера, который в дальнейшем будет изменен для использования данных с сервера (сейчас метод менеджера getRecipes будет возвращать список List<Recipe> и использовать константный список, размещенный внутри менеджера).
3. Выполнить верстку страницы списка рецептов и связать ее с менеджером
4. Сделать эту страницу точкой входа в приложение в обертке MaterialApp - Scaffold (в runApp), изменить цвета темы оформления в MaterialApp для соответствия дизайну
Виджеты ввода информации, работа с формами. Часть 1
создавать формы ввода и валидации данных;
изменять оформление и поведение полей ввода.
6 октября, 20:00 — 21:30
Лектор: Руслан Цицер
Виджеты ввода информации, работа с формами. Часть 2
создавать формы ввода и валидации данных;
изменять оформление и поведение полей ввода.
9 октября, 20:00 — 21:30
Лектор: Руслан Цицер
Визуальное оформление (расширение темы), шрифты, градиенты и шейдеры, использование возможностей Impeller
использовать возможности шейдеров и настройки шрифтов для создания сложных визуальных эффектов, реализации трехмерной графики на Impeller Shader;
настраивать визуальное представление виджетов Material/Cupertino и создавать собственные расширения темы.
13 октября, 20:00 — 21:30
Лектор: Гуванч Авезов
Практика по реализации сложной верстки. Навигация и уведомления
делать сложную верстку по предоставленному дизайну, адаптирующуюся под различные устройства в Material/Cupertino-стиле.
16 октября, 20:00 — 21:30
Лектор: Гуванч Авезов
Домашние задания: 1
ДЗ
Создание страницы для добавления нового рецепта. Дизайн приложения: [****тут****]( https://www.figma.com/file/alUTMeT3w9XlbNf3orwyFA/Otus-Food-App?node-id=135%3A691) (эскизы с возможностью получить цвета, размеры и отступы)
и [**тут** ](https://www.figma.com/proto/alUTMeT3w9XlbNf3orwyFA/Otus-Food-App?node-id=102%3A3&scaling=scale-down&page-id=0%3A1&starting-point-node-id=135%3A691) (навигация по приложению)

План работы:
1. Использовать StatefulWidget для верстки формы заполнения данных о новом рецепте
2. Добавить в менеджер возможность получения списка ингредиентов и единиц измерения (схема аналогично API из документации https://app.swaggerhub.com/apis/dzolotov/foodapi/0.2.0), которые будут использовать для добавления шагов и ингредиентов
3. Расширить модель описания рецепта (добавить список ингридиентов и шаги приготовления)
4. Реализовать дополнительные формы для ввода информации о новом ингредиенте и новом шаге (с использованием модального диалога)
5. Сейчас не нужно реализовывать загрузку фотографии, но вместо нее разместить виджет Placeholder
6. Дополнить менеджер списка рецептов из предыдущего домашнего задания методом для сохранения нового рецепта (в дальнейшем реализация будет заменена на работу с сетевым API)
7. Выполнить верстку страницы добавления рецепта и связать ее с менеджером, при наличии ошибок валидации отображать их в соответствующих текстовых полях (стандартными методами TextField)
8. Сделать обновление списка рецептов после завершения добавления (нужно использовать внешний StatefulWidget вокруг списка рецептов и обновлять его после выполнения добавления)
9. Сделать переход в страницу добавления рецепта по кнопке из списка рецентов (с использованием Navigator.push)
Лучшие архитектурные практики для создания приложений
использовать лучшие практики для создания приложения.
20 октября, 20:00 — 21:30
Лектор: Константин Иванов
Выбор темы и организация проектной работы
выбрать и обсудить тему проектной работы;
спланировать работу над проектом;
ознакомиться с регламентом работы над проектом.
23 октября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Курсовой проект. 1. Выбрать тему для курсового проекта
2. Указать тему через кнопку "Предложить тему"
3. Продумать и описать функциональность приложения (должно быть не менее 3 экранов, подключение к сетевому API, можно использовать публичный, локальное хранение, анимации переходов). Также в приложении должно быть предусмотрено взаимодействие с платформенным кодом (например, для определения режима энергосбережения)
4. Разработать необходимые виджеты (с использованием тестовых данных)
5. Реализовать бизнес-логику (контроллеры, объекты хранения состояния или иные, связанные с выбранным подходом к управлению состоянием)
6. Создать тесты для бизнес-логики и виджетов
7. Выполнить сборку aab-артефакта и отправить его в проект (в личном кабинете, в чате этого домашнего задания), а также отправить ссылку на github
Кроссплатформенная разработка для Web
создавать приложения для Web;
понимать возможности и ограничения пакетов при использовании веб-платформы.
27 октября, 20:00 — 21:30
Лектор: Руслан Цицер
Домашние задания: 1
ДЗ
Адаптация для браузера . План работы:
1. Использовать OrientationBuilder и при использовании горизонтальной ориентации в формах использовать ограничение ширины в 50%
2. Если в коде были использованы методы dart:io, сделать доработки для возможности использования в веб (можно использовать универсальный плагин universal_io)
3. Скомпилировать приложение в Web и добавить архив из build/web в github-репозиторий в виде архива
Кроссплатформенная разработка для Desktop
создавать приложения на Flutter для Desktop-систем (Windows, Linux, MacOS).
30 октября, 20:00 — 21:30
Лектор: Константин Иванов
Низкоуровневое рисование с использованием сцены и возможностей Canvas.
использовать графические примитивы и шейдеры Skia для создания сложных сцен;
делать рендеринг виджетов в памяти.
10 ноября, 20:00 — 21:30
Лектор: Константин Иванов
Домашние задания: 1
ДЗ
Создание страницы описания рецепта с возможностью переключения отметки избранного и шагов приготовления. Дизайн приложения: [**тут** ](https://www.figma.com/file/alUTMeT3w9XlbNf3orwyFA/Otus-Food-App?node-id=135%3A691) (эскизы с возможностью получить цвета, размеры и отступы) и [**тут**](https://www.figma.com/proto/alUTMeT3w9XlbNf3orwyFA/Otus-Food-App?node-id=102%3A3&scaling=scale-down&page-id=0%3A1&starting-point-node-id=135%3A691) (навигация по приложению)

План работы:
1. Сделать верстку страницы (StatefulWidget) с описанием рецепта
2. Реализовать переключение кнопки ""Избранное"" (для создания кнопки использовать возможности canvas с Path и кривыми)
3. Расширить менеджер возможностью сохранения комментариев и отметки ""Избранное""
4. Реализовать переключение отметки шагов приготовления (checkbox)
5. Возможность добавить комментарий к рецепту (текстовое поле + кнопка + изменение состояния для отображения нового комментария после добавления)
Консультация по ДЗ + практика
получить ответы на вопросы и попрактиковаться.
13 ноября, 20:00 — 21:30
Лектор: Руслан Цицер
Асинхронность и сетевое взаимодействие
В модуле разбираются способы генерации исходных текстов по описанию модели данных или сетевого API, библиотеки для локального хранения данных и обмена информацией по сети, а также архитектура приложений для Firebase, Auth0 и сервисов Google.
Асинхронность в Dart, потоки и Future
создавать асинхронные генераторы:
использовать возможности получения отложенного результата (Future).
17 ноября, 20:00 — 21:30
Лектор: Константин Иванов
Сетевое взаимодействие, хранение данных на устройстве
создавать код для взаимодействия с сервером по http;
взаимодействовать с локальным хранилищем данных.
20 ноября, 20:00 — 21:30
Лектор: Константин Иванов
Использование кодогенерации во Flutter. Сериализация данных в JSON. Создание неизменяемых классов.
создавать модели данных для API;
выполнять кодогенерацию для создания классов сериализации и неизменяемых классов.
24 ноября, 20:00 — 21:30
Лектор: Дмитрий Золотов
Домашние задания: 1
ДЗ
Получение информации о рецептах от сервера через http, локальное хранение данных. План работы:

1. Подготовить модель данных для локального хранения информации о рецептах для Hive (список рецептов извлекается из коллекции, отдельный объект коллекции - рецепт, внутри него сохраняется информация об ингридиентах/шагах приготовления)
2. Реализовать API-запросы для получения списка рецептов, информации о рецепте, изображения (можно использовать Dio или кодогенерацию), добавления нового рецепта и связывания шагов/ингредиентов в соответствии с API (https://app.swaggerhub.com/apis/dzolotov/foodapi/0.2.0)
3. При отсутствии Интернета использовать локальные данные вместо API (можно использовать flutter_network_connectivity или аналог)
4. Изменить менеджер доступа к информации о рецептах и создания новых рецептов на поддержку сетевых запросов или локального хранилища
5. В любом случае сохранить полученные данные в локальную базу данных через Hive и отправить в API (если интернет доступен)

Апи для получения рецептов доступно по ссылке - https://foodapi.dzolotov.tech
Интеграция с внешними API и бессерверные приложения
интеграция Firebase, Auth0, внешних виджетов (Google Map).
27 ноября, 20:00 — 21:30
Лектор: Руслан Цицер
Консультация по ДЗ + практика
получить ответы на вопросы и попрактиковаться.
1 декабря, 20:00 — 21:30
Лектор: Руслан Цицер
Анимация и мультимедиа в Flutter
В модуле рассматриваются вопросы создания визуальной привлекательности приложений (через программные и внешние анимации, игровые элементы) и работы с мультимедиа (камерой, звуком, видео).
Неявные анимации во Flutter, Hero-анимации
использование неявные анимации для создания визуальных эффектов.
4 декабря, 20:00 — 21:30
Лектор: Гуванч Авезов
Явные анимации во Flutter, переходы между страницами. Управление анимацией. Кривые.
создавать программные анимации с использованием кривых, координированные и последовательные анимации.
8 декабря, 20:00 — 21:30
Лектор: Руслан Цицер
Домашние задания: 1
ДЗ
Создание анимаций перехода между страницами, анимаций для переключения шагов рецепта. План работы:
1. добавить переход между страницами по умолчанию FadeTransition
2. реализовать анимацию изменения состояния чекбокса и сделать ее программно управляемой (через Explicit Animation), можно использовать два виджета и AnimatedCrossFade
3. присоединить запуск анимации в прямом и обратном направлении на событие перехода чекбокса (включение, выключение)
Игровые движки во Flutter. Создание 3D-анимации.
создавать игровые сценарии;
взаимодействовать с WebGL-контекстом в веб-приложении.
11 декабря, 20:00 — 21:30
Лектор: Дмитрий Золотов
Интеграция сторонних анимаций во Flutter-приложение.
добавлять анимации Lottie / Rive в приложение на Flutter;
использовать SVG-анимацию.
15 декабря, 20:00 — 21:30
Лектор: Константин Иванов
Поддержка мультимедиа и камеры во Flutter. Обработка изображений, распознавание и классификация.
получать разрешения и доступ к камере в Flutter-приложении; интегрировать библиотеки машинного зрения;
выполнять классификацию графических объектов.
18 декабря, 20:00 — 21:30
Лектор: Руслан Цицер
Домашние задания: 1
ДЗ
Добавление снимков с камеры и идентификация объектов на сцене. План работы:
1. Подключить внешнюю анимацию для пиктограммы избранного (несколько пульсаций, необходимо реализовать в Rive)
2. Реализовать получение изображения с камеры (действие ""добавить изображение в рецепт""), сохранить его в локальную базу данных и отобразить на странице рецепта галерею (с возможностью полноэкранного просмотра)
3. Изображение с камеры/галереи использовать как источник для детектирования объектов. После выбора изображения (создания фотографии или выбора изображения через плагин image_picker) применить модель SSD MobileNet v1 с помощью Tensorflow Lite (плагин tflite_v2 или tflite_flutter) и обнаружить top5 наиболее вероятных объектов (по аналогии с https://www.tensorflow.org/lite/examples/object_detection/overview), названия и вероятности объектов сохранить в изображении (нарисовать поверх)
Интернационализация и доступность
использовать семантическую разметку для виджетов;
обрабатывать сообщения от подсистемы доступности.
22 декабря, 20:00 — 21:30
Лектор: Руслан Цицер
Консультация по ДЗ + практика
получить ответы на вопросы и попрактиковаться.
25 декабря, 20:00 — 21:30
Лектор: Дмитрий Золотов
Архитектура приложений, управление состоянием и навигация
Модуль полностью посвящен рассмотрению архитектурных подходов к управлению состоянием приложений и реализации навигации между страницами (подходы Navigator и Router).
Inherited-виджеты. Библиотеки Provider и Riverpod.
понимать и применять inherited-виджеты.
12 января, 20:00 — 21:30
Лектор: Гуванч Авезов
Clean-архитектура. Реализация инъекции зависимостей (getit, Provider/Riverpod)
использовать библиотеки инъекции зависимостей;
создавать тестовые реализации.
15 января, 20:00 — 21:30
Лектор: Константин Иванов
Домашние задания: 1
ДЗ
Многоязычный интерфейс и принципы чистой архитектуры . План работы:

1. Добавить библиотеку (любую из доступных на pub.dev) для поддержки переключения языков и перенести все строковые константы в нее.
2. Предусмотрить возможность переключения языка в приложении (строки на другом языке создавать не требуется)
3. Подготовить структуру проекта в соответствии с разделением на логические слои чистой архитектуры (это будет необходимо для следующего домашнего задания).
Redux для управления состоянием, hook
применять архитектуру Redux и hooks для управления состоянием приложения.
19 января, 20:00 — 21:30
Лектор: Дмитрий Золотов
Архитектура MWWM и Bloc
применять архитектуры MWWM и Bloc для управления состоянием приложения.
22 января, 20:00 — 21:30
Лектор: Руслан Цицер
Архитектура MobX
применять архитектуры MobX для управления состоянием приложения.
26 января, 20:00 — 21:30
Лектор: Руслан Цицер
Домашние задания: 1
ДЗ
Flutter. State management. Внедряем один из ранее рассмотренных механизмов управления состоянием приложения. План работы:

1. Выбрать понравившийся state management подход из списка https://docs.flutter.dev/development/data-and-backend/state-mgmt/options и обосновать свой выбор комментарием к ДЗ (не используем GetX ни в кое случае)
2. Внести изменения в код приложения, выделив логику для получения состояния, используя один из ранее рассмотренных подходов к state management, заменить им StatefulWidget.
3. Внести изменения в экран рецепта для управления состоянием isFavourite текущей модели рецепта.
4. Отметку избранного рецепта необходимо показывать и на экране списка рецептов.
5. Добавить сохранение получаемых данных с сервера или локального хранилища (Hive) в выбранный state менеджер.
Модель навигации как управление состоянием. Navigator 2.0
реализовать навигацию и отображение модальных окон.
29 января, 20:00 — 21:30
Лектор: Гуванч Авезов
Домашние задания: 1
ДЗ
Реализация навигации в приложении на основе состояния. План работы:

1. Перевести навигацию приложения на использование Navigator 2.0 (Router), можно использовать кодогенерацию (autoroute)
2. Добавить виджет регистрации-аутентификации и соответствующие обращения к API (работает только при наличии сети Интернет, при отсутствии подключения нужно выдавать ошибку)
3. Реализовать вкладку избранных рецептов и присоединить управление состоянием через кнопку ""избранное""
4. Сделать верстку страницы профиля (по информации из логина)
5. Проверить корректность обновления адреса в браузере при использовании Web-версии приложения
Flutter Engine и взаимодействие с платформой.
В модуле рассматривается архитектура движка Flutter, способы вызова методов и обмена сообщениями с нативным кодом, а также общие подходы к доработке движка и сборке под разные аппаратные платформы.
Взаимодействие с платформенным кодом (platform channels, Pigeon, native assets)
создавать модели HostAPI и генерировать код для обмена сообщениями через каналы.
2 февраля, 20:00 — 21:30
Лектор: Руслан Цицер
Использование нативных Views из Android / iOS, обработка системных событий
выполнять интеграцию нативных элементов в Fluttter-приложение;
получать доступ к Bluetooth и низкоуровневым возможностям.
5 февраля, 20:00 — 21:30
Лектор: Руслан Цицер
Устройство Flutter Engine, Add-to-App
понимать организацию и основные понятия Flutter Engine;
выполнять встраивание приложений в нативные.
9 февраля, 20:00 — 21:30
Лектор: Дмитрий Золотов
Домашние задания: 1
ДЗ
Взаимодействие с нативной платформой. Получение информации от внешнего устройства через bluetooth. План работы:
1. Запросить информацию о доступных Bluetooth Low Energy через плагин (для разработки можно использовать материалы статьи https://punchthrough.com/android-ble-guide/)
2. Отобразить список доступных устройств на странице профиля
Flutter Embedder, запуск приложения на произвольном оборудовании
понимать назначение и уметь создавать свою реализацию Embedding для произвольной платформы.
12 февраля, 20:00 — 21:30
Лектор: Дмитрий Золотов
Консультация по ДЗ + практика
получить ответы на вопросы и попрактиковаться.
16 февраля, 20:00 — 21:30
Лектор: Дмитрий Золотов
Оптимизация производительности
В модуле рассматриваются вопросы анализа производительности, лучшие практики по оптимизации виджетов и алгоритмов приложения, выделению сложной логики в отдельный поток выполнения.
Профилирование потоков приложения
использовать инструменты диагностики для определения узких мест при реализации анимации или сложных интерфейсов.
19 февраля, 20:00 — 21:30
Лектор: Руслан Цицер
Изоляты для вычислительных задач
создавать изолированные потоки выполнения (изоляты) и обмениваться значениями с основным потоком;
использовать возможности создания изолятов через функцию compute.
26 февраля, 20:00 — 21:30
Лектор: Дмитрий Золотов
Домашние задания: 1
ДЗ
Перенос сложной вычислительной задачи (классификация объекта на изображении) в отдельный изолят. План работы:
1. Перенести код распознавания групп объектов в отдельный изолят
2. Обеспечить передачу данных между основным потоком и изолятом (изображение и модель в виде набора байтов через порт, результат распознавания сериализуется как json)
3. В коде распознавания объектов на изображении (при создании снимка) перейти на использование изолята
Тестирование и публикация
В модуле будут рассмотрены вопросы создания автоматических тестов для алгоритмов, виджетов и приложения в целом, подготовки библиотек и приложений к публикации на pub.dev и в магазинах приложений Google Play Store и Apple Store, особенности публикации для Huawei.
Unit-тестирование и виджет-тесты
создавать модульные (unit) и виджет-тесты;
генерировать тесты эталонного представления виджета и выполнять автоматическую проверку корректности (Golden-тесты).
2 марта, 20:00 — 21:30
Лектор: Руслан Цицер
Интеграционные тесты
создавать интеграционные тесты для приложения, выполнять настройку автоматизации.
5 марта, 20:00 — 21:30
Лектор: Константин Иванов
Домашние задания: 1
ДЗ
Разработка автоматических тестов для приложения (тестирование логики и виджетов). План работы:
1. Подготовить юнит-тест для менеджера управления списком рецептов (проверить добавление/получение рецепта), использовать mockito/mocktail для подмены слоя доступа к данным
2. Создать тестирование виджетов для страницы информации о рецепте (переключение ""избранное"", шагов приготовления рецепта, отображение всех виджетов)
3. Сделать golden-тест для карточки рецепта (виджет, который используется в списке рецептов)
4. Сделать интеграционный тест (просмотр списка рецептов, переход в рецепт, проверить что открывается страница с информацией о рецепте, а также возможность использование кнопки ""избранное"")
Создание собственных компонентов, публикация на pub.dev
подготавливать библиотеки к публикации на pub.dev.
12 марта, 20:00 — 21:30
Лектор: Гуванч Авезов
Сбор информации о функционировании приложения, публикация в магазины
использовать облачные сервисы анализа ошибок;
подготавливать приложение к публикации в магазинах приложений.
16 марта, 20:00 — 21:30
Лектор: Дмитрий Золотов
Домашние задания: 1
ДЗ
Подготовка приложения к публикации в магазине. План работы:
1. Определить необходимые метаданные в pubspec.yaml (название приложения, версия)
2. Установить ключи публикации (можно использовать отладочные ключи при отсутствии учетной записи разработчика) в build.gradle
3. Выполнить сборку артефакта aab и добавить его к проекту
Курсовой проект
Завершающий модуль с самостоятельной разработкой функционального приложения с поддержкой сетевого взаимодействия, изолятов, платформенного кода, разметки страниц с использованием анимации и навигации.
Консультация по проектам и домашним заданиям
получить ответы на вопросы по проекту, ДЗ и по курсу.
19 марта, 20:00 — 21:30
Лектор: Дмитрий Золотов
Защита проектных работ
защитить проект и получить рекомендации экспертов.
9 апреля, 20:00 — 21:30
Лектор: Дмитрий Золотов
Подведение итогов курса
узнать как получить сертификат об окончании курса, как взаимодействовать после окончания курса с OTUS и преподавателями, какие вакансии и позиции есть для выпускников (опционально - в России и за рубежом) и на какие компании стоит обратить внимание.
16 апреля, 20:00 — 21:30
Лектор: Дмитрий Золотов

Преподаватель

Михаил Альфа
РСХБ-ИНТЕХ, Ведущий разработчик
3,5 года разработки (по ощущениям — все 7).

Прошел путь от backend-разработчика на PHP до mobile-dev'а на Flutter сквозь тернии frontend'а. По-прежнему любит писать backend и frontend, а mobile — просто обожает.

Считает, что очень повезло с работой — она является еще и хобби.

Участвовал в разработке разных проектов. Среди них — проекты с нуля, проекты, разработанные в «эпоху динозавров», а также проекты, которые принято называть enterprise. Работал как один, так и в команде, где уже тесновато.

Жаждет поделиться знаниями и опытом: пишет технические статьи, проводит вебинары, участвует в международных хакатонах в качестве судьи и ментора и не планирует на этом останавливаться.