前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >『Flutter』手势交互

『Flutter』手势交互

原创
作者头像
杨不易呀
修改2024-01-24 00:40:13
2631
修改2024-01-24 00:40:13
举报
文章被收录于专栏:Flutter18Flutter18

1.前言

经过上篇文章的介绍,已经将跨页面之间跳转的时候传参的方式介绍给大家了,本篇文章将给大家介绍如何在 Flutter 中使用手势交互。

2.手势交互

2.1.简介

Flutter中的手势系统是一个强大且灵活的方式,允许开发者捕获并响应触摸屏上的各种用户交互。

2.2.常见手势类型与常用属性

  1. Tap(点击):
    • onTap: 当用户轻触屏幕时触发。
    • onTapUp: 当用户完成点击并抬起手指时触发。
    • onTapDown: 当用户触摸屏幕并开始点击时触发。
    • onTapCancel: 当用户取消点击时触发。
  2. Double Tap(双击):
    • onDoubleTap: 当用户在短时间内连续点击屏幕两次时触发。
  3. Long Press(长按):
    • onLongPress: 当用户在屏幕上按住一段时间后触发。
    • onLongPressStart: 长按开始时触发。
    • onLongPressMoveUpdate: 在长按期间,如果手指移动,则触发。
    • onLongPressEnd: 长按结束时触发。
  4. Swipe(滑动):
    • onPanUpdate: 当用户在屏幕上拖动时连续触发。
    • onPanStart: 当滑动开始时触发。
    • onPanEnd: 当滑动结束时触发。
  5. Scale(缩放):
    • onScaleStart: 当缩放开始时触发。
    • onScaleUpdate: 在缩放过程中连续触发。
    • onScaleEnd: 缩放结束时触发。

2.3.示例

代码语言:js
复制
import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'Flutter Gesture Demo',
      home: GestureDemoPage(),
    );
  }
}

class GestureDemoPage extends StatelessWidget {
  const GestureDemoPage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Gesture Demo'),
      ),
      body: Center(
        child: GestureDetector(
          onTap: () {
            print('Box Clicked!');
          },
          onDoubleTap: () {
            print('Box DoubleClicked!');
          },
          onLongPress: () {
            print('Box Long Pressed!');
          },
          onVerticalDragDown: (details) {
            print("onVerticalDragDown");
          },
          onVerticalDragStart: (details) {
            print("onVerticalDragStart");
          },
          onVerticalDragUpdate: (details) {
            print("onVerticalDragUpdate ${details.delta.dy}");
          },
          onVerticalDragEnd: (details) {
            print("onVerticalDragEnd");
          },
          onVerticalDragCancel: () {
            print("onVerticalDragCancel");
          },
          child: Container(
            // 这里存放需要监听事件的组件
            width: 200,
            height: 200,
            color: Colors.blue,
            alignment: Alignment.center,
            child: const Text(
              'Click or Long Press',
              style: TextStyle(color: Colors.white),
              textAlign: TextAlign.center,
            ),
          ),
        ),
      ),
    );
  }
}

2.4.运行效果

  1. 首先,导入了flutter/material.dart库。
  2. main函数调用runApp,将MyApp作为根widget。
  3. MyApp是一个StatelessWidget,它继承自StatelessWidget,并在build方法中返回一个MaterialApp。
  4. MaterialApp的title属性设置为"Flutter Gesture Demo",home属性设置为GestureDemoPage。
  5. GestureDemoPage也是一个StatelessWidget,它继承自StatelessWidget,并在build方法中返回一个Scaffold。
  6. Scaffold的appBar属性设置为一个AppBar,其中包含一个Text,显示"Gesture Demo"。
  7. Scaffold的body属性设置为一个Center,它包含一个GestureDetector。
  8. GestureDetector包含一个Container,用于显示文本"Click or Long Press"。
  9. GestureDetector还包含多个事件处理函数,如onTaponDoubleTaponLongPress等。这些函数分别在用户点击、双击或长按容器时触发,并在控制台中打印相应的消息。
  10. 最后,GestureDetector还包含一些处理垂直拖动事件的函数,如onVerticalDragDownonVerticalDragStartonVerticalDragUpdate 这些函数在用户在容器上执行垂直拖动操作时触发,并在控制台中打印相应的消息。

如果 details.delta.dy 输出的值是负数,说明是向上滑动,反之则是向下滑动。

3.参考资料

End

  • 🐤如果您对本文有任何疑问或想法,请在评论区留言,我将很乐意与您交流。
  • 🐰您的每一条评论对我都至关重要,我会尽快给予回复。
  • 🎈如果您觉得这篇文章对您有所启发或帮助,请不吝赞赏、收藏或分享。
  • 🎁您的每一个动作都是对我创作的最大鼓励和支持。
  • 👍谢谢您的阅读和陪伴!

我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.前言
  • 2.手势交互
    • 2.1.简介
      • 2.2.常见手势类型与常用属性
        • 2.3.示例
          • 2.4.运行效果
          • 3.参考资料
          • End
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档