showBannerAds function

dynamic showBannerAds({
  1. int pos = 0,
  2. int retry = 0,
  3. AdSize size = AdSize.banner,
  4. EdgeInsetsGeometry? margin,
  5. Decoration? decoration,
  6. dynamic onAdLoadedCallback(
    1. Widget
    )?,
  7. Function? onAdFailedToLoadCallback,
})

Implementation

showBannerAds(
    {int pos = 0,
    int retry = 0,
    AdSize size = AdSize.banner,
    EdgeInsetsGeometry? margin,
    Decoration? decoration,
    Function(Widget)? onAdLoadedCallback,
    Function? onAdFailedToLoadCallback}) async {
  if (_settings == null ||
      (_settings?.adSetting?.appVersionCode == appVersionCode) ||
      (_settings?.bannerAdsSequence?.isEmpty ?? true) ||
      (_settings?.isAllAds != true)) {
    if (onAdFailedToLoadCallback != null) {
      onAdFailedToLoadCallback();
    }
    return;
  }

  if ((_settings?.bannerAdsSequence?.length ?? 0) <= pos) {
    if ((_settings?.adSetting?.adsRetry ?? 0) > 0 &&
        (_settings?.adSetting?.adsRetry ?? 0) > retry) {
      pos = 0;
      retry++;
    } else {
      resetTimerDelayed();
      if (onAdFailedToLoadCallback != null) {
        onAdFailedToLoadCallback();
      }
      return;
    }
  }

  incrementBannerSequence().then((value) {
    currentBannerSequence(pos).then((curSeqBanner) {
      pos = curSeqBanner % (_settings?.bannerAdsSequence?.length ?? 0);
      var ads_json = _getCurSeqData(_settings?.bannerAdsSequence, pos);
      var seqName =
          ads_json.containsKey("seq_name") ? ads_json["seq_name"] : "";

      switch (seqName) {
        case _GOOGLEAD:
          GoogleAds ads = GoogleAds.fromJson(ads_json["json"]);

          if ((ads.isBannerAds ?? false) && (ads.bannerId ?? "").isNotEmpty) {
            BannerAd(
                    size: size,
                    adUnitId: ads.bannerId ?? "",
                    listener: BannerAdListener(
                      onAdLoaded: (Ad ad) {
                        if (onAdLoadedCallback != null && ad is AdWithView) {
                          onAdLoadedCallback(Container(
                            width: size.width.toDouble(),
                            height: size.height.toDouble(),
                            margin: margin,
                            decoration: decoration,
                            child: AdWidget(ad: ad),
                          ));
                        }
                      },
                      onAdFailedToLoad: (Ad ad, LoadAdError error) {
                        ad.dispose();
                        showBannerAds(
                            retry: retry,
                            pos: pos + 1,
                            size: size,
                            onAdLoadedCallback: onAdLoadedCallback,
                            onAdFailedToLoadCallback: onAdFailedToLoadCallback);
                      },
                      onAdOpened: (Ad ad) {},
                      onAdClosed: (Ad ad) {},
                    ),
                    request: _request)
                .load();
          } else {
            showBannerAds(
                retry: retry,
                pos: pos + 1,
                size: size,
                onAdLoadedCallback: onAdLoadedCallback,
                onAdFailedToLoadCallback: onAdFailedToLoadCallback);
          }
          break;
        case _ADMANAGERAD:
          GoogleAds ads = GoogleAds.fromJson(ads_json["json"]);
          if ((ads.isBannerAds ?? false) && (ads.bannerId ?? "").isNotEmpty) {
            AdManagerBannerAd(
              adUnitId: ads.bannerId ?? "",
              sizes: <AdSize>[size],
              request: _ad_manager_request,
              listener: AdManagerBannerAdListener(
                onAdLoaded: (Ad ad) async {
                  if (onAdLoadedCallback != null && ad is AdWithView) {
                    onAdLoadedCallback(Container(
                      width: size.width.toDouble(),
                      height: size.height.toDouble(),
                      margin: margin,
                      decoration: decoration,
                      child: AdWidget(ad: ad),
                    ));
                  }
                  // After the ad is loaded, get the platform ad size and use it to
                  // update the height of the container. This is necessary because the
                  // height can change after the ad is loaded.

                  /* AdManagerBannerAd bannerAd = (ad as AdManagerBannerAd);
              final AdSize? size = await bannerAd.getPlatformAdSize();

              if (size == null) {
                return;
              }*/
                },
                onAdFailedToLoad: (Ad ad, LoadAdError error) {
                  ad.dispose();
                  // _adManagerBannerAd = null;
                  showBannerAds(
                      retry: retry,
                      pos: pos + 1,
                      size: size,
                      onAdLoadedCallback: onAdLoadedCallback,
                      onAdFailedToLoadCallback: onAdFailedToLoadCallback);
                },
              ),
            ).load();
          } else {
            showBannerAds(
                retry: retry,
                pos: pos + 1,
                size: size,
                onAdLoadedCallback: onAdLoadedCallback,
                onAdFailedToLoadCallback: onAdFailedToLoadCallback);
          }
          break;
        case _APPLOVINAD:
          AppLovin ads = AppLovin.fromJson(ads_json["json"]);
          if ((ads.isBannerAds ?? false) && (ads.bannerId ?? "").isNotEmpty) {
            AppLovinBannerAd(
              adUnitId: size.height < 250
                  ? (ads.bannerId ?? "")
                  : ((ads.mrecId ?? "").isNotEmpty
                      ? (ads.mrecId ?? "")
                      : (ads.bannerId ?? "")),
              size: size,
              listener: BannerAdListener(
                onAdLoaded: (Ad ad) async {
                  if (onAdLoadedCallback != null && ad is AdWithView) {
                    onAdLoadedCallback(Container(
                      width: size.width.toDouble(),
                      height: size.height.toDouble(),
                      margin: margin,
                      decoration: decoration,
                      child: AdWidget(ad: ad),
                    ));
                  }
                },
                onAdFailedToLoad: (Ad ad, LoadAdError error) {
                  ad.dispose();
                  showBannerAds(
                      retry: retry,
                      pos: pos + 1,
                      size: size,
                      onAdLoadedCallback: onAdLoadedCallback,
                      onAdFailedToLoadCallback: onAdFailedToLoadCallback);
                },
              ),
            ).load();
          } else {
            showBannerAds(
                retry: retry,
                pos: pos + 1,
                size: size,
                onAdLoadedCallback: onAdLoadedCallback,
                onAdFailedToLoadCallback: onAdFailedToLoadCallback);
          }
          break;
        case _FACEBOOKAD:
          FacebookAd ads = FacebookAd.fromJson(ads_json["json"]);
          if ((ads.isBannerAds ?? false) && (ads.bannerId ?? "").isNotEmpty) {
            FacebookBannerAd(
              adUnitId: ads.bannerId ?? "",
              size: size,
              listener: BannerAdListener(
                onAdLoaded: (Ad ad) async {
                  if (onAdLoadedCallback != null && ad is AdWithView) {
                    onAdLoadedCallback(Container(
                      width: size.width.toDouble(),
                      height: size.height.toDouble(),
                      margin: margin,
                      decoration: decoration,
                      child: AdWidget(ad: ad),
                    ));
                  }
                },
                onAdFailedToLoad: (Ad ad, LoadAdError error) {
                  ad.dispose();
                  showBannerAds(
                      retry: retry,
                      pos: pos + 1,
                      size: size,
                      onAdLoadedCallback: onAdLoadedCallback,
                      onAdFailedToLoadCallback: onAdFailedToLoadCallback);
                },
              ),
            ).load();
          } else {
            showBannerAds(
                retry: retry,
                pos: pos + 1,
                size: size,
                onAdLoadedCallback: onAdLoadedCallback,
                onAdFailedToLoadCallback: onAdFailedToLoadCallback);
          }
          break;
        case _CUSTOMAD:
          CustomAds ads = CustomAds.fromJson(ads_json["json"]);
          if ((ads.isQurakaBanner ?? false) &&
              (ads.qurakaBannerImage?.isNotEmpty ?? false)) {
            final adUnitId = (ads.qurakaBannerImage?..shuffle())?.first ?? "";

            CustomBannerAd(
              adUnitId: adUnitId,
              size: size,
              listener: BannerAdListener(onAdLoaded: (Ad ad) async {
                if (onAdLoadedCallback != null && ad is AdWithView) {
                  onAdLoadedCallback(Container(
                    width: size.width.toDouble(),
                    height: size.height.toDouble(),
                    margin: margin,
                    decoration: decoration,
                    child: AdWidget(ad: ad),
                  ));
                }
              }, onAdFailedToLoad: (Ad ad, LoadAdError error) {
                ad.dispose();
                showBannerAds(
                    retry: retry,
                    pos: pos + 1,
                    size: size,
                    onAdLoadedCallback: onAdLoadedCallback,
                    onAdFailedToLoadCallback: onAdFailedToLoadCallback);
              }, onAdClicked: (Ad ad) {
                launchURL(ads.qurekaLink ?? "");
              }),
            ).load();
          } else {
            showBannerAds(
                retry: retry,
                pos: pos + 1,
                size: size,
                onAdLoadedCallback: onAdLoadedCallback,
                onAdFailedToLoadCallback: onAdFailedToLoadCallback);
          }
          break;
        default:
          showBannerAds(
              retry: retry,
              pos: pos + 1,
              size: size,
              onAdLoadedCallback: onAdLoadedCallback,
              onAdFailedToLoadCallback: onAdFailedToLoadCallback);
          break;
      }
    });
  });
}