热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

flutter:获取手势检测器的本地位置

如何解决《flutter:获取手势检测器的本地位置》经验,为你挑选了1个好方法。

我使用平移更新无法在手势检测器小部件上获取实际的本地位置

这是我的示例代码

new Center(    
  child new Container(
       height: 150.0,
       width: 150.0,
       decoration: new BoxDecoration(
         borderRadius: new BorderRadius.circular(5.0),
         color: Colors.white,
      ),
      child: new GestureDetector(
      onPanUpdate: (details) => onPanUpdate(context, details),
      child: new CustomPaint(
         painter: new MyPainter(
             points: points,
             limitBottom:height - 125.0,
             limitTop: 10.0,
             limitLeft: 5.0,
             limitRight: width - 55.0
         ),
       ),
    ),
  ),  
)

当我打印全局位置和本地位置的偏移量时,它们两个的值相同。结果是它被绘制在我的Container小部件外部。有什么我想得到的本地职位吗?



1> rmtmckenzie..:

我假设您正在使用类似的方法来获取本地位置:

RenderBox getBox = context.findRenderObject();
var local = getBox.globalToLocal(start.globalPosition);

这样做之后得到错误偏移的原因与context您用来查找本地位置的原因有关。

如果您使用的是整个窗口小部件的上下文,那么实际上,您要做的就是计算整个窗口小部件内的偏移量。即

YourWidget <-- context
  Center
   Container
     GestureDetector
     ...

假设屏幕看起来像这样:

1__________________________   
|                          |  <--- YourWidget
|       2_________         |
|       | gesture |        |
|       | detector|        |
|       |   3.    |        |
|       |_________|        |
|                          |
|__________________________|

其中1是整个小部件(和屏幕)的左上角,2是手势检测器的左上角,3是您点击的点。

通过使用YourWidget的上下文,您将基于1和3之间的差值来计算分接头的位置。如果1恰好位于屏幕的左上方,则结果将与全局坐标匹配。

通过将上下文用于手势检测器,您可以测量2到3之间的距离,这将为您提供所需的偏移量。

有两种方法可以解决此问题-您可以将GestureDetector包装在Builder窗口小部件中,或者可以创建仅封装GestureDetector的新的有状态/无状态小部件。我个人建议创建一个新的小部件。


推荐阅读
author-avatar
小song喪_774
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有