Предисловие: прежде чем приступить к разработке нового фреймворка, необходимо понять структуру и характеристики фреймворка в целом, а также иметь предварительное представление о фреймворке.В этой статье кратко разбирается фреймворк Flutter для справки;
Фреймворк флаттера
На этой архитектурной диаграмме инфраструктура Flutter может быть разделена на уровень Framework и уровень Engine;
Flutter Framework: весь слой фреймворка реализован на языке Dart, который предоставляет набор базовых библиотек для обработки анимации, рисования и жестов. И набор библиотеки компонентов пользовательского интерфейса инкапсулирован на основе чертежа и подразделяется на два стиля компонентов.
Materail: виджет в стиле Android, включая следующие категории
- Инфраструктура приложений и типы навигации (Scaffold, Appbar, BottomNavigationBar и т. д.)
- Кнопки (плавающие кнопки, кнопки меню и т. д.)
- Входы и селекторы (флажок, радио, переключатель и т. д.)
- диалог, панель
- макет
Cupertino: Виджет в стиле IOS, в основном включающий:
CupertinoTabBar, CupertinoPageScaffold, CupertinoTabScaffold, CupertinoTabView
Flutter Engine: это чистый уровень фреймворка C++, включающий движок Skia (высокопроизводительный движок рендеринга), среду выполнения Dart, движок набора текста и т. д. Он может запускать код Dart в режиме JIT, JIT Snapshot или AOT (предварительно скомпилированный). AOT напрямую компилирует исходный код Dart в локальный байт-код без процесса интерпретации и выполнения, что повышает производительность выполнения. Существенным отличием от Java является то, что «потоки» Dart (Isolate) не используют общую память, их соответствующие кучи (Heap) и стеки (Stack) изолированы и взаимодействуют друг с другом через каналы сообщений. Таким образом, у Dart нет проблем с конкуренцией данных и синхронизацией состояния переменных.Процесс рендеринга всего виджета Flutter Framework выполняется изолированно.Когда код вызывает библиотеку dart:ui, реализация Native Binding в библиотеке dart:ui предоставлен. Эта среда выполнения также управляет доставкой сигналов VSync, заполнением данных графического процессора и т. д., а также отвечает за доставку клиентских событий в код в среде выполнения.
Пожалуйста, укажите источникEmail:linguowu0622@gamil.com