Flutter Pulse
1K subscribers
605 photos
1 file
1.67K links
На канале будут новости про flutter с сайтов, информация об обновлении пакетов, а также авторский контент.
Download Telegram
Обновление плагина Flutter для VSCode! 🚀
Плагин Flutter для VSCode получил очередное обновление, и оно принесло несколько интересных изменений! 👀
Теперь панель тестирования группирует наборы тестов в папках рабочего пространства/пакета 📁, что должно упростить процесс тестирования.
Кроме того, поля deviceId и emulatorId в конфигурации запуска теперь поддерживают сопоставление подстроки, ID и имени устройства 📊, что даст больше гибкости при настройке запуска приложений.
Ещё одним важным изменением является то, что задачи build_runner и подобные теперь вызываются с использованием dart run 🔄, что должно улучшить производительность и удобство использования.
Полную новость читайте здесь.

FlutterPulse — канал о мире Flutter!

#flutter #dart #FlutterPulse #FlutterPulseNews #ohmyflutter
🎮🚗 Toyota делает game engine на Flutter и Dart
Да, это не шутка. Toyota Connected North America анонсировала Fluorite — console-grade open-source 3D game engine, построенный на Flutter + Dart 🔥

Проект представили на FOSDEM 2026.
🧩 Что это такое?
Fluorite — игровой движок:
🎨 UI и игровая логика — Flutter & Dart
⚙️ Высокопроизводительное ядро — C++ ECS
🖥 Рендеринг — Google Filament (PBR, console-grade)
🎮 Ввод и платформенная абстракция — SDL3
🧱 Скоро: Jolt Physics (используется в Horizon, Death Stranding 2)

🤔 Зачем Toyota свой движок?
Для digital cockpit / in-vehicle UX:
🔹3D-интерфейсы
🔹интерактивные сцены
🔹визуализация состояний авто
🔹обучающие и навигационные сценарии

Unity / Unreal — тяжёлые, лицензии, проприетарщина
Godot — долгий старт, высокая нагрузка
👉 Решили сделать своё.

🚀 Почему это интересно Flutter-разработчикам:
🔥 Hot Reload прямо в game engine
🧠 Dart — один язык для UI и логики
🧩 Flutter-виджеты внутри 3D-сцен
📦 Кроссплатформа: mobile, desktop, embedded, даже консоли

📌 Важно
Движок ещё не опубликован, репозиторий «coming soon»

Уже используется Flutter runtime в авто (например, Toyota RAV4 2026)

🔗 Ссылки:
🎥 YouTube
🎤 Статья
📰 Ещё одна (презентация)
🌐 Сайт

👉 Flutter выходит за пределы mobile — теперь это ещё и game engines + automotive 🚗🎮

#flutter #dart #gamedev #toyota #fluorite #opensource #3d #automotive #engine #news #flutterpulsenews
🔥9
🚀 Flutter 3.41 — новый релиз уже доступен
Google выпустил Flutter 3.41 — релиз с фокусом на модульность, прозрачность разработки и прокачку GPU/API.
📊 868 коммитов от 145 контрибьюторов
🔎 Главное
📅 Публичные release-окна (2026)
Теперь заранее известны даты branch cutoff — проще планировать фичи в stable.
🧩 Material и Cupertino выносят в отдельные пакеты
— быстрее обновления
— независимые апгрейды
— гибкость под новые дизайн-системы (Material 3 Expressive, iOS Liquid Glass)
🍎 iOS
Поддержка UIScene по умолчанию
Улучшенный blur (Impeller)
Native drag handle для CupertinoSheet
🤖 Android
Подготовка к AGP 9 (обновляться пока нельзя ⚠️)
Новые плагины по умолчанию на Kotlin DSL
🎨 Shaders
Синхронное декодирование текстур
Поддержка 128-bit float текстур (LUT, фильтры, SDF)
👀 Widget Previews (экспериментально)
Интеграция с Flutter Inspector
Работает с зависимостями dart:ffi / dart:io
📱 Add-to-App
FlutterView теперь может автоматически ресайзиться по контенту (Android и iOS).
🧭 Навигация
Navigator.popUntilWithResult
Новый StretchingOverscrollIndicator (как в Android 12)
Accessibility
Нативная поддержка прогресс-баров
Новые матчеры для тестов
🖥 Desktop (совместно с Canonical)
Экспериментальные popup / tooltip окна
Multi-window API
Улучшения Linux и Windows
🛠 DevTools
Сборка через dart2wasm (быстрее)
Авто-восстановление DTD-соединений
📦 Обновиться:
flutter upgrade
Flutter становится более модульным и зрелым — особенно для desktop и embedded 🚀
#flutter #dart #releasenotes #flutterdev #mobiledev #desktop #update #FlutterPulseNews
2🔥2
🚀 Dart 3.11 вышел вместе с новым Flutter
Вчера одновременно с релизом новой версии Flutter вышел и Dart 3.11 — обновление без языковых изменений, но с важными инфраструктурными и tooling-улучшениями.

