14.Dart-2.13后的新特性Non-nullable, N

2022-11-27  本文已影响0人  你的胡霸霸

import '1.first.dart';

/**

* Flutter2.2.0之后的版本都要求使用null safety

* 其实和swift差不多

*

* ? 可空类型

*

* !类型断言

*

*

*

* late 关键字主要用于延迟初始化

*

*

*

*/

main(List<String> args) {

  // 通过?定义一个可空类型,这样在才能给a=null, 新版本都要这样写了

  int? a = 10;

  print("a = $a");

  a = null;

  print("a = $a");

  List<String>? l = ["1", "2", "3"];

  print("l = $l");

  l = null;

  print("l = $l");

  var le = getData("哈喽");

  print("str.length = $le");

  // ! 类型断言

  String? s = null;

  // print(s!.length); //这样会抛出一个异常, 因为此刻值是null

  Person p = new Person("张三", 20);

  print("${p.name},${p.age}");

  String sss = printInfo("李四", age: 20, score: 100);

  print("sss = $sss");

  sss = printInfo1("王五");

  print("sss = $sss");

}

// 函数返回一个可空类型

int? getData(String? str) {

  try {

    var l = str!.length;

    return l;

  } catch (e) {

    return null;

  }

}

// 在2.13之后需要给属性初始化, 延迟初始化值,就需要late前置声明

class Person {

  late String name;

  late int age;

  Person(this.name, this.age);

  get des {

    return this.name + "," + this.age.toString();

  }

  set setDes(String name) {

    this.name = name;

  }

}

//require

// 最开始@required是注解

// 现在作为内置修饰符

// 主要用于允许根据需要标记任何命名参数(函数或类),是他们不为空

// 下面代码命名参数, 本来是可以可选的传入,加了required就是必须传入的

String printInfo(String name, {required int age, required double score}) {

  if (age != 0) {

    return "$name, $age, $score";

  } else {

    return "$name";

  }

}

// 下面这样也可以, 直接给可选参数一个默认值, 就不会报错了

String printInfo1(String name, {int age = 0, double score = 0.0}) {

  if (age != 0) {

    return "$name, $age, $score";

  } else {

    return "$name";

  }

}

上一篇下一篇

猜你喜欢

热点阅读