😊

onPressedに書いたメソッドが動作しない

2021/09/12に公開

背景

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