handle method
Implementation
@override
Future<dynamic> handle(MethodCall call) async {
NLogger.i('Capturing target details, arguments: ${call.arguments}');
final String label = call.arguments['LABEL'];
final num screenHeight = call.arguments['SCREEN_HEIGHT'];
final num screenWidth = call.arguments['SCREEN_WIDTH'];
final num? statusBarHeight = call.arguments['STATUS_BAR_HEIGHT'];
var devicePixelRatio = call.arguments["DPR"];
NLogger.i('Searching for target with label: $label');
NLogger.d(
'Screen height: $screenHeight, Screen width: $screenWidth, status bar height: $statusBarHeight',
);
BuildContext? context = Nudge.nudgeNavigatorKey.currentContext;
if (context == null) {
NLogger.e('Nudge navigator key is null');
return {'success': false};
}
// Use MediaQuery to get the initial size of the screen
// This is a workaround to ensure we get the correct screen size
Size initialSize = MediaQuery.of(context).size;
NLogger.d(
'Initial MediaQuery size using navigatorKey: $initialSize (Width: ${initialSize.width}, Height: ${initialSize.height})',
);
// Size? size = MediaQuery.maybeOf(context)?.size;
Size size = getScreenSize();
NLogger.d(
'Initial MediaQuery size: $size (Width: ${size.width}, Height: ${size.height}) ::: getScreenSize',
);
if (defaultTargetPlatform == TargetPlatform.iOS) {
final num? height = call.arguments['HEIGHT'];
final num? width = call.arguments['WIDTH'];
NLogger.d(
'iOS specific size: Width: $width, Height: $height',
);
size = Size(
width?.toDouble() ?? size.width,
height?.toDouble() ?? size.height,
);
}
BuildContext? mediaQueryContext = Nudge.currentContext
?.findAncestorStateOfType<NavigatorState>()
?.context;
if (mediaQueryContext != null) {
Size mediaQuerySize = MediaQuery.of(mediaQueryContext).size;
NLogger.d(
'MediaQuery size from currentContext: $mediaQuerySize (Width: ${mediaQuerySize.width}, Height: ${mediaQuerySize.height})',
);
} else {
NLogger.e('MediaQuery context is null, using default size');
}
NLogger.d(
'Final MediaQuery size: $size (Width: ${size.width}, Height: ${size.height})',
);
if (size == Size.zero) {
// hideNudgeOverlay();
NLogger.e('Screen size is zero, cannot proceed');
// NudgeCoreV2NativeServices().invokeNativeMethod('sendComponentFailed', {});
return {'success': false};
}
final num scaleX = screenWidth / size.width;
final num scaleY = screenHeight / size.height;
// final num scaleX = 720 / size.width;
// final num scaleY = 1600 / size.height;
NLogger.d(
'Scale X: $scaleX, Scale Y: $scaleY, Device Pixel Ratio: $devicePixelRatio',
);
final Map<String, dynamic> targetDetails =
await NudgeWidgetTracker.nativeFindWidgetPositionByLabel(
label: label,
scaleX: defaultTargetPlatform == TargetPlatform.iOS
? scaleX
: devicePixelRatio,
scaleY: defaultTargetPlatform == TargetPlatform.iOS
? scaleY
: devicePixelRatio,
statusBarHeight: 0,
screenSize: size,
);
if (targetDetails['result']) {
NLogger.i('Target found: $targetDetails');
final Map<String, dynamic> response = {
'message_type': 'SEND_TARGET_DETAILS',
'data': targetDetails,
};
try {
await NudgeCoreV2NativeServices().sendTargetDetails(response);
return {
'success': true,
};
} catch (e) {
NLogger.e('Error sending target details: $e');
// NudgeCoreV2NativeServices()
// .invokeNativeMethod('sendComponentFailed', {});
return {'success': false};
}
} else {
NLogger.i(
'Target not found, please ensure that the widget exists on the screen',
);
// NudgeCoreV2NativeServices().invokeNativeMethod('sendComponentFailed', {});
return {'success': false};
}
}