Прежде чем начнем, не забудьте уволить вашего CTO/Тимлида, если вы до сих пор не используете Flutter.

Кто я такой и зачем пишу эту статью?

Меня зовут Адрианов Алексей и я пишу на Flutter с первого релиза (декабрь 2018). За эти 5 лет я реализовал 4 коммерческих продукта различной направленности, участвовал в двух стартапах на старте карьеры, а также реализовал примерно десяток приложений “для себя”. Кроме того, имею большой опыт в собеседовании кандидатов на позиции в разные компании и оценке знаний сотрудников на основе собственной грейдовой сетки.

Написать данную статью меня подтолкнули размышления разработчиков, которые в 2024 году не понимают, почему Flutter существует и зачем нужен. Материал статьи может быть полезен менеджерам или стартаперам, запускающим новый проект, чтобы определиться почему стоит использовать Flutter, а также разработчикам, которые уже давно пытаются протолкнуть идею фреймворка в компании, где ее не воспринимают всерьез.

Статья не преследует цели сравнивать Flutter с другими технологиями, поскольку автор в них не разбирается на глубоком уровне (как и вы, возможно, во Flutter). Я хочу подсветить сильные стороны фреймворка и развеять мифы, которые так прочно сидят в сознании людей, даже спустя столько времени после релиза.

Так что же такое Flutter? В 2024 году многие уже слышали о нем, поэтому сильно вдаваться в определение не буду, но для тех, кто сталкивается с ним в первый раз, вот краткая справка. Flutter - мультиплатформенный фреймворк компании Google, который позволяет разрабатывать приложения любой сложности (говорю из личного опыта), делая большой акцент на визуальной составляющей.

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

Dart

О языке

Итак, начнем с основ. Если вы знаете хоть один С-подобный язык, то Dart не станет чем-то сложным. Язык учится быстро и спустя неделю, а то и несколько дней изучения Language Tour вы сможете без проблем заниматься разработкой.

Разработчик через неделю изучения Dart (это я)

Разработчик через неделю изучения Dart (это я)

Кроме того, команда разработки Dart работает совместно с командой Flutter, что позволяет языку соответствовать требованиям фреймворка (например, spread operator), регулярно обновляться и обзаводиться новыми фишками и синтаксическим сахаром.

Часто встречаемая фраза “Это же детище Google, когда-то они его точно забросят” не была бы такой забавной, если бы Google не был основным мейнтейнером андроида (just think about it). Теоретически, возможно все, что угодно: даже мордокнига (запрещенная в России организация) может забросить RN и уйти во Flutter. Dart активно развивается, что говорит о серьезном настрое разработчиков в отношении платформ, поэтому в ближайшие годы точно не стоит ожидать закрытия проекта. Кроме того, большое количество приложений с использованием Flutter публикуются в сторы.

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

Если вкратце - да, Dart однопоточный, но не совсем. Для логики, выполняемой в рамках Event Loop разработчику по прежнему стоит помнить об этом, однако, например, запросы в диск происходят через ThreadPool у DartVM, а не в EventLoop, в котором лишь ожидается получение данных.

Асинхронные операции с сокетами выполняются на главном потоке с использованием OS специфичного механизма неблокирующего I/O (epoll on Linux, kqueue on Mac, overlapped io on Windows). Сокеты OS уведомляют, когда во входящем буфере есть данные, которые можно прочитать без блокировки, или когда есть место в исходящем буфере, чтобы записать данные. Само чтение из буфера / запись в буфер осуществляется синхронным read/write syscallом на главном потоке. Это, правда, обычно быстрая операция. (Спасибо @mraleph за пояснения)