Add basic shop screen

This removes the "support me" button on the home screen and replaces it
with a link to the future shop. The rewarded video ad can be reached
from there. I also cleaned up the localizations and reformated
lib/screens/home.dart.
This commit is contained in:
Elias Projahn 2020-01-19 13:39:23 +01:00
parent 07046d8c05
commit 72aa6d7183
3 changed files with 98 additions and 50 deletions

View file

@ -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'];

View file

@ -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
@ -27,7 +27,8 @@ class HomeScreen extends StatelessWidget {
context,
MaterialPageRoute(
builder: (context) => GameScreen(),
)),
),
),
),
MenuEntry(
text: localizations.records,
@ -35,7 +36,8 @@ class HomeScreen extends StatelessWidget {
context,
MaterialPageRoute(
builder: (context) => RecordsScreen(),
)),
),
),
),
MenuEntry(
text: localizations.intro,
@ -43,32 +45,18 @@ class HomeScreen extends StatelessWidget {
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(

63
lib/screens/shop.dart Normal file
View file

@ -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: <Widget>[
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,
),
),
);
}
}