diff --git a/lib/leaderboard/bloc/leaderboard_bloc.dart b/lib/leaderboard/bloc/leaderboard_bloc.dart index a0b0e676..49a35474 100644 --- a/lib/leaderboard/bloc/leaderboard_bloc.dart +++ b/lib/leaderboard/bloc/leaderboard_bloc.dart @@ -3,7 +3,7 @@ import 'dart:async'; import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; import 'package:leaderboard_repository/leaderboard_repository.dart'; -import 'package:pinball_theme/pinball_theme.dart'; +import 'package:pinball/leaderboard/leaderboard.dart'; part 'leaderboard_event.dart'; part 'leaderboard_state.dart'; @@ -40,7 +40,7 @@ class LeaderboardBloc extends Bloc { emit( state.copyWith( status: LeaderboardStatus.success, - leaderboard: top10Leaderboard, + leaderboard: leaderboardEntries, ), ); } catch (error) { @@ -69,79 +69,3 @@ class LeaderboardBloc extends Bloc { } } } - -/// {@template leaderboard_entry} -/// A model representing a leaderboard entry containing the ranking position, -/// player's initials, score, and chosen character. -/// -/// {@endtemplate} -class LeaderboardEntry { - /// {@macro leaderboard_entry} - LeaderboardEntry({ - required this.rank, - required this.playerInitials, - required this.score, - required this.character, - }); - - /// Ranking position for [LeaderboardEntry]. - final String rank; - - /// Player's chosen initials for [LeaderboardEntry]. - final String playerInitials; - - /// Score for [LeaderboardEntry]. - final int score; - - /// [CharacterTheme] for [LeaderboardEntry]. - final CharacterTheme character; -} - -extension on LeaderboardEntryData { - LeaderboardEntry toEntry(int position) { - return LeaderboardEntry( - rank: position.toString(), - playerInitials: playerInitials, - score: score, - character: character.toTheme, - ); - } -} - -/// Converts [CharacterType] to [CharacterTheme] to show on UI character theme -/// from repository. -extension CharacterTypeX on CharacterType { - /// Conversion method to [CharacterTheme] - CharacterTheme get toTheme { - 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(); - } - } -} - -/// Converts [CharacterTheme] to [CharacterType] to persist at repository the -/// character theme from UI. -extension CharacterThemeX on CharacterTheme { - /// Conversion method to [CharacterType] - 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; - } - } -} diff --git a/lib/leaderboard/bloc/leaderboard_state.dart b/lib/leaderboard/bloc/leaderboard_state.dart index fe6ef92c..20d68f0d 100644 --- a/lib/leaderboard/bloc/leaderboard_state.dart +++ b/lib/leaderboard/bloc/leaderboard_state.dart @@ -40,7 +40,7 @@ class LeaderboardState extends Equatable { final LeaderboardRanking ranking; /// List of top-ranked players. - final List leaderboard; + final List leaderboard; @override List get props => [status, ranking, leaderboard]; @@ -48,7 +48,7 @@ class LeaderboardState extends Equatable { LeaderboardState copyWith({ LeaderboardStatus? status, LeaderboardRanking? ranking, - List? leaderboard, + List? leaderboard, }) { return LeaderboardState( status: status ?? this.status, diff --git a/lib/leaderboard/leaderboard.dart b/lib/leaderboard/leaderboard.dart index 13d71e40..156b7f78 100644 --- a/lib/leaderboard/leaderboard.dart +++ b/lib/leaderboard/leaderboard.dart @@ -1 +1,2 @@ export 'bloc/leaderboard_bloc.dart'; +export 'models/leader_board_entry.dart'; diff --git a/lib/leaderboard/models/leader_board_entry.dart b/lib/leaderboard/models/leader_board_entry.dart new file mode 100644 index 00000000..8f2d8644 --- /dev/null +++ b/lib/leaderboard/models/leader_board_entry.dart @@ -0,0 +1,79 @@ +import 'package:leaderboard_repository/leaderboard_repository.dart'; +import 'package:pinball_theme/pinball_theme.dart'; + +/// {@template leaderboard_entry} +/// A model representing a leaderboard entry containing the ranking position, +/// player's initials, score, and chosen character. +/// +/// {@endtemplate} +class LeaderboardEntry { + /// {@macro leaderboard_entry} + LeaderboardEntry({ + required this.rank, + required this.playerInitials, + required this.score, + required this.character, + }); + + /// Ranking position for [LeaderboardEntry]. + final String rank; + + /// Player's chosen initials for [LeaderboardEntry]. + final String playerInitials; + + /// Score for [LeaderboardEntry]. + final int score; + + /// [CharacterTheme] for [LeaderboardEntry]. + final CharacterTheme character; +} + +/// Converts [LeaderboardEntryData] to [LeaderboardEntry]. +extension LeaderboardEntryDataX on LeaderboardEntryData { + LeaderboardEntry toEntry(int position) { + return LeaderboardEntry( + rank: position.toString(), + playerInitials: playerInitials, + score: score, + character: character.toTheme, + ); + } +} + +/// Converts [CharacterType] to [CharacterTheme] to show on UI character theme +/// from repository. +extension CharacterTypeX on CharacterType { + /// Conversion method to [CharacterTheme] + CharacterTheme get toTheme { + 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(); + } + } +} + +/// Converts [CharacterTheme] to [CharacterType] to persist at repository the +/// character theme from UI. +extension CharacterThemeX on CharacterTheme { + /// Conversion method to [CharacterType] + 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; + } + } +}