Pull to refresh

Comments 35

Стиль вольный, но живой, поэтому засчитано :) Поддерживаю, flutter отличная платформа. Только вот я полистал статьи, до июля (дальше не стал) и не нашёл где его хоронят. Это флешбеки какие-то?

Благодарю! Статья, где его хоронят вряд-ли объективно выживет, но вот в комментариях "умы" его только так хоронят. А так были новости примерно в 2023 насчет гугл кинул флаттер.

Это философский спор. Flutter рендерит свой UI через собственный движок (Skia, теперь Impeller).

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

Флаттер пока тупо не готов. Идея со Скией, базовое архитектурное решение, провалилась - что, импеллер готов 100%? Ну тогда хотя бы аналог Bevy покажи! Идея с тремя потоками, базовое архитектурное решение, провалилась - флаттер мужественно переписывает, но когда будет готово - загадка.

Да, на флаттере пишут много, но это не значит что его невкусно хейтить - люди просто боятся попасть в ситуацию когда придётся такое вот, как на флаттере писано, писать самому. Философский вопрос - Флаттер он чего first? Вот стек на JavaScript - он Web first, добавляем Electron и Capacitor - покрываем всё.

Флаттер был стратегически нужен Гуглу пока пелась Фуксия, сейчас Гуглу стратегически интереснее многоплатформенный Котлин. Зная Гугол…

Идея что Дарт идеален для создания интерфейса - дурь, это виляние хвоста собакой в предположении что приложение - в основном интерфейс.

Установите Flutter, создайте первый проект, сделайте Hot Reload. Почувствуйте эту магию. А потом решайте.

Эту магию я ещё в раннем .Net видел. Если делать, то не hot reload, а смотреть как Flutter скрывает мерзость сборки Андроид приложения. С одного проекта решать - так себе совет.

Я не говорю что Flutter (уже) умер, я говорю что нечего удивляться что его хоронят. А почему Dart не поимел TypeScript в особо извращённой форме - ума не приложу, да и Питончику можно бы побеспокоиться кажется мне.

Хотел привести в пример как раз ваш прошлый коммент, но вы меня опередили)

Я понимаю то, что вы можете не любить флаттер. Ок, это ваш выбор. Но зачем самоубийством кармы заниматься выливая столько бреда не по фактам? Поделитесь, мне реально интересно в чем толк, возможно не зная этого я теряю что-то ценное...

  • «Flutter не рендерит своё, подражает нативу» — ложно.
    Официально: Flutter не использует браузер/WebView и не использует OEM-виджеты платформ. Он рисует свои виджеты собственным рендерером (движок Flutter → Skia/Impeller). Отсюда и единый внешний вид: хотите Material, хотите Cupertino, хотите полностью кастомный. Это не «имитация нативного», это собственная отрисовка пикселей. docs.flutter.dev

  • «Идея со Skia провалилась; Impeller “не готов 100%”» — подмена фактов.
    Impeller — продакшен-рендерер и, согласно актуальной документации, стоит по умолчанию на iOS и Android (API 29+) в текущих релизах 3.27+/3.29+. Это эволюция рендера ради предсказуемости (устранение shader jank), а не «провал» Skia. docs.flutter.dev

  • «Покажите аналог Bevy — иначе Impeller не готов» — некорректный критерий.
    Flutter — UI-SDK, а не игровой движок. Для игр есть зрелый 2D-движок Flame (официально промотируется в Flutter Games), для 3D есть Flutter GPU API и библиотека flutter_scene (3D поверх Impeller, в активной разработке). Отсутствие «аналогов Bevy в ядре» не отменяет готовности Impeller для прикладных приложений. flutter.dev

  • «Модель трёх потоков провалилась; переписывают неизвестно когда» — неверно.
    Это спланированная архитектурная модернизация: «Great Thread Merge». В 3.29 на iOS/Android UI- и platform-потоки объединены по умолчанию; в 3.35 то же сделано для macOS/Windows (зеркалируя мобильные). Это не «провал», а целенаправленное упрощение нативной интероп-модели и снижение накладных расходов. docs.flutter.dev

  • «Web-first стек (JS+Electron/Capacitor) покрывает всё, а Flutter — нет» — подмена задачи.
    Flutter сознательно не опирается на браузер/веб-движок, а рисует сам, чтобы обеспечить предсказуемость и единый UI на всех платформах. Это другая ось компромиссов: меньше “веса” веб-слоя и больше контроль над кадром. Официальный FAQ прямо подчёркивает эту разницу. docs.flutter.dev

  • «Google “переключился” на Kotlin Multiplatform; Flutter был нужен только под Fuchsia» — утверждение без доказательств.
    Позиция Google по KMP: поддержка для шаринга бизнес-логики; это не замена Flutter (который решает ещё и унификацию UI). Одновременная поддержка разных стратегий — нормальная продуктовая политика. Кроме того, Fuchsia и сейчас имеет актуальные релиз-ноты/дорожную карту — сказки про «похороны» несостоятельны. Android Developers Blog

  • «Dart “не идеален для UI”» — мимо цели.
    Dart выбран под требования Flutter: JIT для stateful hot-reload в развитии и AOT в продакшене (нативный ARM-код с быстрым стартом и предсказуемой производительностью), плюс модель isolates для конкурентных задач. Это технические свойства, критичные именно для UI-SDK, а не лозунги. docs.flutter.dev

  • «Hot reload — это “магия”, которую я ещё в раннем .NET видел» — и что?
    Горячая перезагрузка есть и в .NET — да. Это лишь доказывает, что технология полезна и давно признана индустрией; у Flutter просто другая реализация за счёт JIT-рантайма Dart и интеграции с фреймворком виджетов. Microsoft Learn

