一、字符串常用操作
// String 转为 int
var one = int.parse('1');
assert(one == 1);

// int 转为 String
String oneAsString = 1.toString();
assert(oneAsString == '1');
常用方法
trim() 返回没有任何前导和尾随空格的字符串。
replaceAll() 用给定值替换与指定模式匹配的所有子字符串。
split() 在指定分隔符的匹配处拆分字符串并返回子字符串列表。

注意:在Dart中,str被转换为false,因为str != true

二、部分关键词的理解
// dynamic ,var、object 三种类型的区别
dynamic:所有dart 对象的基础类型,在大多数情况下,不直接使用它
通过它定义的变量会关闭类型检查,这意味着 dynamix x= 'hal'; x.foo();
这段贷款静态类型检查不会报错,但是运行时会crash,因为x 并没有foo() 方法,所以建议大家在编程时不要直接使用dynamic;
var: 是一个关键字,意思是"我不关心这里的类型是什么",系统会自动判断类型 runtimeType;
object: 是Dart 对象的基类,当你定义: object o =xxx ;时这个时候系统会认为o 十个对象,你可以调用o的toString()和hashCode()方法
因为Object 提供了这些方法,但是如果你尝试调用o.foo()时,静态类型检查会运行报错。
综上不难看出dynamic 与object 的最大的区别是在静态类型检查上。

final和const关键字用于声明常量。在Dart中不能修改使用final或const关键字声明变量的值。这些关键字可以与变量的数据类型一起使用,也可以与var关键字一起使用。
const关键字用于表示编译时常量。使用const关键字声明的变量是隐式final。
@override 继承(extends)重写父类方法

三、Dart函数
Dart构造函数

void main() {
    Car c = new Car('EA888');
}
class Car {
    Car(String engine) {
        print(engine);
    }
}

命名构造函数

 void main() {
    Car c1 = new Car.namedConst('EA888');
    Car c2 = new Car();
}
class Car {
    Car() {
        print("Non-parameterized constructor invoked");
    }
    Car.namedConst(String engine) {
        print("The engine is : ${engine}");
    }
}

Dart类Getters和Setter

class Student {
    String name;
    int age;
    String get stud_name {
        return name;
    }
    void set stud_name(String name) {
        this.name = name;
    }
}

四、异常类型

DeferredLoadException  延迟库无法加载时抛出。
FormatException 当字符串或某些其他数据没有预期格式且无法解析或处理时抛出异常。
IntegerDivisionByZeroException  当数字除以零时抛出。
IOException  所有与输入输出相关的异常的基类。
IsolateSpawnException  无法创建隔离时抛出。
Timeout  在等待异步结果时发生计划超时时抛出。