😊
onPressedに書いたメソッドが動作しない
背景
FlutterでonPressなどに他で定義したメソッドを書く場合、いくつか書き方がある。改めてまとめてみる。それに加えて、Flutterno学習初期に、後述するハマる書き方で、バグがなかなか分からなかった。学習はじめの方がハマったときの参考になると嬉しい(その理由で、このタイトルにしてます)。
書き方
3つの正しい書き方と、1つの動作しない書き方を示す。
onPressedなどのVoidCallback?に書くメソッドの書き方
void onIncrease() {
処理();
}
onPressedへの書き方1
floatingActionButton: FloatingActionButton(
onPressed: () => onIncrease(),
child: Icon(Icons.add),
),
onPressedへの書き方2
floatingActionButton: FloatingActionButton(
onPressed: onIncrease,
child: Icon(Icons.add),
),
onPressedへの書き方3
floatingActionButton: FloatingActionButton(
onPressed: (){onIncrease;},
child: Icon(Icons.add),
),
onPressedへのハマる書き方
floatingActionButton: FloatingActionButton(
onPressed: () => onIncrease,
child: Icon(Icons.add),
),
=>の前に括弧があって、メソッド名の後に括弧をつけないと、onIncreaseの中身は動作しない。しかも、コンパイルエラーが出ない。
多分onIncreaseのポインタ(メソッドがコンピュータに読み込まれて記録されたメモリ上の住所)を返してるのかな。試してみたら、「() => 0」でもコンパイルエラーにならない。
Discussion