ваш шаг, Господин...

Шага не будет, джентльмен в конвульсиях умер

Я понимаю то, что вы можете не любить флаттер.

Ничерта Вы не понимаете, включая то, что Вам говорят и то, что предмет обсуждения меняется от любить или не любить только до выхода из младших классов. Хотя, это до ЕГЭ так было… И не понимаете, что шансов собеседнику не знать ту тривию, которую Вы приводите как аргументы - чистый ноль. И что кто-то вообще может бредить не по фактам - тоже чистый ноль.

Но зачем самоубийством кармы заниматься

А зачем заниматься её сохранением? Чтобы убить больше времени на комментирование? Хабр потребил несколько аккаунтов, без разрушения кармы у меня экспериментальные воздействия удавались плохо, позволил сделать интересные (мне) выводы об аудитории, и на этом всё - свои идеи любителя социологии я исчерпал.

Поделитесь, мне реально интересно в чем толк

Делиться уже пробовал, попробую объяснить.

Flutter не использует

На то, ЧТО делает Флаттер, ответ - КАК он это делает. А делает он как раз то, о чём вам говорят - имитирует натив. Да, самостоятельно рисуя пиксели. Да, не используя нативные компоненты, то есть через задницу, и не используя WebView, то есть не делая то, что было бы следующим по умности решением после выработки своего единственного языка дизайна.

И представлять «хотите то, хотите сё» как достоинство - глупо, медвежья услуга, это недостаток. Причины: классика от «партнёров» про «где три варианта - там нет ни одного хорошего» и то, что iOS с Андроидом не исчерпывают варианты для хотеть.

Это эволюция рендера ради предсказуемости

Ага, «эволюция». А сдача в плен - эволюция оборонительной тактики. Ещё бы «отрицательный рост» приплели. Что такая «эволюция» возможна - это для Флаттера плюс, кстати, архитектурные ошибки такого масштаба обычно фатальны. А факт её существования - минус…

Это спланированная архитектурная модернизация:

А почему ЭТО не «эволюция»? То же самое, вариант два - не случайность, значит.

Flutter был нужен только под Fuchsia» — утверждение без доказательств.

А по жизни доказательства появляются раньше или позже чем становится уже поздно? Ещё недавно я бы написал - это очевидно. Сейчас, когда Гугол одной рукой превращает Андроид в терминал приёма приказов по цифровому концлагерю, а другой вставляет в него виртуалку с Дебиан - уже не очевидно. Но чем больше в Гугле шизы - тем больше риск для Флаттера.

Dart “не идеален для UI”» — мимо цели.

Где я говорил идеален или нет? Дарт был выбран за то, что лучше всего, в отдельных воспоминаниях - идеально, подходил для создания графического фреймворка. Подход изначально ошибочен - если в фреймворке и приложении используется один язык, что пока однозначно но AI не дремлет, то выбор языка должен основываться на интересах приложения, а не фреймворка.

Что это породило, в третий раз, «эволюцию» - отменно видно по эволюции Dart. Я вижу как люди удивляются - Dart такой классный, а вне Флаттера не живёт, почему так? Гипотеза - и поэтому тоже.

«Hot reload — это “магия”, которую я ещё в раннем .NET видел» — и что?

А то, что приводить Hot Reload как преимщество - можно, но осторожнее, чтобы не выглядело её натягиванием на.

Ниже написали, что у Флаттера нет конкурентов, разве что Qt. Похоже на то, но Zig…

чистый ноль

