Flutter 点击生成 Widget:使用 GestureDetector 和 Overlay
要在点击的位置生成一个 Widget,可以使用GestureDetector和Overlay来实现。
首先,使用GestureDetector来监听点击事件。在点击事件回调中,可以获取到点击位置的坐标。然后,使用Overlay来创建一个覆盖整个屏幕的容器,将要生成的 Widget 添加到该容器中,并设置其位置为点击位置。
下面是一个示例代码:
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Demo'),
),
body: GestureDetector(
onTapDown: (details) {
// 获取点击位置的坐标
final RenderBox box = context.findRenderObject();
final Offset localOffset = box.globalToLocal(details.globalPosition);
// 创建一个 OverlayEntry
OverlayEntry entry = OverlayEntry(
builder: (context) => Positioned(
left: localOffset.dx,
top: localOffset.dy,
child: Container(
width: 50,
height: 50,
color: Colors.red,
),
),
);
// 将 OverlayEntry 添加到 Overlay 中
Overlay.of(context).insert(entry);
},
child: Container(
width: double.infinity,
height: double.infinity,
),
),
);
}
}
在上面的代码中,我们在GestureDetector的onTapDown回调中创建了一个OverlayEntry,并将其添加到Overlay中。OverlayEntry的builder参数用于构建要添加的 Widget,这里我们简单地创建了一个红色的正方形。Positioned用于设置 Widget 的位置,其中left和top分别对应点击位置的横坐标和纵坐标。
原文地址: https://www.cveoy.top/t/topic/mJiX 著作权归作者所有。请勿转载和采集!