Стелем мягкую соломку на жёсткий Flutter

Содержание

Слайд 2

Стелем мягкую соломку на жёсткий Flutter

Стелем мягкую соломку на жёсткий Flutter

Слайд 3

Слайд 4

1. Первые шаги

1. Первые шаги

Слайд 5

Получи базовые знания в Android и iOS.

Получи базовые знания в Android и iOS.

Слайд 6

Необходимый минимум Структура проектов Синтаксис языков (Kotlin / Swift) Запрос и

Необходимый минимум

Структура проектов
Синтаксис языков (Kotlin / Swift)
Запрос и получение пермишнов
Аспекты работы

приложения в фоне
Настройка доставки пушей (APN)
Сборка релизных артефактов
Слайд 7

Изучи все коробочные виджеты.

Изучи все коробочные виджеты.

Слайд 8

Неочевидное рядом Простые часто используемые виджеты, которые многие путают (Expanded, Flex,

Неочевидное рядом

Простые часто используемые виджеты, которые многие путают (Expanded, Flex, Wrap)
Простые

виджеты узкого применения (Divider)
Сложные виджеты разметки (CustomMultiChildLayout)
Редко используемые виджеты разметки (IntrinsicHeight, OverflowBox, FittedBox)
Сложные виджеты для реализации скролл-эффектов (все Sliver-виджеты)
Слайд 9

Разберись с тем, как работают констрейнты при вёрстке.

Разберись с тем, как работают констрейнты при вёрстке.

Слайд 10

Неочевидность №1

Неочевидность №1

Слайд 11

2. На старте проекта

2. На старте проекта

Слайд 12

Настрой релизную сборку.

Настрой релизную сборку.

Слайд 13

Настрой релизную сборку.

Настрой релизную сборку.

Слайд 14

Настрой релизную сборку. Здесь можно найти просветление

Настрой релизную сборку.

Здесь можно найти просветление

Слайд 15

Настрой CI/CD.

Настрой CI/CD.

Слайд 16

Даже если всё против тебя Разверните Github Actions на self-hosted runner.

Даже если всё против тебя

Разверните Github Actions на self-hosted runner.
Необходимые шаги:
Сборка

(хотя бы дебажная)
Прогон тестов
Форматирование
Можно начать копать отсюда.
Слайд 17

Сразу закладывай механизм локализации.

Сразу закладывай механизм локализации.

Слайд 18

Советы по локализации Заложи механизм локализации даже если приложение пока моноязычное

Советы по локализации

Заложи механизм локализации даже если приложение пока моноязычное
Работай со

строками только на UI, никогда не тащи их на уровень модели
Никогда не надо хардкодить строки!
Не экспериментируй со сторонними решениями
Intl решает свою задачу хорошо
Не пытайся работать с локализацией без плагинов для IDE
Слайд 19

Сконфигурируй сборки для дебага, тестирования и релиза.

Сконфигурируй сборки для дебага, тестирования и релиза.

Слайд 20

Конфигурационный арсенал Flavors (Android) и schemes (iOS) для настроек свойств сборки

Конфигурационный арсенал

Flavors (Android) и schemes (iOS) для настроек свойств сборки (id,

название, иконка)
Main-файлы для настроек деталей реализации (base URL, feature toggles)
--dart-define ни для чего
Слайд 21

Добавь debug-экран с полезными фичами для отладки.

Добавь debug-экран с полезными фичами для отладки.

Слайд 22

Ваш QA будет в восторге Смена base URL на лету Настройка

Ваш QA будет в восторге

Смена base URL на лету
Настройка прокси
Демонстрация UI

Kit
Демонстрация нотификаций
Включение/отключение feature toggles
Не забудьте выпилить debug-экран из prod-сборки.
Слайд 23

Ваш QA будет в восторге

Ваш QA будет в восторге

Слайд 24

Сразу правильно организуй работу с темой.

Сразу правильно организуй работу с темой.

Слайд 25

Советы по стилизации темы Некоторые свойства темы могут отвечать за что-то

Советы по стилизации темы

Некоторые свойства темы могут отвечать за что-то неожиданное.

Трогай их с осторожностью. Особенно canvasColor.
Стилизацию выполняйте либо в теме, либо в теле переиспользуемого компонента
Если ваши дизайнеры не работают в рамках своего UI Kit, все ваши старания всё равно не принесут успеха
Слайд 26

Сделай всё, что от тебя зависит, чтобы в проекте появился UI Kit.

Сделай всё, что от тебя зависит, чтобы в проекте появился UI

Kit.
Слайд 27

widgetbook.io

widgetbook.io

Слайд 28

Используй ScreenUtil.

Используй ScreenUtil.

Слайд 29

Абсолютная адаптивность

Абсолютная адаптивность

Слайд 30

Спроектируй навигацию.

Спроектируй навигацию.

Слайд 31

Первое правило навигации «Если долго писать приложение, когда-нибудь обязательно прилетит задача

Первое правило навигации

«Если долго писать приложение, когда-нибудь обязательно прилетит задача на

реализацию дип-линков».
Возможно, вам понравится go_router.
Слайд 32

3. Продуктивность

3. Продуктивность

Слайд 33

Пользуйся готовыми плагинами или пиши их сам.

Пользуйся готовыми плагинами или пиши их сам.

Слайд 34

Плагины для VS Code Better Comments Color Highlight Rainbow Brackets Pubspec

Плагины для VS Code

Better Comments
Color Highlight
Rainbow Brackets
Pubspec Assist
Пишите свои генераторы шаблонного

кода.
Слайд 35

Отлаживай в web, если это возможно.

Отлаживай в web, если это возможно.

Слайд 36

Генерация сетевого слоя спасёт очень много времени* * Если ты найдешь хотя бы один рабочий генератор

Генерация сетевого слоя спасёт очень много времени*

* Если ты найдешь хотя

бы один рабочий генератор
Слайд 37

SurfGen

SurfGen

Слайд 38

4. Осторожно, Dart!

4. Осторожно, Dart!

Слайд 39

Используй миксины с осторожностью.

Используй миксины с осторожностью.

Слайд 40

Обратная сторона миксинов

Обратная сторона миксинов

Слайд 41

Забудь о существовании «!»

Забудь о существовании «!»

Слайд 42

Задачка для собеседования

Задачка для собеседования

Слайд 43

Соблазнительно опасное решение

Соблазнительно опасное решение

Слайд 44

Усиливай типизацию.

Усиливай типизацию.

Слайд 45

Бой dynamic’ам!

Бой dynamic’ам!

Слайд 46

Строго настраивай статический анализатор кода.

Строго настраивай статический анализатор кода.

Слайд 47

Можно долго настраивать самому А можно просто подключить наш пресет с

Можно долго настраивать самому

А можно просто подключить наш пресет с очень

строгими настройками статического анализиатора!
surf_lint_rules
Слайд 48

Не закрывай глаза на ворнинги.

Не закрывай глаза на ворнинги.

Слайд 49

Тебе не нужен RxDart.

Тебе не нужен RxDart.

Слайд 50

Единственная ниша RxDart Отложенный результат некоторой операции – Future Работа с

Единственная ниша RxDart

Отложенный результат некоторой операции – Future
Работа с потоками данных

– Stream
”Настоящая” работа в фоне – Isolate
Сложные операции с потоками данных, синхронизация потоков данных – RxDart
Слайд 51

5. Качество кода

5. Качество кода

Слайд 52

Установите правила. Следуйте им.

Установите правила. Следуйте им.

Слайд 53

Структурируйте файлы проекта по фичам.

Структурируйте файлы проекта по фичам.

Слайд 54

Контролируйте нейминг и состав файлов проекта.

Контролируйте нейминг и состав файлов проекта.

Слайд 55

Всего несколько правил Один файл – один класс Один файл –

Всего несколько правил

Один файл – один класс
Один файл – один виджет
Имя

файла == имя класса
Слайд 56

Не бойтесь доверять кодогенерации простые задачи.

Не бойтесь доверять кодогенерации простые задачи.

Слайд 57

Освободите себе время Нет ни одной рациональной причины не использовать кодогенерацию для моделей данных (например, json_serializable).

Освободите себе время

Нет ни одной рациональной причины не использовать кодогенерацию для

моделей данных (например, json_serializable).
Слайд 58

Следование архитектуре важнее выбора конкретного решения.

Следование архитектуре важнее выбора конкретного решения.

Слайд 59

Слайд 60

Elementary новый MWWM Нет ни одной рациональной причины не использовать кодогенерацию для моделей данных (например, json_serializable).

Elementary новый MWWM

Нет ни одной рациональной причины не использовать кодогенерацию для

моделей данных (например, json_serializable).
Слайд 61

Не откладывай тесты на потом.

Не откладывай тесты на потом.

Слайд 62

Не знаешь с чего начать? Пиши Golden-тесты.

Не знаешь с чего начать? Пиши Golden-тесты.

Слайд 63

Тесты, которые сами себя пишут

Тесты, которые сами себя пишут

Слайд 64

6. Качество продукта

6. Качество продукта

Слайд 65

Не забывай прогревать анимации.

Не забывай прогревать анимации.

Слайд 66

Rebuild stats – первый инструмент при борьбе с лагами.

Rebuild stats – первый инструмент при борьбе с лагами.

Слайд 67

Ищем предателя

Ищем предателя

Слайд 68

Пару слов в заключение

Пару слов в заключение

Слайд 69

Telegram: @saturov twitter.com/saturovv saturov@surfstudio.ru Спасибо. Мои контакты:

Telegram: @saturov

twitter.com/saturovv

saturov@surfstudio.ru

Спасибо.
Мои контакты: