Dart 基本语法

??

// 如果b为null则赋值,否则保持原样
b ??= value;

级联符号..

querySelector('#confirm') // Get an object.
    ..text = 'Confirm' // Use its members.
    ..classes.add('important')
    ..onClick.listen((e) => window.alert('Confirmed!'));
   相当于
 var button = querySelector('#confirm');
 button.text = 'Confirm';
 button.classes.add('important');
 button.onClick.listen((e) => window.alert('Confirmed!'));

方法可选参数:
可选的命名参数, 定义函数时,使用{param1, param2, …},用于指定命名参数。例如:

 //设置[bold]和[hidden]标志
 void enableFlags({bool bold, bool hidden}) {
      // ... 
 }  
 enableFlags(bold: true, hidden: false);

可选的位置参数,用[]它们标记为可选的位置参数:

  String say(String from, String msg, [String device]) {
      var result = '$from says $msg';
      if (device != null) {
         result = '$result with a $device';
      }
      return result;
  }
  say('Bob', 'Howdy'); //结果是: Bob says Howdy
  say('Bob', 'Howdy', 'smoke signal'); //结果是:Bob says Howdy with a smoke signal

默认参数
下面是为命名参数设置默认值的示例:

  // 设置 bold 和 hidden 标记的默认值都为false
  void enableFlags2({bool bold = false, bool hidden = false}) {
       // ...
  }

  // 调用的时候:bold will be true; hidden will be false.
  enableFlags2(bold: true);

匿名函数

 var list = ['apples', 'bananas', 'oranges'];
 list.forEach((item) {
    print('${list.indexOf(item)}: $item');
 });

//简写
 list.forEach((item) => print('${list.indexOf(item)}: $item'));

字符串转JSON

var jsonData = JSON.decode('{"x":1, "y":2}');

枚举类型

 enum Color {
    red,
    green,
    blue
 }

接口协议implements

/*
定义一个DB库 支持 mysql  mssql  mongodb
mysql  mssql  mongodb三个类里面都有同样的方法
*/
abstract class Db{   //当做接口   接口:就是约定 、规范
    String uri;      //数据库的链接地址
    add(String data);
    save();
    delete();
}

class Mysql implements Db{
  @override
  String uri;
  Mysql(this.uri);

  @override
  add(data) {
    // TODO: implement add
    print('这是mysql的add方法'+data);
  }

  @override
  delete() {
    // TODO: implement delete
    return null;
  }

  @override
  save() {
    // TODO: implement save
    return null;
  }

  remove(){
  }
}

多接口

abstract class A{
  String name;
  printA();
}

abstract class B{
  printB();
}

class C implements A,B{  
  @override
  String name;  
  @override
  printA() {
    print('printA');
  }
  @override
  printB() {
    // TODO: implement printB
    return null;
  }
}

多继承
mixins的中文意思是混入,就是在类中混入其他功能。
在Dart中可以使用mixins实现类似多继承的功能

因为mixins使用的条件,随着Dart版本一直在变,这里讲的是Dart2.x中使用mixins的条件:
1、作为mixins的类只能继承自Object,不能继承其他类
2、作为mixins的类不能有构造函数
3、一个类可以mixins多个mixins类
4、mixins绝不是继承,也不是接口,而是一种全新的特性

class A {
  String info="this is A";
  void printA(){
    print("A");
  }
}

class B {
  void printB(){
    print("B");
  }
}

class C with A,B{ //具有A类B类所有的方法
}

void main(){
  var c=new C();  
  c.printA();
  c.printB();
  print(c.info);
}
原文地址:https://www.cnblogs.com/qqcc1388/p/11396362.html