Flutter手势--GestureDetector各种手势使用详情

Posted ~废弃回忆 �༄

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter手势--GestureDetector各种手势使用详情相关的知识,希望对你有一定的参考价值。

1.GestureDetector单击手势

序列号字段属性描述
1onTapDownGestureTapDownCallback手指按下时的回调函数
2onTapUpGestureTapUpCallback手指松开时的回调函数
3onTapGestureTapCallback手指点击时的回调函数
4onTapCancelGestureTapCancelCallback手指取消点击时的回调函数

我们在Container容器上添加了单击手势,代码如下:

import 'package:flutter/material.dart';

class GestureDetectorExample extends StatefulWidget 
  @override
  _GestureDetectorExampleState createState() => _GestureDetectorExampleState();


class _GestureDetectorExampleState extends State<GestureDetectorExample> 

  @override
  Widget build(BuildContext context) 
    return Scaffold(
      appBar: AppBar(
        title: Text("GestureDetector"),
      ),
      body: Center(
        child: Stack(
          children: [
            GestureDetector(
              onTap: ()
                print("onTap");
              ,
              onTapCancel: () 
                print("onTapCancel");
              ,
              onTapDown: (details) 
                print("onTapDown---$details.globalPosition---$details.localPosition");
              ,
              onTapUp: (details) 
                print("onTapUp---$details.globalPosition---$details.localPosition");
              ,
              child: Container(
                width: 200,
                height: 200,
                color: Colors.orange,
                alignment: Alignment.center,
                child: Text("Jimi",
                  style: TextStyle(
                    color: Colors.white,
                    fontSize: 30
                  ),
                ),
              ),
            )
          ],
        ),
      ),
    );
  

GestureDetector单击手势控制台输出结果

第一种:点击Container容器

flutter: onTapDown---Offset(211.5, 317.0)---Offset(124.0, 45.5)
flutter: onTapUp---Offset(211.5, 317.0)---Offset(124.0, 45.5)
flutter: onTap

第二种:点击Container容器后不松手直接移出区域

flutter: onTapDown---Offset(195.5, 305.5)---Offset(108.0, 34.0)
flutter: onTapCancel

2.GestureDetector双击手势

序列号字段属性描述
1onDoubleTapDownGestureTapDownCallback手指按下时的回调函数
2onDoubleTapGestureTapCallback手指双击时的回调函数
3onDoubleTapCancelGestureTapCancelCallback手指取消时的回调函数

我们在Container容器上添加了三种双击手势的回调,代码如下:

import 'package:flutter/material.dart';

class GestureDetectorExample extends StatefulWidget 
  @override
  _GestureDetectorExampleState createState() => _GestureDetectorExampleState();


class _GestureDetectorExampleState extends State<GestureDetectorExample> 

  @override
  Widget build(BuildContext context) 
    return Scaffold(
      appBar: AppBar(
        title: Text("GestureDetector"),
      ),
      body: Center(
        child: Stack(
          children: [
            GestureDetector(
              onDoubleTap: () 
                print("onTapDown");
              ,
              onDoubleTapCancel: () 
                print("onDoubleTapCancel");
              ,
              onDoubleTapDown: (details) 
                print("onDoubleTapDown---$details.globalPosition---$details.localPosition");
              ,
              child: Container(
                width: 200,
                height: 200,
                color: Colors.orange,
                alignment: Alignment.center,
                child: Text("Jimi",
                  style: TextStyle(
                      color: Colors.white,
                      fontSize: 30
                  ),
                ),
              ),
            )
          ],
        ),
      ),
    );
  

GestureDetector双击手势控制台输出结果

第一种:双击Container容器

flutter: onDoubleTapDown---Offset(204.5, 317.0)---Offset(117.0, 45.5)
flutter: onTapDown

第二种:双击Container容器但不抬起手指并移出区域

flutter: onDoubleTapDown---Offset(195.5, 283.5)---Offset(108.0, 12.0)
flutter: onDoubleTapCancel

3.GestureDetector长按手势

