import "dart:ui_web" as ui_web; import "dart:js" as js; import "package:flutter/widgets.dart"; import "package:universal_html/html.dart" as html; import "ad_service.dart"; /// Web implementation of AdSense service class AdSenseService implements AdService { bool _isLoaded = false; static const String _adSlotId = "XXXXXXXXXX"; // Replace with your ad slot ID @override Future initialize() async { // AdSense is loaded via script tag in index.html print("AdSense initialized (web)"); _isLoaded = false; } @override Future loadBannerAd() async { // AdSense ads are loaded automatically when widget renders _isLoaded = false; } @override Widget getBannerWidget() { final viewType = "adsense-banner-${DateTime.now().millisecondsSinceEpoch}"; // Register the view factory // ignore: undefined_prefixed_name ui_web.platformViewRegistry.registerViewFactory( viewType, (int viewId) => _createAdElement(), ); return SizedBox( height: 90, child: HtmlElementView(viewType: viewType), ); } html.Element _createAdElement() { // Create AdSense div final adContainer = html.DivElement() ..style.width = "100%" ..style.height = "90px" ..style.textAlign = "center"; final adElement = html.Element.html(""" """); adContainer.append(adElement); // Push ad using dart:js instead of eval try { final adsbygoogle = js.context["adsbygoogle"]; if (adsbygoogle != null) { adsbygoogle.callMethod("push", [js.JsObject.jsify({})]); } } catch (e) { print("Error pushing AdSense ad: $e"); } return adContainer; } @override void dispose() { _isLoaded = false; } @override bool get isLoaded => _isLoaded; }