Flutter获取点击元素的位置与大小
使用 WidgetsBindingObserver获取
class CloseTap extends StatefulWidget {
@override
_CloseTapTapState createState() => _CloseTapTapState();
}
class _CloseTapTapState extends State<CloseTap> with WidgetsBindingObserver {
void _onAfterRendering(Duration timeStamp) {
RenderObject renderObject = context.findRenderObject();
//获取元素大小
Size size = renderObject.paintBounds.size;
//获取元素位置
var vector3 = renderObject.getTransformTo(null)?.getTranslation();
CommonUtils.showChooseDialog(context, size, vector3);
}
@override
Widget build(BuildContext context) {
return GestureDetector(
child: Icon(Icons.close),
onTapDown: (TapDownDetails details) {
WidgetsBinding.instance.addPostFrameCallback(_onAfterRendering);
setState(() {
});
},
);
}
目的是为了实现如图


在点击X号的时候按照X号的位置进行位置计算
小三角是使用了Clip功能
Positioned(
left: dx - 10.0,
top: dy < h / 2 ? dy - wx / 2 : null,
bottom: dy < h / 2 ? null : (h - dy - wx / 2),
child: ClipPath(
clipper: Triangle(dir: dy - h / 2),
child: Container(
width: 30.0,
height: 30.0,
color: Colors.white,
child: null,
),
),
),
class Triangle extends CustomClipper<Path> {
double dir;
Triangle({this.dir});
@override
Path getClip(Size size) {
var path = Path();
double w = size.width;
double h = size.height;
if (dir < 0) {
path.moveTo(0, h);
path.quadraticBezierTo(0, 0, w * 2 / 3, 0);
path.quadraticBezierTo(w / 4, h / 2, w, h);
} else {
path.quadraticBezierTo(0, h / 2, w * 2 / 3, h);
path.quadraticBezierTo(w / 3, h / 3, w, 0);
path.lineTo(0, 0);
}
return path;
}
@override
bool shouldReclip(CustomClipper<Path> oldClipper) => false;
}
代码部分见github项目 https://github.com/dnoyeb/syk_flutter
Flutter获取点击元素的位置与大小的更多相关文章
- contains 之 点击元素外位置隐藏元素
contains 之 点击元素外位置隐藏元素 api: contains 检测一个元素包含在另一个元素之内 详解:http://www.runoob.com/jquery/misc-contai ...
- js进阶 11-7 jquery如何获取和改变元素的位置
js进阶 11-7 jquery如何获取和改变元素的位置 一.总结 一句话总结:jquery中匿名函数中的index参数是什么意思.jquery对象多集合,故index为所选元素的下标. 1.jqu ...
- dom 页面位置和大小,元素的位置和大小,鼠标位置
dom里面三种跟位置相关的元素 页面位置和大小,元素的位置和大小,鼠标位置 ①window:位置(position):(screenLeft, screenTop) [(screenX, screen ...
- 微信小程序,获取点击元素的索引值index
1.需求说明 点击 “加号图片” 上传图片,需要知道点击的是第几个图片,动态的修改src数组,这里图片用的 wx:for 循环出来的 2.遇到问题 按照官方最新文档循环的方式,索引值是以 wx:fo ...
- Flutter 获取控件尺寸和位置
1. 插件必须渲染好, final RenderBox box = globalKey.currentContext.findRenderObject(); final size = box.size ...
- 获取点击元素的id
1.onclick="dianji(this.id)" 传入id到方法里function dianji(id){ //这个就是id}2. $(document).click(fun ...
- Selenium2学习-031-WebUI自动化实战实例-029-JavaScript 在 Selenium 自动化中的应用实例之四(获取元素位置和大小)
通过 JS 或 JQuery 获取到元素后,通过 offsetLeft.offsetTop.offsetWidth.offsetHeight 即可获得元素的位置和大小,非常的简单,直接上源码了,敬请参 ...
- Selenium2学习-030-WebUI自动化实战实例-028-获取元素位置及大小
自动化测试过程中,有时需要获取元素的位置.大小,以获取元素的位置,通过 Actions 模拟鼠标,进行相对坐标操作.例如,有些元素定位不方便,或者需要对某一元素相对区域范围进行暴力点击测试,此时就需要 ...
- jquery操作元素的位置
.offset() 在匹配的元素中,获取第一个元素的当前坐标,或设置每一个元素的坐标,坐标相对于文档. .offset() 这个不接受任何参数. var offset = p.offset(); // ...
随机推荐
- 机器学习——随机森林,RandomForestClassifier参数含义详解
1.随机森林模型 clf = RandomForestClassifier(n_estimators=200, criterion='entropy', max_depth=4) rf_clf = c ...
- 前端笔记之JavaScript面向对象(三)初识ES6&underscore.js&EChart.js&设计模式&贪吃蛇开发
一.ES6语法 ES6中对数组新增了几个函数:map().filter().reduce() ES5新增的forEach(). 都是一些语法糖. 1.1 forEach()遍历数组 forEach() ...
- SOFARPC源码解析-搭建环境
文档地址:https://www.sofastack.tech 简介摘要 SOFA 是蚂蚁金服自主研发的金融级分布式中间件,包含构建金融级云原生架构所需的各个组件,包括微服务研发框架,RPC 框架,服 ...
- 企业级自动化运维工具---puppet详解
本文收录在Linux运维企业架构实战系列 1.认识puppet 1.1 引入 puppet是什么,咱们先不用专业的名词解释它,咱们先描述一些工作场景,看明白这些工作场景,自然会知道puppet是什么. ...
- 痞子衡嵌入式:开启NXP-MCUBootUtility工具的HAB加密功能 - CST(中英双语)
1 Reason for enabling HAB encryption function 为什么要开启HAB加密功能 NXP-MCUBootUtility is a tool designed fo ...
- C# Net MVC 大文件下载几种方式、支持速度限制、资源占用小
上一篇我们说到大文件的分片下载.断点续传.秒传,有的博友就想看分片下载,我们也来总结一下下载的几种方式,写的比较片面,大家见谅^_^. 下载方式: 1.html超链接下载: 2.后台下载(四种方法:返 ...
- chrome主页被篡改为hao123 win10系统
应该是开了个从流氓网站下的蓝灯,然后发现主页被篡改 尝试chrome设置修改无效,应该是快捷方式被改了 系统 win10 1.打开对应的下面两个地址,找到chrome的快捷方式,右键属性 C:\Use ...
- 基于ElasticStack数据分析应用系统
1.Elasticsearch Elasticsearch 基于java,是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自 ...
- Git日常须知
基本操作: git init 初始化环境 git add . 管理文件 git status 查看状态 git diff 文件名 查看修改内容 git commit -m '' 提交文件 git lo ...
- iOS---------获取当前年份
NSDate * senddate=[NSDate date]; NSDateFormatter *dateformatter=[[NSDateFormatter alloc] init]; [d ...