Разбираем критичные моменты!

❗️ Язык
Изменений в синтаксисе или семантике языка нет.
Фокус релиза — стабильность, производительность и инструменты.

🔥 Важные изменения SDK
🖥 dart:io — Unix domain sockets на Windows

Добавлена поддержка AF_UNIX сокетов в Windows.
Ограничения Windows:
нет datagram sockets
нет ancillary data
нет abstract socket addresses

Важно:
File(socketPath).existsSync() ведёт себя по-разному:

POSIX → true
Windows → false

Для кроссплатформенного поведения используйте:

FileSystemEntity.typeSync()

⚠️ dart2wasm больше не поддерживает dart:js_util

Это самое критичное изменение релиза.
🔹dart:js_util удалён из dart2wasm
🔹Код, использующий package:js, теперь не компилируется в wasm
🔹dart.library.js_util больше нельзя использовать в conditional imports

Если вы таргетируете WebAssembly — проверьте зависимости.

Issue: https://github.com/dart-lang/sdk/issues/61550

🧩 dart:js_interop
Расширена поддержка JSSymbol:
👉 новый конструктор
👉 key
👉 description
👉 статические well-known ECMAScript symbols

🧠 Analyzer — серьёзный буст производительности
Dart 3.11 ощутимо ускоряет анализ:
Fine-grained dependencies → меньше переанализа
Кэширование AOT snapshot плагинов (экономия ~10 сек при старте IDE)
Быстрее обработка symlink-циклов
Улучшена поддержка dot shorthand
Прогресс-индикатор для “Fix all in workspace”

Новый lint:
simplify_variable_pattern

Deprecated:
⚠️ avoid_null_checks_in_equality_operators
⚠️ prefer_final_parameters
⚠️ use_if_null_to_convert_nulls_to_bools

📦 Pub — полезные нововведения
Glob в workspaces (Dart ≥ 3.11)

Теперь можно подключать пакеты через шаблон:

