Маршрут

  1. 1Constraints и деревья
  2. 2Архитектура
  3. 3Данные и тесты
  4. 4Профиль и доступность
ЭтапЧто получится
Constraints и деревьяОбъяснить layout и обновление UI
АрхитектураРазделить экран, состояние и источники данных
Данные и тестыПроверить миграции и пользовательские сценарии
Профиль и доступностьНайти узкое место и проверить доступность

Если Dart пока незнаком, сначала пройдите языковой маршрут.

Интерфейс и устройство фреймворка

Flutter Learning Pathway

официальный маршрут для старта

Подходит, когда Dart уже знаком, а Flutter пока нет: последовательные упражнения и небольшие приложения вместо случайного порядка виджетов. Это вводный практикум, после которого стоит расширять программу обучения. После освоения основных экранов переходить к следующим пунктам — там начинается более интересная часть.

№ 23★ Начните здесь

Understanding Constraints

один из первых материалов для чтения

Объясняет, откуда берутся размеры элементов и почему width: 100 не всегда означает фактическую ширину 100. Row, Column, Expanded, Flex, ограничения и неограниченное пространство. После него вёрстка становится системой правил, а не ритуалом «оберни ещё в один Container и попробуй Expanded».

№ 24★ Начните здесь

Architectural Overview + Inside Flutter

как работает сам фреймворк

Связь Widget, Element и RenderObject, обновление дерева, layout, ключи, slivers и ленивое построение. Первый материал даёт карту системы, второй раскрывает алгоритмические решения. Это не руководство по раскладыванию приложения на папки: это объяснение механики, на которой держится интерфейс.

Архитектура и платформенная интеграция

№ 25★ Начните здесь

App Architecture + Compass Case Study

архитектура с работающим примером

Views/view models, repositories/services, зависимости, тесты и окружения; рядом полный исходный код Compass. Ценность — в связном разборе решений, а не в обязательном количестве слоёв. Авторы прямо допускают другие способы управления состоянием и передачи данных: это рекомендации, не религия MVVM.

Platform Channels и Pigeon

связь с Kotlin/Java/Swift

Сообщения между Dart и платформенной частью, асинхронность, ограничения потоков и типизированная генерация интерфейсов через Pigeon. Полезный разбор именно границы систем: где сериализуются данные, кто обрабатывает вызов и как возвращается результат. Не путать с FFI: channels и вызовы C ABI решают разные задачи.

Riverpod Docs + Testing Providers

управление состоянием с тестируемыми зависимостями

Брать не только стартовый пример, но и жизненный цикл providers, disposal, зависимости и overrides в тестах. Именно эти темы показывают, зачем библиотека нужна помимо замены setState. Синтаксис обязательно сверять с текущими руководствами: статья под старую major-версию — не надёжный источник актуального API.

Bloc: Flutter Todos

полноценный учебный пример событий и состояний

Не очередной counter: есть слой данных, repository, изменения списка, фильтрация и тесты. Его полезно разбирать как альтернативную модель организации логики и сравнивать с Riverpod по конкретным задачам. Необязательно заранее осваивать оба фреймворка до совершенства: полезнее понять, что именно каждый делает явным.

Производительность и тесты

Performance Best Practices + DevTools Performance

профилирование до оптимизации

Работа UI- и raster-частей кадра, лишние build/layout/paint, стоимость графических операций и временные трассы. Важная практическая деталь: debug-сборка не подходит для репрезентативной оценки производительности, нужен соответствующий режим профилирования. Полезно, когда хочется заменить «Flutter почему-то тормозит» конкретной измеренной причиной.

Testing Overview

разобраться, что именно проверять

Unit-, widget- и integration-тесты, их стоимость и границы. Читать не ради определения трёх терминов, а ради выбора подходящего уровня проверки. Например, тест бизнес-правила и сценарий взаимодействия с реальным устройством не должны автоматически становиться одинаковыми тяжёлыми end-to-end-тестами. В документе есть переходы к практическим руководствам.

Patrol

когда тест выходит за пределы Flutter-дерева

Для сценариев с системными разрешениями, уведомлениями и нативными элементами интерфейса. Важное отличие: официальный integration_test сам по себе не умеет взаимодействовать со всем таким UI; документация Flutter отдельно указывает на Patrol для этих задач. Изучать после widget-тестов, а не пытаться заменить им вообще всё тестирование.

Данные и качество продукта

№ 32★ Начните здесь

Drift + Migrations

локальные данные без «потом разберёмся»

Типизированные запросы, реактивные выборки, транзакции и изменение схемы базы. Особенно ценная часть — миграции вместе с тестированием сохранности данных, а не первый SELECT. В руководстве есть инструменты генерации миграций и тестов. Отличный следующий шаг после демо, которое умеет только сходить в HTTP API.

LocalSend

читать код настоящего кроссплатформенного продукта

Передача файлов между устройствами, сетевой протокол, платформенные различия и реальная структура проекта. При опыте работы с сетями особенно интересен переход от UI к обнаружению устройств и передаче данных. Сборку делать на зафиксированном проектом Flutter, а не на случайном последнем: README прямо предупреждает о несовпадении версий.

Flutter Accessibility

качество интерфейса за пределами красивого скриншота

Экранные дикторы, подписи элементов, масштабирование текста, контраст и удобство нажатий. Здесь есть практический checklist перед выпуском. Это часть базового понимания мобильного UI: приложение должно оставаться пригодным к использованию при другом размере текста и способе взаимодействия, а не только на устройстве автора.

Дальше

Проверьте поведение приложения при потере сети и закрытии процесса. Для Android пригодится платформенный маршрут, перед релизом — безопасность и выпуск.