即构音视频 Express Flutter SDK 全面支持空安全
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。

即构音视频 Express Flutter SDK 全面支持空安全的更多相关文章
- moviepy音视频剪辑:TextClip不支持中文字符以及OSError: magick.exe: unable to read font 仿宋_GB2312.ttf的解决办法
☞ ░ 前往老猿Python博文目录 ░ 一.引言 moviepy对中文和多语言环境的支持做得并不好,包括中文文件名以及用于显示文字的TextClip就是典型的中文支持方面存在问题的.对于编解码的问题 ...
- Flutter SDK path为空导致工程打开后不显示iOS模拟器的问题
说明下问题场景,面向git编程时下载了个开源的Flutter项目 Mac系统下AndroidStudio打开工程后,发现顶部不展示iPhone模拟器 根据ide浅黄色提示提示,判断是FlutterSD ...
- 从零到一,使用实时音视频 SDK 一起开发一款 Zoom 吧
zoom(zoom.us) 是一款受到广泛使用的在线会议软件.相信各位一定在办公.会议.聊天等各种场景下体验或者使用过,作为一款成熟的商业软件,zoom 提供了稳定的实时音视频通话质量,以及白板.聊天 ...
- 融云携新版实时音视频亮相 LiveVideoStack 2019
4 月 19 日,LiveVideoStack 2019 音视频大会在上海隆重开幕,全球多媒体创新专家.音视频技术工程师.产品负责人.高端行业用户等共襄盛会,聚焦音频.视频.图像.AI 等技术的最新探 ...
- 音视频通讯QoS技术及其演进
利用多种算法和策略进行网络传输控制,最大限度满足弱网场景下的音视频用户体验. 良逸|技术作者 01 什么是QoS?音视频通讯QoS是哪一类? QoS(Quality of Service)是服务质量的 ...
- moviepy音视频开发:使用credits1给视频加片头片尾字幕
☞ ░ 前往老猿Python博文目录 ░ 一.概述 在<moviepy音视频剪辑:视频基类VideoClip子类DataVideoClip.UpdatedVideoClip.ImageClip. ...
- PyQt+moviepy音视频剪辑实战文章目录
☞ ░ 前往老猿Python博文目录 ░ 本专栏为moviepy音视频剪辑合成相关内容介绍的免费专栏,对应的收费专栏为<moviepy音视频开发专栏>. 一.moviepy基础能力系统介绍 ...
- ffmpeg实战-音视频基础概念
转发自白狼栈:查看原文 关于音视频,相信大家都看过电影(视频),听过音乐(音频),至少应该都知道mp4是视频文件,mp3是音频文件. 对于一个音视频文件,都有哪些属性呢?以视频为例,我们可以通过 ff ...
- Capstone通用 USB Type-C音视频拓展坞转换芯片
专业解决视频接口技术Capstone科技在2021年新推出四款低功耗单芯片USB Type-C音视频格式转换器方案──CS5266.CS5267.CS5268与CS5269.将为各种显示屏.外部显示设 ...
- 如何基于 ZEGO SDK 实现 Flutter 一对一音视频聊天应用?
之前的文章发布了ZEGO SDK实现Android端音视频通话应用的开发教程,不少开发者反馈很实用,能不能也出一版Flutter的教程. 有求必应,这不小编来了- 我们封装了ZEGO Flutter ...
随机推荐
- Oracle plsql中文字段乱码,where条件中文字段搜不到结果集
设置系统环境变量 变量名:NLS_LANG 变量值:AMERICAN_AMERICA.ZHS16GBK
- 解决方案 | vb记住上次打开的文件夹
Private Sub Button_ImportBasicData_Click(sender As Object, e As EventArgs) Handles Button_ImportBa ...
- mysql 删除数据表报错 表删除时 Cannot delete or update a parent row: a foreign key constraint fails 异常处理
mysql 删除数据表报错 表删除时 Cannot delete or update a parent row: a foreign key constraint fails 异常处理 MySQL报错 ...
- [oeasy]python018_ 如何下载github仓库_git_clone_下载仓库
继续运行 回忆上次内容 上次从 2行代码 进化到了 万行代码 命令 作用 yy 复制光标所在行代码 到剪贴板 p 粘贴 剪贴板中的内容 9999p 将剪贴板中的代码粘贴9999次 保存运行一条龙 :w ...
- [oeasy]python0070_ 字体样式_下划线_中划线_闪动效果_反相_取消效果
字体样式 回忆上次内容 m 可以改变字体样式 0-10 之间设置的都是字体效果 0 复原 1 变亮 2 变暗 从3到10 又是什么效果 呢?? 真的可以blink闪烁吗? 3m 3m 实现斜体字的效果 ...
- oeasy教您玩转vim - 91 - # vim脚本编程展望
vim脚本编程展望 回忆 上次我们彻底研究了vim高亮的原理 各种语法项syntax item 关键字keyword 匹配模式match 区域region 定义好了之后还可以设置链接成组 hi d ...
- 人工智能时代,前端全栈成就独立开发工程师 next.js 开发实战
next 可以服务端渲染,可以客户端渲染,让前端同事更有性价比,让我们做得可以更多 由于next.js 是基础于react 所以在正式学习next.js 之前我们了解一下react 什么叫模块 ,就 ...
- 【MySQL】全库调整表大小写语句
统一修改字段成小写+下划线的命名规则: V1上线后,重新看SQL调整的较可行的写法: # = = = = = = = = = = = = = = = 统一更改全库所有字段大小写脚本SQL(会删除字段原 ...
- 【Linux】Re02
一.运行启动级别 0 关机 1 单用户 2 多用户状态没有网络服务 3 多用户状态存在网络服务 4 系统未使用保留给用户 5 图形界面 6 重启 命令: init [0 - 6] 图形化界面级别需要对 ...
- 【C】Re06 数组与指针
一.指针和数组 void pointerAndArray() { int array[5] = {1, 2, 3, 4, 5}; printf("pointer array -> %p ...