序列号字段属性描述
1onLongPressDownGestureLongPressDownCallback手指按下去时的回调函数
2onLongPressCancelGestureLongPressCancelCallback手指长按取消时的回调函数
3onLongPressGestureLongPressCallback手指长按时的回调函数
4onLongPressStartGestureLongPressStartCallback手指长按并开始拖动时的回调函数
5onLongPressMoveUpdateGestureLongPressMoveUpdateCallback手指长按并移动时的回调函数
6onLongPressUpGestureLongPressUpCallback手指长按并松开时的回调函数
7onLongPressEndGestureLongPressEndCallback手指长按结束拖动时的回调函数

我们在Container容器上添加了长按手势,代码如下:

import 'package:flutter/material.dart';

class GestureDetectorExample extends StatefulWidget 
  @override
  _GestureDetectorExampleState createState() => _GestureDetectorExampleState();


class _GestureDetectorExampleState extends State<GestureDetectorExample> 

  @override
  Widget build(BuildContext context) 
    return Scaffold(
      appBar: AppBar(
        title: Text("GestureDetector"),
      ),
      body: Center(
        child: Stack(
          children: [
            GestureDetector(
              onLongPress: ()
                print("onLongPress");
              ,
              onLongPressCancel: () 
                print("onLongPressCancel");
              ,
              onLongPressUp: () 
                print("onLongPressUp");
              ,
              onLongPressDown: (details) 
                print("onLongPressDown---$details.globalPosition---$details.localPosition");
              ,
              onLongPressEnd: (details) 
                print("onLongPressEnd---$details.globalPosition---$details.localPosition");
              ,
              onLongPressStart: (details) 
                print("onLongPressStart---$details.globalPosition---$details.localPosition");
              ,
              onLongPressMoveUpdate: (details) 
                print("onLongPressMoveUpdate---$details.globalPosition---$details.localPosition");
              ,
              child: Container(
                width: 200,
                height: 200,
                color: Colors.orange,
                alignment: Alignment.center,
                child: Text("Jimi",
                  style: TextStyle(
                    color: Colors.white,
                    fontSize: 30
                  ),
                ),
              ),
            )
          ],
        ),
      ),
    );
  

GestureDetector长按手势控制台输出结果

第一种:单击Container容器

flutter: onLongPressDown---Offset(199.0, 336.0)---Offset(111.5, 64.5)
flutter: onLongPressCancel

第二种:长按Container容器但是手指不动后松开

flutter: onLongPressDown---Offset(215.0, 301.0)---Offset(127.5, 29.5)
flutter: onLongPressStart---Offset(215.0, 301.0)---Offset(127.5, 29.5)
flutter: onLongPress
flutter: onLongPressEnd---Offset(215.0, 301.0)---Offset(127.5, 29.5)
flutter: onLongPressUp

第三种:长按Container容器并进行拖动最后松开手指

flutter: onLongPressDown---Offset(169.0, 314.0)---Offset(81.5, 42.5)
flutter: onLongPressStart---Offset(169.0, 314.0)---Offset(81.5, 42.5)
flutter: onLongPress
flutter: onLongPressMoveUpdate---Offset(168.5, 314.5)---Offset(81.0, 43.0)
flutter: onLongPressMoveUpdate---Offset(165.0, 318.5)---Offset(77.5, 47.0)
flutter: onLongPressMoveUpdate---Offset(164.0, 319.0)---Offset(76.5, 47.5)
flutter: onLongPressMoveUpdate---Offset(158.5, 323.5)---Offset(71.0, 52.0)
flutter: onLongPressMoveUpdate---Offset(153.0, 329.5)---Offset(65.5, 58.0)
flutter: onLongPressMoveUpdate---Offset(148.5, 335.0)---Offset(61.0, 63.5)
flutter: onLongPressMoveUpdate---Offset(146.5, 339.0)---Offset(59.0, 67.5)
flutter: onLongPressMoveUpdate---Offset(146.5, 339.5)---Offset(59.0, 68.0)
flutter: onLongPressEnd---Offset(146.5, 339.5)---Offset(59.0, 68.0)
flutter: onLongPressUp

