0%

Dart语言关键要点总结

var和Object和dynamic区别

var在没初始值时可以变成任意类型,有初始值后就固定为对应的类型。

Object可以是任意类型,编译时会进行静态检查,对应不上会导致编译失败。

dynamic可以是任意类型,编译时不会进行静态检查,如果对应不上,能编译通过,运行时会crash。

??和??=和?.

a = b ?? "hello"; // 如果b不为null,就赋值给a,否则赋值hello给a
a ??="hello"; // 如果a为null,就赋值hellp给a
print(a?.hashCode); // 如果a为null,就不调用,打印null,否则调用hashCode

级联调用

两个点表示级联调用,可以让代码更简洁,对成员变量,成员方法都可以用。

void main() {
  Cat()
    ..eat()
    ..sleep()
    ..name = '胖橘'
    ..speak();
}

class Cat {

  String? name;

  void speak() {
    print('my name:' + (name??''));
  }

  void eat() {
    print('eat');
  }

  void sleep() {
    print('sleep');
  }
}

mixin和with和on

mixin可以理解为公共的代码块,一个类可以with多个代码块,然后直接调用。

void main() {

  Cat()
    ..eat()
    ..sleep();
}

mixin Eat {
  eat() {
    print('eat');
  }
}

mixin Sleep {
  sleep() {
    print('sleep');
  }
}

class Cat with Eat, Sleep {

}

mixin可以搭配on使用,实现类代码组合:

void main() {
  Mac().init();
}

abstract class Computer {
  void init() {
    print('computer init');
  }
}

mixin CPU on Computer {
  void init() {
    super.init();
    print('CPU init');
  }
}

mixin Disk on Computer {
  void init() {
    super.init();
    print('Disk init');
  }
}

class Mac extends Computer with CPU, Disk {

}

Flutter中的WidgetsFlutterBinding就是采用该方式实现的。