1.打印当前时间
final time = DateTime.now(); // 2020-03-29 06:56:10.110523
2.在dart中,boolean必须是true,或者false不能是数字,否则报如下错误
index.dart:6:7: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
3.a??=b; 表示如果a为空,则把b赋值给a,a不为空,则忽略b的值,(var a= b??1,如果b为空,则去a=1,不为空,取a=b)
4. ~/=表示取整,并赋值
var a = 3.14;
var b = 2;
print(b~/a); // 0 b除以a取整
print(b~/=a); // 0 b除以a取整,并赋值给b
print(b);// 0
5. 字符串和数字之间的转化
// 字符串转数字parse
String str = '123';
int a = int.parse(str);// 123
print(a);
// 数字转字符串
int c = 123;
String d= c.toString();
print(d);
6.isEmpty:判断字符串是否为空
//isEmpty:判断字符串是否为空
if (d.isEmpty) {
print('true');
} else {
print('false');
}
7.forEach、Map、where、any、evey区别
forEach:主要用于遍历
Map:用于遍历并返回值
where:用于过滤并返回过滤后的值
any:只要遍历中有满足条件的就返回true,否则返回false
every:遍历中的每一项都必须满足条件才返回true,否则返回false
8.函数参数可选位置参数[]和可选命名参数{}的区别
可选位置参数:main(int a,[int b,int c=1]),在调用的时候,b和c可传,可不传,main(1,2);
可选命名参数:main(int a,{int b,int c=1}),在调用的时候,main(1,b:2,c:3);如果想要参数必填,则用@required修饰
9.闭包的好处:常驻内存,且不污染全局代码,闭包也就是方法里面嵌套返回匿名方法的方法
10.区分构造函数中默认构造函数中参数的写法,一个类中默认构造函数只能有一个,命名构造函数可以写多个。最开始一直不理解,构造函数为什么要加{},现在才知道为什么。
class Person {
String name;
int age ;
// Person();// 默认构造函数
Person(this.name,this.age);// 位置构造函数
// Person({this.name,this.age});// 命名构造函数
Person.getInfo(String name,int age){// 命名构造函数
this.name = name;
this.age = age;
}
}
main(){
Person p= Person('李白',26);
// Person p = Person(name:'张飒',age:26);
print(p);
Person p2 =Person.getInfo('hehe',25);// 命名构造函数调用
print(p2.name);
p2.name = 'libai';
print(p2.name);
}
11.Person():name='li',age=16{} 构造函数执行之前执行的初始化操作
12.静态成员static:
1.使用static关键字来实现级别的变量和函数
2.静态方法不能访问非静态成员,非静态方法可以访问静态成员
3.静态方法或成员变量,不需要实例化(或者说不使用this关键字),直接类名即可调用
13.dart是使用类和单继承的面向对象的语言,所有的对象都是类的实例,所有的类都继承自object。
1.子类可以使用extend关键字来继承父类
2.子类会继承父类的属性和方法,但是不会继承构造函数
3.子类能复写父类的方法 getter和setter
14.多态就是父类定义一个方法不去实现,让继承自他的子类去实现,每个子类有不同的表现。
15.使用mixins的条件:
1.作为mixins的类只有继承自Object,不能继承其他类
2.作为mixins的类不能有构造函数
3.一个类可以mixins多个mixins类
4.mixins绝不是继承,也不是接口,而是一种全新的特性
5.mixins的类型就是其超类的子类型。
16.async是让方法变成异步,await是等待异步方法执行完成。
17.async函数返回Future对象,普通返回值将包装成Future对象
18.可调用类
如果想要一个类像函数一样执行,可以给类添加一个calll方法。
void main() async{
var wf = aa();
var out = wf('1','2','3');
print(out);
}
class aa {
call(String a,String b,String c)=>'$a $b $c';
}
19.定义一个函数类型
void main() async{
}
// 定义函数的类型
typedef Compare = int Function(int a ,int b);
class aaa {
Compare compare;// 定义了一个函数
}
20.关键字var/const/final/dynamic有什么区别?
var:类型推导,一旦确定了类型,将不能修改类型,是用来修饰同类型的变量,变量的值可以变化
const:用来修饰常量的,不能运行时赋值
final:用来修饰一旦变量赋值就不能改变了
dynamic:用来类型可发生变化的
21.函数的参数分为必选参数和可选参数
可选参数:分为位置可选参数[]和命名可选参数{}
必选参数不能赋值默认值,只有可选参数才可以赋值默认值
箭头行数必须是单行的时候才可以使用,多行的时候不能使用
22.函数如果定义在类里面,称之为方法
23.dart默认提供了无参的构造函数,如果提供了有参构造函数,那么dart将不再提供无参构造函数
24.flutter不支持函数的重载,一个类里面不能出现名字相同的函数,要实现重载功能可使用命名构造函数
25.常量构造函数必须用final修饰,常量构造函数用来创建同一对象
26.工厂构造函数,在函数内部明确返回一个对象
27.抽象类不能被实例化
28.实现接口所有的方法都必须重写