Исходная статья: https://medium.com/dartlang/dart-3-2-c8de8fe1b91f
Сопровождающий выпуск Flutter 3.16 Dart 3.2 включает в себя улучшения непустых полей с модификаторами private
и final
, новые улучшения взаимодействия, расширение поддержки DevTools и обновление маршрута развития для Web, включая поддержку компонентов Web через Wasm.
Основной особенностью является поддержка компонентов Web через Wasm.
private
и final
После выпуска Dart 2.12 со звуковым пустым безопасностям, улучшение типизации всегда было важной частью пустой безопасности, но только для локальных переменных. Полевые и верхнеуровневые переменные не могли быть обработаны, например, в следующих случаях возникают ошибки:
class Container {
final int? _fillLevel;
Container(this._fillLevel);
check() {
if (_fillLevel != null) {
int i = _fillLevel; // До Dart 3.2 вызывало ошибку.
}
}
}
Это ограничение было вызвано несколькими сложными ситуациями, когда анализ потока не может точно определить, как поля меняются во времени. Например, при попытке повышения типа поля, если подкласс использует геттер для переопределения поля (иногда возвращающего null), это может привести к проблемам.
Начиная с Dart 3.2, Dart улучшил анализ потока, теперь он способен корректно определять непустые private final поля.Теперь в Dart 3.2 этот фрагмент кода проходит проверку: для непубличных и
final
полей значение никогда не изменяется после первоначального назначения, поэтому проверка происходит всего один раз и считается безопасной.
В Dart 3.2 также были сделаны некоторые улучшения в наборах правил анализа кода в пакете package:lints. Этот пакет содержит наборы стандартных правил статического анализа, которые предоставляются вместе с новыми проектами, созданными с помощью dart create
или flutter create
(через package:flutter_lints).
Основной версией этого набора правил (версия 3.0) был выпущен новый набор правил, который добавляет шесть новых правил в основной набор и два новых правила в рекомендованный набор. В него входят правила для проверки URL в pubspec, проверки использования правильных аргументов при вызовах методов коллекций и других.
Для полного списка изменений см. https://github.com/dart-lang/lints/blob/main/CHANGELOG.md#300, версия 3.0 станет стандартной для новых проектов, которые будут выпущены в ближайшее время.
В настоящее время ведутся работы по расширению Dart interoperability для полной поддержки прямого вызова с Java и Kotlin и Objective-C и Swift, начиная с версии Dart 3.2 были сделаны многочисленные улучшения:- Введена конструкция конструктора NativeCallable.isolateLocal
для C FFI, которая позволяет создавать указатель на функцию C из любого Dart-функционала. Это расширяет возможности метода Pointer.fromFunction
, который может создавать указатели на функции только из топ-уровневых функций.
Улучшено использование Objective-C с помощью генератора NativeCallable.listener
. Генератор теперь автоматически обрабатывает API, содержащие асинхронные обратные вызовы, такие как Core Motion, что ранее требовало ручного создания связей.
Усовершенствован пакет package:jnigen для прямого вызова Java и Kotlin. Теперь мы можем мигрировать package:cronet_http (обёртка Android Cronet HTTP клиента) от рукописного кода связи к автоматически созданному обёртчику.
Достигнут значительный прогресс в функции Native Assets, направленной на решение многих проблем, связанных с распространением Dart-пакетов, зависящих от Native кода. Она предоставляет унифицированные точки входа для взаимодействия со всеми требованиями сборки, необходимыми для сборки Flutter и независимых Dart приложений. Подробнее см.: http://dart.dev/guides/libraries/c-interop#native-assets > Функция Native Assets в настоящий момент является экспериментальной, что позволяет Dart-пакетам более плавно зависеть от и использовать Native код через команды flutter run
/flutter build
и dart run
/dart build
.
Примечание: её можно активировать с помощью команд
flutter config --enable-native-assets
иflutter create --template=package_ffi [package name]
.
Пример использования демонстрируется в пакете native_add_library
: когда Flutter проект зависит от package:native_add_library
, скрипт автоматически вызывается в команде build.dart
:
import 'package:native_add_library/native_add_library.dart';
void main() {
print('Вызов функции Native для вычисления 1 + 2.');
final result = add(1, 2);
print('Успешный вызов: 1 + 2 = $result.');
}
В версиях Dart 3.2 и Flutter 3.16 был выпущен новый расширенный фреймворк, который позволяет авторам пакетов создавать специализированные инструменты для своих пакетов и отображать их непосредственно в DevTools.
Это позволяет публикациям с поддержкой этого фреймворка предлагать специализированные инструменты для конкретных случаев использования, такие как Serverpod — его авторы работали над созданием инструментов для разработчиков и рады представить расширения DevTools в ближайшем выпуске версии 1.2.
С Chrome 119 Chrome по умолчанию активирует поддержку сборки мусора Wasm (называемую Wasm-GC), а также эта поддержка появилась в Firefox 120 (его следующей стабильной версии). Каково текущее состояние Dart, Flutter и Wasm-GC?Функциональность компилятора Dart-to-Wasm практически полностью реализована, и команда довольна производительностью и совместимостью. В настоящее время акцент делается на граничных случаях, чтобы гарантировать идеальное выполнение во всех возможных сценариях.
Для Flutter Web был завершен процесс создания нового "Skwasm" движка рендера. Для достижения максимальной производительности Skwasm использует прямое соединение скомпилированного кода приложения через wasm-to-wasm связи с пользовательским модулем CanvasKit Wasm. Это первая итерация многопоточного рендера Flutter Web, которая ещё более снижает время кадра.
Перед выходом Flutter Web на основе Wasm из экспериментального состояния остаётся несколько задач, которые нужно выполнить:- Двойная компиляция: генерация выходных данных Wasm и JavaScript, а также использование функционального тестирования на этапе выполнения для поддержки браузеров, поддерживающих и не поддерживающих Wasm-GC.
package:web
, основанный на современной механике взаимодействия с JavaScript, заменивший dart:html (и связанные библиотеки), что обеспечивает более легкий доступ к браузерным API и поддерживает цели JavaScript и Wasm.Началась миграция некоторых внутренних проектов на package:web
и новые механизмы взаимодействия с JavaScript, и ожидают большего количества обновлений в следующей стабильной версии.> Можно узнать больше на https://flutter.dev/wasm.Основные изменения в этом выпуске связаны с двумя аспектами. Во-первых, взаимодействие Dart становится всё более зрелым, что позволяет надеяться на то, что в будущем можно будет выполнить все необходимые привязки и компиляцию через команду flutter run
. Во-вторых, маршрут для веб-приложений становится всё более перспективным благодаря развитию поддержки Dart Wasm.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )