flutter如何实现点击事件

2023-10-26

在Android中,您可以通过调用方法setOnClickListener将OnClick绑定到按钮等view上。
在Flutter中,有两种方法:

1.如果Widget支持事件监听,则可以将一个函数传递给它并进行处理。例如,RaisedButton有一个onPressed参数

@override
Widget build(BuildContext context) {
  return new RaisedButton(
      onPressed: () {
        print("click");
      },
      child: new Text("Button"));
}

2.如果Widget不支持事件监听,则可以将该Widget包装到GestureDetector中,并将处理函数传递给onTap参数

class SampleApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
        body: new Center(
      child: new GestureDetector(
        child: new FlutterLogo(
          size: 200.0,
        ),
        onTap: () {
          print("tap");
        },
      ),
    ));
  }
}

2.1.使用GestureDetector,可以监听多种手势

(1)Tap

  • onTapDown
  • onTapUp
  • onTap
  • onTapCancel

(2)Double tap

  • onDoubleTap 用户快速连续两次在同一位置轻敲屏幕

(3)长按

  • onLongPress

(4)垂直拖动

  • onVerticalDragStart
  • onVerticalDragUpdate
  • onVerticalDragEnd

(5)水平拖拽

  • onHorizontalDragStart
  • onHorizontalDragUpdate
  • onHorizontalDragEnd

2.2.示例:监听FlutterLogo的双击事件,双击时使其旋转。


void main() => runApp(DemoApp());

class DemoApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: '导航演示1',
      home: new MyAppHome(),
    );
  }
}

class MyAppHome extends StatefulWidget{
  @override
  _MyAppHomeState createState() => _MyAppHomeState();

}
class _MyAppHomeState extends State<MyAppHome> with TickerProviderStateMixin{
  AnimationController controller;
  CurvedAnimation curve;

  @override
  void initState() {
    super.initState();
    controller = new AnimationController(
        duration: const Duration(milliseconds: 2000), vsync: this);
    curve = new CurvedAnimation(parent: controller, curve: Curves.easeIn);
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
        body: new Center(
      child: new GestureDetector(
        child: new RotationTransition(
            turns: curve,
            child: new FlutterLogo(
              size: 200.0,
            )),
        onDoubleTap: () {
          if (controller.isCompleted) {
            controller.reverse();
          } else {
            controller.forward();
          }
        },
      ),
    ));
  }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

flutter如何实现点击事件 的相关文章

  • 位图背景图像应支持哪些屏幕尺寸/密度组合?

    我正在编写一个应用程序 我需要一些全屏位图背景 基于我天真的阅读支持多屏 http developer android com guide practices screens support html在 Android 文档中 为了涵盖我的
  • 如何在Android 4.2中更改Action Bar选项菜单的背景颜色?

    我想更改 Android 4 2 中选项 溢出 菜单的背景颜色 我已经尝试了所有方法 但它仍然显示主题设置的默认颜色 我使用了以下代码和 XML 配置 MainActivity java public class MainActivity
  • putExtra() 和 setData() 之间的区别

    putExtra 和 setData 有什么区别 我已经阅读了 android 文档 但没有太大帮助 还有之前的一个问题Intent setData 与 Intent putExtra https stackoverflow com que
  • 如何在android中批量插入sqlite

    我正在使用 SQLiteOpenHelper 进行数据插入 我需要插入2500个id和2500个名字 所以花费了太多时间 请任何人帮助我如何减少插入时间 我们可以一次插入多条记录吗 任何人都可以帮助我 先感谢您 代码 public clas
  • 当前版本的Android Gradle插件不支持按需配置

    升级到 Android Studio 3 1 2 后 出现以下错误 当前版本的 Android Gradle 插件不支持按需配置 因为您使用的是 Gradle 4 6 或更高版本 建议 通过在 gradle properties 文件中设置
  • 在新的菜单提供程序 API 弃用“setHasOptionsMenu”后,隐藏 Fragment 中的菜单项并在导航返回上再次显示它们

    大约一个月前 Android 团队弃用了onCreateOptionsMenu and onOptionsItemSelected 也setHasOptionsItemMenu 不幸的是 这破坏了我所有的代码 我的应用程序有很多片段 当用户
  • Android 片段之间的阴影分隔符

    我有一个类似于平板电脑的 ICS Gmail 应用程序的布局 ListFragment左边是内容 右边是内容 我想知道如何构建布局 使两个片段之间有一个阴影分隔符 就像在 Gmail 应用程序中一样 如下所示 另外 由于这适用于这个问题 我
  • 如何在 Jetpack compose 中制作 FlipCard 动画

    我有一个现有的应用程序 我在其中使用 XML 中的 Objectanimator 实现了 FlipCard 动画 如下所示 如果我点击一张卡片 它会水平翻转 但现在我想将其迁移到 jetpack compose 那么jetpack comp
  • 使用Picasso从url保存图像?

    我正在尝试使用 API Picasso 保存图像 为了做到这一点 我正在尝试使用Target保存 但我无法完成这项工作 我怎么能这样做呢 Trying save image public static void imageDownload
  • 如何在Android中访问现有的sqlite数据库?

    到目前为止 我们已经在 Android 中开发了在运行时创建数据库的应用程序 我们想知道如何在 Android 应用程序中访问预构建或现有的数据库 sqlite 文件 请提供详细信息 查看文档android database sqlite
  • 如何将现有的 SQLite3 数据库导入 Room?

    好吧 我在桌面上使用 SQLite3 创建了一个只需要读取的某些信息的数据库 我正在制作的应用程序不需要在此表中插入或删除信息 我在 Room 数据库层上做了相当多的谷歌搜索 所有文档都需要在构建应用程序时在 Room 中创建一个新的数据库
  • 如何在 Android Studio 中构建项目测试目录?

    目前还没有这方面的约定 但是现在我如何构建 Android Studio 的测试目录呢 Android 测试基础 http developer android com tools testing testing android html页面
  • ProgressBar.setInminateDrawable() 不起作用

    当我尝试更改我的 indeteminateDrawable 进度条就消失了 我必须更改我的进度条的可绘制对象 我尝试了invalidate requestLayout等 我不知道如何解决它 谢谢 这里的代码 progressBar setI
  • 数据未刷新“DynamiteModule:未找到 com.google.firebase.auth 的本地模块描述符类”

    我已经使用 Firebase 很长时间了 到目前为止 除了以下场景之外 一切都很好 有时我注意到我的应用程序不再获取新数据 我正在用一个活跃的监听器监听变化 并且我确实有keepSynced set to true 发生这种情况时 我会在日
  • 垂直从上到下线手势检测器

    我用的是 手势工具 注意到对于垂直从上到下的线无法检测 因为我在代码中使用生成的手势文件 如下所示 但无法检测垂直从上到下的线手势检测 import java util ArrayList import android app Activi
  • 如何使用 MotionLayout 调整 TextView 的大小

    我正在尝试创建一个CollapsingToolbar动画使用MotionLayout 我已经成功地将所有内容设置为动画 使其表现得像CollapsingToolbar具有高度的灵活性 这意味着我可以轻松创建很棒的动画 而无需编写大量代码 我
  • 运行 Android 应用程序时出现错误

    我已经使用 Eclipse 创建了一个 Android 应用程序 但应用程序未在 AVD 上运行 它显示 不幸的是已停止工作 日志猫消息如下 07 29 04 59 50 789 W dalvikvm 784 threadid 1 thre
  • LinearLayout:防止最后一个孩子被之前的大文本视图推出或挤压

    我有一个LinearLayout里面有两个孩子 第一个是TextView对于动态内容 第二个是一个按钮 我的问题是按钮被推出其父级或被挤压到不再可见的程度 我想要TextView认识到其父母与第二个孩子一起没有更多空间 并开始新的一行 而不
  • 通知操作而不启动新活动?

    我计划提供一个包含两个操作的提醒通知 一个用于批准登录请求 一个用于拒绝登录请求 通过单击这些操作中的任何一个 我希望向我的服务器发出 HTTP 请求 最重要的是 我不想启动新的 Activity 或根本不想将用户重定向到我的应用程序 Co
  • 如何减少 Android 中浮动 editText 提示和 editText 框之间的空间?

    我有一个带有浮动提示的 EditText 但我想知道如何减少浮动提示和 EditText 框之间的空间 现在我的用户界面看起来像https i stack imgur com ltfra jpg https i stack imgur co

随机推荐

  • kafka后台启动命令

    命令 sh kafka server start sh config server properties 目的是想让服务后台启动 符号代表后台启动 运行命令后服务确实后台启动了 但日志会打印在控制台 而且关掉命令行窗口 服务就会随之停止 这
  • 万物分割SAM使用教程

    文章目录 安装 使用 全图分割 点 框 完整代码 原理篇 安装 创建虚拟环境 conda create n sam python 3 8 激活环境 conda activate sam 下载代码 git clone git github c
  • Python利用zipfile生成linux压缩目录穿越文件

    import zipfile if name main try binary 111 zipFile zipfile ZipFile test2 zip a zipfile ZIP DEFLATED info zipfile ZipInfo
  • 自建网站:免费图床不好用,云存储担心被攻击

    刚刚在看公众号文章的时候 无意中刷到了两个关于图片存储的文章 一个说的是网站被盗刷了1 7T流量 另一个说的是将网站图床换到了阿里云OSS 然后结合到前段时间小编遇到的一些关于网站图床的问题 小编就想到了很多自建网站其实都面临着图片等静态文
  • 【嵌入式】基于FATFS/Littlefs文件系统的日志框架实现

    嵌入式 基于FATFS Littlefs文件系统的日志框架实现 文章目录 嵌入式 基于FATFS Littlefs文件系统的日志框架实现 1 概述 2 设计概要 3 设计实现 3 1 初始化 init 3 2 日志写入 write 3 3
  • VMware Workstation 11 安装教程

    哈喽 大家好 今天一起学习的是VMware Workstation 11的安装 vm虚拟机是小编非常喜欢的生产力软件 小编之前发布的测试教程钧在vm上进行的实验 VMware Workstation是一款功能强大的桌面虚拟计算机软件 它能够
  • 进入geth交互平台的命令大全解释

    这里有很多进入geth平台的命令参数来确保你的链是私链 nodiscover 不被其他节点发现 但是如果有相同创世块和networkid的节点可以连接进私链 nodiscover Use this to make sure that you
  • k8s集群搭建(二进制方式)

    k8s集群搭建 二进制方式 1 安装要求 2 准备环境 3 操作系统初始化配置 4 部署 Etcd 集群 4 1 准备 cfssl 证书生成工具 4 2 生成 Etcd 证书 4 3 从 Github 下载二进制文件 4 4 部署 Etcd
  • 编码套路的实战演练

    1 写一份自己的简历 把自己所有的相关技能都罗列出来 然后把那些在100年后还用得到的标出来 给每个技能打分 满分为10分 2 罗列出你所景仰的程序员 尽量包括那些与你一起工作的人 因为你会在工作中从他们身上获取一些技能 记录下他们身上的1
  • 干货

    源于频率主义学派的极大似然估计 Maximum Likelihood Estimation 简称MLE 是根据数据采样来估计概率分布参数的经典方法 在机器学习的对数几率回归 贝叶斯分类器等中有广泛的应用 1 极大似然估计法 设总体的概率密度
  • [23最新版新手向]Linux系统下安装MMDetection

    前言 MMDetection 是商汤和港中文大学针对目标检测任务推出的一个开源项目 它基于Pytorch 实现了大量的目标检测算法 例如 fast rcnn faster rcnn detr 等算法 一 安装 UBuntu20 04 及创建
  • C语言竞赛小题分析

    问题1 单身狗的愤怒 题目描述 罩得住学长是工作室最帅的帅哥 所以集训的学妹都喜欢罩得住学长 但是工作室的其他学长很不爽 现在挑5个女生出来 如果女生喜欢罩得住学长就为1 不喜欢就是0 喜欢的人越多 学长们的仇恨值越高 请求出学长们的愤怒值
  • Jetson nano中使用tensorrt推理yolov5

    克隆下载yolov5项目 准备yolov5项目 从仓库下载5 5 0版本 git clone b v5 0 https github com ultralytics yolov5 git 下载权重地址 https github com ul
  • 关于Commit message代码提交

    Commit message代码提交规范 目录 一 简述 二 Commit message格式 命令行方式 1 Header 2 Body 3 Footer 4 Revert 三 工具 1 Commitizen 2 validate com
  • c++关键字之volatile

    1 volatile 直接存取原始内存地址 volatile 求助编辑百科名片 volatile 就象大家更熟悉的const一样 volatile是一个类型修饰符 type specifier 它是被设计用来修饰被不同线程访问和修改的变量
  • Maven中央仓库地址

    Maven 中央仓库地址有一下几个 可能这里不全 但一定能够使用 1 http mvnrepository com 属于美化版本 国外网站 在国内可能下载比较慢 2 http repo1 maven org maven2 属于基本版本 查找
  • nodejs之文件下载

    request模块实现下载 app js var express require express var app express 创建express实例 var routes require routes routes js 吧路由引入 代
  • Swin-Transformer-Object-Detection环境搭建训练流程及问题

    一 背景 Swin Transformer Swin代表移位窗口shifted window 可以作为计算机视觉的通用backbone 它的github网址是Swin Transformer 然后它有好几种应用 Getting Starte
  • 古风排版 c语言

    中国的古人写文字 是从右向左竖向排版的 本题就请你编写程序 把一段文字按古风排版 输入格式 输入在第一行给出一个正整数NN lt 100 lt 100 是每一列的字符数 第二行给出一个长度不超过1000的非空字符串 以回车结束 输出格式 按
  • flutter如何实现点击事件

    在Android中 您可以通过调用方法setOnClickListener将OnClick绑定到按钮等view上 在Flutter中 有两种方法 1 如果Widget支持事件监听 则可以将一个函数传递给它并进行处理 例如 RaisedBut