Flutter ({Key key,this.title}) : super(key: key);
何者??
コンストラクタ(クラスをインスタンス化した際に最初に呼ばれるメソッド)
前提知識
1. 名前付きメソッド
2. Named Constructors
3. Redirecting Constructors
4. Automatic field initialization
1.について
Dartでは関数やメソッドに名前付き引数を与えられる
code:Dart
void hoge({String title, String subtitle}) {}
hoge(title: 'hogeA', subtitle: 'subhogeB');
コンストラクタの引数が名前付きになっている
2.について
Dartは全く別物のコンストラクタを複数個設定できる
code:Dart
main() {
Hoge hoge = new Hoge.title('hogetitle'); //インスタンス生成時に呼びたいコンストラクタ
print(hoge.title); //hogetitleと表示される
}
class Hoge {
String title;
Hoge() {
this.title = 'foo';
}
Hoge.title(this.title);
}
↑では、必ずfooとタイトル付けられるコンストラクタと、自由にタイトルを付けることができるコンストラクタを用意
インスタンスを生成する段階で呼び出したいコンストラクタを自由に設定できる
3.について
Dartでは複数個コンストラクタが設定されている際に、別のコンストラクタにリダイレクトできる
code:Dart
main() {
Hoge hoge = new Hoge(); //インスタンスを生成
print(hoge.title); //fooと表示される
}
class Hoge {
String title;
Hoge(): this.foo() //コンストラクタ
Hoge() {
this.title = 'foo';
}
Hoge.title(this.title);
}
Hogeのコンストラクタでは、Hoge(): this.foo();というようにコロンを用いてリダイレクト先のコンストラクタを設定
↑では、Hoge()というコンストラクタとHoge.foo()というコンストラクタが呼ばれている
4.について
Dartでは、コンストラクタでthis.~~と指定すれば代入処理を書かなくても自動で代入してくれる
code:Dart
main() {
Hoge hoge = new Hoge('foo'); //インスタンスを生成
print(hoge.title); //fooと表示される
}
class Hoge {
final String title;
Hoge(this.title);
}
MyHomePage({Key key , this.title})
名前付き引数でコンストラクタを設定している
titleに入ってくる値は自動でフィールドに代入してくれる
:super(key: key)
MyHomePageのコンストラクタを呼び出す際のリダイレクト先を設定
リダイレクト先がsuper(key: key)となっているため、継承元のコンストラクタを設定している