workspace:
- pkgs/*

Без ручного перечисления.

🧹 dart pub cache gc

Новая команда для очистки неиспользуемых пакетов из глобального cache.

dart pub cache gc

Удаляет версии пакетов, которые не используются ни одним активным проектом.
Полезно для CI и освобождения диска.

🤖 AI / MCP Server

Добавлен инструмент read_package_uris для MCP —
AI-ассистенты (Gemini, Copilot, Cursor) теперь могут корректно подтягивать зависимости проекта в контекст.

Это явный шаг в сторону AI-first workflow.
Итог - Dart 3.11 — это:
⚙️ ускоренный analyzer
🧹 управляемый pub cache
🖥 AF_UNIX на Windows
⚠️ breaking change для dart2wasm
🤖 улучшенная AI-интеграция

Релиз не про язык, а про экосистему и инфраструктуру.

🔗 Анонс
🔗 Полный changelog

#dart #flutter #release #dart311 #flutterdev #flutterpulsenews
👍1🔥1
💭 Ограничение доступа объектов в Dart: варианты и лучшие практики 🤔
Привет, друзья! Сегодня мы поговорим о механизмах ограничения доступа объектов в Dart 📚. Это важно для поддержания архитектурной дисциплины и предотвращения непредвиденного использования кода 🚫.

Есть несколько вариантов ограничения доступа объектов:
1️⃣ Использование символа _ в начале названия объекта. Это самый известный и эффективный способ ограничить доступ к объекту, поскольку он не позволяет использовать объект вне текущей библиотеки 🚫.

final String _privateData;
void _doExample() {}

2️⃣ Аннотация @protected. Она указывает, что объект доступен только внутри класса и в классах-наследниках 👪. Однако, она не ограничивает компиляцию и работу программы, а только выдает предупреждение анализатора 📝.

class Parent {
  @protected
  void doProtected() {}
}

3️⃣ Аннотация @visibleForTesting. Она позволяет сделать объект доступным только для тестов 📊. Это полезно для тех, кто покрывает проект тестами 📈.

class Parent {
  @visibleForTesting
  void doExample() {}
}


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

Полную новость читайте здесь.

FlutterPulse — канал о мире Flutter!

#flutter #dart #FlutterPulse #FlutterPulseNews #flutterfriendly 💻📱🔥
🗺 Flutter Roadmap 2026 — официальные приоритеты

Команда Flutter опубликовала обновлённый roadmap на 2026 год.
Это не гарантия фич, а публичное заявление о стратегических направлениях.

Документ:
https://github.com/flutter/flutter/blob/master/docs/roadmap/Roadmap.md

Разбираем главное 👇

🎯 1️⃣ High-fidelity Multiplatform

Фокус — нативное качество и производительность.

✔️ Полный переход на Impeller на Android
✔️ Удаление legacy Skia backend (Android 10+)
✔️ Day-zero поддержка Android 17 и новых iOS
✔️ Улучшение accessibility на Web
✔️ Multi-window Desktop (вместе с Canonical)
✔️ WebAssembly (Wasm) станет default для Web

Цель — сделать Flutter максимально “native-grade” на всех платформах.

🤖 2️⃣ GenUI и Agentic Apps

Flutter активно двигается в сторону AI-архитектуры:

✔️Flutter GenUI SDK
✔️A2UI protocol
✔️Динамические UI, адаптирующиеся к intent пользователя
✔️Исследование интерпретируемого bytecode в Dart runtime
✔️ephemeral загрузка кода по требованию

Это серьёзный сдвиг архитектурной парадигмы.

🌐 3️⃣ Full-Stack Dart

Flutter → не только UI.

В планах:

✔️ Dart Cloud Functions for Firebase (~10ms cold start)
✔️ Интеграция с Google Cloud SDK
✔️ Поддержка Dart в Genkit (AI backend tooling)

Dart становится полноценным full-stack языком.

🧠 4️⃣ AI-first DX

Интеграция с AI-агентами:
✔️Поддержка Gemini CLI
✔️Поддержка Antigravity
✔️Развитие MCP Server для сложных refactor’ов
✔️AI-понимание зависимостей и безопасных библиотек

Фокус — чтобы hot reload и stateful workflow работали вместе с AI.

🧱 5️⃣ Open-Source и Governance

✔️ Material и Cupertino выносятся в отдельные пакеты
✔️ Engine и CLI становятся extensible “out-of-tree”
✔️ Больше влияния сообщества на архитектурные решения
✔️ Расширение GDE, CAB, PAB и Consultancy Program

Flutter двигается к более децентрализованной модели управления.

⚙️ 6️⃣ Dart: Modern Syntax & Performance

Планы на 2026:

• Primary Constructors
• Augmentations (упрощение codegen)
• Улучшение build_runner
• Оптимизация Dart/Wasm
• Рефактор analyzer для больших проектов

📦 7️⃣ Predictable Delivery

В 2026 планируется:

✔️ минимум 4 stable релиза Flutter
✔️ минимум 4 stable релиза Dart
✔️ 12 beta релизов
✔️ усиленная автоматизация тестирования

📌 Итог

Roadmap 2026 показывает чёткий вектор:

✔️ Impeller + Wasm как основа будущего
✔️ AI-agent integration
✔️ Full-stack Dart
✔️ Более открытая governance-модель

Flutter уходит от “просто UI toolkit” к полноценной платформе.

#flutter #dart #roadmap #flutterpulsenews #flutter2026 #wasm #impeller #genui
👍3
📢 Новая фича в Dart 3.12! 🚀
Теперь у нас есть Private Named Parameters, которые решают проблему с приватными именами полей, позволяя инициализировать их через именованные аргументы конструктора класса! 😄

Ранее это было невозможно, но теперь все меняется! Если раньше вам нужно было использовать список инициализации:

class House {
  int? _windows;
  int? _bedrooms;
  int? _swimmingPools;

  House({
    int? windows,
    int? bedrooms,
    int? swimmingPools,
  })  : _windows = windows,
        _bedrooms = bedrooms,
        _swimmingPools = swimmingPools;
}

То теперь код конструктора сокращается до:

class House {
  int? _windows;
  int? _bedrooms;
  int? _swimmingPools;

  House({this._windows, this._bedrooms, this._swimmingPools});
}

А с появлением первичного конструктора такое объявление класса сократится до следующей записи:

class House({
  int? _windows,
  int? _bedrooms,
  int? _swimmingPools,
});

🛠 Как это будет работать на уровне компилятора?
Компилятор будет автоматически «удалять» подчеркивание из параметра, но для поля, инициализированного этим параметром, оно останется приватным. Это позволит избежать проблем с конфликтами имен и использовать «чистую» инкапсуляцию, не нарушая синтаксические правила.

Полную новость читайте здесь.

FlutterPulse — канал о мире Flutter!

#flutter #dart #FlutterPulse #FlutterPulseNews #madteacher_channel
5
Async/await и Isolate в Flutter: не путайте ожидание с работой 🚀
Когда ваше приложение тормозит, первая мысль: «нужно вынести это в отдельный поток». В Flutter эта мысль часто выливается в async/await или Isolate. Но это не взаимозаменяемые вещи, а инструменты для разных задач 🤔. И если перепутать, можно получить либо бесполезный код, либо вечно зависающий UI 😱.

Главное заблуждение: async/await сам по себе не переносит выполнение в другой поток. Он просто дает удобный способ работать с асинхронными операциями, которые уже неблокирующие по своей природе: запросы к сети, чтение с диска, ожидание таймера 🕒.

Для операций ввода-вывода async/await достаточно 📁. Сеть, базы данных, файловая система - все это уже асинхронно на уровне платформы. Достаточно дождаться результата, и UI останется отзывчивым 📊.

Но как только появляются вычисления, которые грузят процессор - парсинг большого JSON, обработка изображений, сложные математические расчеты, - async/await перестает помогать 🤯. Здесь нужен настоящий параллелизм. Isolate запускает код в отдельном потоке (или даже ядре) и не трогает основной 💻.

Самый простой способ - compute(). Он берет функцию и данные, запускает их в изоляте и возвращает результат 📈. Идеально для разовых тяжелых задач.

Если нужно постоянное взаимодействие с фоновым процессом, например, обработка потока данных или долгая работа с промежуточными результатами - придется использовать Raw Isolate 📝. Там уже ручное управление портами и сообщениями, но зато полный контроль.

Итак, что выбрать?
🔵 Ждете ответ от сети или диска? async/await.
🔵 Нужно один раз обработать большой кусок данных? compute().
🔵 Есть долгий фоновый процесс с обменом сообщениями? Raw Isolate.
🔵 Пытаетесь ускорить вычисления, просто добавив async? Бесполезно, почитайте заново 📚.

Вывод: Async/await и Isolate не конкуренты, а партнеры 🤝. Первый отвечает за ожидание, второй - за параллельное выполнение. Смешивать их нужно осознанно, а не по принципу «чтоб не тормозило» 🚫.

Полную новость читайте здесь.

FlutterPulse — канал о мире Flutter!

#flutter #dart #FlutterPulse #FlutterPulseNews #hardworkerFlutter #asyncawait #isolate #mobiledevelopment #programming
💭 Понимание параметра dirty в Flutter 🤔
Привет, друзья! Сегодня мы поговорим о параметре dirty у элемента во Flutter. 📱
Согласно официальной документации Flutter, виджет представляет собой конфигурацию, которая описывает, как именно должен выглядеть интерфейс. А вот элемент представляет конкретный виджет в определенном положении в дереве и отвечает за его жизненный цикл и состояние. 🌟

А dirty представляет собой индикатор состояния элемента. Он явно говорит — тут требуется перестроение. 🔄
По умолчанию dirty всегда false. Изменение значения флага наглядно можно увидеть на примере StatefulWidgeta. Допустим, нам надо обновить его состояние, и мы вызываем метод setState(). Посмотрим, что он делает под капотом.


@protected
void setState(VoidCallback fn) {
   ...
   _element!.markNeedsBuild();
}


После ряда проверок выполняется вызов метода markNeedsBuild(). Внутри него выполняется проверка: помечался ли ранее элемент для ребилда. Если не был, то он помечается и помещается в список dirty элементов.


void markNeedsBuild() {
  ... 
  if (dirty) {
    return;
  }
  _dirty = true;
  owner!.scheduleBuildFor(this);
}


И здесь очень хорошо видно — на самом деле setState() не запускает моментальное перестроение виджета. Он лишь ставит элемент в очередь. А уже в следующем кадре Flutter обработает список dirty-элементов и перестроит их точечно. 📈

Со Stateful-виджетами в целом понятно, а что с Stateless? Тут тоже ничего сложного. Хотя у виджета и нет своего состояния, но он все же может быть перестроен по ряду причин.

Например, если обновился непосредственный родитель: его метод build() выполнится заново и создаст новые конфигурации дочерних виджетов. Если конфигурация Stateless-виджета изменилась, его элемент будет обновлен и отмечен, как требующий перестроения.

Другой вариант — если виджет зависит от InheritedWidget, который обновился. В этом случае соответствующий элемент также будет помечен как dirty и перестроен.

Полную новость читайте здесь.

FlutterPulse — канал о мире Flutter!

#flutter #dart #FlutterPulse #FlutterPulseNews #flutterfriendly 💻📊👍
👍1
Раскрываем секреты BuildContext в Flutter! 🤔
Привет, друзья! Сегодня мы поговорим о чем-то действительно важном в Flutter — BuildContext. 📚
Это специальный объект, который представляет собой ссылку на конкретное место виджета в дереве элементов. По сути, это идентификатор позиции виджета в иерархии приложения. 🗺️
Каждый виджет при построении получает свой уникальный BuildContext. Именно через него виджет может взаимодействовать с другими частями дерева: получать доступ к родительским виджетам, темам, навигации и многому другому. 🌐
Давайте посмотрим, как это работает на практике:

@override
Widget build(BuildContext context) {
  return Container(
    child: Text('Привет'),
  );
}

Этот context и есть BuildContext. Он связывает наш виджет с конкретным элементом в дереве. Через него Flutter понимает, где именно находится виджет и как с ним работать. 📈
Но почему BuildContext так важен? 🤔
Возьмем простой пример — доступ к теме приложения:

final theme = Theme.of(context);

Метод Theme.of(context) использует BuildContext, чтобы подняться вверх по дереву виджетов и найти ближайший ThemeData. Без context это было бы невозможно — Flutter просто не знал бы, откуда начинать поиск. 🔍
То же самое происходит с навигацией:

Navigator.of(context).push(
  MaterialPageRoute(builder: (context) => NextScreen()),
);

Navigator ищет ближайший Navigator в дереве, используя переданный BuildContext как отправную точку. 📍
Но есть одна распространенная ошибка, которую стоит избегать: использование BuildContext до того, как виджет добавили в дерево, или после того, как его удалили. 🚫
Например:

@override
Widget build(BuildContext context) {
  Future.delayed(Duration(seconds: 2), () {
    // Опасно! Context может быть уже невалидным
    showDialog(context: context, builder: (_) => AlertDialog());
  });
  return Container();
}

Если виджет удалят из дерева за эти две секунды, использование context приведет к ошибке. Для таких случаев стоит проверять mounted в StatefulWidget или использовать более безопасные подходы. 🚨
BuildContext играет особую роль при работе с InheritedWidget. Именно через context виджеты подписываются на изменения:

final data = MyInheritedWidget.of(context);

При таком вызове Flutter регистрирует зависимость текущего виджета от MyInheritedWidget через BuildContext. Когда InheritedWidget обновится, все зависимые от него виджеты будут автоматически перестроены. 🔄
Полную новость читайте здесь.

FlutterPulse — канал о мире Flutter!

#flutter #dart #FlutterPulse #FlutterPulseNews #flutterfriendly #BuildContext #InheritedWidget
👍2