第四种:长按Container容器并马上移出区域

flutter: onLongPressDown---Offset(97.0, 277.5)---Offset(9.5, 6.0)
flutter: onLongPressCancel
flutter: onLongPressDown---Offset(91.5, 275.5)---Offset(4.0, 4.0)
flutter: onLongPressCancel

4.GestureDetector垂直滑动手势

序列号字段属性描述
1onVerticalDragDownGestureDragDownCallback手指按下时的回调函数
2onVerticalDragStartGestureDragStartCallback手指开始垂直滑动时的回调函数
3onVerticalDragUpdateGestureDragUpdateCallback手指垂直滑动时的回调函数
4onVerticalDragEndGestureDragEndCallback手指垂直滑动结束时的回调函数
5onVerticalDragCancelGestureDragCancelCallback手指垂直滑动取消时的回调函数

我们在Container容器上添加了垂直滑动手势,代码如下:

import 'package:flutter/material.dart';

class GestureDetectorExample extends StatefulWidget 
  @override
  _GestureDetectorExampleState createState() => _GestureDetectorExampleState();


class _GestureDetectorExampleState extends State<GestureDetectorExample> 

  double _left = 0;
  double _top = 0;

  @override
  Widget build(BuildContext context) 
    return Scaffold(
      appBar: AppBar(
        title: Text("GestureDetector"),
      ),
      body: Center(
        child: Stack(
          children: [
            GestureDetector(
              onVerticalDragCancel: () 
                print("onVerticalDragCancel");
              ,
              onVerticalDragDown: (details) 
                print("onVerticalDragDown---$details.globalPosition---$details.localPosition");
              ,
              onVerticalDragEnd: (details) 
                print("onVerticalDragEnd---$details.velocity---$details.primaryVelocity");
              ,
              onVerticalDragStart: (details) 
                print("onVerticalDragStart---$details.globalPosition---$details.localPosition");
              ,
              onVerticalDragUpdate: (details) 
                print("onVerticalDragUpdate---$details.globalPosition---$details.localPosition---$details.delta");
                setState(() 
                  _top += details.delta.dy;
                );

              ,
              child: Stack(
                children: [
                  Positioned(
                    left: _left,
                    top: _top,
                    child: Container(
                      width: 200,
                      height: 200,
                      color: Colors.orange,
                      alignment: Alignment.center,
                      child: Text("Jimi",
                        style: TextStyle(
                            color: Colors.white,
                            fontSize: 30
                        ),
                      ),
                    ),
                  )
                ],
              ),
            )
          ],
        ),
      ),
    );
  

GestureDetector垂直滑动手势控制台输出

第一种:点击Container容器

flutter: onVerticalDragDown---Offset(76.5, 114.5)---Offset(76.5, 38.5)
flutter: onVerticalDragStart---Offset(76.5, 114.5)---Offset(76.5, 38.5)
flutter: onVerticalDragEnd---Velocity(0.0, 0.0)---0.0

第二种:拖动Container容器

flutter: onVerticalDragDown---Offset(185.5, 332.5)---Offset(185.5, 256.5)
flutter: onVerticalDragStart---Offset(185.5, 332.5)---Offset(185.5, 256.5)
flutter: onVerticalDragUpdate---Offset(185.5, 332.0)---Offset(185.5, 256.0)
flutter: onVerticalDragUpdate---Offset(187.5, 322.0)---Offset(187.5, 246.0)
flutter: onVerticalDragUpdate---Offset(192.0, 307.0)---Offset(192.0, 231.0)
flutter: onVerticalDragUpdate---Offset(193.5, 298.0)---Offset(193.5, 222.0)
flutter: onVerticalDragUpdate---Offset(193.5, 297.0)---Offset(193.5, 221.0)
flutter: onVerticalDragEnd---Velocity(131.3, -548.9)----548.8773895303548

第三种:拖动Container容器并马上松开

