onGetNodeForLocation method
void
onGetNodeForLocation(
- int? id,
- Map<String, dynamic> params
)
Implementation
void onGetNodeForLocation(int? id, Map<String, dynamic> params) {
if (DebugFlags.enableDevToolsLogs) {
devToolsLogger.finer('[DevTools] DOM.getNodeForLocation x=${params['x']} y=${params['y']}');
}
int x = params['x'];
int y = params['y'];
// Check if controller is attached to Flutter
final ctx = dbgContext;
if (ctx != null && !ctx.isFlutterAttached) {
// Return null if controller is not attached
sendToFrontend(id, null);
return;
}
if (document == null) {
sendToFrontend(id, null);
return;
}
RenderBox rootRenderObject = document!.viewport!;
BoxHitTestResult result = BoxHitTestResult();
rootRenderObject.hitTest(result,
position: Offset(x.toDouble(), y.toDouble()));
var hitPath = result.path;
if (hitPath.isEmpty) {
sendToFrontend(id, null);
return;
}
// find real img element.
if (hitPath.first.target is WebFRenderImage ||
((hitPath.first.target as RenderBoxModel)
.renderStyle
.target
.pointer ==
null)) {
hitPath = hitPath.skip(1);
}
if (hitPath.isNotEmpty && hitPath.first.target is RenderBoxModel) {
RenderObject lastHitRenderBoxModel =
result.path.first.target as RenderObject;
if (lastHitRenderBoxModel is RenderBoxModel && dbgContext != null) {
int targetId = dbgContext!
.forDevtoolsNodeId(lastHitRenderBoxModel.renderStyle.target);
sendToFrontend(
id,
JSONEncodableMap({
'backendId': targetId,
'frameId': DEFAULT_FRAME_ID,
'nodeId': targetId,
}));
} else {
sendToFrontend(id, null);
}
} else {
sendToFrontend(id, null);
}
}