Господин, вообще-то чистый ноль - это абсолютная пустота, т е абсолютная истина, ничем не запачканная. В данном контексте имеется в виду не запачканная моей призмой восприятия и лишенная моей отсебятины.
И это правда, я привожу вам аргументы, без отсебятины, по ссылкам вы можете найти подтверждение моим словам, вы не приводите ссылок, потому что у вас их нет, потому что всё, что вы говорите - это ваша отсебятина.

имитирует натив. Да, самостоятельно рисуя пиксели.

т е когда художник мастерски рисует ваш портрет, прям один в один - он плохой художник? Флаттер более универсален чем натив, универсален тем, что может рисовать как в стиле платформы, так и как угодно по другому.

Да, не используя нативные компоненты, то есть через задницу

То есть вы ходите в туалет по большому не используя нативные компоненты? Зачем же вы уподобляетесь Флаттеру?

Хабр потребил несколько аккаунтов, без разрушения кармы у меня экспериментальные воздействия удавались плохо, позволил сделать интересные (мне) выводы об аудитории

Вам сливают карму потому что доказываете людям свою истину, которая им в принципе не нужна.

Dart такой классный, а вне Флаттера не живёт, почему так? 

Нормально живет. У меня куча консольных программ, написанных на дарте, которые я использую в обиходе, а если нужен интерфейс с кнопками - на флаттере уже всё есть для этого. В современном мире люди привыкли взаимодействовать с программами через кнопочный интерфейс, для этого дарт использует флаттер.

Похоже на то, но Zig…

Что Zig? В каком месте Zig стал конкурентом Флаттера? Zig - это язык, а Флаттер - это фреймворк.

Но чем больше в Гугле шизы - тем больше риск для Флаттера.

Какой такой риск? Если Гугл сегодня подохнет полностью, то, возможно, пострадает андроид. Даже если исчезнет андроид, у Флаттера останется еще минимум 5 платформ. Вы ошибаетесь в том, что думаете, что Флаттер живет на деньги Гугла - это не так. Гугл поддерживает ту часть экосистемы Флаттер, в которой Гугл заинтересован, а остальная огромная часть - это продукт опенсорсного сообщества. Чтобы пострадал Флаттер - надо уничтожить весь опенсорс.

Flutter был нужен только под Fuchsia

Откуда вы это взяли? Вообще то он разрабатывался для кроссплатформы и даже Fuchsia поддерживается.

Ничерта Вы не понимаете, включая то, что Вам говорят 

как раз то, о чём вам говорят

"Мне говорят" - и что? Есть такая телепередача "Пусть говорят". У меня есть свои мозги, Господин. Мне всё равно что мне говорят - если под этим нет оснований. Напишите статью, в которой полностью раскройте недостатки Флаттера со всеми приведенными основаниями.
Я не видел ни одной статьи о недостатках Флаттера и недостатках Дарта. Но в процессе работы я сам вижу, что некоторые моменты можно было бы переделать в Дарте, однако почему-то, те, кто негативно отзываются о Флаттере - никогда об этих моментах не упоминают. Может быть потому что они нихрена не разбираются во Флаттере? Всё ваше мнение о Дарте и Флаттере - результат вашей полной некомпетентности в Дарте и Флаттере.

Я тут глянул приложение google pay у себя на телефоне и оно на обычных view, даже не compose. Flutter там и близко нет.

Compose вроде выглядит всё же более перспективно, нет? Полностью нативная реализация для Android. И единый интерфейс, в перспективе, везде.

Ну и коллеги жаловались я помню, что то библиотеки не всё могут из-за различий в платформах ios/Android, то баги фиксятся долго, то проблемы с нативным кодом каким-то. Ну и с обновлениями под новые таргеты вроде тоже не так как в нативе - в день релиза не поднимешь всё что нужно.

По-моему даже витрина в апке приводится как пример RecyclerView с пулом.

подскажите, на флаттере уже можно сделать нативную панельку Liquid Glass в iOS, или надо немного подождать, или "это вам не должно быть нужно" (тм)?

можно, через бридж к нативному UI.

Тут основной вопрос - победит ли KMP.

победит ли KMP.

Флаттер не нужно сравнивать с КМР. КМР по сути есть мультиплатформенный компилятор и не более, тут уместнее параллели с Дарт. Если же говорить о фреймворках, то это Flutter vs Jetpack Compose. Первый универсальный, общего назначения, второй чисто гуёвый. Да, Котлин как язык мощнее Дарт. Но вот связка Dart+Flutter на данный момент выглядит предпочтительнее, чем Kotlin+Jetpack – по уровню зрелости, универсальности и количеству поддерживаемых платформ. Возможно, со временем это изменится – но сейчас так.

