打开Android Studio
创立一个新工程,将main.dart
中剩余代码清理一下
一、var、final 和 const
1.1 var
- dart 中运用
var
声明一个变量
,能够赋值不同
的类型; - var 声明的变量假如没有初始化,那么他的值为
null
。
void main() {
var a;
print(a);
a = 'hello world';
print(a);
a = 10;
print(a);
}
履行成果:
flutter: null
flutter: hello world
flutter: 10
1.2 final
- 运用 final 声明一个
只能赋值一次
的变量
; - 没有赋值的 final 变量是不能运用的,会报错;
- 他是终究变量。
void main() {
final c;
c = 10;
print(c);
}
履行成果:
flutter: 10
1.3 const
- const 是常量,有必要有
初始值
。 - 不可修正。
void main() {
const d = 20;
print(d);
}
履行成果:
flutter: 20
二、Dart 的数据类型之 num
2.1 num
示例:
void numDemo() {
// 数值型 num : int & double
num a = 10;
print(a);
a = 1.5;
print(a);
}
履行成果:
flutter: 10
flutter: 1.5
2.2 int 、double
int 和 double 都是类
承继自 num:
abstract class int extends num {
...
}
abstract class double extends num {
...
}
示例:
void numDemo() {
int b = 10;
double c = 1.5;
print(b);
print(c);
}
履行成果:
flutter: 10
flutter: 1.5
2.3 算术运算符
dart 中除了+ - * / %
等这些常见的算术运算符,还有个特有的运算符~/
(取整)。
void numDemo() {
double b = 10.0;
int c = 8;
// 取整
print(b ~/ c);
// 转换类型
print(b.toInt().isEven); // 偶数
print(c.toDouble());
print('a + b = ${a + b}');
}
履行成果:
flutter: 1
flutter: true
flutter: 8.0
flutter: a + b = 11.5
三、Dart 的数据类型 String
- Dart 中的字符串运用
单引号
和双引号
创立; -
三个引号
或双引号
创立多行字符串;
void stringDmeo() {
var a = 'aa';
var b = "bb";
print(a + b);
String c = "11\n"
"22\n"
"33\n";
print(c);
String d = '''44
55
66''';
print(d);
print(a[0]);
print(a + "_____");
print(a * 2);
String str3 = "str3\nstr3"; // 需求转译
String str4 = r"str3 \nstr3"; // 不需求转译
print(str3);
print(str4);
print(str3.length);
}
履行成果:
flutter: aabb
flutter: 11
22
33
flutter: 44
55
66
flutter: a
flutter: aa_____
flutter: aaaa
flutter: str3
str3
flutter: str3 \nstr3
flutter: 9
四、Dart 的数据类型 list
- Dart 中的列表,能够存放不同的数据类型的;
- 创立
可变list
var list1 = [1,2,3]; - 创立
不可变list
var list2 = const [1,2,3]。
void listDemo() {
var list1 = const [1, 2, 3, 'aaa'];
var list3 = ['bbb', 'ccc'];
print(list3.length);
list3.add('ddd'); // 增加
print(list3);
list3.insert(1, 'eee'); // 插入
print(list3);
list3.remove('bbb'); // 删除
print(list3);
list3.clear(); // 清除
print(list3);
var list4 = [1, 3, 5, 2, 4, 9, 8, 6];
list4.sort();
print(list4);
print(list4.sublist(4, 7)); // 截取
}
履行成果:
flutter: 2
flutter: [bbb, ccc, ddd]
flutter: [bbb, eee, ccc, ddd]
flutter: [eee, ccc, ddd]
flutter: []
flutter: [1, 2, 3, 4, 5, 6, 8, 9]
flutter: [5, 6, 8]
五、Dart 的数据类型 Map
- Dart 中的 Map 键值对;
- 创立
可变的Map
: var json1 = {‘one’:’11’,’two’:’22’}; - 创立
不可变的Map
:var json1 = const {‘one’:’11’,’two’:’22’}。
void mapDemo() {
var json1 = {'one': '11', 'two': '22'};
print(json1);
print(json1['one']); //取值
json1['one'] = '逐个';
print(json1);
var json2 = const {'one': '11', 'two': '22'};
print(json2.length);
print(json2.values);
print(json2.keys);
var list = ['11', '22', '33'];
print(list.asMap());
}
履行成果:
flutter: {one: 11, two: 22}
flutter: 11
flutter: {one: 逐个, two: 22}
flutter: 2
flutter: (11, 22)
flutter: (one, two)
flutter: {0: 11, 1: 22, 2: 33}
六、Dart 的运算符??= 和 ??
- Dart中的运算符;
- 赋值运算
??=
; - 条件表达式
??
。
void operatorDemo() {
var a;
a ??= 10;
a ??= 5; //假如a为nil就赋值,假如有值就直接回来。
print(a);
var b;
print(b ?? a); //?? 假如左边有值回来左边,没有就回来 右边!
}
履行成果:
flutter: 10
flutter: 10
七、Dart 中的箭头函数
- Dart 中的办法;
- 办法也是一个目标;
- 回来值和参数类型能够省略;
- 当办法的履行句子只有一句的时分,能够运用箭头函数 => 表达式。
void main() => print(sum(4, 5));
sum (a, b) => a + b; // 不建议这样写,简单懵逼
履行成果:
flutter: 9
八、Dart 办法的可选参数
- 可选参数传递参数的时分有必要带上形参的姓名;
- 调用办法时,可选参数的位置能够不按次序。
void main() => print(sum2(1, c: 3, b: 2,));
sum2(int a, {int? b, int? c}) { // int? 告知编译器,能够为空,我处理了后边为空的情况
b ??= 0;
c ??= 0;
return a + b + c;
}
履行成果:
flutter: 6
还有一种写法是需求按次序的:
void main() => print(sum3(1, 2, 3);
int sum3(int a, [int b = 0, int c = 0]) {
return a - b + c;
}
履行成果:
flutter: 6
九、Dart 办法作为参数传递
办法也是一个目标:运用场景作为参数传递!!
void functionDemo() {
var list = [1, 2, 3, 4];
// list.forEach(print);
int b = 0;
//匿名办法作为参数的实战。
forEachDemo(list, print);
}
forEachDemo(List list, void func(var element)) {
for (var e in list) func(e);
}
履行成果:
flutter: 1
flutter: 2
flutter: 3
flutter: 4
十、Dart 中的匿名函数
匿名办法:没有办法名称的办法!
void functionDemo() {
var list = [1, 2, 3, 4];
// list.forEach(print);
int b = 0;
//匿名办法作为参数的实战。
forEachDemo(list, (var a) {
b++;
print('元素$b = $a');
});
var func = () {
print('匿名办法');
};
func();
//当即履行办法、函数
(() {
print("当即履行函数");
})();
}
履行成果:
flutter: 元素1 = 1
flutter: 元素2 = 2
flutter: 元素3 = 3
flutter: 元素4 = 4
flutter: 匿名办法
flutter: 当即履行函数
十一、Dart 中的闭包
- 定义在函数里边的函数便是闭包,闭包也是一个目标;
- 闭包的效果:能够拜访外部函数的局部变量。
void closureDemo() {
var func = funA();
func();
func();
func();
func();
var func2 = funA();
func2();
func2();
func2();
func2();
}
funA() {
int count = 0;
return () => print(count++); //这个匿名函数便是一个闭包
}
履行成果:
flutter: 0
flutter: 1
flutter: 2
flutter: 3
flutter: 0
flutter: 1
flutter: 2
flutter: 3