首页 > 其他分享 >即构音视频 Express Flutter SDK 全面支持空安全

即构音视频 Express Flutter SDK 全面支持空安全

时间:2023-11-02 17:33:23浏览次数:43  
标签:null Dart Express 音视频 安全 SDK Flutter 即构

Flutter 是一套移动 UI 框架,可以快速在 iOS、Android 上构建高质量的原生用户界面。作为其官方语言 Dart 是类型安全的,当开发者获取变量的时候,编译器可以保证变量的类型,但类型安全并不保证获取的变量不是null

在 GitHub 上有非常多因为null导致 Dart 代码出现异常的 issue,为了从源头上解决 Null errors,Dart 团队在 2.12 版本中支持空安全(Sound null safety)特性,相应的 Flutter 升级到了 2.0。

详解空安全特性

当选择使用空安全时,代码中的类型将默认为非空,意味着除非你声明它们可空,它们的值都不能为空。有了空安全,原本处于运行时的空值引用错误将提前到编译期。

为了支持空安全特性,Dart 新增了操作符和关键字:

?           -> 可空               如:int a?;
!           -> 非空               如;int b = a!;
late        -> 延迟初始化          如:late int a;

下面我们以 Express SDK 支持空安全为例,对以上操作符和关键字进行逐个介绍。

1、操作符:?

在 Express SDK 的开发中,因为接口使用的便利性,我们会在接口中内置化一些默认值,同时如果开发者想使用高阶的特性,可自行进行配置,那就需要参数是可空的,在类型后面添加 ?即可:

loginRoom(String roomID, ZegoUser user, {ZegoRoomConfig? config})

Express SDK 事件回调一般都是用可选监听的,所以定义回调事件的方法时都是使用的?,表示监听可空。

static void Function(ZegoEngineState state)? onEngineStateUpdate;

2、操作符:!

当我们在做事件回传的时候,会对回调方法做判空推出处理,保证后续的使用不会出现空值引用,可以使用"!"来告诉编辑器,这个值不会为空。

case 'onEngineStateUpdate':
    if (ZegoExpressEngine.onEngineStateUpdate == null) return;

    ZegoExpressEngine.onEngineStateUpdate!(
      ...  
    );
    break;

3、关键字:late

当需要处理延时初始化这种常见的行为时,可以使用 late来告诉编辑器,这是个非空变量,会稍后初始化。

class RTC {
    late ZegoExpressEngine engine;

    ZegoExpressEngine createEngine(appID, appSign, true, 0).then((e)) {
        engine = e;
        ...
    }
}

空安全引入的优势

这里值得注意的是,我们的目的并不是为了消除 null,一个表示空缺的值是非常有用的。在语言中提供对空缺值的支持,可以让处理空缺更为灵活和高效,它为可选参数、?. 空调用语法糖和默认值初始化提供了基础 。

所以 null不是糟糕的,糟糕的它会在你意想不到的地方出现,最终引发问题。而空安全的引入是让代码中 null 变得可见和可控,并且确保它不会传递到某些位置从而引发崩溃。

当语言对程序中语义化的属性做出硬性保证时,说明编译器能真正意义上为这些属性作出优化,当它涉及到 null 时,意味着可以消除不必要的 null检查,提供更精悍的代码,并且在对其调用方法前,不需要再校验是否其为空调用。反映在在包体大小和性能提升方面都带来了可观的效果。

ZEGO Express Flutter SDK 已全面支持空安全

鉴于空安全带来的种种优势,Express Flutter SDK 在 2.5.1 版本中对空安全已经进行了全面的支持。

Express Flutter SDK 2.5.1 及后续版本支持 null-safey,作为一个向后兼容的特性,必须使用 Dart 2.12 或更高版本。

Express Flutter SDK 2.5.1 支持 Flutter 2.x (仅限与 Android 和 iOS 平台)。

在 Dart 的包管理文件 pubspec.yaml 中可进行配置:

environment:
  sdk: ">=2.12.0 <3.0.0"
  flutter: ">=2.0.0"

最后,如果您想深入理解空安全可参考Dart 官方文档:https://dart.cn/null-safety/understanding-null-safety

详细了解 Express Flutter 的相关功能请参考 ZEGO 官方文档和示例源码:https://doc-zh.zego.im/article/5424

