import 'dart:io'; import 'package:flutter/material.dart'; import 'package:google_mobile_ads/google_mobile_ads.dart'; class AdBannerWidget extends StatefulWidget { const AdBannerWidget({super.key}); @override State createState() => _AdBannerWidgetState(); } class _AdBannerWidgetState extends State { BannerAd? _bannerAd; bool _isAdLoaded = false; // TODO: 릴리스 시 실제 Ad Unit ID로 교체하세요. final String _androidAdUnitId = 'ca-app-pub-3940256099942544/6300978111'; // 테스트 ID final String _iosAdUnitId = 'ca-app-pub-3940256099942544/2934735716'; // 테스트 ID @override void initState() { super.initState(); _loadAd(); } void _loadAd() { _bannerAd = BannerAd( adUnitId: Platform.isAndroid ? _androidAdUnitId : _iosAdUnitId, size: AdSize.banner, request: const AdRequest(), listener: BannerAdListener( onAdLoaded: (Ad ad) { setState(() { _isAdLoaded = true; }); }, onAdFailedToLoad: (Ad ad, LoadAdError error) { print('Ad failed to load: $error'); ad.dispose(); }, ), )..load(); } @override void dispose() { _bannerAd?.dispose(); super.dispose(); } @override Widget build(BuildContext context) { if (_isAdLoaded && _bannerAd != null) { // 광고가 로드되면 광고 위젯을 표시 return Container( width: _bannerAd!.size.width.toDouble(), height: _bannerAd!.size.height.toDouble(), alignment: Alignment.center, child: AdWidget(ad: _bannerAd!), ); } else { // 로드되지 않았으면, 광고 높이만큼의 빈 공간만 차지 return Container( height: AdSize.banner.height.toDouble(), ); } } }