Dart-Null safety required 常量构造函数

1.Null safety 空安全

 帮助开发者发现一些难以发现的错误,改善性能
 //以下?可空类型不适用
 String? userName="";
  userName=null;

现在这个也可以
String getData(apiUrl){
if(apiUrl!=null){
return “数据返回”;
}
return null;

}
void main(List args) {
print(getData(“hello”));
print(getData(null));
}

断言类型–可能不需要

以下无效
void main() {
String? str="this is ";
str=null;
print(str!.length); //!原意是不为空则正常输出,为空则抛出异常
}

延时–可能不需要

类中没有用构造函数赋值,可能报错未初始化,加late
late String name;

Required

  最初@Required是注解,现在变成了内置修饰符
   要求命名参数(函数,类)不得为空
   String printUserInfo(String userName,{required int age,String sex}){
   也就是要求必须提供某个参数

常量

const:编译时确定
final 可先声明
identical函数:检查两个对象是否指向了同一个空间

        var a1=new Object();
  var a2=new Object();
  print(identical(a1, a2));//fasle
     print(identical([1], [1]));//false

但是用了const:

const 在多个地方创建相同对象时,内存中只保留一个对象
const 声明两个数组值相同时,共享一个存储空间

var a1=const Object();//省略了new
  var a2=const Object();
  print(identical(a1, a2));//true
   print(identical([1], [1]));//false
      print(identical(const [1], const [1]));//true
      const a=[2];
        const b=[2];
        print(identical(a, b));//true

## ```常量构造函数
1)常量构造函数必须用const修饰
2const构造函数必须用于成员变量都是final修饰的
3)实例化时如果不加const,即使调用的是常量构造函数,实例化的对象也不是常量
4)实例化常量构造函数的时候,多个地方创建这个对象,如果传入的值相同,只会保留一个
5Flutterconst修饰不仅仅是节省组件构建时的内存开销,

```dart
class Container{
  final int width;
  final int height;
  const Container(this.height, this.width);  //requested应该不是必须
}

void main(List<String> args) {
  var c1=new Container(12, 10);
   var c2=new Container(12, 10);
   print(identical(c1, c2));//false

    var c3=const Container(12, 10);
   var c4=const Container(12, 10);
   print(identical(c3, c4));//true

}

ff

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值