Dart 3.2 更新,Flutter Web 的未来越来越明朗

这篇具有很好参考价值的文章主要介绍了Dart 3.2 更新,Flutter Web 的未来越来越明朗。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考原文:https://medium.com/dartlang/dart-3-2-c8de8fe1b91f

本次跟随 Flutter 3.16 发布 的 Dart 3.2 ,包含有:私有 final 字段的非空改进、新的 interop 改进、对 DevTools 中的扩展支持、以及对 Web 路线图的更新,包括对 Wasm 的Web 组件支持。

最重要的就是 Wasm 的Web 组件支持。

private final 的非空类型提升

自 Dart 2.12 发布 sound null safety 以来,类型提升一直是空安全的核心部分之一,但仅限于局部变量里,字段和顶级变量无法处理,例如在这样的情况下会报错:

class Container {
  final int? _fillLevel;
  Container(this._fillLevel);
  check() {
    if (_fillLevel != null) {
      int i = _fillLevel; // Prior to Dart 3.2, causes an error.
    }
  }
}

这种限制是由于几个复杂的情况造成的,在这些情况下,flow analysis 无法确定字段何时会发生什么变化,例如,在字段提升的情况下,如果子类使用 getter 覆盖字段(有时会返回 null),这就可能会出现问题。

在 Dart 3.2 开始,Dart 改进了 flow analysis ,现在能够归类出 private Final fields

现在 3.2 里上面的代码片段可以顺利通过检测:对于 private & final 的字段,它的值在初始分配后永远不会改变,因此仅检查一次就被认为是安全的。

包中的新代码分析选项:lints 3.0

3.2 还对 package:lints 中的标准代码分析规则进行了一些改进,package 包含了默认和推荐的静态分析规则集,这些规则随 dart createflutter create 创建的新项目一起提供 (通过 package:flutter_lints )。

该 lint 集的主要版本(3.0)目前已经发布,其中向核心集添加了 6 个 lint,向推荐集添加了 2 个 lint,它具有用于验证 pubspec URL、验证是否使用正确参数调用集合方法等相关的 lints 。

有关更改的完整列表,请查看 https://github.com/dart-lang/lints/blob/main/CHANGELOG.md#300, 3.0 版本将成为即将发布的新项目的默认版本。

Dart interop 更新

目前正在努力扩展 Dart interop 以全面支持与 Java 和 Kotlin 和 Objective C 和 Swift 的直接调用支持,从 Dart 3.2 开始进行了许多改进:

  • 引入了 C FFI 的构造函数 NativeCallable.isolateLocal ,它可以从任意 Dart 函数创建一个 C 函数指针,这是 Pointer.fromFunction 提供的功能的扩展,它只能从顶级函数创建函数指针。

  • 更新了 Objective-C 利用NativeCallable.listener 绑定生成器,生成器现在可以自动处理包含异步回调的 API,例如 Core Motion 这种以前需要手动绑定的代码。

  • 改进 package:jnigen 实现 Java 和 Kotlin 的直接调用支持,现在我们能够将 package:cronet_http(Android Cronet HTTP 客户端的包装器)从手写绑定代码迁移到自动生成的包装器。

  • 在 Native Assets 功能上取得了重大进展,该功能旨在解决与依赖于 Native 代码的 Dart 包分发相关的许多问题,它通过提供统一的钩子来与构建 Flutter 和独立 Dart 应用所涉及的各种构建需要,详细可见 :http://dart.dev/guides/libraries/c-interop#native-assets

    Native Assets 目前是一个实验性的功能,它可以让 Dart 包更无缝依赖和使用 Native 代码,通过 flutter run/flutter build dart run/dart build 构建并捆绑 Native 代码 。

    备注:可通过 flutter config --enable-native-assetsflutter create --template=package_ffi [package name] 启用。

    Dart 3.2 更新,Flutter Web 的未来越来越明朗,flutter,前端

    Demo native_add_library 展示了相关使用,当 Flutter 项目依赖 package:native_add_library 时, 脚本会自动在 build.dart 命令上调用:

    import 'package:native_add_library/native_add_library.dart';
    
    void main() {
      print('Invoking a native function to calculate 1 + 2.');
      final result = add(1, 2);
      print('Invocation success: 1 + 2 = $result.');
    }
    

Dart 包的 DevTools 扩展

在 Dart 3.2 和 Flutter 3.16 中发布了一个新的扩展框架,该框架让包作者能够为它的 package 构建自定义工具,并直接在 DevTools 中显示。

它允许包含框架的 pub.dev 包提供特定用例的自定义工具,例如 Serverpod 的作者一直在努力为它的 package 构建开发人员工具,并且很高兴在即将发布的 1.2 版本 中提供 DevTools 扩展。

Dart 3.2 更新,Flutter Web 的未来越来越明朗,flutter,前端

Dart Web 和 Wasm 更新

从 Chrome 119 开始,Chrome 会默认启用 Wasm 垃圾收集支持(称为 Wasm-GC) ,Wasm-GC 支持也出现在 Firefox 120(他们的下一个稳定版本)中被支持,那么 Dart、Flutter 和 Wasm-GC 的现状如何?

Dart-to-Wasm 编译器的功能几乎已经完全实现,团队对性能和兼容性非常满意,现在的重点是边缘情况,以确保在广泛的场景中能同样完美运行。

对于 Flutter Web,这里类似于完成了一个全新的 “Skwasm” 渲染引擎。为了最大限度地提高性能,Skwasm 通过 wasm-to-wasm 绑定将编译后的应用代码,直接连接到自定义 CanvasKit Wasm 模块 ,这也是 Flutter Web 多线程渲染支持的第一次迭代,进一步提高了帧时间。

