Point(num x, num y) {
// There's a better way to do this, stay tuned.
this.x = x;
this.y = y;
}
语法糖:
Point(this.x, this.y);
同理:
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
// _MyHomePageState类是MyHomePage类对应的状态类
_MyHomePageState createState() => _MyHomePageState();
}
MyHomePage({Key key, this.title}) : super(key: key);
前半句是一个语法糖:
MyHomePage({Key key, this.title})
原本应该类似包含:
MyHomePage({Key key, String title}) {
this.title = title;
}
调用超类构造函数:
: super(key: key)
实际这个构造方法很长。
附注:
可选参数也分为两类:
-
可选命名参数:使用 {} 包起来的参数是可选命名参数
**可选命名参数:{} 使用 {} 来赋值的数据类型是 Map,所以可选的命名参数的类型也是 Map, 因此调用函数时,可选参数的赋值必须是 paramName: value 这种 key: value 格式的,例如:
// 声明和实现
bool say(String msg , {String from, int clock}){
print(msg+" from " + from + " at " + clock.toString());
return true;
}
// 调用
say('Hello Flutter',clock: 11);
say('Hello Flutter',from: 'XiaoMing',clock: 11);
-
可选位置参数:使用 [] 包起来的参数是可选位置参数
**用 [] 包起来的参数是可选位置参数,前面讲数据类型的时候,使用 [] 来赋值的数据类型是 List,所以可选的命名参数的类型也是 List,所以赋值和参数是一一对应的,下面是可选位置参数的例子:
// 声明和实现
bool say(String msg , [String from , int clock]){
print(msg+" from " + from + " at " + clock.toString());
return true;
}
// 调用
say('Hello Flutter','XiaoMing')//✅
say('Hello Flutter',1)//❌ 因为 1 赋值给了 from,但是 from 是String,所以会报错