① 배운 것
//광고 보여주는 함수
void showAd({
required VoidCallback onAdShowFailedCallback,
}) {
router.push(
'/ad_empty_full_screen', //< circularProgressBar만 있는 empty white 화면
extra: {
flagOnAdShowFailedCallback: onAdShowFailedCallback,
flagOnUserEarnedRewardCallback: (rewardItem) {
onUserEarnedRewardCallback(rewardItem);
},
},
);
}
class EmptyScreen extends StatefulWidget {
const EmptyScreen({
super.key,
required this.onAdShowFailedCallback,
required this.onUserEarnedRewardCallback,
});
final VoidCallback onAdShowFailedCallback;
final ValueChanged<RewardItem> onUserEarnedRewardCallback;
State<EmptyScreen> createState() => _EmptyScreenState();
}
class _EmptyScreenState extends State<EmptyScreen> {
void initState() {
super.initState();
Future.delayed(
const Duration(milliseconds: 0),
() {
if (widget.rewardedAd != null) {
widget.rewardedAd!.show(
onUserEarnedReward: (ad, reward) {
//보상 획득 후 로직은 콜백함수 파라미타로 받아서 처리
widget.onUserEarnedRewardCallback.call(reward);
},
);
} else {
router.pop(); //<광고 보여주기 실패 시 해당 스크린을 빠져나와야함
widget.onAdShowFailedCallback();
}
},
);
}
Widget build(BuildContext context) {
return const Scaffold(
backgroundColor: Colors.white,
body: Center(
child: PrimaryColorCircularProgressIndicator(),
),
);
}
}
//광고 시청 완료 후 빈 화면 빠져나가고 광고보상페이지로 이동
onAdDismissedFullScreenContentCallback: () {
//혹시 모를 상황을 대비해 현재 페이지를 체크한 후 pop 시킴
if(router.getCurrentLocation == '/ad_empty_full_screen'){
router.pop();
}
},
안드로이드, IOS 여러 디바이스에서 확인해봤는데 이상 없이 잘 작동했음!
② 회고 (restropective)
③ 개선을 위한 방법