Обновить
8K+
9
Адещенко Кирилл@kaparray

Engineering Manager РСХБ

24,1
Рейтинг
11
Подписчики
Отправить сообщение
Если просто, то RN и Flutter очень похожи по концепциям. Когда общался с React разработчиками у себя в компании, то различия очень маленькие. В React/RN есть дом, в Flutter есть дерево виджетов. Ключевая разница в методе отрисовки UI компонентов.

В Flutter есть тоже бриджинг для прокалывания данных: Flutter -> Native -> Skia Canvas.

Но разница в том что Flutter сразу рисует всё на канаве, а вот RN прокидывает данные о UI так: RN -> Native -> Compose Native UI -> Render Native with Skia Android.
Классная статья. Хотел бы ещё уточнить что у каждого элемента есть свой Lifecycle.

/// Tracks the lifecycle of [State] objects when asserts are enabled.
enum _StateLifecycle {
/// The [State] object has been created. [State.initState] is called at this
/// time.
created,

/// The [State.initState] method has been called but the [State] object is
/// not yet ready to build. [State.didChangeDependencies] is called at this time.
initialized,

/// The [State] object is ready to build and [State.dispose] has not yet been
/// called.
ready,

/// The [State.dispose] method has been called and the [State] object is
/// no longer able to build.
defunct,
}


BuildOwner — отвечает за отслеживание, какие виджеты нуждаются в перестройке, и обрабатывает другие задачи это относится к деревьям виджетов в целом, например к управлению списком неактивных элементов для дерева.

Вызов метода setState, приводит к вызову у ElementObject метода markNeedsBuild().
Этот метод в свою очередь помечает ElementObject «dirty». И добавляется в список который хранится в BuildOwner.
_dirty = true;

Далее вызывается метод buildScope у BuildOwner который вызывает RenderObjectToWidgetAdapter. Там происходит вызов метода rebuild у каждого ElementObject который стал dirty.
После этого rebuild вызывает performRebuild в котором происходит проверка canUpdate и вызывается updateChild который в свою очередь возвращает новый ElementObject.

Далее после того как все новые ElementObject были созданы Flutter SDK начинает рендрить новые элементы в редеете всех виджетов.

Про алгоритмы рендеринга можно почитать тут: flutter.dev/docs/resources/inside-flutter
Спасибо что обратили внимание, но к сожалению это не перевод, а личный опыт. Я не скрываю что примерами реализации я вдохновлялся в данной статье, так как по поему мнению это очень хороший пример
К сожалению я не могу перевести продакшен приложение на beta канал. Это может вызвать много проблем
Для того чтобы вы могли использовать extension, вам нужно сделать import. Глобальных extension к сожалению нет.
К сожалению сейчас вы не можете сделать разные проекты с разной версией Dart и вам придётся переключаться (возможно и нет, всё зависит от проекта). Насколько я знаю сейчас команда dart ведёт над этой фичёй разработку. Думаю в ближайшем будущем вы можете указать к каждому проекту определённую версию dart.

на Mac:
brew upgrade dart

на Windows:
choco upgrade dart-sdk

на Linux:
используйте apt-get
2

Информация

В рейтинге
335-й
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность