gpt4 book ai didi

dart - 如何计算Flutter中的触摸坐标?

转载 作者:IT王子 更新时间:2023-10-29 06:35:57 27 4
gpt4 key购买 nike

我想在触摸坐标处显示一个弹出窗口。我正在使用 Stack 和 Positioned 小部件来放置弹出窗口。

最佳答案

您可以添加 GestureDetector作为堆栈的父级,并注册 onTapDownDetails 监听器。这应该在每个点击事件上调用您的监听器,并在 TapDownDetails 中使用全局偏移量。听众的参数。

这是演示相同内容的示例代码。

import 'package:flutter/material.dart';

void main() {
runApp(new MyApp());
}

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Demo',
home: new MyHomePage(),
);
}
}

class MyHomePage extends StatefulWidget {
@override
MyHomePageState createState() => new MyHomePageState();
}

class MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text('Popup Demo'),
),
body: new MyWidget());
}
}

class MyWidget extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return new MyWidgetState();
}
}

class MyWidgetState extends State<MyWidget> {
double posx = 100.0;
double posy = 100.0;

void onTapDown(BuildContext context, TapDownDetails details) {
print('${details.globalPosition}');
final RenderBox box = context.findRenderObject();
final Offset localOffset = box.globalToLocal(details.globalPosition);
setState(() {
posx = localOffset.dx;
posy = localOffset.dy;
});
}

@override
Widget build(BuildContext context) {
return new GestureDetector(
onTapDown: (TapDownDetails details) => onTapDown(context, details),
child: new Stack(fit: StackFit.expand, children: <Widget>[
// Hack to expand stack to fill all the space. There must be a better
// way to do it.
new Container(color: Colors.white),
new Positioned(
child: new Text('hello'),
left: posx,
top: posy,
)
]),
);
}
}

关于dart - 如何计算Flutter中的触摸坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46560982/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com