Function是提供程式中運作的地方,而建構式為與類別相同名稱的Function。
以下介紹建構子的一些基本寫法:
(一)參數為一般參數,參數前要加上類名,在class中宣告要先late延遲給予初始值
//利用延遲給與初始值
late String title;
//利用一般參數,裡面用this.參數=參數,將參數與class裡的變數對應
MyHomePage(String title){
this.title=title;
}
MyHomePage('測試')
(二)參數為位置參數,參數外加上[],順序依排列順序,在呼叫時,可以利用null,給予空值
//利用Final宣告,因位置參數可空,因此宣告時在類型上要加上?
final String? title;
final int? counter;
//利用位置參數,裡面用this.參數=參數,將參數與class裡的變數對應
MyHomePage([this.title,this.counter]);
呼叫方法
MyHomePage('123',3),或MyHomePage('123',null),
(三)參數為命名參數,參數外加{},可不依順序排列,呼叫時需加上命名,告知你在呼叫那個參數。
(1)第一種情況,參數前加上required,表示必給值
//利用Final宣告,若參數前有required表示必給值,不可空,不用加?
final String title;
final int counter;
//利用命名參數,裡面可用this.參數與class的變數對應
MyHomePage({required this.title,required this.counter});
呼叫方法
(2)第二種情況,參數前不加required,表示可不給值,因為可空,所以類別宣告時,類別名後需要加?
//利用Final宣告,若參數前有required表示必給值,不可空,不用加?
final String? title;
final int counter;
//利用命名參數,裡面可用this.參數與class的變數對應
const MyHomePage({this.title,required this.counter});
呼叫方法,同前
MyHomePage(title: '測試', counter: 3),或是
MyHomePage(counter: 3),
其它,如要繼承父類別的參數值或方法,可使用super.參數,或在後面加上super(類:值)
MyHomePage({super.key, this.title,required this.counter});或是:
MyHomePage({Key? key,this.title,required this.counter}):super(key: key);
const MyHomePage({Key? key,this.title,required this.counter}):assert(counter>0),super(key: key);若不符合assert條件,會在給值時,拋出例外訊息。如上面程式,若一開始給的counter大於0,就會拋出錯誤。
在非必要給值的參數,可先給預設值,如下:
MyHomePage({Key? key,this.title="預設值",required this.counter}):assert(counter<5,'counter要大於0'),super(key: key);
如果要進行初始化數值,可以於建構式初始化該值,並進行相關運算
ButtonPaint({required this.animation,required this.width,required this.height}):super(repaint: animation) {
final path = Path(); //初始化路徑
//使用呼叫給予的參數
rRect = RRect.fromRectAndRadius(
Rect.fromCenter(center: Offset.zero, width: width, height: height), const Radius.circular(16));
//將圓框矩形的路徑加入path中
path.addRRect(rRect);
//取得路徑的相關資訊於pathMetric中
pathMetric=path.computeMetrics().single;
}
沒有留言:
張貼留言