0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Flutter] GestureDetectorとListener

Posted at

はじめに

Flutterにはユーザーのジェスチャーやタッチイベントを処理するウィジェットとしてListenerとGestureDetectorがあります。この二つの共通点相違点について簡単にまとめたいと思います!
記事内に誤った記述等ありましたらご指摘のほどよろしくお願いいたします。

Listener

Listenerウィジェットは、より低レベルなポインターイベント(タッチ操作)を処理するwidgetです。

  • onPointerDown(指が画面に触れたとき)
  • onPointerMove(指が画面上を移動したとき)
  • onPointerUp(指が画面から離れたとき)
    などのイベントが含まれます。
    これらのイベントは、タッチ操作の基本的な構成要素となっています。
Listener
Listener(
  onPointerDown: (PointerDownEvent event) {
    // 指が画面に触れたときの処理
  },
  onPointerMove: (PointerMoveEvent event) {
    // 指が画面上を移動したときの処理
  },
  onPointerUp: (PointerUpEvent event) {
    // 指が画面から離れたときの処理
  },
  child: Hoge(),
)

GestureDetector

GestureDetectorウィジェットは、より高レベルなジェスチャーイベントを処理するwidgetです。
これには、

  • onTap(タップ)
  • onDoubleTap(ダブルタップ)
  • onLongPress(長押し)
  • onPan(ドラッグ)
  • onScale(ピンチ)
    -などのイベントが含まれます。
    GestureDetectorは、これらの高度なジェスチャーを自動的に検出し、適切なコールバック関数を呼び出してくれます。
GestureDetector
GestureDetector(
  onTap: () {
    // タップ操作の処理
  },
  onDoubleTap: () {
    // ダブルタップ操作の処理
  },
  onLongPress: () {
    // 長押し操作の処理
  },
  child: Fuge(),
)

まとめ

  • Listenerは、ポインターイベント(低レベル)を処理します。
  • GestureDetectorは、ジェスチャーイベント(高レベル)を処理をすることができます。
  • GestureDetectorは、Listenerの上位レイヤーで動作し、より抽象的なジェスチャーを検出することができます。

単純なタップや長押し操作を処理するだけの場合は、GestureDetectorが適切な場合が多いです。
一方、よりカスタマイズされたジェスチャーや複雑なイベント処理が必要な場合は、Listenerウィジェットを使用して、ポインターイベントを直接処理することができます。これにより、独自のジェスチャー認識ロジックを実装したり、複数のポインターイベントを組み合わせて新しいジェスチャーを作成したりすることができます。

さいごに

記事をお読みいただきありがとうございました!
質問やご指摘はコメント等でお願いいたします!!
※当記事の作成には一部GPT-4を利用しています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?