写点什么

Express Flutter SDK 全面支持空安全

用户头像
ZEGO即构
关注
发布于: 2 小时前
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

发布于: 2 小时前阅读数: 7
用户头像

ZEGO即构

关注

专注音视频领域19年 2020.04.15 加入

全球领先的音视频云服务商,已为映客、酷狗、喜马拉雅、荔枝、好未来、作业帮、掌门一对一、Live.Me、UpLive、Mico、平安科技等众多行业头部企业提供音视频云服务。

评论

发布
暂无评论
Express Flutter SDK 全面支持空安全