Ещё немаловажный момент: на флаттере можно писать, не имея глубокого знания целевых платформ. С КМР/Jetpack так не получится, они используют нативные компоненты, которые нужно уметь правильно готовить.

Если смотреть по языковым фичам, котлин не мощнее, по комплексному перекрытию множеств из фич - где-то котлин устроен богаче, где-то дарт устроен богаче. В остальном полностью согласен.

Если смотреть по языковым фичам, котлин не мощнее

У дарта есть пара серьёзных недостатков. В частности, не поддерживается позднее статическое связывание – что зачастую приводит к необходимости городить громоздкий свич по типам внутри обработчика. Ну и вот такие приколы случаются – код, который прекрасно компилится, с грохотом падает в рантайме, хотя вроде не проблема обнаружить ошибку на этапе компиляции:

    const Map<int, String> m = {1: "const"};
    m[1] = "modified";
    // Uncaught Error, error: Error: Unsupported operation: Cannot modify unmodifiable map

    const List<int> l = [1];
    l[0] = 2;
    // Uncaught Error, error: Error: Unsupported operation: indexed set

Или вот, например – почему-то так нельзя:

Да, я и не говорю, что у Дарта нет недостатков, я говорю что множество языковых фич Дарта не является подмножеством фич Котлина, эти множества находятся в состоянии неполного перекрытия.

В Котлине тоже есть моменты, которые по сравнению с Дартом выглядят недостатками и приходится писать не "прямо вот так", а "через бок", потому что прямо нельзя.

С множеством недостатков в языках, я думаю история такая же как с множеством фич, т е в среднем паритет, но здесь надо учитывать тот факт, что Котлин то и дело цепляет жаву с её библиотеками и проблемами, чего в Дарте по умолчанию нет.

то это Flutter vs Jetpack Compose. Первый универсальный, общего назначения, второй чисто гуёвый

Ну это уже буквоедство - и так понятно о чем речь. Ясно что одна ниша - кроссплатформенные приложения. Многим уже давно понятно что кроссплатформа состоялась и дальше будет только развиваться. И вопрос - кто же будет лидером.

KMP+Jetpack Compose даже банальное - приложения меньшего размера, а это тоже бывает важно. Пакетов мало, но все необходимое есть.

А на счет общего значения - это в каком смысле? KMP+Jetpack Compose - для чего вам не подходит, где бы вы использовали Flutter?

KMP+Jetpack Compose даже банальное - приложения меньшего размера

Можете это как-то подтвердить? У меня приложение (то самое, 86К строк кода на дарте) имеет такой вот размер:

Не Котлине будет меньше? На сколько? Как это скажется на удовлетворённости юзеров?

А на счет общего значения - это в каком смысле? KMP+Jetpack Compose - для чего вам не подходит, где бы вы использовали Flutter?

Вы не поняли, я писал только о самих фреймворках. JPC – чистый гуй, там больше ничего нет. А во флаттере множество пакетов общего назначения. В Котлине такие тоже есть, разумеется – но как отдельные библиотеки именно Котлина, а не часть JPC.
Если же говорить о том, что не подходит – когда мы начинали кроссплатформу, КМР был очень сырой ещё, в ранней бете – вообще не вариант. Но пожалуй, и сейчас выбрал бы флаттер – по уже упоминавшейся причине: КМР требует компетенций в каждой из целевых платформ. Фактически, отдельные команды для написания бизнес логики (собственно КМР) и нативных интерфейсов под андроид/айос. Последнее ещё и противоречит нашей концепции единого UX на всех платформах – мы не пытаемся мимикрировать под них, экраны выглядят и работают одинаково везде. Так что мне куда проще работать с одной командой и единой кодовой базой.

И вопрос - кто же будет лидером.

Такой вопрос возникает, когда вы знаете Котлин и вам не хочется изучать Дарт.
Т. е. вопрос - еще подождать или всё таки изучить Дарт?
Если вы уверенно владеете Дартом и Флаттером, то вопроса кто будет лидером кроссплатформы - не возникает, потому что Флаттер - уже лидер.
КМП только недавно начал поддержку айос (только начал!), только недавно начал возиться со skia, а на Флаттере это всё уже годами обкатано по полной.
Начать что-то и годами обкатывать, исправлять баги, улучшать, вывести в стабильную нишу - это на порядок разные по трудоемкости работы.
Если искать конкурентов Флаттеру по сути, то это никак не КМП, это скорее Qt, но там проблематичен сам язык C++, долгий порог вхождения, бизнесу это не нужно.

приложения меньшего размера, а это тоже бывает важно.

