Pull to refresh
78.4
Friflex
Мобильные приложения для миллионов пользователей🚀

Что нового в Dart 3.3

Level of difficultyMedium
Reading time3 min
Views2.4K
Original author: Kevin Moore

Dart 3.3 вышел! В нем появилась функция Extension Types, новые модели взаимодействия с JavaScript и библиотеками для браузера. А еще Google выпустила бета-версию Google AI Dart SDK. Юра Петров, Flutter Team Lead в Friflex, делится первым переводом официального релиза Dart от Google.

Типы расширений

Extension Types или типы расширений — это обертки для типов с нулевой стоимостью. С их помощью можно оптимизировать код, чувствительный к производительности, особенно при работе с хост-платформами. Типы расширений помогают расширить функциональность существующих типов: добавлять новые методы и поля без создания отдельного экземпляра класса. 

extension type Wrapper(int i) {
 void showValue() {
   print('my value is $i');
 }
}

void main() {
 final wrapper = Wrapper(42);
 wrapper.showValue(); // Prints 'my value is 42'
}

Пример выше определяет Wrapper как тип расширения, но использует его как обычный тип Dart. Вы можете создавать его экземпляры и вызывать функции. Ключевое отличие заключается в том, что Dart компилирует Wrapper как обычное целое число (int). Типы расширений позволяют легко создавать тип с уникальными членами без косвенных затрат на выделение памяти для типа-обертки. 

Начиная с Dart 2.7 элементы расширения (extension members) позволяли добавлять функции и свойства к существующим типам. Типы расширения или extension types могут делать то же самое, а еще позволяет скрывать базовую структуру данных за новым API.

Это значит, что при взаимодействии с хост-платформами вы сможете использовать нативные типы напрямую, не создавая обертки и сохраняя чистый и производительный Dart API. Почитать подробнее про extension types можно в документации на сайте Dart. 

Новая модель взаимодействия с JavaScript

Dart 3.3 представляет новую модель взаимодействия с библиотеками JavaScript и веб-платформами. API для работы с JavaScript — библиотеки dart: js_interop — дают доступ к типизированному API. Оно четко определяет границу между двумя языками с помощью статической проверки. Это устраняет целый класс проблем еще до компиляции. Кроме новых API для доступа к коду JavaScript в Dart 3.3 есть модель представления типов JavaScript в Dart с использованием типов расширений.

import 'dart:js_interop';

/// Represents the `console` browser API.
extension type MyConsole(JSObject _) implements JSObject {
 external void log(JSAny? value);
 external void debug(JSAny? value);
 external void info(JSAny? value);
 external void warn(JSAny? value);
}

Синтаксис на основе на типов расширений дает большую выразительность и надежность, чем элементы расширения (extention members). Использовать JavaScript API из Dart становится проще. Больше деталей — в документации по взаимодействию с JS на сайте Dart.

Улучшение библиотек для браузера

Начиная с версии 1.0, Dart SDK включает полный набор библиотек для браузера. Среди них — основная библиотека dart: html, а также библиотеки для SVG, WebGL и другие.

Улучшенная модель взаимодействия с JavaScript позволила переосмыслить эти библиотеки. В будущем поддержка библиотек для браузера сосредоточится на пакете: web. Такой подход упрощает управление версиями, ускоряет обновления и соответствует ресурсам MDN. Эта цепочка улучшений ведет к следующему важному этапу: компиляции Dart в WebAssembly

WebAssembly

Dart 3.3 позволяет авторам пакетов и приложений заложить основу для WebAssembly в веб-приложениях. Хотя поддержка WebAssembly во Flutter Web остается экспериментальной, команда активно ее дорабатывает. 

Чтобы запустить Flutter-приложения в веб-браузере с помощью WebAssembly,  нужно перенести весь код — из приложения и всех зависимостей — на новый механизм JavaScript Interop и пакет package: web. Старые библиотеки JavaScript и браузера по-прежнему поддерживаются при компиляции в JavaScript-код. 

Google AI Dart SDK

Google выпустила бета-версию Google AI Dart SDK. Теперь можно добавлять в приложения на Dart и Flutter функции на основе семейства моделей генеративного искусственного интеллекта Gemini. Оставляем ссылки на пакет google_generative_ai и краткое руководство по работе с API Gemini в приложения на Dart и Flutter от Google.

P.S. Мы ведем дружелюбный канал про Flutter в Telegram. Присоединяйтесь!

Tags:
Hubs:
Total votes 3: ↑3 and ↓0+3
Comments0

Articles

Information

Website
friflex.com
Registered
Founded
Employees
101–200 employees
Location
Россия
Representative
Friflex_dev