BUG: MIH Ad Display Strategy

This commit is contained in:
2025-11-03 11:27:44 +02:00
parent 52f9eb7ba6
commit 1329c8aba4
9 changed files with 47 additions and 52 deletions

View File

@@ -12,10 +12,28 @@ class MihBannerAd extends StatefulWidget {
}
class _MihBannerAdState extends State<MihBannerAd> {
@override
void dispose() {
super.dispose();
}
@override
void initState() {
super.initState();
MihBannerAdProvider adProvider = context.read<MihBannerAdProvider>();
WidgetsBinding.instance.addPostFrameCallback((_) {
adProvider.reset();
adProvider.loadBannerAd();
});
}
@override
Widget build(BuildContext context) {
return Consumer<MihBannerAdProvider>(
builder: (context, bannerAdProvider, child) {
if (!bannerAdProvider.isBannerAdLoaded) {
return SizedBox();
}
return Column(
children: [
bannerAdProvider.bannerAd != null &&

View File

@@ -28,6 +28,11 @@ class MihBannerAdProvider extends ChangeNotifier {
}
void loadBannerAd() {
if (bannerAd != null) {
bannerAd!.dispose();
bannerAd = null;
isBannerAdLoaded = false;
}
bannerAd = BannerAd(
adUnitId: adUnitId,
request: const AdRequest(),

View File

@@ -2,7 +2,6 @@ import 'package:go_router/go_router.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_banner_ad_provider.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_calculator_provider.dart';
import 'package:mzansi_innovation_hub/mih_packages/calculator/package_tools/currency_exchange_rate.dart';
import 'package:mzansi_innovation_hub/mih_packages/calculator/package_tools/simple_calc.dart';
@@ -29,7 +28,6 @@ class _MIHCalculatorState extends State<MIHCalculator> {
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
context.read<MihBannerAdProvider>().loadBannerAd();
await getCurrencyCodeList();
});
}

View File

@@ -9,7 +9,6 @@ import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_banner_ad_provider.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_calculator_provider.dart';
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart';
@@ -67,7 +66,6 @@ class _CurrencyExchangeRateState extends State<CurrencyExchangeRate> {
fullscreen: false,
windowTitle: "Calculation Results",
onWindowTapClose: () {
context.read<MihBannerAdProvider>().loadBannerAd();
Navigator.pop(context);
},
windowBody: Column(

View File

@@ -1,6 +1,5 @@
import 'package:mzansi_innovation_hub/main.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_banner_ad.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_banner_ad_provider.dart';
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart';
@@ -99,7 +98,6 @@ class _TipCalcState extends State<TipCalc> {
fullscreen: false,
windowTitle: "Calculation Results",
onWindowTapClose: () {
context.read<MihBannerAdProvider>().loadBannerAd();
Navigator.pop(context);
},
windowBody: Column(

View File

@@ -13,7 +13,6 @@ import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_banner_ad_provider.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_mine_sweeper_provider.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart';
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
@@ -124,8 +123,9 @@ class _MineSweeperGameState extends State<MineSweeperGame> {
return '$hoursStr:$minutesStr:$secondsStr:$centiStr';
}
void showStartGameWindow(MihMineSweeperProvider mihMineSweeperProvider,
MihBannerAdProvider addProvider) {
void showStartGameWindow(
MihMineSweeperProvider mihMineSweeperProvider,
) {
// easy - 10 * 10 & 15 bombs
// Intermediate - 10 * 15 & 23 bombs
// Hard - 10 * 20 & 30 bombs
@@ -134,7 +134,6 @@ class _MineSweeperGameState extends State<MineSweeperGame> {
builder: (context) {
return MihMineSweeperStartGameWindow(
onPressed: () {
addProvider.loadBannerAd();
resetTimer();
mihMineSweeperProvider
.setDifficulty(mihMineSweeperProvider.difficulty);
@@ -241,12 +240,8 @@ class _MineSweeperGameState extends State<MineSweeperGame> {
}
}
Future<void> handleTap(
MzansiProfileProvider profileProvider,
MihMineSweeperProvider mihMineSweeperProvider,
MihBannerAdProvider adProvider,
int r,
int c) async {
Future<void> handleTap(MzansiProfileProvider profileProvider,
MihMineSweeperProvider mihMineSweeperProvider, int r, int c) async {
if (isGameOver || board[r][c].isOpened || board[r][c].isFlagged) {
return;
}
@@ -304,8 +299,7 @@ class _MineSweeperGameState extends State<MineSweeperGame> {
MihButton(
onPressed: () {
context.pop();
showStartGameWindow(
mihMineSweeperProvider, adProvider);
showStartGameWindow(mihMineSweeperProvider);
},
buttonColor: MihColors.getGreenColor(
MzansiInnovationHub.of(context)!.theme.mode ==
@@ -364,7 +358,7 @@ class _MineSweeperGameState extends State<MineSweeperGame> {
squaresLeft--;
}
// 3. Check for win
_checkWinCondition(profileProvider, mihMineSweeperProvider, adProvider);
_checkWinCondition(profileProvider, mihMineSweeperProvider);
// Update the UI
setState(() {});
}
@@ -383,7 +377,6 @@ class _MineSweeperGameState extends State<MineSweeperGame> {
Future<void> _checkWinCondition(
MzansiProfileProvider profileProvider,
MihMineSweeperProvider mihMineSweeperProvider,
MihBannerAdProvider adProvider,
) async {
// Game is won if all non-mine squares are opened.
if (squaresLeft <= mihMineSweeperProvider.totalMines) {
@@ -450,7 +443,7 @@ class _MineSweeperGameState extends State<MineSweeperGame> {
MihButton(
onPressed: () {
context.pop();
showStartGameWindow(mihMineSweeperProvider, adProvider);
showStartGameWindow(mihMineSweeperProvider);
},
buttonColor: MihColors.getGreenColor(
MzansiInnovationHub.of(context)!.theme.mode ==
@@ -558,13 +551,9 @@ class _MineSweeperGameState extends State<MineSweeperGame> {
}
Widget getBody() {
return Consumer3<MzansiProfileProvider, MihMineSweeperProvider,
MihBannerAdProvider>(
builder: (BuildContext context,
MzansiProfileProvider profileProvider,
MihMineSweeperProvider mihMineSweeperProvider,
MihBannerAdProvider adProvider,
Widget? child) {
return Consumer2<MzansiProfileProvider, MihMineSweeperProvider>(
builder: (BuildContext context, MzansiProfileProvider profileProvider,
MihMineSweeperProvider mihMineSweeperProvider, Widget? child) {
return Column(
children: [
Expanded(
@@ -725,12 +714,8 @@ class _MineSweeperGameState extends State<MineSweeperGame> {
return MineTile(
square: board[r][c],
onTap: () => handleTap(
profileProvider,
mihMineSweeperProvider,
adProvider,
r,
c),
onTap: () => handleTap(profileProvider,
mihMineSweeperProvider, r, c),
onLongPress: () => handleLongPress(r, c),
);
},
@@ -794,8 +779,7 @@ class _MineSweeperGameState extends State<MineSweeperGame> {
MzansiInnovationHub.of(context)!.theme.mode ==
"Dark"),
onTap: () {
showStartGameWindow(
mihMineSweeperProvider, adProvider);
showStartGameWindow(mihMineSweeperProvider);
},
),
]),

View File

@@ -6,7 +6,6 @@ import 'package:mzansi_innovation_hub/main.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_banner_ad.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_banner_ad_provider.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_wallet_provider.dart';
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
@@ -522,7 +521,6 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
),
],
onWindowTapClose: () {
context.read<MihBannerAdProvider>().loadBannerAd();
resetScreenBrightness();
context.pop();
},
@@ -584,9 +582,7 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
),
),
SizedBox(height: 10),
Consumer(builder: (context, bannerAdDisplay, child) {
return MihBannerAd();
}),
MihBannerAd()
// MihBannerAd(),
],
),

View File

@@ -3,7 +3,6 @@ import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_banner_ad_provider.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_wallet_provider.dart';
import 'package:flutter/material.dart';
@@ -50,7 +49,6 @@ class _MihWalletState extends State<MihWallet> {
context.read<MzansiWalletProvider>();
await setLoyaltyCards(mzansiProfileProvider, walletProvider);
await setFavouritesCards(mzansiProfileProvider, walletProvider);
context.read<MihBannerAdProvider>().loadBannerAd();
setState(() {
isLoading = false;
});

View File

@@ -34,6 +34,8 @@ class _MihCardsState extends State<MihCards> {
detectionSpeed: DetectionSpeed.unrestricted,
);
final boxFit = BoxFit.contain;
late MzansiWalletProvider _walletProvider;
late VoidCallback _searchListener;
void searchShop(List<MIHLoyaltyCard> allCards) {
if (cardSearchController.text.isEmpty) {
@@ -129,10 +131,7 @@ class _MihCardsState extends State<MihCards> {
@override
void dispose() {
final walletProvider = context.read<MzansiWalletProvider>();
cardSearchController.removeListener(() {
searchShop(walletProvider.loyaltyCards);
});
cardSearchController.removeListener(_searchListener);
cardSearchController.dispose();
searchShopName.dispose();
searchFocusNode.dispose();
@@ -141,11 +140,12 @@ class _MihCardsState extends State<MihCards> {
@override
void initState() {
final walletProvider = context.read<MzansiWalletProvider>();
searchShopName.value = walletProvider.loyaltyCards;
cardSearchController.addListener(() {
searchShop(walletProvider.loyaltyCards);
});
_walletProvider = context.read<MzansiWalletProvider>();
_searchListener = () {
searchShop(_walletProvider.loyaltyCards);
};
searchShopName.value = _walletProvider.loyaltyCards;
cardSearchController.addListener(_searchListener);
super.initState();
}