【问题标题】:Flutter: Get the local position from the GestureDetectorFlutter:从 GestureDetector 获取本地位置
【发布时间】:2017-11-13 19:45:27
【问题描述】:

我正在使用 GestureDetector 来获取此事件:

onHorizontalDragStart: _onDragStart,
onHorizontalDragUpdate: _onDragUpdate,

但是如何将全局位置转换为本地位置?被移动的孩子是一个容器。

【问题讨论】:

    标签: flutter


    【解决方案1】:

    您可以使用RenderObject,然后将全局位置转换为类似于以下简单示例的本地位置:

    import "package:flutter/material.dart";
    
    class Test extends StatefulWidget {
      @override
      _TestState createState() => new _TestState();
    }
    
    class _TestState extends State<Test> {
      _onDragStart(BuildContext context, DragStartDetails start) {
        print(start.globalPosition.toString());
        RenderBox getBox = context.findRenderObject();
        var local = getBox.globalToLocal(start.globalPosition);
        print(local.dx.toString() + "|" + local.dy.toString());
      }
    
      _onDragUpdate(BuildContext context, DragUpdateDetails update) {
        //print(update.globalPosition.toString());
        RenderBox getBox = context.findRenderObject();
        var local = getBox.globalToLocal(update.globalPosition);
        //print(local.dx.toString() + "|" + local.dy.toString());
      }
    
      @override
      Widget build(BuildContext context) {
        return new Scaffold(
          body: new Center(
            child: new GestureDetector(
              child: new Text("Drag"),
              onHorizontalDragStart: (DragStartDetails start) =>
                  _onDragStart(context, start),
              onHorizontalDragUpdate: (DragUpdateDetails update) =>
                  _onDragUpdate(context, update),
            ),
          ),
        );
      }
    }
    

    【讨论】:

    • 完美渲染框 getBox = context.findRenderObject();
    • 请记住,这将在构建方法期间起作用。如果你想知道如何在构建过程中做类似的事情,你可以使用LayoutBuilder
    • 是的,findRenderObject 只有在布局阶段之后才有效。再次感谢。
    • 这种方式和使用DragStartDetails.localPosition有什么区别?
    • @PeterBruins 全局方法从上下文开始给出位置,DragStartDetails.localPosition 从 DragStart 点给出位置
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    • 2020-11-23
    相关资源
    最近更新 更多