1.判断2个字符串是否一样使用==号
// 判断两个字符串是否相等
bool equal(String str1, String str2) {
return str1 == str2;
}
2.可选参数
// 这个方法里有个特殊地方[String from]这个字段是可以不传的,在字符串中使用$符合可以取得作用域里的参数
String getUserInfo(String name, String sex, [String from]) {
var info = '$name的性别是$sex';
if (from != null) {
info = '$info来自$from';
}
return info;
}
void test(){
print(getUserInfo('小王', '男'));
}
还可以给这个可选参数给默认值
// 使用等号( = )来设置默位置字参数这样不传时候就不会是null
String getUserInfo(String name, String sex, [String from = '中国']) {
var info = '$name的性别是$sex';
if (from != null) {
info = '$info来自$from';
}
return info;
}
void test(){
print(getUserInfo('小王', '男'));
}
3.自己缕一缕
var a, b;
a = 0;
b = ++a; //在b获得其值之前自增a
assert(a == b); //1 == 1
a = 0;
b = a++; //在b获得值后自增a
assert(a != b); //1 != 0
a = 0;
b = --a; //在b获得其值之前自减a
assert(a == b); //-1 == -1
a = 0;
b = a--; //在b获得值后自减a
assert(a != b); //-1 != 0
4.as、is和is!操作符在运行时用于检查类型非常方便
//直接使用is就可以对比
if (user is User) {
// 类型检测
user.name = 'Flutter';
}
//直接使用as可以强制转换
(user as User).name = 'Flutter';
5.赋值操作符
// 赋值给a
a = value;
// 如果b为空,则将值分配给b;否则,b保持不变
b ??= value;
6.条件表达式如果条件为真,则返回expr1,否则返回expr2:
condition ? expr1 : expr2
7.级联操作
//其中的“..”符号代表的就是 querySelector('#btnOK).
querySelector('#btnOK) //获取一个id为btnOK的按钮对象
..text = '确定' //使用它的成员
..classes.add('ButtonOKStyle')
..onClick.listen((e) => window.alert('确定'));
8.for循环
//这种循环获取不到数组下标,只能获得对应下标的值v
var arr = [0, 1, 2, 3, 4, 5, 6];
for (var v in arr) {
print(v);
}
9.assert如果assert的判断为true,则继续执行下面的语句;反之则会抛出一个断言错误异常AssertionError
// 确定变量的值不为null
assert(text != null);
10.对象get和set会默认给建立不需要设置
class User{
String name; //name成员变量
int age; //age成员变量
}
main() {
var user = new User();
user.name = '张三'; //相当于使用了name的setter方法
user.age = 20;
}
11.重载操作
// 定义一个向量类
class Vector {
final int x;
final int y;
const Vector(this.x, this.y);
//重载加号 + (a + b)
Vector operator +(Vector v) {
return Vector(x + v.x, y + v.y);
}
//重载减号 - (a - b)
Vector operator -(Vector v) {
return Vector(x - v.x, y - v.y);
}
}
main() {
// 实例化两个向量
final v = Vector(2, 3);
final w = Vector(2, 2);
final r1 = v + w;
//意思就是x=2+2;y=3+2
print('r1.x='+r1.x.toString() + ' r1.y=' + r1.y.toString());
final r2 = v - w;
//意思就是x=2-2;y=3-2
print('r2.x='+r2.x.toString() + ' r2.y=' + r2.y.toString());
}
12.枚举类型
enum Color {
red,
green,
blue
}
// 定义一个颜色变量,默认值为蓝色
Color aColor = Color.blue;
switch (aColor) {
case Color.red:
print('红色');
break;
case Color.green:
print('绿色');
break;
default: //默认颜色
print(aColor); //'Color.blue'
}
13.Mixins
class S {
a() {print("S.a");}
}
class A {
a(){print("A.a");}
b(){print("A.b");}
}
class T = A with S;
main(List<String> args) {
T t = T();
t.a();
t.b();
}
输出因为AwithB所以使用B优先
S.a
A.b