import 'package:flutter/material.dart';
import 'package:adwhale_sdk_flutter/adwhale_sdk_flutter.dart';
class RewardAdScreen extends StatefulWidget {
const RewardAdScreen({super.key});
@override
State<RewardAdScreen> createState() => _RewardAdScreenState();
}
class _RewardAdScreenState extends State<RewardAdScreen> {
AdWhaleRewardAd? _rewardAd;
bool _isLoaded = false;
int _coins = 0;
@override
void initState() {
super.initState();
_initializeAndLoadReward();
}
Future<void> _initializeAndLoadReward() async {
// SDK 초기화
final result = await AdWhaleMediationAds.instance.initialize();
if (result.isSuccess) {
print('SDK 초기화 성공: ${result.message}');
_loadReward();
} else {
print('SDK 초기화 실패: ${result.statusCode}, ${result.message}');
}
}
void _loadReward() {
_rewardAd?.destroy();
_rewardAd = null;
_isLoaded = false;
_rewardAd = AdWhaleRewardAd(
appCode: 'your-placement-uid',
adRewardLoadCallback: AdWhaleRewardAdLoadCallback(
onLoaded: () {
print('보상형 광고 로드 성공');
setState(() {
_isLoaded = true;
});
if (mounted) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('보상형 광고 로드 완료')),
);
}
},
onLoadFailed: (errorCode, errorMessage) {
print('보상형 광고 로드 실패: $errorCode, $errorMessage');
setState(() {
_rewardAd = null;
_isLoaded = false;
});
},
onUserRewarded: (amount, type) {
print('보상 지급: $type, $amount');
// 코인 지급
if (type == 'coin') {
setState(() {
_coins += amount;
});
if (mounted) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('$amount 코인을 받았습니다!')),
);
}
}
},
onClicked: () {
print('보상형 광고 클릭됨');
},
onShowed: () {
print('보상형 광고 표시됨');
},
onShowFailed: (errorCode, errorMessage) {
print('보상형 광고 표시 실패: $errorCode, $errorMessage');
setState(() {
_rewardAd = null;
_isLoaded = false;
});
},
onDismissed: () {
print('보상형 광고 닫힘');
setState(() {
_rewardAd = null;
_isLoaded = false;
});
// 다음 광고 미리 로드
_loadReward();
},
),
)
..setRegion('test_reward_region')
..setGcoder(37.5, 126.9)
..setPlacementName('test_reward');
_rewardAd!.loadAd();
}
void _showReward() {
if (_rewardAd != null && _isLoaded) {
_rewardAd!.showAd();
_isLoaded = false;
_rewardAd = null;
} else {
if (mounted) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('보상형 광고를 먼저 로드해 주세요.')),
);
}
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('보상형 광고 예제')),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'보유 코인: $_coins',
style: const TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
),
const SizedBox(height: 32),
ElevatedButton(
onPressed: _loadReward,
child: const Text('광고 로드'),
),
const SizedBox(height: 16),
ElevatedButton(
onPressed: _isLoaded ? _showReward : null,
child: const Text('광고 시청하고 코인 받기'),
),
],
),
),
);
}
@override
void dispose() {
_rewardAd?.destroy();
super.dispose();
}
}