Open3
InkWellとGestureDetectorの違いは?
InkWell
GestureDetector
1. 概要
FlutterでUIを実装する際、タップやジェスチャーの検出に使用される代表的な2つのウィジェット「InkWell」と「GestureDetector」について、その特徴と使い分けを解説します。
2. InkWellの特徴
InkWellは、Material Designのタッチフィードバックエフェクトを実装したウィジェットです。
InkWell(
onTap: () {
print('タップされました');
},
child: Container(
padding: EdgeInsets.all(12),
child: Text('タップしてください'),
),
)
主な特徴:
- タップ時に波紋エフェクトが表示される(Material Design準拠)
- Material Designを採用しているアプリに最適
- 視覚的なフィードバックが標準で提供される
3. GestureDetectorの特徴
GestureDetectorは、より広範なジェスチャーを検出できるシンプルなウィジェットです。
GestureDetector(
onTap: () {
print('タップされました');
},
onLongPress: () {
print('長押しされました');
},
child: Container(
padding: EdgeInsets.all(12),
child: Text('ジェスチャーを検出します'),
),
)
主な特徴:
- 視覚的なフィードバックは標準では表示されない
- より多くのジェスチャーイベントを検出可能
- パフォーマンスが若干優れている
4. 主な違いの比較
4.1 視覚的フィードバック
- InkWell: 波紋エフェクトあり(標準)
- GestureDetector: なし(カスタム実装が必要)
4.2 検出可能なジェスチャー
InkWell:
InkWell(
onTap: () {}, // タップ
onDoubleTap: () {}, // ダブルタップ
onLongPress: () {}, // 長押し
child: Widget(),
)
GestureDetector:
GestureDetector(
onTap: () {}, // タップ
onDoubleTap: () {}, // ダブルタップ
onLongPress: () {}, // 長押し
onPanUpdate: () {}, // ドラッグ
onScaleUpdate: () {}, // スケール
onVerticalDragUpdate: () {}, // 垂直ドラッグ
child: Widget(),
)