flutter: onVerticalDragDown---Offset(10.5, 93.5)---Offset(10.5, 17.5)
flutter: onVerticalDragCancel

5.GestureDetector水平滑动手势

序列号字段属性描述
1onHorizontalDragDownGestureDragDownCallback手指按下时的回调函数
2onHorizontalDragStartGestureDragStartCallback手指开始水平滑动时的回调函数
3onHorizontalDragUpdateGestureDragUpdateCallback手指水平滑动时的回调函数
4onHorizontalDragEndGestureDragEndCallback手指水平滑动结束时的回调函数
5onHorizontalDragCancelGestureDragCancelCallback手指水平滑动取消时的回调函数

我们在Container容器上添加了水平滑动手势,代码如下:

import 'package:flutter/material.dart';

class GestureDetectorExample extends StatefulWidget 
  @override
  _GestureDetectorExampleState createState() => _GestureDetectorExampleState();


class _GestureDetectorExampleState extends State<GestureDetectorExample> 

  double _left = 0;
  double _top = 0;

  @override
  Widget build(BuildContext context) 
    return Scaffold(
      appBar: AppBar(
        title: Text("GestureDetector"),
      ),
      body: Center(
        child: Stack(
          children: [
            /// 水平滑动
            GestureDetector(
              onHorizontalDragCancel: () 
                print("onHorizontalDragCancel");
              ,
              onHorizontalDragDown: (details) 
                print("onHorizontalDragDown---$details.globalPosition---$details.localPosition");
              ,
              onHorizontalDragEnd: (details) 
                print("onHorizontalDragEnd---$details.velocity---$details.primaryVelocity");
              ,
              onHorizontalDragStart: (details) 
                print("onHorizontalDragStart---$details.globalPosition---$details.localPosition");
              ,
              onHorizontalDragUpdate: (details) 
                print("onHorizontalDragUpdate---$details.globalPosition---$details.localPosition---$details.delta");
                setState(() 
                  _left += details.delta.dx;
                );

              ,
              child: Stack(
                children: [
                  Positioned(
                    left: _left,
                    top: _top,
                    child: Container(
                      width: 200,
                      height: 200,
                      color: Colors.orange,
                      alignment: Alignment.center,
                      child: Text("Jimi",
                        style: TextStyle(
                            color: Colors.white,
                            fontSize: 30
                        ),
                      ),
                    ),
                  )
                ],
              ),
            )

          ],
        ),
      ),
    );
  

GestureDetector水平滑动控制台输出

第一种:点击Container容器

flutter: onHorizontalDragDown---Offset(151.5, 118.0)---Offset(151.5, 42.0)
flutter: onHorizontalDragStart---Offset(151.5, 118.0)---Offset(151.5, 42.0)
flutter: onHorizontalDragEnd---Velocity(0.0, 0.0)---0.0

第二种:拖动Container容器

flutter: onHorizontalDragDown---Offset(97.5, 135.5)---Offset(97.5, 59.5)
flutter: onHorizontalDragStart---Offset(97.5, 135.5)---Offset(97.5, 59.5)
flutter: onHorizontalDragUpdate---Offset(100.0, 136.0)---Offset(100.0, 60.0)---Offset(2.5, 0.0)
flutter: onHorizontalDragUpdate---Offset(100.5, 136.0)---Offset(100.5, 60.0)---Offset(0.5, 0.0)
flutter: onHorizontalDragUpdate---Offset(102.0, 136.0)---Offset(102.0, 60.0)---Offset(1.5, 0.0)
flutter: onHorizontalDragUpdate---Offset(105.0, 136.5)---Offset(105.0, 60.5)---Offset(3.0, 0.0)
flutter: onHorizontalDragUpdate---Offset(107.0, 137.0)---Offset(107.0, 61.0)---Offset(2.0, 0.0)
flutter: onHorizontalDragUpdate---Offset(108.5, 137.0)---Offset(108.5, 61.0)---Offset(1.5, 0.0)
flutter: onHorizontalDragUpdate---Offset(109.0, 137.0)---Offset(109.0, 61.0)---Offset(0.5, 0.0)
flutter: onHorizontalDragUpdate---Offset(110.0, 137.0)---Offset(110.0, 61.0)---Offset(1.0, 0.0)
flutter: onHorizontalDragUpdate---Offset(111.0, 137.0)---Offset(111.0, 61.0)---Offset(1.0, 0.0)
flutter: onHorizontalDragEnd---Velocity(0.0, 0.0)---0.0