1) на сколько меньше? По факту.
2) когда это бывает важно? в глухой российской деревне, где интернет одинджи и люди ходят с телефонами на вытянутых руках перед собой в поисках холма повыше?

> С КМР/Jetpack так не получится, они используют нативные компоненты, которые нужно уметь правильно готовить.

Ушибочка. Compose имеет возможность интеропа с нативными компонентами, но не заставлять их использовать, ровно как и флаттер.

Ушибочка

Уднако, именно гарантированный native look and feel позиционируется КМРологами, как решающее преимущество над флаттером. Если это убрать, что останется? Полагаю, всяк, кто предложит отказ от нативности будет немедленно объявлен еретиком и подвергнут публичному аутодафе.

В наше время, когда Хабр наводнили водянистые продукты жизнедеятельности ЛЛМ-ок, я получил несказанное наслаждение читая статью, написанную живым человеком. Столько неприкрытой жопаболи, желания показать, что он выше гавкающих шавок и мосек я не читал давно. Спасибо! По технической стороне ничего не могу сказать, не разбираюсь в UI-технологиях.

Тут все просто
Берите 50 самых топовых приложений из Google Play в категории, скажем, "Новости", и считаете, сколько там флаттера
Кто-то делал подсчеты?

Такое ощущение что все мобильные разработчики сговорились. Каждый раз как видишь статью про flutter набегают люди и не обосновано начинают критиковать за все что там есть.

Хоронят наш любимый Flutter действительно ежегодно, спасибо автору, что поднимает снова эту тему. В прошлом году делали подобный ресерч.

Взаимно! Благодарю! Тут уже новая волна похорон надвигается, скорее всего будет вторая часть)

«Инструменты тормозят, IDE падает, кодогенерация медленная»

Это реальная проблема на больших проектах. build_runner может тупить на 50 тысячах строк кода. 

Да ладно 😁

Здесь скорее акцент, чем всеобщий охват. Статья написана не конкретно за 2025 год и последние версии Дарта, как минимум 3+. И имелось ввиду большие проекты разных архитектур. Версии Дарта и Флаттера в прошлом имели некоторые проблемы с производительностью на больших проектах, и, как я вижу в русскоязычных сообществах - некоторые люди не привыкли обновляться ради 30+ процентов прироста к производительности, жертвуя этим самым "милым, рабочим, обкатанным", т е стабильностью.

У меня тоже большие проекты на Дарте и Флаттере, НИ РАЗУ от плохой производительности я не страдал. Но разбор проблем в коде товарищей показал, что, как минимум раньше, такие проблемы были. Поэтому и пишу статьи с посылом обновлений)

Dart стал единственным языком, который успешно добавил полноценный sound null safety в уже существующий язык.

C# - ну да, ну да, пошел я нах*р.

C# добавил "Nullable Reference Types" (NRT) в C# 8.0. Это огромное улучшение, но оно не считается "sound". Это, по сути, продвинутая система статического анализа и предупреждений. Вы можете проигнорировать эти предупреждения или использовать "null-forgiving" оператор (!), чтобы заставить компилятор замолчать. Dart не позволяет такого "обмана". Я пять лет кодил на шарпе перед переходом на Dart, Dart как раз мне напоминает минишарп и мне очень нравился шарп, так что его бы я точно не стал посылать.

force unwrap вполне себе и в дарте работает

double square(double? value) {
   return value! * value!;
}

В обоих языках есть !, но делают они разное.
В C# это null-forgiving оператор: он просто убирает предупреждение статического анализатора и не добавляет никакой проверки в рантайме, поэтому переменная с типом non-nullable всё равно может оказаться null и дать NullReferenceException позже.
В Dart ! — это null assertion: он выполняет реальную проверку и при null сразу бросает исключение в этой точке. Именно поэтому использование ! не ломает sound null safety в Dart: программа не может продолжать работу в состоянии “тип обещает non-nullable, а значение — null”; она падает прямо на !. В случае C# сами nullable reference types формально не считаются sound.

А на реддите бывали? Каждую неделю хоронят, да всё никак похоронить не могут. Люди в сабреддите уже модеров просят в бан отправлять хоронильщиков.
И ведь никому от такого контента не станет лучше, а людей, которые могли/хотели бы взять флаттер в качестве инструмента такие разговоры могут и отвадить.
Ну и собственно: isflutterdead.com (тлдр: no)

Ох, спасибо за коммент! Особенно за сайт, как раз собираю материал для продолжения статьи) Я тоже считаю, что тех кто необъективно негативно отзывается о лучших технологиях - надо сразу в бан.

Sign up to leave a comment.

Articles