BUG: MIH Ad Display Strategy
This commit is contained in:
@@ -12,10 +12,28 @@ class MihBannerAd extends StatefulWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class _MihBannerAdState extends State<MihBannerAd> {
|
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
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Consumer<MihBannerAdProvider>(
|
return Consumer<MihBannerAdProvider>(
|
||||||
builder: (context, bannerAdProvider, child) {
|
builder: (context, bannerAdProvider, child) {
|
||||||
|
if (!bannerAdProvider.isBannerAdLoaded) {
|
||||||
|
return SizedBox();
|
||||||
|
}
|
||||||
return Column(
|
return Column(
|
||||||
children: [
|
children: [
|
||||||
bannerAdProvider.bannerAd != null &&
|
bannerAdProvider.bannerAd != null &&
|
||||||
|
|||||||
@@ -28,6 +28,11 @@ class MihBannerAdProvider extends ChangeNotifier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void loadBannerAd() {
|
void loadBannerAd() {
|
||||||
|
if (bannerAd != null) {
|
||||||
|
bannerAd!.dispose();
|
||||||
|
bannerAd = null;
|
||||||
|
isBannerAdLoaded = false;
|
||||||
|
}
|
||||||
bannerAd = BannerAd(
|
bannerAd = BannerAd(
|
||||||
adUnitId: adUnitId,
|
adUnitId: adUnitId,
|
||||||
request: const AdRequest(),
|
request: const AdRequest(),
|
||||||
|
|||||||
@@ -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.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_action.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.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_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/currency_exchange_rate.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_packages/calculator/package_tools/simple_calc.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() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
WidgetsBinding.instance.addPostFrameCallback((_) async {
|
WidgetsBinding.instance.addPostFrameCallback((_) async {
|
||||||
context.read<MihBannerAdProvider>().loadBannerAd();
|
|
||||||
await getCurrencyCodeList();
|
await getCurrencyCodeList();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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_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_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_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_components/mih_providers/mih_calculator_provider.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_config/mih_colors.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_alert_services.dart';
|
||||||
@@ -67,7 +66,6 @@ class _CurrencyExchangeRateState extends State<CurrencyExchangeRate> {
|
|||||||
fullscreen: false,
|
fullscreen: false,
|
||||||
windowTitle: "Calculation Results",
|
windowTitle: "Calculation Results",
|
||||||
onWindowTapClose: () {
|
onWindowTapClose: () {
|
||||||
context.read<MihBannerAdProvider>().loadBannerAd();
|
|
||||||
Navigator.pop(context);
|
Navigator.pop(context);
|
||||||
},
|
},
|
||||||
windowBody: Column(
|
windowBody: Column(
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import 'package:mzansi_innovation_hub/main.dart';
|
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_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_config/mih_colors.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart';
|
import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart';
|
import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart';
|
||||||
@@ -99,7 +98,6 @@ class _TipCalcState extends State<TipCalc> {
|
|||||||
fullscreen: false,
|
fullscreen: false,
|
||||||
windowTitle: "Calculation Results",
|
windowTitle: "Calculation Results",
|
||||||
onWindowTapClose: () {
|
onWindowTapClose: () {
|
||||||
context.read<MihBannerAdProvider>().loadBannerAd();
|
|
||||||
Navigator.pop(context);
|
Navigator.pop(context);
|
||||||
},
|
},
|
||||||
windowBody: Column(
|
windowBody: Column(
|
||||||
|
|||||||
@@ -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_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_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_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/mih_mine_sweeper_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_profile_provider.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_config/mih_colors.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';
|
return '$hoursStr:$minutesStr:$secondsStr:$centiStr';
|
||||||
}
|
}
|
||||||
|
|
||||||
void showStartGameWindow(MihMineSweeperProvider mihMineSweeperProvider,
|
void showStartGameWindow(
|
||||||
MihBannerAdProvider addProvider) {
|
MihMineSweeperProvider mihMineSweeperProvider,
|
||||||
|
) {
|
||||||
// easy - 10 * 10 & 15 bombs
|
// easy - 10 * 10 & 15 bombs
|
||||||
// Intermediate - 10 * 15 & 23 bombs
|
// Intermediate - 10 * 15 & 23 bombs
|
||||||
// Hard - 10 * 20 & 30 bombs
|
// Hard - 10 * 20 & 30 bombs
|
||||||
@@ -134,7 +134,6 @@ class _MineSweeperGameState extends State<MineSweeperGame> {
|
|||||||
builder: (context) {
|
builder: (context) {
|
||||||
return MihMineSweeperStartGameWindow(
|
return MihMineSweeperStartGameWindow(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
addProvider.loadBannerAd();
|
|
||||||
resetTimer();
|
resetTimer();
|
||||||
mihMineSweeperProvider
|
mihMineSweeperProvider
|
||||||
.setDifficulty(mihMineSweeperProvider.difficulty);
|
.setDifficulty(mihMineSweeperProvider.difficulty);
|
||||||
@@ -241,12 +240,8 @@ class _MineSweeperGameState extends State<MineSweeperGame> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> handleTap(
|
Future<void> handleTap(MzansiProfileProvider profileProvider,
|
||||||
MzansiProfileProvider profileProvider,
|
MihMineSweeperProvider mihMineSweeperProvider, int r, int c) async {
|
||||||
MihMineSweeperProvider mihMineSweeperProvider,
|
|
||||||
MihBannerAdProvider adProvider,
|
|
||||||
int r,
|
|
||||||
int c) async {
|
|
||||||
if (isGameOver || board[r][c].isOpened || board[r][c].isFlagged) {
|
if (isGameOver || board[r][c].isOpened || board[r][c].isFlagged) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -304,8 +299,7 @@ class _MineSweeperGameState extends State<MineSweeperGame> {
|
|||||||
MihButton(
|
MihButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
context.pop();
|
context.pop();
|
||||||
showStartGameWindow(
|
showStartGameWindow(mihMineSweeperProvider);
|
||||||
mihMineSweeperProvider, adProvider);
|
|
||||||
},
|
},
|
||||||
buttonColor: MihColors.getGreenColor(
|
buttonColor: MihColors.getGreenColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode ==
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
@@ -364,7 +358,7 @@ class _MineSweeperGameState extends State<MineSweeperGame> {
|
|||||||
squaresLeft--;
|
squaresLeft--;
|
||||||
}
|
}
|
||||||
// 3. Check for win
|
// 3. Check for win
|
||||||
_checkWinCondition(profileProvider, mihMineSweeperProvider, adProvider);
|
_checkWinCondition(profileProvider, mihMineSweeperProvider);
|
||||||
// Update the UI
|
// Update the UI
|
||||||
setState(() {});
|
setState(() {});
|
||||||
}
|
}
|
||||||
@@ -383,7 +377,6 @@ class _MineSweeperGameState extends State<MineSweeperGame> {
|
|||||||
Future<void> _checkWinCondition(
|
Future<void> _checkWinCondition(
|
||||||
MzansiProfileProvider profileProvider,
|
MzansiProfileProvider profileProvider,
|
||||||
MihMineSweeperProvider mihMineSweeperProvider,
|
MihMineSweeperProvider mihMineSweeperProvider,
|
||||||
MihBannerAdProvider adProvider,
|
|
||||||
) async {
|
) async {
|
||||||
// Game is won if all non-mine squares are opened.
|
// Game is won if all non-mine squares are opened.
|
||||||
if (squaresLeft <= mihMineSweeperProvider.totalMines) {
|
if (squaresLeft <= mihMineSweeperProvider.totalMines) {
|
||||||
@@ -450,7 +443,7 @@ class _MineSweeperGameState extends State<MineSweeperGame> {
|
|||||||
MihButton(
|
MihButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
context.pop();
|
context.pop();
|
||||||
showStartGameWindow(mihMineSweeperProvider, adProvider);
|
showStartGameWindow(mihMineSweeperProvider);
|
||||||
},
|
},
|
||||||
buttonColor: MihColors.getGreenColor(
|
buttonColor: MihColors.getGreenColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode ==
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
@@ -558,13 +551,9 @@ class _MineSweeperGameState extends State<MineSweeperGame> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Widget getBody() {
|
Widget getBody() {
|
||||||
return Consumer3<MzansiProfileProvider, MihMineSweeperProvider,
|
return Consumer2<MzansiProfileProvider, MihMineSweeperProvider>(
|
||||||
MihBannerAdProvider>(
|
builder: (BuildContext context, MzansiProfileProvider profileProvider,
|
||||||
builder: (BuildContext context,
|
MihMineSweeperProvider mihMineSweeperProvider, Widget? child) {
|
||||||
MzansiProfileProvider profileProvider,
|
|
||||||
MihMineSweeperProvider mihMineSweeperProvider,
|
|
||||||
MihBannerAdProvider adProvider,
|
|
||||||
Widget? child) {
|
|
||||||
return Column(
|
return Column(
|
||||||
children: [
|
children: [
|
||||||
Expanded(
|
Expanded(
|
||||||
@@ -725,12 +714,8 @@ class _MineSweeperGameState extends State<MineSweeperGame> {
|
|||||||
|
|
||||||
return MineTile(
|
return MineTile(
|
||||||
square: board[r][c],
|
square: board[r][c],
|
||||||
onTap: () => handleTap(
|
onTap: () => handleTap(profileProvider,
|
||||||
profileProvider,
|
mihMineSweeperProvider, r, c),
|
||||||
mihMineSweeperProvider,
|
|
||||||
adProvider,
|
|
||||||
r,
|
|
||||||
c),
|
|
||||||
onLongPress: () => handleLongPress(r, c),
|
onLongPress: () => handleLongPress(r, c),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
@@ -794,8 +779,7 @@ class _MineSweeperGameState extends State<MineSweeperGame> {
|
|||||||
MzansiInnovationHub.of(context)!.theme.mode ==
|
MzansiInnovationHub.of(context)!.theme.mode ==
|
||||||
"Dark"),
|
"Dark"),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
showStartGameWindow(
|
showStartGameWindow(mihMineSweeperProvider);
|
||||||
mihMineSweeperProvider, adProvider);
|
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
]),
|
]),
|
||||||
|
|||||||
@@ -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_banner_ad.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.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_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_profile_provider.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_wallet_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';
|
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
|
||||||
@@ -522,7 +521,6 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
|
|||||||
),
|
),
|
||||||
],
|
],
|
||||||
onWindowTapClose: () {
|
onWindowTapClose: () {
|
||||||
context.read<MihBannerAdProvider>().loadBannerAd();
|
|
||||||
resetScreenBrightness();
|
resetScreenBrightness();
|
||||||
context.pop();
|
context.pop();
|
||||||
},
|
},
|
||||||
@@ -584,9 +582,7 @@ class _BuildLoyaltyCardListState extends State<BuildLoyaltyCardList> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
SizedBox(height: 10),
|
SizedBox(height: 10),
|
||||||
Consumer(builder: (context, bannerAdDisplay, child) {
|
MihBannerAd()
|
||||||
return MihBannerAd();
|
|
||||||
}),
|
|
||||||
// MihBannerAd(),
|
// MihBannerAd(),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -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_action.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.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_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_profile_provider.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_wallet_provider.dart';
|
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_wallet_provider.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
@@ -50,7 +49,6 @@ class _MihWalletState extends State<MihWallet> {
|
|||||||
context.read<MzansiWalletProvider>();
|
context.read<MzansiWalletProvider>();
|
||||||
await setLoyaltyCards(mzansiProfileProvider, walletProvider);
|
await setLoyaltyCards(mzansiProfileProvider, walletProvider);
|
||||||
await setFavouritesCards(mzansiProfileProvider, walletProvider);
|
await setFavouritesCards(mzansiProfileProvider, walletProvider);
|
||||||
context.read<MihBannerAdProvider>().loadBannerAd();
|
|
||||||
setState(() {
|
setState(() {
|
||||||
isLoading = false;
|
isLoading = false;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -34,6 +34,8 @@ class _MihCardsState extends State<MihCards> {
|
|||||||
detectionSpeed: DetectionSpeed.unrestricted,
|
detectionSpeed: DetectionSpeed.unrestricted,
|
||||||
);
|
);
|
||||||
final boxFit = BoxFit.contain;
|
final boxFit = BoxFit.contain;
|
||||||
|
late MzansiWalletProvider _walletProvider;
|
||||||
|
late VoidCallback _searchListener;
|
||||||
|
|
||||||
void searchShop(List<MIHLoyaltyCard> allCards) {
|
void searchShop(List<MIHLoyaltyCard> allCards) {
|
||||||
if (cardSearchController.text.isEmpty) {
|
if (cardSearchController.text.isEmpty) {
|
||||||
@@ -129,10 +131,7 @@ class _MihCardsState extends State<MihCards> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
final walletProvider = context.read<MzansiWalletProvider>();
|
cardSearchController.removeListener(_searchListener);
|
||||||
cardSearchController.removeListener(() {
|
|
||||||
searchShop(walletProvider.loyaltyCards);
|
|
||||||
});
|
|
||||||
cardSearchController.dispose();
|
cardSearchController.dispose();
|
||||||
searchShopName.dispose();
|
searchShopName.dispose();
|
||||||
searchFocusNode.dispose();
|
searchFocusNode.dispose();
|
||||||
@@ -141,11 +140,12 @@ class _MihCardsState extends State<MihCards> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
final walletProvider = context.read<MzansiWalletProvider>();
|
_walletProvider = context.read<MzansiWalletProvider>();
|
||||||
searchShopName.value = walletProvider.loyaltyCards;
|
_searchListener = () {
|
||||||
cardSearchController.addListener(() {
|
searchShop(_walletProvider.loyaltyCards);
|
||||||
searchShop(walletProvider.loyaltyCards);
|
};
|
||||||
});
|
searchShopName.value = _walletProvider.loyaltyCards;
|
||||||
|
cardSearchController.addListener(_searchListener);
|
||||||
super.initState();
|
super.initState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user