Flutter:实现ElevatedButton文本从字符串转递增整数的方法
实现Flutter激励广告按钮动态文本切换
核心解决方案
通过判断奖励分数的状态动态切换按钮文本,同时保证广告观看后的分数递增逻辑正确,以下是完整实现:
完整代码
import 'package:flutter/material.dart'; import 'package:google_mobile_ads/google_mobile_ads.dart'; class RewardedAdPage extends StatefulWidget { const RewardedAdPage({super.key}); @override State<RewardedAdPage> createState() => _RewardedAdPageState(); } class _RewardedAdPageState extends State<RewardedAdPage> { RewardedAd? _rewardedAd; int _rewardedScore = 0; @override void initState() { super.initState(); _createRewardedAd(); } void _createRewardedAd() { RewardedAd.load( adUnitId: 'ca-app-pub-3940256099942544/5224354917', request: const AdRequest(), rewardedAdLoadCallback: RewardedAdLoadCallback( onAdLoaded: (RewardedAd ad) { print('$ad loaded.'); setState(() => _rewardedAd = ad); }, onAdFailedToLoad: (LoadAdError error) { print('RewardedAd failed to load: $error'); setState(() => _rewardedAd = null); }, ), ); } void _showRewardedAd() { if (_rewardedAd == null) return; _rewardedAd!.fullScreenContentCallback = FullScreenContentCallback( onAdShowedFullScreenContent: (RewardedAd ad) => print('$ad onAdShowedFullScreenContent.'), onAdDismissedFullScreenContent: (RewardedAd ad) { print('$ad onAdDismissedFullScreenContent.'); ad.dispose(); _createRewardedAd(); }, onAdFailedToShowFullScreenContent: (RewardedAd ad, AdError error) { print('$ad onAdFailedToShowFullScreenContent: $error'); ad.dispose(); _createRewardedAd(); }, onAdImpression: (RewardedAd ad) => print('$ad impression occurred.'), ); _rewardedAd!.show( onUserEarnedReward: (AdWithoutView ad, RewardItem reward) { setState(() => _rewardedScore += 10); }, ); _rewardedAd = null; } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Rewarded: $_rewardedScore'), centerTitle: true, ), body: Center( child: ElevatedButton( child: Text( // 动态切换按钮文本:初始显示"show ad",获得奖励后显示"+分数" _rewardedScore == 0 ? "show ad" : "+$_rewardedScore", style: const TextStyle(fontSize: 30), ), // 广告未加载完成时禁用按钮,避免无效点击 onPressed: _rewardedAd != null ? _showRewardedAd : null, ), ), ); } }
关键修改说明
- 动态文本切换:通过三元表达式
_rewardedScore == 0 ? "show ad" : "+$_rewardedScore"实现初始状态与奖励状态的文本切换,完全匹配需求。 - 广告状态校验:在按钮
onPressed中加入_rewardedAd != null的判断,防止用户点击未加载完成的广告,优化交互体验。 - 分数递增逻辑:用
_rewardedScore += 10简化分数更新代码,确保每次观看广告后分数正确递增10。 - 广告生命周期管理:保留原有广告加载、销毁的逻辑,保证广告资源合理释放,避免内存泄漏。
内容的提问来源于stack exchange,提问作者Saad Mansoor
相关产品推荐
相关产品推荐

