diff --git a/lib/localizations.dart b/lib/localizations.dart index 569d27e..077930b 100644 --- a/lib/localizations.dart +++ b/lib/localizations.dart @@ -15,16 +15,15 @@ class ChristmasCatsLocalizations { 'records3': '3. %i', 'back': 'Back', 'intro': 'Introduction', - 'ad': 'Support me', + 'shop': 'Shop', + 'coins': '%i Coins', + 'getCoins': 'Get coins', + 'adLoading': 'Ad loading', 'noAds': 'No ads available', 'poem': 'Cats are climbing Christmas trees,\n' 'The trees are getting wiggly,\n' 'You\'ll get a lot of trouble,\n' 'If you don\'t tap them quickly.', - 'intro1': 'Cats are climbing Christmas trees,', - 'intro2': 'The trees are getting wiggly,', - 'intro3': 'You\'ll get a lot of trouble,', - 'intro4': 'If You don\'t tap them quickly.', 'paused': 'Paused', 'unpause': 'Continue', 'exit': 'Exit', @@ -42,16 +41,15 @@ class ChristmasCatsLocalizations { 'records3': '3. %i', 'back': 'Zurück', 'intro': 'Einführung', - 'ad': 'Mich unterstützen', + 'shop': 'Laden', + 'coins': '%i Münzen', + 'adLoading': 'Werbung wird geladen', 'noAds': 'Keine Werbung verfügbar', + 'getCoins': 'Münzen bekommen', 'poem': 'Katzen, die auf Tannen steigen,\n' 'Welche sich gefährlich neigen,\n' 'Du musst auf die Tannen tippen,\n' 'Denn sonst werden diese kippen!', - 'intro1': 'Katzen, die auf Tannen steigen,', - 'intro2': 'Welche sich gefährlich neigen,', - 'intro3': 'Du musst auf die Tannen tippen,', - 'intro4': 'Denn sonst werden diese kippen!', 'paused': 'Pausiert', 'unpause': 'Weiter', 'exit': 'Beenden', @@ -77,13 +75,12 @@ class ChristmasCatsLocalizations { String get records3 => localizedStrings['records3']; String get back => localizedStrings['back']; String get intro => localizedStrings['intro']; - String get ad => localizedStrings['ad']; + String get shop => localizedStrings['shop']; + String get coins => localizedStrings['coins']; + String get adLoading => localizedStrings['adLoading']; String get noAds => localizedStrings['noAds']; + String get getCoins => localizedStrings['getCoins']; String get poem => localizedStrings['poem']; - String get intro1 => localizedStrings['intro1']; - String get intro2 => localizedStrings['intro2']; - String get intro3 => localizedStrings['intro3']; - String get intro4 => localizedStrings['intro4']; String get paused => localizedStrings['paused']; String get unpause => localizedStrings['unpause']; String get exit => localizedStrings['exit']; diff --git a/lib/screens/home.dart b/lib/screens/home.dart index 580793f..6d7d264 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -1,4 +1,3 @@ -import 'package:firebase_admob/firebase_admob.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -9,6 +8,7 @@ import '../widgets/menu_entry.dart'; import 'game.dart'; import 'intro.dart'; import 'records.dart'; +import 'shop.dart'; class HomeScreen extends StatelessWidget { @override @@ -24,51 +24,39 @@ class HomeScreen extends StatelessWidget { MenuEntry( text: localizations.play, onTap: () => Navigator.push( - context, - MaterialPageRoute( - builder: (context) => GameScreen(), - )), + context, + MaterialPageRoute( + builder: (context) => GameScreen(), + ), + ), ), MenuEntry( text: localizations.records, onTap: () => Navigator.push( - context, - MaterialPageRoute( - builder: (context) => RecordsScreen(), - )), + context, + MaterialPageRoute( + builder: (context) => RecordsScreen(), + ), + ), ), MenuEntry( text: localizations.intro, onTap: () => Navigator.push( - context, - MaterialPageRoute( - builder: (context) => IntroScreen(), - )), + context, + MaterialPageRoute( + builder: (context) => IntroScreen(), + ), + ), ), Builder( builder: (context) => MenuEntry( - text: localizations.ad, - onTap: () { - final ad = RewardedVideoAd.instance; - - ad.listener = (event, {rewardAmount, rewardType}) { - if (event == RewardedVideoAdEvent.loaded) { - ad.show(); - } else if (event == RewardedVideoAdEvent.failedToLoad) { - Scaffold.of(context).showSnackBar(SnackBar( - content: Text(localizations.noAds), - duration: const Duration(seconds: 2), - )); - } else if (event == RewardedVideoAdEvent.rewarded) { - // TODO: Reward user - } - }; - - ad.load( - adUnitId: 'ca-app-pub-4129701777413448/6712208196', - targetingInfo: MobileAdTargetingInfo(), - ); - }, + text: localizations.shop, + onTap: () => Navigator.push( + context, + MaterialPageRoute( + builder: (context) => ShopScreen(), + ), + ), ), ), MenuEntry( diff --git a/lib/screens/shop.dart b/lib/screens/shop.dart new file mode 100644 index 0000000..f41f189 --- /dev/null +++ b/lib/screens/shop.dart @@ -0,0 +1,63 @@ +import 'package:firebase_admob/firebase_admob.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:sprintf/sprintf.dart'; + +import '../localizations.dart'; +import '../storage.dart'; +import '../widgets/menu.dart'; +import '../widgets/menu_entry.dart'; + +class ShopScreen extends StatelessWidget { + @override + Widget build(BuildContext context) { + final localizations = ChristmasCatsLocalizations.of(context); + + return Scaffold( + resizeToAvoidBottomInset: false, + body: StreamBuilder( + stream: storage.coins, + builder: (context, snapshot) => Menu( + title: localizations.shop, + subtitle: sprintf(localizations.coins, [snapshot?.data ?? 0]), + children: [ + MenuEntry( + text: localizations.getCoins, + onTap: () { + final scaffold = Scaffold.of(context); + scaffold.showSnackBar(SnackBar( + content: Text(localizations.adLoading), + // Show it until the ad is loaded + duration: Duration(minutes: 1), + )); + + final ad = RewardedVideoAd.instance; + ad.listener = (event, {rewardAmount, rewardType}) { + scaffold.removeCurrentSnackBar(); + if (event == RewardedVideoAdEvent.loaded) { + ad.show(); + } else if (event == RewardedVideoAdEvent.failedToLoad) { + scaffold.showSnackBar(SnackBar( + content: Text(localizations.noAds), + duration: const Duration(seconds: 2), + )); + } else if (event == RewardedVideoAdEvent.rewarded) { + storage.addCoins(rewardAmount); + } + }; + + ad.load( + adUnitId: kReleaseMode + ? 'ca-app-pub-4129701777413448/6712208196' + : 'ca-app-pub-3940256099942544/5224354917', + targetingInfo: MobileAdTargetingInfo(), + ); + }, + ), + ], + showBackButton: true, + ), + ), + ); + } +}