在 Wasm 的 Flutter web 准备脱离当前的实验状态之前,还有一些事情要做:

  • 双编译:生成 Wasm 和 JavaScript 输出,并在运行时启用功能检测,以支持支持和不支持 Wasm-GC 的浏览器。
  • JavaScript interop:一种基于扩展类型的新 JS 互操作机制,当针对 JavaScript 和 Wasm 时,可以在 Dart 代码、浏览器 API 和 JS 库之间进行简洁、类型安全的调用。
  • 支持 Wasm 的浏览器 API:一个新的 package:web,基于现代 JS 互操作机制,取代了 dart:html (和相关库),这将提供对浏览器 API 的更轻松访问,并支持 JS 和 Wasm 目标。

目前已经开始将一些内部项目迁移到 package:web 和新的 JS 互操作机制,并期望在下一个稳定版本中有更多更新。

可以在 https://flutter.dev/wasm 了解更多。

最后

本次更新最重要有两个点,第一就是 Dart interop 越来越成熟,相信以后直接通过 flutter run 就可以完成所有 interop 的绑定和编译,第二就是 Web 路线随着 Dart Wasm 支持的进展,越来越值得期待了。文章来源地址https://www.toymoban.com/news/detail-754143.html

到了这里,关于Dart 3.2 更新,Flutter Web 的未来越来越明朗的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • IPV6使用越来越广,您会配置吗?

    前面针对IPv6写过一篇文章,但是好多网友反映没有读懂,今天再给大家把内容浓缩一下,教给大家如何配置。 IPV6的推出主要是为了解决地址空间的不足,从而进一步的促进互联网的发展。IPV6地址空间大到惊人,有人比喻地球上的每粒沙子都可以拥有一个IPv6地址。   128bit的

    2024年02月13日
    浏览(52)
  • 为什么越来越多的企业选择云计算?

    1.当下企业信息化的痛点 企业信息化,这也算是一个老生常谈的话题了,整个中国业内前前后后应该喊了有十多年了。不过到目前为止,我国很多企业公司都还没真正形成一个完整的信息化框架,或者只是运用了一个简单财务或客户管理系统。甚至还有很多公司企业根本连基

    2024年02月04日
    浏览(50)
  • 为什么越来越多的企业选择云计算

    目录 一、前言 二、云计算的基础概念 2.1 云计算的定义 2.2 云计算的发展历程 2.3 云计算的基本架构 三、 企业采用云计算的优势 四、 行业应用案例 五、未来发展与挑战 六、总结 随着数字化转型的加速,越来越多的企业开始选择云计算作为信息技术应用的基础设施。那么,

    2024年02月02日
    浏览(64)
  • 越来越看不懂的企业数字化转型……

    近日和一做乙方的老友相聚谈起了今年的企业数字化转型情况,都有一个整体的感受那就是: 越来越看不懂了,有价无市,看似热闹,实则观望。   经历几年疫情,行业内都普遍认为企业领导对于数字化的重视程度在提高,毕竟数字化的技术能力及所取得的成果在这两年是

    2024年02月13日
    浏览(55)
  • mac电脑储存内存越来越小如何清理释放空间?

    如果你是一位Mac系统的用户,可能会发现你的电脑储存空间越来越小。虽然Mac系统设计得非常优秀,但是系统数据和垃圾文件也会占据大量的储存空间。在这篇文章中,我们将探讨mac系统数据怎么这么大,以及mac清理系统数据怎么清理。 一、mac系统数据怎么这么大 许多Mac用

    2024年02月08日
    浏览(61)
  • 加密越来越简单——用JavaScript实现数据加密和解密

    在当今互联网的世界中,安全性越来越受到关注,数据加密成为了必不可少的一环。Javascript作为前端开发的主要语言之一,也有着重要的加密应用。本篇博客将讨论Javascript加密的概念、常用算法以及代码示例。 Javascript加密 ,简单来说就是通过Javascript实现数据的加密和解密

    2024年02月15日
    浏览(64)
  • Clarity - 微软你越来越懂用户了,原来是因为她!

    Clarity——微软开源并完全免费使用的新一代网站体验分析利器,让你彻底了解你的用户; 产品的Slogan: 了解你的用户,改进你的产品,改进你的业务 近年来,微软的软件产品用户体验确实有了很大提升,这与他们推出的 Clarity 这款免费体验分析工具分不开关系。今天,就让

    2024年04月13日
    浏览(44)
  • 为什么越来越多公司开始用低代码开发?

    时代洪流的走向,我们无法左右,能够把握的,只有做好自己。如何在寒冬来之不易的机会中,生存并且壮大。 不知道大家有没有发现,今年的低代码赛道异常火热,但火热的背后才值得思考,市场需求持续被挖掘,是什么造就了目前诸多低代码平台的井喷? 在低代码应用

    2024年02月04日
    浏览(64)
  • 为什么越来越多的企业开始选择云计算?

    一、前言 随着数字化时代的到来,企业对于数据的需求越来越大,而传统的数据存储方式已经无法满足企业的需求。云计算作为一种新兴的技术,可以为企业提供更加灵活、高效、安全的数据存储和处理方式,因此越来越多的企业开始选择云计算。 云计算可以帮助企业降低

    2024年02月08日
    浏览(67)
  • 为什么电脑运行越来越慢?解决方法又是什么呢?

    如果您经常使用电脑,肯定遇到过这种情况:对于新购买或者新安装了操作系统的电脑,它可以很顺畅地运行,速度也很快,但随着使用时间的增长,它的整体性能不断下降,速度越来越慢。 发生这种情况,除了电脑的使用年限过长、确实应该被淘汰以外,很大可能是“操作

    2024年02月08日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包