1、final 惰性初始化 final time = Date.now();const 在上面这个初始化,报错
2、''' ''' 、""" """多行字符串
3、is 关键字判断类型if (str1 is String) ...
4、~/ 取整,返回int / 直接除,返回double
5、var b ??= 23; 如果b不为空,则把23赋给b。var b = a ?? 10; 如果a不为空,则把a赋给b,否则把10赋给b。
6、Number => String 使用toStringString => Number 使用prase。 int b = Int.prase(str1);
7、try {} catch (error) {}
8、数组 List A、反转数组 var list2 = list1.reversed.toList(); B、数组拼接数组 var list2 = list1.addAll(list3); C、查找索引 list2.indexOf("PINGG"); 找到返回索引,找不到返回-1 D、数组成字符串 String str = list2.join(','); E、字符串转成数组 Var list2 = str.split(',');
9、Set 去重复的数组。使用toList()转成数组
10、字典中是否包含某个键dic.containValue("kkk");
11、遍历 for (var item in list2) { } list2.forEach((value) { });
12、筛选 var list1 = list2.where((value) { return value > 6; });
13、只要满足条件就返回true var b = list1.any((value) { return value > 6; });
14、每个都要满足条件就返回true var b = list1.every((value) { return value > 6; });
15、方法可以嵌套,但是有作用域限制,跟变量一样
16、方法的可选参数String grtInfo(String name,[int age,int height]) {if (age != null) {}}
17、方法的默认参数String grtInfo(String name,[int age = 20]) {
}
18、方法的命名参数String grtInfo(String name,{int age}) {
}区别在调用getInfo("xiaoli", age: 20);
19、方法可以作为参数传入到另一个方法里
20、匿名方法var fn = () {};
21、闭包:方法里面嵌套方法,并且返回方法。可以让变量常驻内存,并且不污染全局。fun1 () {var a = 123;return () {a++;printf(a);};}var b = fun();b();b();
22、类class Person {String name = "张三";int age = 23;void printInfo(){pringtf("$name-----$age");pringtf("${this.name}-----${this.age}");}}
23、类的构造方法:实例化类的时候自动调用的方法
// 默认构造方法,只能写一个Person(String name, int age){this.name = name;this.age = age;}
// 默认构造函数的简写Person(this.name, this.age);
// 命名构造函数Person.now(){
}
24、私有属性、方法在命名前面加个下划线_即可将它设置为私有。但是在同一个文件里,还是可以访问
25、get方法,可以通过访问属性的方式去调用方法get area {return a*b; }
printf("面积=${p.area}");
26、set方法set areaHeight (value) {this.height = value;}
p.areaHeight = 6;
27、使用构造函数时,默认动态初始化属性。初始化列表Person():name="xiaoli",age=23 {
}
28、在属性、方法的声明前面加上static,即可成为静态的属性、方法。 调用的时候,只能通过类名类访问,而不是使用对象去访问。 static String name = '小李'; printf(Person.name); 非静态方法可以访问所有属性,但是访问静态属性时,不使用this。 静态方法无法访问非静态属性、方法
29、对象操作符 ? 条件运算符 as 类型转换 is 类型判断 .. 级联操作符
Person p; p?.showInfo(); // 如果为空,不执行 (p as Person).showInfo(); p..name='lixi' ..age=40 ..showInfo();
30、类的继承 extends,可以继承课件的属性和方法,可以重写父类的方法。不能继承构造方法 class Student extends Person { // 普通构造方法 Student(String name, Int age, String sex) : super(name, age) { this.sex = sex; } // 命名构造方法 Student(String name, Int age, String sex) : super.now(name, age) { this.sex = sex; } // 复写父类的方法 @override // 可写可不写 void showInfo () { super.showInfo(); }
}
31、抽象类(不能被实例化)、抽象方法(子类必须重写)abstract class Animal {eat(); // 抽象方法,不实现。子类必须重写}
32、接口:定义抽象类,接口的实现类,通过implements继承于抽象类,并实现里面的方法33、一个类实现多个接口class C implements A,B {}
34、mixins类似多继承的功能,只能集成来自Object,不能有构造函数class C with A,B {}
35、泛型方法T getData
36、泛型类List
37、异步async同步await()必须用在异步操作里
38、网络请求,引入网络请求库import 'dart:io'