如何在Flutter小部件上模拟点击事件?
例如,如何模拟在Tabbar标题上的点击?更重要的是,我如何首先找到小部件?请注意,我不想调用相关的回调,也不想使用Flutter测试类来测试窗口小部件,但我想模拟运行时在窗口小部件上的轻敲。
编辑1:(请注意)我不想测试一个小部件或调用分配给GestureDetector.onTap或RaisedButton.onPressed等的方法...
use*_*613 10
用于GestureBinding模拟屏幕上任意位置的单击事件。
例如:
GestureBinding.instance.handlePointerEvent(
PointerDownEvent(position: Offset(200, 300)),
)
Run Code Online (Sandbox Code Playgroud)
完整示例:
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'),
),
],
),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
首先,获得一个RenderBox. 然后只需调用hitTest方法。任何都可以,只要它安装在树上。
为此,您必须使用BuildContextthrough context.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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1181 次 |
| 最近记录: |