Flutter GestureDetector Widget使用详解
Flutter中的GestureDetector Widget是一个用于识别各种手势操作的Widget。GestureDetector可以识别的手势操作包括:tap(轻触)、double tap(双击)、long press(长按)、vertical drag(垂直拖拽)、horizontal drag(水平拖拽)、pan(滑动)、scale(缩放)和rotate(旋转)。
GestureDetector Widget有以下属性:
- onTap: 当用户轻触屏幕时要执行的回调函数。
 - onDoubleTap: 当用户双击屏幕时要执行的回调函数。
 - onLongPress: 当用户长按屏幕时要执行的回调函数。
 - onVerticalDragDown: 当用户开始垂直拖拽时要执行的回调函数。
 - onVerticalDragEnd: 当用户结束垂直拖拽时要执行的回调函数。
 - onHorizontalDragDown: 当用户开始水平拖拽时要执行的回调函数。
 - onHorizontalDragEnd: 当用户结束水平拖拽时要执行的回调函数。
 - onPanDown: 当用户开始滑动时要执行的回调函数。
 - onPanUpdate: 当用户滑动时要执行的回调函数。
 - onPanEnd: 当用户停止滑动时要执行的回调函数。
 - onScaleStart: 当用户开始缩放时要执行的回调函数。
 - onScaleUpdate: 当用户缩放时要执行的回调函数。
 - onScaleEnd: 当用户停止缩放时要执行的回调函数。
 - onRotateStart: 当用户开始旋转时要执行的回调函数。
 - onRotateUpdate: 当用户旋转时要执行的回调函数。
 - onRotateEnd: 当用户停止旋转时要执行的回调函数。
 
下面是一个使用GestureDetector Widget的例子,该例子显示了一个简单的可点击的按钮。当用户点击按钮时,屏幕上会显示一个SnackBar。
import 'package:flutter/material.dart';
class GestureDetectorDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Gesture Detector Demo'),
      ),
      body: Center(
        child: GestureDetector(
          onTap: () {
            final snackBar = SnackBar(content: Text('Button Clicked'));
            ScaffoldMessenger.of(context).showSnackBar(snackBar);
          },
          child: Container(
            width: 200,
            height: 50,
            decoration: BoxDecoration(
              color: Colors.blue,
              borderRadius: BorderRadius.circular(8),
            ),
            child: Center(
              child: Text(
                'Click Me',
                style: TextStyle(
                  fontSize: 24,
                  color: Colors.white,
                ),
              ),
            ),
          ),
        ),
      ),
    );
  }
}
在上面的例子中,我们将GestureDetector Widget包装在Container Widget中。当用户点击Container Widget时,GestureDetector Widget会触发onTap回调函数。在这种情况下,onTap回调函数会显示一个SnackBar,指示用户已经点击了按钮。
可以通过GestureDetector Widget的不同回调函数来实现各种手势,例如onDoubleTap、onLongPress等。