第三种:拖动Container容器并马上松开

flutter: onHorizontalDragDown---Offset(6.0, 109.0)---Offset(6.0, 33.0)
flutter: onHorizontalDragCancel

6.GestureDetector拖动手势

序列号字段属性描述
1onPanDownGestureDragDownCallback手指按下时的回调函数
2onPanStartGestureDragStartCallback手指开始拖动时的回调函数
3onPanUpdateGestureDragUpdateCallback手指移动时的回调函数
4onPanEndGestureDragEndCallback手指抬起时的回调函数
5onPanCancelGestureDragCancelCallback手指取消拖动时的回调函数

我们在Container容器上添加了拖动手势,代码如下:

import 'package:flutter/material.dart';

class GestureDetectorExample extends StatefulWidget 
  @override
  _GestureDetectorExampleState createState() => _GestureDetectorExampleState();


class _GestureDetectorExampleState extends State<GestureDetectorExample> 

  double _left = 0;
  double _top = 0;

  @override
  Widget build(BuildContext context) 
    return Scaffold(
      appBar: AppBar(
        title: Text("GestureDetector"),
      ),
      body: Center(
        child: Stack(
          children: [

            // 拖动手势
            GestureDetector(
              onPanCancel: () 
                print("onPanCancel");
              ,
              onPanDown: (details) 
                print("onPanDown---$details.globalPosition---$details.localPosition");
              ,
              onPanEnd: (details) 
                print("onPanEnd---$details.velocity---$details.primaryVelocity");
              ,
              onPanStart: (details) 
                print("onPanStart---$details.globalPosition---$details.localPosition");
              ,
              onPanUpdate: (details) 
                print("onPanUpdate---$details.globalPosition---$details.localPosition---$details.delta");
                setState(() 
                  _left += details.delta.dx;
                  _top += details.delta.dy;
                );
              ,
              child: Stack(
                children: [
                  Positioned(
                    left: _left,
                    top: _top,
                    child: Container(
                      width: 200,
                      height: 200,
                      color: Colors.orange,
                      alignment: Alignment.center,
                      child: Text("Jimi",
                        style: TextStyle(
                            color: Colors.white,
                            fontSize: 30
                        ),
                      ),
                    ),
                  )
                ],
              ),
            )
          ],
        ),
      ),
    );
  

GestureDetector拖动手势控制台输出

第一种:点击Container容器

flutter: onPanDown---Offset(161.0, 233.0)---Offset(161.0, 157.0)
flutter: onPanStart---Offset(161.0, 233.0)---Offset(161.0, 157.0)
flutter: onPanEnd---Velocity(0.0, 0.0)---0.0

第二种:拖动Container容器

flutter: onPanDown---Offset(123.5, 193.5)---Offset(123.5, 117.5)
flutter: onPanStart---Offset(123.5, 193.5)---Offset(123.5, 117.5)
flutter: onPanUpdate---Offset(123.5, 193.0)---Offset(123.5, 117.0)---Offset(0.0, -0.5)
flutter: onPanUpdate---Offset(124.0, 193.0)---Offset(124.0, 117.0)---Offset(0.5, 0.0)
flutter: onPanUpdate---Offset(124.5, 192.0)---Offset(124.5, 116.0)---Offset(0.5, -1.0)
flutter: onPanUpdate---Offset(125.5, 190.5)---Offset(125.5, 114.5)---Offset(1.0, -1.5)
flutter: onPanUpdate---Offset(126.0, 190.0)---Offset(126.0, 114.0)---Offset(0.5, -0.5)
flutter: onPanUpdate---Offset(126.5, 189.5)---Offset(126.5, 113.5)---Offset(0.5, -0.5)
flutter: onPanUpdate---Offset(127.0, 189.0)---Offset(127.0, 113.0)---Offset(0.5, -0.5)
flutter: onPanEnd---Velocity(0.0, 0.0)---0.0

