dart 如何在Flutter小部件上模拟点击事件?

44u64gxh  于 2023-11-14  发布在  Flutter
关注(0)|答案(2)|浏览(268)

如何在Flutter小部件上模拟点击事件?
例如,我如何模拟点击标签栏标题?更重要的是,我如何在第一时间找到小部件?请注意,我不想调用相关的回调函数,也不想使用Flutter测试类测试小部件,但我想在运行时模拟点击小部件。
编辑1:(请注意)我不想测试一个小部件或调用一个方法,分配给一个GestureDetector.onTap或RaisedButton.onPressed等.

8dtrkrch

8dtrkrch1#

首先,获取一个RenderBox。然后调用hitTest方法。任何方法都可以,只要它被挂载在树中。
为此,您必须使用BuildContextcontext.findRenderObject()

BuildContext context;

final renderObj = context.findRenderObject();
if (renderObj is RenderBox) {
  final hitTestResult = HitTestResult();
  if (renderObj.hitTest(hitTestResult, position:  /* The offset where you want to "tap" */)) {
    // a descendant of `renderObj` got tapped
    print(hitTestResult.path);
  }
}

字符串

cbjzeqam

cbjzeqam2#

使用GestureBinding模拟屏幕上任何位置的单击事件。
举例来说:

GestureBinding.instance.handlePointerEvent(
    PointerDownEvent(position: Offset(200, 300)),
)

字符串


的数据
完整示例:

import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Column(
          children: [
            ElevatedButton(
              onPressed: () {},
              style: ElevatedButton.styleFrom(
                backgroundColor: Colors.red[900],
              ),
              child: const SizedBox(
                width: 400,
                height: 400,
                child: Center(child: Text("I'm a big button.")),
              ),
            ),
            ElevatedButton(
              onPressed: () async {
                GestureBinding.instance
                    .handlePointerEvent(const PointerDownEvent(
                  position: Offset(200, 300),
                ));
                await Future.delayed(const Duration(milliseconds: 500));
                GestureBinding.instance
                    .handlePointerEvent(const PointerUpEvent(
                  position: Offset(200, 300),
                ));
              },
              child: const Text('Simulate Click'),
            ),
          ],
        ),
      ),
    );
  }
}

相关问题