feat: set character theme for leaderboard

pull/51/head
RuiAlonso 4 years ago
parent 51c9a4dc65
commit b79629725e

@ -70,7 +70,7 @@ class _PinballGameViewState extends State<PinballGameView> {
showDialog<void>( showDialog<void>(
context: context, context: context,
builder: (_) { builder: (_) {
return const GameOverDialog(); return GameOverDialog(theme: widget.theme);
}, },
); );
} }

@ -1,14 +1,19 @@
// ignore_for_file: public_member_api_docs
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:pinball/game/game.dart'; import 'package:pinball/game/game.dart';
import 'package:pinball/l10n/l10n.dart'; import 'package:pinball/l10n/l10n.dart';
import 'package:pinball/leaderboard/leader_board.dart'; import 'package:pinball/leaderboard/leader_board.dart';
import 'package:pinball_theme/pinball_theme.dart';
/// {@template game_over_dialog} /// {@template game_over_dialog}
/// [Dialog] displayed when the [PinballGame] is over. /// [Dialog] displayed when the [PinballGame] is over.
/// {@endtemplate} /// {@endtemplate}
class GameOverDialog extends StatelessWidget { class GameOverDialog extends StatelessWidget {
/// {@macro game_over_dialog} /// {@macro game_over_dialog}
const GameOverDialog({Key? key}) : super(key: key); const GameOverDialog({Key? key, required this.theme}) : super(key: key);
final PinballTheme theme;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -25,7 +30,7 @@ class GameOverDialog extends StatelessWidget {
Text(l10n.gameOver), Text(l10n.gameOver),
TextButton( TextButton(
onPressed: () => Navigator.of(context).push<void>( onPressed: () => Navigator.of(context).push<void>(
LeaderBoardPage.route(), LeaderBoardPage.route(theme),
), ),
child: Text(l10n.leadersBoard), child: Text(l10n.leadersBoard),
), ),

@ -36,6 +36,10 @@
"@rank": { "@rank": {
"description": "Text displayed on the leaders board page header rank column" "description": "Text displayed on the leaders board page header rank column"
}, },
"character": "Character",
"@character": {
"description": "Text displayed on the leaders board page header character column"
},
"userName": "UserName", "userName": "UserName",
"@userName": { "@userName": {
"description": "Text displayed on the leaders board page header userName column" "description": "Text displayed on the leaders board page header userName column"

@ -1,26 +1,27 @@
// ignore_for_file: public_member_api_docs // ignore_for_file: public_member_api_docs
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:pinball/game/view/pinball_game_page.dart';
import 'package:pinball/l10n/l10n.dart'; import 'package:pinball/l10n/l10n.dart';
import 'package:pinball/theme/theme.dart'; import 'package:pinball/theme/theme.dart';
import 'package:pinball_theme/pinball_theme.dart';
class LeaderBoardPage extends StatelessWidget { class LeaderBoardPage extends StatelessWidget {
const LeaderBoardPage({Key? key}) : super(key: key); const LeaderBoardPage({Key? key, required this.theme}) : super(key: key);
final PinballTheme theme;
static Route route() { static Route route(PinballTheme theme) {
return MaterialPageRoute<void>( return MaterialPageRoute<void>(
builder: (_) => const LeaderBoardPage(), builder: (_) => LeaderBoardPage(theme: theme),
); );
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return BlocProvider( return BlocProvider(
create: (context) => ThemeCubit(), create: (context) =>
ThemeCubit()..characterSelected(theme.characterTheme),
child: const LeaderBoardView(), child: const LeaderBoardView(),
); );
} }
@ -48,9 +49,7 @@ class LeaderBoardView extends StatelessWidget {
const SizedBox(height: 20), const SizedBox(height: 20),
TextButton( TextButton(
onPressed: () => Navigator.of(context).push<void>( onPressed: () => Navigator.of(context).push<void>(
PinballGamePage.route( CharacterSelectionPage.route(),
theme: context.read<ThemeCubit>().state.theme,
),
), ),
child: Text(l10n.retry), child: Text(l10n.retry),
), ),
@ -92,6 +91,7 @@ class _LeaderBoardHeaders extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
_LeaderBoardHeaderItem(title: l10n.rank), _LeaderBoardHeaderItem(title: l10n.rank),
_LeaderBoardHeaderItem(title: l10n.character),
_LeaderBoardHeaderItem(title: l10n.userName), _LeaderBoardHeaderItem(title: l10n.userName),
_LeaderBoardHeaderItem(title: l10n.score), _LeaderBoardHeaderItem(title: l10n.score),
], ],
@ -131,6 +131,7 @@ class _LeaderBoardList extends StatelessWidget {
itemBuilder: (_, index) => _LeaderBoardCompetitor( itemBuilder: (_, index) => _LeaderBoardCompetitor(
competitor: Competitor( competitor: Competitor(
rank: index, rank: index,
characterTheme: const SparkyTheme(),
userName: 'user$index', userName: 'user$index',
score: 0, score: 0,
), ),
@ -152,6 +153,9 @@ class _LeaderBoardCompetitor extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
_LeaderBoardCompetitorField(text: competitor.rank.toString()), _LeaderBoardCompetitorField(text: competitor.rank.toString()),
_LeaderBoardCompetitorCharacter(
characterTheme: competitor.characterTheme,
),
_LeaderBoardCompetitorField(text: competitor.userName), _LeaderBoardCompetitorField(text: competitor.userName),
_LeaderBoardCompetitorField(text: competitor.score.toString()), _LeaderBoardCompetitorField(text: competitor.score.toString()),
], ],
@ -184,10 +188,43 @@ class _LeaderBoardCompetitorField extends StatelessWidget {
} }
} }
class _LeaderBoardCompetitorCharacter extends StatelessWidget {
const _LeaderBoardCompetitorCharacter({
Key? key,
required this.characterTheme,
}) : super(key: key);
final CharacterTheme characterTheme;
@override
Widget build(BuildContext context) {
return Expanded(
child: DecoratedBox(
decoration: BoxDecoration(
border: Border.all(
color:
context.read<ThemeCubit>().state.theme.characterTheme.ballColor,
width: 2,
),
),
child: SizedBox(
height: 30,
child: characterTheme.characterAsset.image(),
),
),
);
}
}
class Competitor { class Competitor {
Competitor({required this.rank, required this.userName, required this.score}); Competitor({
required this.rank,
required this.characterTheme,
required this.userName,
required this.score,
});
final int rank; final int rank;
final CharacterTheme characterTheme;
final String userName; final String userName;
final int score; final int score;
} }

Loading…
Cancel
Save