1. Dart Dart 里面所有的东西都是对象,包括 int ,函数 这些对象的父类是 Object ,

函数也是一个对象,类型为 Function ,

定义常量

在定义变量前加上 final 或 const 关键字

  • final 可以在运行期间确定值,一旦确定就不能改变了 ,如何赋值无所谓,但是赋值后就不能再改了。
  • const 表示变量在编译期间就能确定的值,也就是定义 const 常量的时候,必须直接赋一个字面值,而不是一个变量或者公式
    var i=3;
    final value=i*3;
    const name=i*3;  //错误 Not a constant expression
    void main() {
      print("$value"); //9
      // print("$name"); // Not a constant expression
    }
    

    Dart 类定义

在声明变量与方法时,在前面加上“”即可作为 private 方法使用。如果不加“”,则默认为 public 。不过,“_”的限制范围并不是类访问级别的,而是库访问级别。

在 Dart 中,你可以对同一个类进行继承或者接口实现

  • 继承父类,子类又父类派生,会自动获取父类的成员变量和实现方法,子类可以根据需求复写构造函数以及父类方法
  • 接口实现,子类获取的仅仅是接口的成员变量符合和方法符号,需要重新实现成员变量,以及方法的声明和初始化,否则编译期会报错。

当然还有第三种方式,即混入,

混入 Mixin

可以理解为多继承,使用 with 关键字,主要是为了鼓励代码复用的,

void main() {
  var c=Coordinate();
  c.printInfo(); //(0,0)
  c.name="haha";
  c.printName();//name : haha
  print(c is Student);//true
  print(c is Point); //true
}

class Point {  num x = 0, y = 0;  void printInfo() => print('($x,$y)');}

class Student  {
  String name;
  void printName()=>print("name : $name");
}

class Coordinate extends Student with Point {}

Dart 特殊操作符

  • ?? color = _color ?? Colors.blue 如果 _color 不为 null ,则返回 _color ,否则,返回 Colors.blue
  • .. .. 级联符号,允许你对同一对象执行一系列操作,除了函数调用,还可以访问同一对象上的字段,
    Paint paint = new Paint()
        ..color = _color ?? Colors.blue
        ..strokeCap = StrokeCap.round
        ..strokeWidth = 4.0
        ..style = PaintingStyle.stroke;
    
  • ??= // 如果 b 为空,则将值分配给b;否则, b 保持不变 b ??= value;

b??=value ; 等价于 b=(b==null)?value:b;

  • ?. 和.差不多,但是左边的操作数可以为空,
class User{
  String name;
}
void main() {
  User user;
  print(user?.name); //输出的是null
  print(user.name);//会出异常,Cannot read property 'get$name' of nullError:
}

setter/getter

Dart 语言会隐士的定义 setter 方法,针对非空的变量会额外增加 getter 方法

直接使用 get /set关键字 来复写 getters 和 setters 方法

String 和 Java 中的一样,检测两个 String 的内容是否一致,使用 == 简单两个对象是否是同一个对象,使用 identical 函数

operator

Dart 的一个关键字 和运算符一起使用,表示一个运算符的重载函数,可以理解将 operator 和运算符视为一个函数名

bool operator ==(other) {
  ....
}

重载了==运算符

Object 和 dynamic 都可以接受任意类型的参数

  • Object ,表示接受任意类型,系统保证其类型安全
  • dynamic 告诉编译期,知道自己在做什么,不用做类型检测

  • is 关键字, 判断该对象是否是某种类型
  • as 关键字 ,进行强制类型转换

Dart 可以抛出任意类型的对象

Dart 使用 package 的概念管理源码和可见性,没有 public 和 private 之类的访问权限控制,默认情况下,所有的符号都是公开的,如果不想某个变量对包的外部可见,可以使用下划线开头给变量命名


搬运地址:

极客时间《Flutter核心技术与实战》