Flutter Pulse
511 subscribers
314 photos
670 links
На канале будут новости про flutter с сайтов, информация об обновлении пакетов, а также авторский контент.
Download Telegram
🔥 НОВОСТЬ: Что ждёт Dart в ближайшие годы? Станислав Чернышёв делится подробностями

На прошедшей конференции CrossConf 2025 автор книги «Основы Dart» и один из самых узнаваемых экспертов в сообществе, Станислав Чернышёв, выступил с докладом о будущем языка Dart. Он рассказал о ключевых фичах, которые уже находятся в разработке или планируются к внедрению в ближайших версиях. Вот самые важные анонсы:

### 🧠 1. Макросы (Macros) — новый уровень метапрограммирования

Одна из самых долгожданных фич в Dart — макросы — наконец-то приближается к релизу. Они позволят:
- Генерировать код на этапе компиляции.
- Упрощать шаблонную логику (например, сериализацию/десериализацию JSON).
- Делать аргументацию классов и функций без необходимости использования отдельных кодогенераторов.

📌 Макросы будут работать через специальные аннотации и поддерживать три типа:
- type — для работы с типами.
- declaration — для добавления объявлений.
- definition — для изменения поведения существующих сущностей.

⚠️ Важно: макросы не смогут использовать dart:io, dart:isolate и другие небезопасные библиотеки, чтобы избежать нежелательного влияния на систему.

### 🔢 2. Цифровые разделители (Dart 36)

int bigNumber = 1_000_000;


Начиная с Dart 36, появятся разделители в числах — удобный способ читать большие значения. Это улучшение качества жизни разработчика, особенно при работе с финансовыми или статистическими данными.

### 🎯 3. Wildcards (Dart 37)

Теперь можно использовать _ как имя переменной в callback’ах, без опаски получить ошибку анализа кода:

list.forEach((_, index) {
print(index);
});


Это упростит работу с ненужными параметрами и уменьшит количество "заглушек".

### 🔄 4. Изменяемые ресурсы между изолятами

Разработчики рассматривают возможность передачи изменяемых объектов между изолятами, используя модификатор sharable. Это может радикально изменить подход к многопоточности в Dart и Flutter, особенно в тяжёлых приложениях.

💡 Предполагается, что вместе с этим будет добавлена библиотека dart:concurrent, предоставляющая примитивы синхронизации и безопасной работы с общими ресурсами.

### 🛠 5. Первичные конструкторы (Primary Constructors)

Ещё одна фича, которая поможет писать меньше кода:

class User(primary constructor(this.name, this.age));


Сокращает объявление простых классов, где поля создаются прямо в конструкторе. Также добавлено ключевое слово required для именованных параметров.

### 📦 6. Новые возможности импортов

Появление scoped imports позволит писать меньше повторяющегося кода:

import 'package:mylib/mylib.dart' show Color;

Color red = Color.red; // Теперь работает!


Такой подход упростит работу с перечислениями и статическими методами.

### 💬 7. Интерполяция строк с тегами (String Tags)

var html = htmlTag"<div>$content</div>";


Такие теги позволят обрабатывать строки особым образом, например, экранировать HTML, форматировать SQL-запросы или валидировать регулярные выражения.

### 📐 8. Static Extensions

Фича, которая позволит добавлять новые конструкторы к классам, не изменяя их исходный код:

static extension UserExtensions on User {
User.fromMap(Map<String, dynamic> data) => ...;
}


Отличное решение для расширения сторонних библиотек без fork’ов.

### 🚀 Итого: куда движется Dart?

Dart продолжает эволюционировать, становясь более мощным и выразительным. Фичи вроде макросов и изменяемых ресурсов между изолятами могут сделать язык конкурентоспособным даже в сложных системах. Однако растёт и порог входа: новые разработчики теперь столкнутся с гораздо более сложным инструментарием.

📌 Dart больше не просто язык для Flutter. Он становится полноценным системным языком с широкими возможностями абстракции, метапрограммирования и параллелизма.

🎥 Видео доступно на YouTube
#FlutterPulse #DartLanguage #FlutterDev #FutureOfDart #MacrosInDart #Isolates #StaticExtensions #FlutterCommunity #MobileDevelopment #PotokConf #Dart36 #Dart37 #FlutterNews #DartEvolution #CodeGeneration #DartIsMoreThanFlutter
Как использовать Isolates во Flutter

Привет, разработчики Flutter! 👋 Сегодня мы рассмотрим одну из ключевых тем в разработке высокопроизводительных приложений — использование Isolates для выполнения фоновых задач. Isolates позволяют выполнять тяжелые вычисления в отдельных потоках, не блокируя основной поток приложения. 📈

Зачем нужны Isolates?

Isolates помогают избежать зависания интерфейса пользователя при выполнении сложных операций, таких как обработка больших объемов данных или сложные вычисления. Они позволяют распределить нагрузку между несколькими потоками, обеспечивая плавную работу приложения. 💻

Пример использования Isolates

Давайте рассмотрим пример, как отправлять и получать данные из Isolates. В этом примере мы создадим Isolate и организуем двустороннюю связь между основным потоком и Isolate.



static void _update(String data) async {
// создаем канал ответа для основного потока
var _toIsolate = ReceivePort();
// отправляем этот канал ответа
data.sendPort.send(_toIsolate.sendPort);
// слушаем данные, отправленные из основного потока, чтобы их обработать
_toIsolate.listen((message) {
// выполняем тяжелую работу здесь
data.sendPort.send("Мой потрясающий результат...");
});
}





Isolate? isolate;
StreamController<String>? _streamController;
Stream<String>? _stream;

void runIsolate() {
// создаем канал связи для ответов Isolate
var fromIsolate = ReceivePort();
// контроллер потока для отправки данных и отображения их в UI
_streamController = StreamController<String>();
// первый канал ответа — это канал связи, по которому мы можем снова отправлять данные
fromIsolate.listen((data) {
if (data is SendPort) {
_toIsolate = data;
}
// обработанные данные (здесь это String, но можно использовать и другие типы
// или классы с базовыми типами)
if (data is String) {
_streamController!.sink.add(data);
}
});
// запускаем Isolate
Isolate.spawn(_update, initialData).then((value) => isolate = value);
// используем этот поток, чтобы слушать данные из нашего UI или откуда угодно еще
_stream = _streamController!.stream.asBroadcastStream();
// не забудьте закрыть его, когда закончите
}



В этом примере мы создаем Isolate и организуем двустороннюю связь между основным потоком и Isolate. Это позволяет выполнять тяжелые задачи в фоновом режиме и получать результаты в основном потоке. 🔄

Не забудьте остановить Isolate, когда закончите работу с ним, чтобы избежать утечек памяти. 💡

Оцените новую рубрику и напишите в комментариях, какие темы вам интересны! 👇

Все подобные новости можно найти по хэштегу #FlutterPulseTips

#flutter #dart #flutterpulse #FlutterPulseTips #mobiledevelopment #appdevelopment #performanceoptimization #isolates #concurrency #multithreading
👍2