feature/publicite #37

Merged
v4l3n71n merged 5 commits from feature/publicite into main 2025-02-23 21:20:25 +00:00
3 changed files with 41 additions and 33 deletions
Showing only changes of commit 729e0ce1ca - Show all commits

View File

@ -2,37 +2,26 @@ import 'package:google_mobile_ads/google_mobile_ads.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart';
class AdHelper { class AdHelper {
static BannerAd? bannerAd; static Future<BannerAd> createBannerAd(Function setStateCallback) async {
static bool isBannerAdLoaded = false;
static Future<void> loadBannerAd(Function setStateCallback) async {
await dotenv.load(fileName: ".env"); await dotenv.load(fileName: ".env");
final adUnitId = dotenv.env['AD_UNIT_ID'] ?? ''; final adUnitId = dotenv.env['AD_UNIT_ID'] ?? '';
bannerAd = BannerAd( BannerAd bannerAd = BannerAd(
adUnitId: adUnitId, // Replace with actual ID adUnitId: adUnitId,
size: AdSize.banner, size: AdSize.banner,
request: AdRequest(), request: AdRequest(),
listener: BannerAdListener( listener: BannerAdListener(
onAdLoaded: (ad) { onAdLoaded: (ad) {
setStateCallback(() { setStateCallback(() {});
isBannerAdLoaded = true;
});
}, },
onAdFailedToLoad: (ad, error) { onAdFailedToLoad: (ad, error) {
print('Banner Ad failed to load: $error'); print('Banner Ad failed to load: $error');
isBannerAdLoaded = false;
ad.dispose(); ad.dispose();
}, },
), ),
); );
bannerAd?.load(); bannerAd.load();
} return bannerAd;
static void disposeAd() {
bannerAd?.dispose();
bannerAd = null;
isBannerAdLoaded = false;
} }
} }

View File

@ -1,9 +1,9 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
import 'classes/ad_helper.dart';
import 'dart:convert'; 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 'package:google_mobile_ads/google_mobile_ads.dart';
import 'dart:io'; import 'dart:io';
@ -39,6 +39,7 @@ class LoginDemo extends StatefulWidget {
} }
class _LoginDemoState extends State<LoginDemo> with ShowAlertDialog { class _LoginDemoState extends State<LoginDemo> with ShowAlertDialog {
BannerAd? _bannerAd;
TextEditingController inputPseudo = TextEditingController(); TextEditingController inputPseudo = TextEditingController();
TextEditingController inputPassword = TextEditingController(); TextEditingController inputPassword = TextEditingController();
Future<void> _login(BuildContext context) async { Future<void> _login(BuildContext context) async {
@ -134,18 +135,16 @@ class _LoginDemoState extends State<LoginDemo> with ShowAlertDialog {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
AdHelper.loadBannerAd(setState); AdHelper.createBannerAd(() => setState(() {})).then((ad) {
setState(() {
_bannerAd = ad;
});
});
_checkLocationPermission(); _checkLocationPermission();
start(); start();
} }
@override
void dispose() {
AdHelper.disposeAd(); // Dispose of ad when the widget is removed
super.dispose();
}
Future<void> _checkLocationPermission() async { Future<void> _checkLocationPermission() async {
PermissionStatus status = await Permission.location.status; PermissionStatus status = await Permission.location.status;
@ -196,6 +195,13 @@ class _LoginDemoState extends State<LoginDemo> with ShowAlertDialog {
body: SingleChildScrollView( body: SingleChildScrollView(
child: Column( child: Column(
children: <Widget>[ children: <Widget>[
_bannerAd == null
? SizedBox.shrink()
: SizedBox(
height: _bannerAd!.size.height.toDouble(),
width: _bannerAd!.size.width.toDouble(),
child: AdWidget(ad: _bannerAd!),
),
Padding( Padding(
padding: const EdgeInsets.only(top: 60.0), padding: const EdgeInsets.only(top: 60.0),
child: Center( child: Center(
@ -266,12 +272,6 @@ class _LoginDemoState extends State<LoginDemo> with ShowAlertDialog {
Navigator.push( Navigator.push(
context, MaterialPageRoute(builder: (_) => AddProfile())); 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!),
),
], ],
), ),
), ),

View File

@ -16,7 +16,12 @@ import 'package:permission_handler/permission_handler.dart';
import "Camera.dart"; import "Camera.dart";
import 'package:camera/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())); initializeDateFormatting("fr_FR", null).then((_) => runApp(const MyApp()));
} }
@ -40,6 +45,8 @@ class ListItemMenu extends StatefulWidget {
} }
class _MyHomePageState extends State<ListItemMenu> { class _MyHomePageState extends State<ListItemMenu> {
BannerAd? _bannerAd;
Future<List<Events>> postsFuture = getPosts(); Future<List<Events>> postsFuture = getPosts();
List<Events> filteredPosts = []; List<Events> filteredPosts = [];
String geographicalZone = ''; String geographicalZone = '';
@ -138,6 +145,11 @@ class _MyHomePageState extends State<ListItemMenu> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
AdHelper.createBannerAd(() => setState(() {})).then((ad) {
setState(() {
_bannerAd = ad;
});
});
// Initialize data fetch when the page loads // Initialize data fetch when the page loads
_getCurrentLocation(); _getCurrentLocation();
} }
@ -543,6 +555,13 @@ class _MyHomePageState extends State<ListItemMenu> {
drawer: MyDrawer(), drawer: MyDrawer(),
body: Column( body: Column(
children: [ children: [
_bannerAd == null
? SizedBox.shrink()
: SizedBox(
height: _bannerAd!.size.height.toDouble(),
width: _bannerAd!.size.width.toDouble(),
child: AdWidget(ad: _bannerAd!),
),
if (showInputSearch) if (showInputSearch)
_buildSearchField( _buildSearchField(
controller: inputItem, controller: inputItem,