1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/CarGuo-GSYFlutterBook

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Dart-320.md 13 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 10.03.2025 00:06 5767d61

Обновление Dart 3.2, будущее Flutter Web становится всё более явным

Исходная статья: 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 полей значение никогда не изменяется после первоначального назначения, поэтому проверка происходит всего один раз и считается безопасной.

Новые варианты анализа кода в пакете: lints 3.0

В 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

В настоящее время ведутся работы по расширению 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.');
    }

Расширение DevTools для пакетов Dart

В версиях Dart 3.2 и Flutter 3.16 был выпущен новый расширенный фреймворк, который позволяет авторам пакетов создавать специализированные инструменты для своих пакетов и отображать их непосредственно в DevTools.

Это позволяет публикациям с поддержкой этого фреймворка предлагать специализированные инструменты для конкретных случаев использования, такие как Serverpod — его авторы работали над созданием инструментов для разработчиков и рады представить расширения DevTools в ближайшем выпуске версии 1.2.

Иллюстрация

Обновление Dart Web и Wasm

С 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.

  • Интероперабельность JavaScript: новая механика взаимодействия с JavaScript на основе расширенных типов, которая обеспечивает простые и безопасные типы вызовов между Dart-кодом, браузерными API и библиотеками JavaScript при работе с JavaScript и Wasm.
  • Браузерные API с поддержкой Wasm: новый package:web, основанный на современной механике взаимодействия с JavaScript, заменивший dart:html (и связанные библиотеки), что обеспечивает более легкий доступ к браузерным API и поддерживает цели JavaScript и Wasm.Началась миграция некоторых внутренних проектов на package:web и новые механизмы взаимодействия с JavaScript, и ожидают большего количества обновлений в следующей стабильной версии.> Можно узнать больше на https://flutter.dev/wasm.

Последнее

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

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/CarGuo-GSYFlutterBook.git
git@api.gitlife.ru:oschina-mirror/CarGuo-GSYFlutterBook.git
oschina-mirror
CarGuo-GSYFlutterBook
CarGuo-GSYFlutterBook
master