1、变量
/// 定义基本类型 , 使用 var 关键字进行类型定义并初始化时,后续赋值只能是相同类型。
/// 使用 var 定义,不初始化 , 则后续可以任意类型赋值, 最终类型是 dynamic 类型,dynamic 类型不会检测成员,Object 定义的变量,会检测对象成员。
var variable = '12’;
/// 使用确定类型定义变量 , String 类型 , 使用确定类型赋值必须是相同类型
String name = 'zeno';
2、常量
/// const:声明的常量在编译时确定,不可以更改,必须初始化,特性会传递到子元素。(多个地方对象相同时,内存中只保留一份数据)
const PI = 3.1454567;
///final:声明常量在运行时确定,不可以更改,可以不初始化,但只能赋值一次。
final DE = 123231313;
3、运算符
运算符说明:
1、上表中运算符优先级从上往下依次降低。
2、判断两个对象是否完全相等,可以使用 identical() 函数。
3、??= 只有当被赋值的变量为 null 时才会赋值给它。
4、复合赋值运算符:=、+=、-=、*=、/=、%=、~/=、>>=、<<=、&=、^=、|=。
5、级联运算符(..)可以实现对同一个对像进行一系列的操作。除了调用函数,还可以访问同一对象上的字段属性。这通常可以节省创建临时变量的步骤,同时编写出更流畅的代码。可以嵌套使用。
4、流程控制
if-else、for、while、do-while、break、continue、switch-case、assert、try-catch、throw。
5、集合
1、List:
var ls = List(); // 不推荐
var ls = <String>[]; // 推荐
Ls2.add(‘one’);
Ls2.addAll([‘1’,’2’,’3’]);
Ls2.add(‘two’);
Ls2.remove(‘one’);
//创建固定长度的 list
List l1 = List.filled(3, "12345"); //创建长度为 3,内容均为 12345 的 list
// l1.add("23456");
// l1.removeLast();
l1[0] = 99999;
注:该方式创建的 list 不能修改 list 的长度,可以修改 list 的内容
2、Map:
var personInfo = Map<String,Object>(); // 不推荐
var personInfo = <String,Object>{}; // 推荐
personInfo[‘name’] = ‘zeno’;
personInfo[‘age’] = 18;
3、枚举:
枚举类型是一种特殊的类,通常用来表示相同类型的一组常量。使用关键字 enum 定义枚举。
enum ResponseState{
Success,
Error,
Failure
}
注:
1、枚举的每一个值都有一个 index 属性,index 从 0 开始计数。
2、使用枚举的 values 常量,获取所有枚举值列表( list )。
3、枚举不能被继承,不能创建实例;枚举不能被子类化,混合或实现。
4、时间:
DateTime 对象代表某个时刻。时区是 UTC 或者本地时区。
/// 获取当前时间 2019-03-04 14:48:28.948690
DateTime.now();
/// 创建一个指定年月日的DateTime对象, 后面可以继续添加时分秒毫秒等
/// 2019-03-03 00:00:00.000
DateTime(2019,3,3);
/// 解析日期字符串
DateTime.parse(‘2019-03-03 20:30:00’);
/// 解析时间戳
DateTime.fromMillisecondsSinceEpoch(1551616200000);
6、函数
//函数定义方式
返回值类型 方法名(参数1,参数1,参数3....){
//操作
return 返回值类型
}
1、可选参数
String printUserInfo(String userName, [int? age, String? sex]) {
if (age != null && sex != null) {
return "用户名: $userName -- 年龄: $age -- 性别: $sex";
} else if (sex != null && age == null) {
return "用户名: $userName -- 年龄保密 -- 性别: $sex";
} else if (age != null && sex == null) {
return "用户名: $userName -- 年龄: $age -- 性别保密";
} else {
return "用户名: $userName -- 年龄保密 -- 性别保密";
}
}
//使用
void main() {
print(printUserInfo("哈哈"));
print(printUserInfo("嘻嘻", 22));
print(printUserInfo("略略", 18, null));
print(printUserInfo("咯咯", null, "女"));
print(printUserInfo("叽叽", 23, "男"));
}
2、默认参数
String printUserInfo(String userName, [int? age = 10, String? sex = "男"]) {
if (age != null && sex != null) {
return "用户名: $userName -- 年龄: $age -- 性别: $sex";
} else if (sex != null && age == null) {
return "用户名: $userName -- 年龄保密 -- 性别: $sex";
} else if (age != null && sex == null) {
return "用户名: $userName -- 年龄: $age -- 性别保密";
} else {
return "用户名: $userName -- 年龄保密 -- 性别保密";
}
}
//使用
void main() {
print(printUserInfo("哈哈"));
print(printUserInfo("嘻嘻", 22));
print(printUserInfo("略略", 18, null));
print(printUserInfo("咯咯", null, "女"));
print(printUserInfo("叽叽", 23, "男"));
}
3、命名参数
String printUserInfo(String userName, {int? age, String? sex = "男"}) {
if (age != null && sex != null) {
return "用户名: $userName -- 年龄: $age -- 性别: $sex";
} else if (sex != null && age == null) {
return "用户名: $userName -- 年龄保密 -- 性别: $sex";
} else if (age != null && sex == null) {
return "用户名: $userName -- 年龄: $age -- 性别保密";
} else {
return "用户名: $userName -- 年龄保密 -- 性别保密";
}
}
//使用
void main() {
print(printUserInfo("哈哈"));
print(printUserInfo("嘻嘻", age: 22));
print(printUserInfo("略略", age: 18, sex: null));
print(printUserInfo("咯咯", age: null, sex: "女"));
print(printUserInfo("叽叽", age: 23, sex: "男"));
}
4、匿名方法
var unnameFuc = (int age, String name) {
print("123456 " + "age: $age " + "name: $name");
};
//使用
void main() {
unnameFuc(18,"哈哈");
}
5、自执行方法
//该方法会自动执行
void main() {
//方式一
(() {
print("这是个自执行方法");
})();
//方式二
((str) {
print("str 是形参,内容是: $str");
print("这是个自执行方法");
})("这个是传入的参数");
}
6、闭包
void main() {
//闭包
fn() {
var a = 111;
return () {
a++;
print(a);
};
}
var b = fn();
b();
b();
b();
b();
b();
}
网友评论