diff --git a/covas_mobile/lib/classes/ad_helper.dart b/covas_mobile/lib/classes/ad_helper.dart index 92ac812..61bd66c 100644 --- a/covas_mobile/lib/classes/ad_helper.dart +++ b/covas_mobile/lib/classes/ad_helper.dart @@ -2,37 +2,26 @@ import 'package:google_mobile_ads/google_mobile_ads.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart'; class AdHelper { - static BannerAd? bannerAd; - static bool isBannerAdLoaded = false; - - static Future loadBannerAd(Function setStateCallback) async { + static Future createBannerAd(Function setStateCallback) async { await dotenv.load(fileName: ".env"); final adUnitId = dotenv.env['AD_UNIT_ID'] ?? ''; - bannerAd = BannerAd( - adUnitId: adUnitId, // Replace with actual ID + BannerAd bannerAd = BannerAd( + adUnitId: adUnitId, size: AdSize.banner, request: AdRequest(), listener: BannerAdListener( onAdLoaded: (ad) { - setStateCallback(() { - isBannerAdLoaded = true; - }); + setStateCallback(() {}); }, onAdFailedToLoad: (ad, error) { print('Banner Ad failed to load: $error'); - isBannerAdLoaded = false; ad.dispose(); }, ), ); - bannerAd?.load(); - } - - static void disposeAd() { - bannerAd?.dispose(); - bannerAd = null; - isBannerAdLoaded = false; + bannerAd.load(); + return bannerAd; } } diff --git a/covas_mobile/lib/main.dart b/covas_mobile/lib/main.dart index 87b78d0..1d4665a 100644 --- a/covas_mobile/lib/main.dart +++ b/covas_mobile/lib/main.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:http/http.dart' as http; -import 'classes/ad_helper.dart'; import 'dart:convert'; -import 'package:flutter_dotenv/flutter_dotenv.dart'; + +import 'classes/ad_helper.dart'; import 'package:google_mobile_ads/google_mobile_ads.dart'; import 'dart:io'; @@ -39,6 +39,7 @@ class LoginDemo extends StatefulWidget { } class _LoginDemoState extends State with ShowAlertDialog { + BannerAd? _bannerAd; TextEditingController inputPseudo = TextEditingController(); TextEditingController inputPassword = TextEditingController(); Future _login(BuildContext context) async { @@ -134,18 +135,16 @@ class _LoginDemoState extends State with ShowAlertDialog { @override void initState() { super.initState(); - AdHelper.loadBannerAd(setState); + AdHelper.createBannerAd(() => setState(() {})).then((ad) { + setState(() { + _bannerAd = ad; + }); + }); _checkLocationPermission(); start(); } - @override - void dispose() { - AdHelper.disposeAd(); // Dispose of ad when the widget is removed - super.dispose(); - } - Future _checkLocationPermission() async { PermissionStatus status = await Permission.location.status; @@ -196,6 +195,13 @@ class _LoginDemoState extends State with ShowAlertDialog { body: SingleChildScrollView( child: Column( children: [ + _bannerAd == null + ? SizedBox.shrink() + : SizedBox( + height: _bannerAd!.size.height.toDouble(), + width: _bannerAd!.size.width.toDouble(), + child: AdWidget(ad: _bannerAd!), + ), Padding( padding: const EdgeInsets.only(top: 60.0), child: Center( @@ -266,12 +272,6 @@ class _LoginDemoState extends State with ShowAlertDialog { Navigator.push( context, MaterialPageRoute(builder: (_) => AddProfile())); }), - if (AdHelper.isBannerAdLoaded) - SizedBox( - height: AdHelper.bannerAd!.size.height.toDouble(), - width: AdHelper.bannerAd!.size.width.toDouble(), - child: AdWidget(ad: AdHelper.bannerAd!), - ), ], ), ), diff --git a/covas_mobile/lib/pages/ListItemMenu.dart b/covas_mobile/lib/pages/ListItemMenu.dart index b4105b8..58f1b1f 100644 --- a/covas_mobile/lib/pages/ListItemMenu.dart +++ b/covas_mobile/lib/pages/ListItemMenu.dart @@ -16,7 +16,12 @@ import 'package:permission_handler/permission_handler.dart'; import "Camera.dart"; import 'package:camera/camera.dart'; -void main() { +import '../classes/ad_helper.dart'; +import 'package:google_mobile_ads/google_mobile_ads.dart'; + +void main() async { + WidgetsFlutterBinding.ensureInitialized(); + await MobileAds.instance.initialize(); initializeDateFormatting("fr_FR", null).then((_) => runApp(const MyApp())); } @@ -40,6 +45,8 @@ class ListItemMenu extends StatefulWidget { } class _MyHomePageState extends State { + BannerAd? _bannerAd; + Future> postsFuture = getPosts(); List filteredPosts = []; String geographicalZone = ''; @@ -138,6 +145,11 @@ class _MyHomePageState extends State { @override void initState() { super.initState(); + AdHelper.createBannerAd(() => setState(() {})).then((ad) { + setState(() { + _bannerAd = ad; + }); + }); // Initialize data fetch when the page loads _getCurrentLocation(); } @@ -543,6 +555,13 @@ class _MyHomePageState extends State { drawer: MyDrawer(), body: Column( children: [ + _bannerAd == null + ? SizedBox.shrink() + : SizedBox( + height: _bannerAd!.size.height.toDouble(), + width: _bannerAd!.size.width.toDouble(), + child: AdWidget(ad: _bannerAd!), + ), if (showInputSearch) _buildSearchField( controller: inputItem,