要在点击的位置生成一个 Widget,可以使用GestureDetectorOverlay来实现。

首先,使用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,
        ),
      ),
    );
  }
}

在上面的代码中,我们在GestureDetectoronTapDown回调中创建了一个OverlayEntry,并将其添加到Overlay中。OverlayEntrybuilder参数用于构建要添加的 Widget,这里我们简单地创建了一个红色的正方形。Positioned用于设置 Widget 的位置,其中lefttop分别对应点击位置的横坐标和纵坐标。


原文地址: https://www.cveoy.top/t/topic/mJiX 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录