Sobes.tech
Back to questions
Middle
273
questionbank

На какие архитектурные слои делится Flutter?

Sobes Copilot

Get answers in real time

Answer from AI

sobes.tech AI

Flutter делится на следующие архитектурные слои:

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

Вот упрощенное представление иерархии:

[Ваш Код Приложения (Dart Виджеты)]
        |
    [Framework (Dart)]
        |
    [Engine (C/C++)]
      /        \
[Embedder]    [Skia]
   |            |
[Операционная Система]

Embedder запускает Engine, который предоставляет Dart Runtime и API. Framework, написанный на Dart, взаимодействует с Engine черезDart API. Ваш код приложения использует виджеты Framework для построения пользовательского интерфейса. Engine в свою очередь использует Skia для отрисовки элементов на Canvas, предоставляемый Embedder'ом.