loadAd method

void loadAd({
  1. String? adUnitId,
  2. AdRequest? request,
  3. VoidCallback? onLoaded,
  4. dynamic onFailedToLoad(
    1. LoadAdError error
    )?,
})

Preloads an App Open Ad with full error and duplicate guards.

Implementation

void loadAd({
  String? adUnitId,
  AdRequest? request,
  VoidCallback? onLoaded,
  Function(LoadAdError error)? onFailedToLoad,
}) {
  if (!AdConstants.isPlatformSupported || !AdsManager.isAdsEnabled) {
    return;
  }

  if (_isLoading || isAdAvailable) {
    if (isAdAvailable) onLoaded?.call();
    return;
  }

  _isLoading = true;
  final effectiveAdUnitId = adUnitId ?? AdConstants.appOpenAdUnitId;

  developer.log(
    'Loading App Open Ad (Unit: $effectiveAdUnitId)...',
    name: 'AppOpenAdManager',
  );

  AppOpenAd.load(
    adUnitId: effectiveAdUnitId,
    request: request ?? const AdRequest(),
    adLoadCallback: AppOpenAdLoadCallback(
      onAdLoaded: (ad) {
        developer.log('App Open Ad loaded successfully.',
            name: 'AppOpenAdManager');
        _appOpenAd = ad;
        _appOpenLoadTime = DateTime.now();
        _isLoading = false;
        AdsManager.emitAdEvent(
          AdEvent(
            format: AdFormat.appOpen,
            type: AdEventType.loaded,
            adUnitId: effectiveAdUnitId,
          ),
        );
        onLoaded?.call();
      },
      onAdFailedToLoad: (error) {
        developer.log(
          'App Open Ad failed to load: ${error.message} (code: ${error.code})',
          name: 'AppOpenAdManager',
        );
        _isLoading = false;
        _appOpenAd = null;
        _appOpenLoadTime = null;
        AdsManager.emitAdEvent(
          AdEvent(
            format: AdFormat.appOpen,
            type: AdEventType.failedToLoad,
            adUnitId: effectiveAdUnitId,
            loadAdError: error,
          ),
        );
        onFailedToLoad?.call(error);
      },
    ),
  );
}