第三种:拖动Container容器并马上松开

flutter: onPanDown---Offset(5.5, 162.5)---Offset(5.5, 86.5)
flutter: onPanCancel

7.GestureDetector缩放手势

序列号字段属性描述
1onScaleStartGestureScaleStartCallback开始缩放时的回调函数
2onScaleUpdateGestureScaleUpdateCallback缩放移动时的回调函数
3onScaleEndGestureScaleEndCallback缩放结束时的回调函数

我们在Container容器上添加了缩放手势,代码如下::

import 'package:flutter/material.dart';

class GestureDetectorExample extends StatefulWidget 
  @override
  _GestureDetectorExampleState createState() => _GestureDetectorExampleState();


class _GestureDetectorExampleState extends State<GestureDetectorExample> 

  double _left = 0;
  double _top = 0;
  double _widthAndHeight = 200;

  @override
  Widget build(BuildContext context) 
    return Scaffold(
      appBar: AppBar(
        title: Text("GestureDetector"),
      ),
      body: Center(
        child: Stack(
          children: [
            /// 缩放手势
            GestureDetector(
              onScaleEnd: (details) 
                print("onScaleEnd---$details.velocity---$details.pointerCount");
              ,
              onScaleStart: (details) 
                print("onScaleStart---$details.focalPoint---$details.pointerCount");
              ,
              onScaleUpdate: (details) 
                print("onScaleUpdate---$details.scale---$details.scale.clamp(0.1, 1.2)");
                setState(() 
                  _widthAndHeight = 200 * details.scale.clamp(0.3, 1.8);
                );
              ,
              child: Container(
                width: _widthAndHeight,
                height: _widthAndHeight,
                color: Colors.orange,
                alignment: Alignment.center,
                child: Text("Jimi",
                  style: TextStyle(
                      color: Colors.white,
                      fontSize: 30
                  ),
                ),
              ),
            )

          ],
        ),
      ),
    );
  

第一种:点击Container容器

flutter: onScaleStart---Offset(149.5, 348.0)---1
flutter: onScaleEnd---Velocity(0.0, 0.0)---0

第二种:单指拖动Container容器

flutter: onScaleStart---Offset(178.0, 304.5)---1
flutter: onScaleUpdate---1.0---1.0
flutter: onScaleUpdate---1.0---1.0
flutter: onScaleUpdate---1.0---1.0
flutter: onScaleUpdate---1.0---1.0
flutter: onScaleEnd---Velocity(0.0, 0.0)---0

第三种:双指缩放Container容器

flutter: onScaleStart---Offset(187.5, 333.5)---2
flutter: onScaleUpdate---1.0055027720002572---1.0055027720002572
flutter: onScaleUpdate---1.0110087715145855---1.0110087715145855
flutter: onScaleUpdate---1.0293231946761667---1.0293231946761667
flutter: onScaleUpdate---1.04763763435052---1.04763763435052
flutter: onScaleUpdate---1.0531463022961167---1.0531463022961167
flutter: onScaleEnd---Velocity(0.0, 0.0)---1

8.带有3D Touch功能压力设备触发手势

序列号字段属性描述
1onForcePressStartGestureForcePressStartCallback手指强制按下时的回调函数
2onForcePressPeakGestureForcePressPeakCallback手指按压力度最大时的回调函数
3onForcePressUpdateGestureForcePressUpdateCallback手指按下后移动时的回调函数
4onForcePressEndGestureForcePressEndCallback手指离开时的回调函数

9.辅助按钮触发手势

