Flutter делится на следующие архитектурные слои:
- Embedder: Отвечает за взаимодействие с операционной системой. Предоставляет платформо-специфичный вход для отрисовки поверхности, доступа к службам доступности, вводу пользователя и управлению жизненным циклом. Embedder написан на языке, подходящем для конкретной платформы (Java для Android, Objective-C/Swift для iOS, C++ для Windows/Linux/macOS).
- Engine: Ядро фреймворка. Реализован в основном на C/C++. Предоставляет низкоуровневую функциональность: Skia (графическая библиотека 2D), Text (библиотека для работы с текстом), IO (ввод/вывод), Dart Runtime, Flutter Engine (планирование задач, управление рендерингом, композитинг).
- Framework: Написан на Dart. Это Dart API, с которым Flutter-разработчики взаимодействуют напрямую. Состоит из нескольких уровней:
- Foundation: Базовые классы и утилиты.
- Widgets: Основа UI в Flutter. Виджеты описывают конфигурацию элементов интерфейса.
- Rendering: Абстракции для рендеринга, предоставляющие низкоуровневые объекты для построения деревьев рендеринга.
- Painting, Gestures, Animation, etc.: Уровни, предоставляющие функциональность для отрисовки, обработки жестов, анимации и т.д.
- Material/Cupertino Libraries: Наборы виджетов, реализующих дизайн-системы Material Design и iOS Cupertino.
Вот упрощенное представление иерархии:
plaintext
Embedder запускает Engine, который предоставляет Dart Runtime и API. Framework, написанный на Dart, взаимодействует с Engine черезDart API. Ваш код приложения использует виджеты Framework для построения пользовательского интерфейса. Engine в свою очередь использует Skia для отрисовки элементов на Canvas, предоставляемый Embedder'ом.