关于flutter:即构音视频-Express-Flutter-SDK-全面支持空安全

7次阅读

共计 1819 个字符,预计需要花费 5 分钟才能阅读完成。

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。

正文完
 0