使用 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获取点击元素的位置与大小的更多相关文章

  1. contains 之 点击元素外位置隐藏元素

    contains 之 点击元素外位置隐藏元素 api: contains   检测一个元素包含在另一个元素之内  详解:http://www.runoob.com/jquery/misc-contai ...

  2. js进阶 11-7 jquery如何获取和改变元素的位置

    js进阶 11-7  jquery如何获取和改变元素的位置 一.总结 一句话总结:jquery中匿名函数中的index参数是什么意思.jquery对象多集合,故index为所选元素的下标. 1.jqu ...

  3. dom 页面位置和大小,元素的位置和大小,鼠标位置

    dom里面三种跟位置相关的元素 页面位置和大小,元素的位置和大小,鼠标位置 ①window:位置(position):(screenLeft, screenTop) [(screenX, screen ...

  4. 微信小程序,获取点击元素的索引值index

    1.需求说明 点击 “加号图片” 上传图片,需要知道点击的是第几个图片,动态的修改src数组,这里图片用的 wx:for 循环出来的 2.遇到问题 按照官方最新文档循环的方式,索引值是以  wx:fo ...

  5. Flutter 获取控件尺寸和位置

    1. 插件必须渲染好, final RenderBox box = globalKey.currentContext.findRenderObject(); final size = box.size ...

  6. 获取点击元素的id

    1.onclick="dianji(this.id)" 传入id到方法里function dianji(id){ //这个就是id}2. $(document).click(fun ...

  7. Selenium2学习-031-WebUI自动化实战实例-029-JavaScript 在 Selenium 自动化中的应用实例之四(获取元素位置和大小)

    通过 JS 或 JQuery 获取到元素后,通过 offsetLeft.offsetTop.offsetWidth.offsetHeight 即可获得元素的位置和大小,非常的简单,直接上源码了,敬请参 ...

  8. Selenium2学习-030-WebUI自动化实战实例-028-获取元素位置及大小

    自动化测试过程中,有时需要获取元素的位置.大小,以获取元素的位置,通过 Actions 模拟鼠标,进行相对坐标操作.例如,有些元素定位不方便,或者需要对某一元素相对区域范围进行暴力点击测试,此时就需要 ...

  9. jquery操作元素的位置

    .offset() 在匹配的元素中,获取第一个元素的当前坐标,或设置每一个元素的坐标,坐标相对于文档. .offset() 这个不接受任何参数. var offset = p.offset(); // ...

随机推荐

  1. 机器学习——随机森林,RandomForestClassifier参数含义详解

    1.随机森林模型 clf = RandomForestClassifier(n_estimators=200, criterion='entropy', max_depth=4) rf_clf = c ...

  2. 前端笔记之JavaScript面向对象(三)初识ES6&underscore.js&EChart.js&设计模式&贪吃蛇开发

    一.ES6语法 ES6中对数组新增了几个函数:map().filter().reduce() ES5新增的forEach(). 都是一些语法糖. 1.1 forEach()遍历数组 forEach() ...

  3. SOFARPC源码解析-搭建环境

    文档地址:https://www.sofastack.tech 简介摘要 SOFA 是蚂蚁金服自主研发的金融级分布式中间件,包含构建金融级云原生架构所需的各个组件,包括微服务研发框架,RPC 框架,服 ...

  4. 企业级自动化运维工具---puppet详解

    本文收录在Linux运维企业架构实战系列 1.认识puppet 1.1 引入 puppet是什么,咱们先不用专业的名词解释它,咱们先描述一些工作场景,看明白这些工作场景,自然会知道puppet是什么. ...

  5. 痞子衡嵌入式:开启NXP-MCUBootUtility工具的HAB加密功能 - CST(中英双语)

    1 Reason for enabling HAB encryption function 为什么要开启HAB加密功能 NXP-MCUBootUtility is a tool designed fo ...

  6. C# Net MVC 大文件下载几种方式、支持速度限制、资源占用小

    上一篇我们说到大文件的分片下载.断点续传.秒传,有的博友就想看分片下载,我们也来总结一下下载的几种方式,写的比较片面,大家见谅^_^. 下载方式: 1.html超链接下载: 2.后台下载(四种方法:返 ...

  7. chrome主页被篡改为hao123 win10系统

    应该是开了个从流氓网站下的蓝灯,然后发现主页被篡改 尝试chrome设置修改无效,应该是快捷方式被改了 系统 win10 1.打开对应的下面两个地址,找到chrome的快捷方式,右键属性 C:\Use ...

  8. 基于ElasticStack数据分析应用系统

    1.Elasticsearch Elasticsearch 基于java,是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自 ...

  9. Git日常须知

    基本操作: git init 初始化环境 git add . 管理文件 git status 查看状态 git diff 文件名 查看修改内容 git commit -m '' 提交文件 git lo ...

  10. iOS---------获取当前年份

    NSDate *  senddate=[NSDate date]; NSDateFormatter  *dateformatter=[[NSDateFormatter alloc] init]; [d ...