序列号字段属性描述
1onSecondaryTapGestureTapCallback辅助按钮单击时的回调函数
2onSecondaryTapDownGestureTapDownCallback辅助按钮按下时的回调函数
3onSecondaryTapUpGestureTapUpCallback辅助按钮松开时的回调函数
4onSecondaryTapCancelGestureTapCancelCallback辅助按钮取消点击时的回调函数
5onSecondaryLongPressDownGestureLongPressDownCallback辅助按钮按下去时的回调函数
6onSecondaryLongPressCancelGestureLongPressCancelCallback辅助按钮长按取消时的回调函数
7onSecondaryLongPressGestureLongPressCallback辅助按钮长按时的回调函数
8onSecondaryLongPressStartGestureLongPressStartCallback辅助按钮长按并开始拖动时的回调函数
9onSecondaryLongPressMoveUpdateGestureLongPressMoveUpdateCallback辅助按钮长按并移动时的回调函数
10onSecondaryLongPressUpGestureLongPressUpCallback辅助按钮长按并松开时的回调函数
11onSecondaryLongPressEndGestureLongPressEndCallback辅助按钮长按结束拖动时的回调函数

10.三指触发手势

序列号字段属性描述
1onTertiaryTapDownGestureTapDownCallback三指按下时的回调函数
2onTertiaryTapUpGestureTapUpCallback三指点击时的回调函数
3onTertiaryTapCancelGestureTapCancelCallback三指取消时的回调函数
4onTertiaryLongPressDownGestureLongPressDownCallback三指按下去时的回调函数
5onTertiaryLongPressCancelGestureLongPressCancelCallback三指长按取消时的回调函数
6onTertiaryLongPressGestureLongPressCallback三指长按时的回调函数
7onTertiaryLongPressStartGestureLongPressStartCallback三指长按并开始拖动时的回调函数
8onTertiaryLongPressMoveUpdateGestureLongPressMoveUpdateCallback三指长按并移动时的回调函数
9onTertiaryLongPressUpGestureLongPressUpCallback三指长按并松开时的回调函数
10onTertiaryLongPressEndGestureLongPressEndCallback三指长按结束拖动时的回调函数

11.其他属性

序列号字段属性描述
1childWidget子组件
2behaviorHitTestBehavior在命中测试期间如何表现
3excludeFromSemanticsbool是否从语义树中排除这些手势,默认false
4dragStartBehaviorDragStartBehavior拖拽行为的处理方式

flutter手势

 

import ‘package:flutter/material.dart‘;
import ‘package:flutter_app/pages/dismissed_page.dart‘;

class GestureAppPage extends StatefulWidget 
  @override
  State<StatefulWidget> createState() 
    // TODO: implement createState
    return new _GestureAppPageState();
  


class _GestureAppPageState extends State<GestureAppPage> 

  var tapEvent = ‘‘;

