【Flutter/Dart】コールバック関数の使い方/基礎から実践

最終更新日

この記事では、Dartの基本文であるコールバック関数について調べてまとめました。基礎から実践までサンプルがあります。また、Widgetのプロパティで引数として呼び出される「VoidCallback」の特徴についても解説します。

コールバック関数とは

Dartのコールバック関数とは、関数名を持たず戻り値がない関数です。

引数を持たせる

コールバック関数に引数を指定する場合は、下記のように書きます。

//方法1(処理が1つ以上ある場合)
(引数1, 引数2){
  処理...
}

//方法2(処理が1つの場合だけ可能)
(引数1, 引数2) => 処理;

サンプル-removeWhere

void main() {
  var numbers = {
    'One' : 1,
    'Two' : 2,
    'Three' : 3,
    'Four' : 4,
    'Five' : 5
  };
  //値が3以上のものを削除
  numbers.removeWhere((key, value) => value > 3);
  print(numbers); //{One: 1, Two: 2, Three: 3}
}

解説

MapクラスのremoveWhereメソッドは、指定された要素で指定された引数の中からtrueが返るものをを削除するメソッドです。

https://framework-book.com/flutter-dart/flutter-dart-howto-use-removewhere/

removeWhereの引数に指定したコールバック関数は、第1引数で要素のキー、第2引数で要素の値を受け取ることが出来ます。

ポイント

  • removeWhereメソッドは引数に条件式を返すコールバック関数を指定する
  • コールバック関数の第1引数で要素のキー、第2引数で要素の値を取得できる map.removeWhere((key, value) => 条件式)

つまりこのサンプルでは、引数であるvalue(値)が3以上を選び削除してnumberに格納。そして出力しています。

参考

https://www.choge-blog.com/programming/dartmapremovewhere/

実践

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Button'),
        ),
        body: Center(
          child: ElevatedButton(
            child: Text(
              'ElevatedButton',
              style: TextStyle(fontSize: 20),
            ),
            onPressed: () => print('クリックされました'),
            onLongPress: () => print('長押しされました'),
          ),
        ),
      ),
    );
  }
}

簡単なWidgetツリー

https://qiita.com/chooyan_eng/items/7c7298795f2db24b24a5

EventButton

onPressedプロパティ

https://api.flutter.dev/flutter/cupertino/CupertinoActionSheetAction/onPressed.html

onLongPressedプロパティ

https://api.flutter.dev/flutter/material/MaterialButton/onLongPress.html

fem