标签:null,Dart,Express,音视频,安全,SDK,Flutter,即构
From: https://www.cnblogs.com/zegoinfo/p/17805892.html

相关文章

  • 去除WinForm程序中的Devexpress弹窗
    去除WinForm程序中的Devexpress弹窗///<summary>///应用程序的主入口点。///</summary>[STAThread]staticvoidMain(){if(!CheckInstance()){Application.Exit();......
  • 三种简单实用的方法帮助你去除抖音视频上的水印
    如今越来越多的人涉足自媒体工作,在这个过程中,我们经常会遇到一个普遍的问题在寻找素材时,发现视频上带有抖音的水印,这些水印可能会对我们的创作产生负面影响,不过别担心!我将与你分享三种简单实用的方法,帮助你抖音视频去水印。第一种方法、水印云水印云是一款快速去水印的软件可以帮你......
  • ZEGO 即构科技首发适配鸿蒙系统的 Express SDK 1.0 版本
    ​ 2019年8月,华为在开发者大会上正式发布鸿蒙系统。HarmonyOS鸿蒙系统是一款“面向未来”、面向全场景(移动办公、运动健康、社交通信、媒体娱乐等)的分布式操作系统。在传统的单设备系统能力的基础上,HarmonyOS提出了基于同一套系统能力、适配多种终端形态的分布式理念,能够支持......
  • 界面控件DevExpress WinForms Gauge组件 - 实现更高级别数据可视化
    DevExpressWinForms控件包含了超过150个随时可用的仪表盘预设,包括圆形,数字,线性和状态指示器等,来帮助用户实现更高级的数据可视化。DevExpressWinForms有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。同时能完美构建流畅、美观且易于使用的应用程序,无论是......
  • 即构发布 | 移动端实时超分辨率技术,迭代视觉新体验
     超分辨率(SuperResolution,简称SR),是计算机视觉的一个经典应用。SR是指通过软件或硬件的方法,从观测到的低分辨率图像重建出相应的高分辨率图像,简单来说就是通过AI算法来放大原有图像的分辨率以达到提升画质的效果。在监控设备、卫星图像遥感、数字高清、显微成像、视频编码通......
  • 界面控件DevExpress WPF Gauge组件 - 轻松实现个性化商业仪表盘
    DevExpressWPFGauge(仪表)控件包含了多种圆形仪表类型、水平和垂直线性仪表、分段和矩阵数字仪表以及状态指示器,同时还具有最终用户交互性的集成支持。P.S:DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着......
  • 解决MYSQL查询报错 Expression #4 of SELECT list is not in GROUP BY clause and con
    原因:在MySQL5.7.5后,默认开启了ONLY_FULL_GROUP_BY,所以导致了之前的一些SQL无法正常执行,其实,是我们的SQL不规范造成的,因为groupby之后,返回的一些数据是不确定的,所以才会出现这个错误。执行下面的命令后,重启你的代码,就可以了selectversion(),@@sql_mode;SETsql_mode=(SELECTRE......
  • 音视频常见问题(六):视频黑边或放大
    摘要本文介绍了视频黑边或放大的原因和解决方案。主要原因包括视频分辨率与显示视图尺寸不一致、摄像头采集、美颜滤镜格式兼容和分辨率。为了解决这些问题,开发者可以选择合适的渲染模式、动态调整分辨率、处理视频旋转和使用自定义视频渲染。即构音视频SDK提供了强大的工具和灵......
  • 易语言抖音视频提取工具,点赞,收藏,评论源码
    下面是界面: 下面是程序集代码:.版本2.支持库ietb.支持库spec.支持库iext.程序集窗口程序集_启动窗口.程序集变量页面,谷歌页面.程序集变量ccookiesA,文本型,,"0".子程序_按钮1_被单击.局部变量是否成功,逻辑型.局部变量谷歌浏览器路径,文本型.局......
  • 音视频常见问题(六):视频黑边或放大
    摘要本文介绍了视频黑边或放大的原因和解决方案。主要原因包括视频分辨率与显示视图尺寸不一致、摄像头采集、美颜滤镜格式兼容和分辨率。为了解决这些问题,开发者可以选择合适的渲染模式、动态调整分辨率、处理视频旋转和使用自定义视频渲染。即构音视频SDK提供了强大的工具和灵活......