1.7 语言特性

一、空安全

  1. Dart是一个空安全的语言,也就是说,无法将一个非空类型对象设置为null

  2. 如果希望对象可以赋值为null,需要在类型后加上?表示可空

    void main() {
      int? a = null;
    }
  3. 如果一个函数是String入参,那么函数体内的对象就必定不为null,这样就可以在编码时明确对象的可控性,做到被访问对象的空安全

  4. 如果希望在调用时可以传入null,并且是String类型,那么同理就可以实现,类型设置为String?

二、异步任务

  1. 异步任务可以在未完成之前,让程序继续执行其他的逻辑,在完成之后接收到通知。

  2. 使用 readAsString 异步方法读取一个文件,通过 then 监听对调,回调中的参数就是读取的字符串。

    // 通过读取文件进行演示
    import 'dart:io';
    
    void main() {
      String path = r'pubspec.yaml';
      File file = File(path);
      print("开始读取");
      file.readAsString().then((value) {
        print("===读取完毕: 文字内容长度 = ${value.length}====");
      });
      print("做些其他的事");
    }

    输出:

    开始读取
    做些其他的事
    ===读取完毕: 文字内容长度 = 16====

    注意:

    需要在同目录创建pubspec.yaml文件,并编写Yaml内容

  3. 有些时候,需要等待异步任务完成,才能继续之后的任务。可以通过 await关键字等待异步任务的完成,获取结果:

    Future<void> test2() async{
      String path = r'pubspec.yaml';
      File file = File(path);
      print("开始读取");
      String content = await file.readAsString();
      print("===读取完毕: 文字内容长度 = ${content.length}====");
      print("做些其他的事");
    }

    输出:

    开始读取
    做些其他的事
    ===读取完毕: 文字内容长度 = 16====

    注意:

    1. 需要在同目录创建pubspec.yaml文件,并编写Yaml内容

    2. 在控制台输出时,main 函数结束后就会停止,而文件读取的结果要稍后才能完成,导致无法打印出读取结果

最后更新于