//  _showSnakeBar(String str) 
//    final snackBar = new SnackBar(content: new Text(str));
//    Scaffold.of(context).showSnackBar(snackBar);
//  

  @override
  Widget build(BuildContext context) 
    // TODO: implement build
    return new Scaffold(
      appBar: new AppBar(
        title: new Text(‘Gesture 学习‘),
        centerTitle: true,
      ),
      body: new ListView(
        children: <Widget>[
          new Padding(
            padding: const EdgeInsets.only(left: 10.0, top: 10.0, right: 10.0),
            child: new RaisedButton(
                textColor: Colors.black,
                child: new Text(‘RaisedButton 点击‘),
                onPressed: () 
                  final snackBar = new SnackBar(content: new Text("这是一个 RaisedButton 点击事件,onPressed处理"));
                  Scaffold.of(context).showSnackBar(snackBar);
//                  _showSnakeBar("这是一个 RaisedButton 点击事件,onPressed处理");
                ),
          ),
          new Padding(
            padding: const EdgeInsets.only(left: 10.0, top: 10.0, right: 10.0),
            child: new GestureDetector(
              onTap: () 
                final snackBar = new SnackBar(content: new Text("这是一个GestureDetector监听的onTap事件"));
                Scaffold.of(context).showSnackBar(snackBar);
//                _showSnakeBar("这是一个GestureDetector监听的onTap事件");
              ,
              child: new BorderButton(‘GestureDetector onTap 按钮‘),
            ),
          ),
          new Padding(
            padding: const EdgeInsets.only(left: 10.0, top: 10.0, right: 10.0),
            child:
                new Text(tapEvent, style: Theme.of(context).textTheme.display1),
          ),
          new Padding(
            padding: const EdgeInsets.only(left: 10.0, top: 10.0, right: 10.0),
            child: new GestureDetector(
              onTapDown: (tapDown) 
                setState(() 
                  tapEvent = ‘这是GestureDetector监听的onTapDown事件‘;
                );
              ,
              onTapUp: (tapUp) 
                setState(() 
                  tapEvent = ‘这是GestureDetector监听的onTapUp事件‘;
                );
              ,
              onTapCancel: () 
                setState(() 
                  tapEvent = ‘这是GestureDetector监听的onTapCancel事件‘;
                );
              ,
              onDoubleTap: () 
                setState(() 
                  tapEvent = ‘这是GestureDetector监听的onDoubleTap事件‘;
                );
              ,
              onLongPress: () 
                setState(() 
                  tapEvent = ‘这是GestureDetector监听的onLongPress事件‘;
                );
              ,
              child: new BorderButton(‘GestureDetector onTap 分解事件按钮‘),
            ),
          ),
          new Padding(
            padding: const EdgeInsets.only(left: 10.0, top: 10.0, right: 10.0),
            child: new Text(‘上面的按钮通过GestureDetector监听事件后,涟漪效果消失了,使用下面的方案解决‘),
          ),
          new Padding(
              padding:
                  const EdgeInsets.only(left: 10.0, top: 10.0, right: 10.0),
              child: new InkWell(
                borderRadius: new BorderRadius.all(new Radius.circular(10.0)),
                onTap: () 
                  final snackBar = new SnackBar(content: new Text("这是一个InkWell监听的onTap事件"));
                  Scaffold.of(context).showSnackBar(snackBar);
//                  _showSnakeBar("这是一个InkWell监听的onTap事件");
                ,
                child: new BorderButton(‘InkWell 按钮‘),
              )),
          new Padding(
              padding:
                  const EdgeInsets.only(left: 10.0, top: 10.0, right: 10.0),
              child: new InkWell(
                borderRadius: new BorderRadius.all(new Radius.circular(10.0)),
                onTap: () 
                  Navigator.of(context).push(new MaterialPageRoute(builder: (context)=> new  DismissedPage()));
                  ,

                child: new BorderButton(‘Dismissed 手势‘),
              )),
        ],
      ),
    );
  


class BorderButton extends StatelessWidget 
  final String text;

  BorderButton(this.text);

  @override
  Widget build(BuildContext context) 
    // TODO: implement build
    return new Container(
      alignment: Alignment.center,
      padding: const EdgeInsets.only(
          left: 10.0, top: 10.0, right: 10.0, bottom: 10.0),
      height: 48.0,
      decoration: new BoxDecoration(
        border: new Border.all(
          width: 1.0,
          color: Colors.blue,
        ),
        borderRadius: new BorderRadius.all(new Radius.circular(10.0)),
      ),
//      foregroundDecoration: new BoxDecoration(
//        border: new Border.all(
//          width: 1.0,
//          color: Colors.red,
//        ),
//        borderRadius: new BorderRadius.all(new Radius.circular(10.0)),
//      ),
      child: new Text(text),
    );
  


class GesturePage extends StatelessWidget 
  @override
  Widget build(BuildContext context) 
    // TODO: implement build
    return new Scaffold(
      body: new GestureAppPage(),
    );
  

 

以上是关于Flutter手势--GestureDetector各种手势使用详情的主要内容,如果未能解决你的问题,请参考以下文章

09Flutter--手势控制

Flutter手势--GestureDetector各种手势使用详情

Flutter了解之手势

flutter web中如何区分手指触摸手势和鼠标指针手势?

flutter手势

Flutter - 关于手势的用户教育(滑动)