fix(ad): 스크린샷 모드에서 네이티브 광고 비활성화
This commit is contained in:
@@ -13,12 +13,14 @@ class NativeAdPlaceholder extends StatefulWidget {
|
||||
final EdgeInsetsGeometry? margin;
|
||||
final double height;
|
||||
final Duration refreshInterval;
|
||||
final bool enabled;
|
||||
|
||||
const NativeAdPlaceholder({
|
||||
super.key,
|
||||
this.margin,
|
||||
this.height = 200,
|
||||
this.refreshInterval = const Duration(minutes: 2),
|
||||
this.enabled = true,
|
||||
});
|
||||
|
||||
@override
|
||||
@@ -35,7 +37,7 @@ class _NativeAdPlaceholderState extends State<NativeAdPlaceholder> {
|
||||
void initState() {
|
||||
super.initState();
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
if (!mounted) return;
|
||||
if (!mounted || !widget.enabled) return;
|
||||
_loadAd();
|
||||
});
|
||||
}
|
||||
@@ -43,6 +45,20 @@ class _NativeAdPlaceholderState extends State<NativeAdPlaceholder> {
|
||||
@override
|
||||
void didUpdateWidget(covariant NativeAdPlaceholder oldWidget) {
|
||||
super.didUpdateWidget(oldWidget);
|
||||
if (!widget.enabled) {
|
||||
_disposeAd();
|
||||
setState(() {
|
||||
_isLoading = false;
|
||||
_isLoaded = false;
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
if (!oldWidget.enabled && widget.enabled) {
|
||||
_loadAd();
|
||||
return;
|
||||
}
|
||||
|
||||
if (widget.refreshInterval != oldWidget.refreshInterval && _isLoaded) {
|
||||
_scheduleRefresh();
|
||||
}
|
||||
@@ -50,12 +66,19 @@ class _NativeAdPlaceholderState extends State<NativeAdPlaceholder> {
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_refreshTimer?.cancel();
|
||||
_nativeAd?.dispose();
|
||||
_disposeAd();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
void _disposeAd() {
|
||||
_refreshTimer?.cancel();
|
||||
_refreshTimer = null;
|
||||
_nativeAd?.dispose();
|
||||
_nativeAd = null;
|
||||
}
|
||||
|
||||
void _loadAd() {
|
||||
if (!widget.enabled) return;
|
||||
if (!AdHelper.isMobilePlatform) return;
|
||||
if (!mounted) return;
|
||||
|
||||
@@ -102,6 +125,7 @@ class _NativeAdPlaceholderState extends State<NativeAdPlaceholder> {
|
||||
void _scheduleRefresh({bool retry = false}) {
|
||||
_refreshTimer?.cancel();
|
||||
if (!mounted) return;
|
||||
if (!widget.enabled) return;
|
||||
final delay = retry ? const Duration(seconds: 30) : widget.refreshInterval;
|
||||
_refreshTimer = Timer(delay, _loadAd);
|
||||
}
|
||||
@@ -132,7 +156,7 @@ class _NativeAdPlaceholderState extends State<NativeAdPlaceholder> {
|
||||
Widget build(BuildContext context) {
|
||||
final isDark = Theme.of(context).brightness == Brightness.dark;
|
||||
|
||||
if (!AdHelper.isMobilePlatform) {
|
||||
if (!AdHelper.isMobilePlatform || !widget.enabled) {
|
||||
return _buildPlaceholder(isDark, isLoading: false);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user