主题
方法 | 功能 | 例子 |
---|---|---|
Theme.of(context) | 使用已经定义好的主题 | Theme.of(context).textTheme.title |
copyWith | 拓展父主题,不覆盖父主题的情况下,设置某元素的主题 | Theme.of(context).copyWith(accentColor: Colors.blue) |
Dart语言
变量和基本数据类型
Dart语言里一切皆为对象,所以如果没有将变量初始化,那么它的默认值为null
。
1 | int name; |
常量和固定值
final
和const
: 定义的是常量,不会变化,如果修改则会报错。基本数据类型
包括:Number
、String
、Boolean
、List
、Map
。
String
1
2
3
4
5
6'''内的字符串的格式会保留
var s1 = '''
按此格式输出
成都
'''Boolean
Dart是强类型检查,只有bool类型的值是true
才被认为是true
。1
2
3
4var sex = '男';
if (sex) { // 报错 if (sex == 'name') 不报错
print('你的性别是:' + sex);
}List
Dart中的List
对象类似于JS里的Array
对象1
2
3var list = [1, 2, 3, 4];
print(list.length); // 4
print(list[0]); // 1Map
1
2
3
4
5
6
7
8
9
10
11var week = {
'Monday': '星期一'
}
或者
var week = new Map();
week['Monday'] = '星期一';
`assert(week['Monday'] == null);` // 检查 key 是否在Map对象中
// assert 里为假值时 则报错
print(week.length); // week 的 key数量
不能使用 week.Monday
函数
- 可选参数: 参数默认必填,使用[]括起来表示可选 -
String getInfo(String name, [String form]){}
- 参数默认值: 只有可选参数才有默认值 -
String getInfo(String name, [String form = '中国']){}
- 所有函数必须有返回值,上面两个返回值必须是
String
类型,否则报错 - 没有指定返回值时,默认返回值是
null
- 没有返回值的函数,系统会在最后添加隐式的
return
语句。
运算符
1 | / 除法 |
位运算
1
2
3
4
5
6
7
8
9var value = 0x22;
var b = 0x0f;
& // 与 a & b == 0x22, 与非 a & -b == 0x20;
| // 或 a | b = 0x0f;
^ // 异或 a ^ b == 0x2d;
~ // 一元位补码(0s变为1s,1s变为0s)
<< // 左移 a << 4 == 0x220
>> // 右移 a >> a == 0x02条件表达式
1
2condition ? expr1 : expr2;
expr1 ?? expr2; // expr1为非空时返回其值,否则返回expr2值级联操作
用..
表示,类似与lodash的_.chain(value).map().values();
流程控制语句
if else
for
1
2for (var i = 0; i < 5; i++){}
for (var i in array ) {} // 遍历数组while 和 do-while
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15var a = 0;
var str = '';
while(a < 5){
str += a.toString();
a++;
}
print(str);
do{
str += a.toString();
a++;
}
while (a < 5);
print(str);
两个例子结果都是01234break 和 continue
break
跳出循环continue
跳出本次循环1
2
3
4
5
6
7
8
9
10var arr = [0, 1, 2, 3, 4];
for (var v in arr){
if(v == 2){
// break;
continue;
}
print(v);
}
当break时的结果是: 0, 1;
当continue时的结果是: 0, 1, 3, 4;switch 和 case
assert (断言)
try-catch 和 throw
异常处理
抛出异常
稳定健壮的程序一定是做了大量异常处理的,所以建议你在编写程序时尽量考虑到可能发生的情况。1
2throw FormatException('抛出一个 FormatException 异常');
throw '数据非法!';捕获异常
第一个catch
用来捕获异常详细信息,第二个catch
是堆栈跟踪信息。1
2
3
4
5
6
7
8
9try {
var a;
throw '非法数据!';
} on Exception catch (e) {
print('Exception detail: \n $e');
} catch (e, s) {
print('Exception detail: \n $e');
print('Stack trace: \n $s');
}Finally
要确保某些代码能够运行,无论是否抛出异常,请使用finally子句。如果没有catch子句匹配异常,则异常在finally子句运行后传播。1
2
3
4
5
6
7
8
9
10
11try {
var a;
throw '非法数据!';
} on Exception catch (e) {
print('Exception detail: \n $e');
} catch (e, s) {
print('Exception detail: \n $e');
print('Stack trace: \n $s');
} finally {
print('Do some thing');
}