refactor: leaderboard screen now uses leaderboard_repository models

pull/51/head
RuiAlonso 4 years ago
parent 7fbf5e593d
commit fcb34c6c8c

@ -2,6 +2,7 @@
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:leaderboard_repository/leaderboard_repository.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'; import 'package:pinball_theme/pinball_theme.dart';
@ -144,12 +145,14 @@ class _LeaderboardList extends StatelessWidget {
shrinkWrap: true, shrinkWrap: true,
itemBuilder: (_, index) => _LeaderBoardCompetitor( itemBuilder: (_, index) => _LeaderBoardCompetitor(
competitor: Competitor( competitor: Competitor(
rank: index, rank: (index + 1).toString(),
characterTheme: const SparkyTheme(), entry: LeaderboardEntry(
initials: 'user$index', character: CharacterType.android,
playerInitials: 'user$index',
score: 0, score: 0,
), ),
), ),
),
itemCount: 10, itemCount: 10,
); );
} }
@ -166,12 +169,12 @@ class _LeaderBoardCompetitor extends StatelessWidget {
return Row( return Row(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
_LeaderboardCompetitorField(text: competitor.rank.toString()), _LeaderboardCompetitorField(text: competitor.rank),
_LeaderboardCompetitorCharacter( _LeaderboardCompetitorCharacter(
characterTheme: competitor.characterTheme, characterTheme: competitor.entry.character.theme,
), ),
_LeaderboardCompetitorField(text: competitor.initials), _LeaderboardCompetitorField(text: competitor.entry.playerInitials),
_LeaderboardCompetitorField(text: competitor.score.toString()), _LeaderboardCompetitorField(text: competitor.entry.score.toString()),
], ],
); );
} }
@ -229,27 +232,41 @@ class _LeaderboardCompetitorCharacter extends StatelessWidget {
} }
} }
/// {@template competitor}
/// Class for players at ranking table.
/// {@endtemplate}
class Competitor { class Competitor {
/// {@macro competitor} Competitor({required this.rank, required this.entry});
Competitor({
required this.rank,
required this.characterTheme,
required this.initials,
required this.score,
});
/// [Competitor]'s position at ranking table. final String rank;
final int rank; final LeaderboardEntry entry;
}
/// [Competitor]'s selected [CharacterTheme].
final CharacterTheme characterTheme;
/// [Competitor]'s name initials. extension CharacterTypeX on CharacterType {
final String initials; CharacterTheme get theme {
switch (this) {
case CharacterType.dash:
return const DashTheme();
case CharacterType.sparky:
return const SparkyTheme();
case CharacterType.android:
return const AndroidTheme();
case CharacterType.dino:
return const DinoTheme();
}
}
}
/// [Competitor]'s final score. extension CharacterThemeX on CharacterTheme {
final int score; CharacterType get toType {
switch (runtimeType) {
case DashTheme:
return CharacterType.dash;
case SparkyTheme:
return CharacterType.sparky;
case AndroidTheme:
return CharacterType.android;
case DinoTheme:
return CharacterType.dino;
default:
return CharacterType.dash;
}
}
} }

Loading…
Cancel
Save