trackCheckoutSuccess method

Future<RelevaResponse> trackCheckoutSuccess({
  1. String? screenToken,
  2. String? pageUrl,
  3. required Cart orderedCart,
  4. String? userEmail,
  5. String? userPhoneNumber,
  6. String? userFirstName,
  7. String? userLastName,
  8. DateTime? userRegisteredAt,
  9. String? locale,
  10. String? currency,
})

Implementation

Future<RelevaResponse> trackCheckoutSuccess({
  String? screenToken,
  String? pageUrl,
  required Cart orderedCart,
  String? userEmail,
  String? userPhoneNumber,
  String? userFirstName,
  String? userLastName,
  DateTime? userRegisteredAt,
  String? locale,
  String? currency,
}) async {
  if (!_config.enableTracking) {
    return RelevaResponse(recommenders: [], banners: []);
  }

  // Mark cart as changed since we're explicitly tracking a paid cart
  _cartChanged = true;

  final request = CheckoutSuccessRequest(
    screenToken: screenToken,
    orderedCart: orderedCart,
    userEmail: userEmail,
    userPhoneNumber: userPhoneNumber,
    userFirstName: userFirstName,
    userLastName: userLastName,
    userRegisteredAt: userRegisteredAt,
  );

  // Set cart on request (not in storage) so it's sent with this push only
  request.setCart(orderedCart);

  if (pageUrl != null) request.pageUrl(pageUrl);
  if (locale != null) request.locale(locale);
  if (currency != null) request.currency(currency);

  final response = await push(request);

  // After successfully tracking checkout with cartPaid: true,
  // clear cart storage to prevent stale cart data from being sent on subsequent screen views
  // The backend automatically clears the cart after checkout, so we just sync local state
  await clearCartStorage();
  debugPrint('Cart storage automatically cleared after checkout success');

  return response;
}