Renamed GameColor to AppColor

This commit is contained in:
2026-05-21 18:31:15 +02:00
parent 021a546479
commit df8e060707
19 changed files with 80 additions and 78 deletions

View File

@@ -24,62 +24,62 @@ String translateRulesetToString(Ruleset ruleset, BuildContext context) {
} }
} }
// Returns a [GameColor] enum value based on the provided team [index]. // Returns a AppColor enum value based on the provided team [index].
GameColor getTeamColor(int index) { AppColor getTeamColor(int index) {
final colors = [ final colors = [
GameColor.red, AppColor.red,
GameColor.blue, AppColor.blue,
GameColor.green, AppColor.green,
GameColor.yellow, AppColor.yellow,
GameColor.purple, AppColor.purple,
GameColor.orange, AppColor.orange,
GameColor.pink, AppColor.pink,
GameColor.teal, AppColor.teal,
]; ];
return colors[index % colors.length]; return colors[index % colors.length];
} }
/// Translates a [GameColor] enum value to its corresponding localized string. /// Translates a [AppColor] enum value to its corresponding localized string.
String translateGameColorToString(GameColor color, BuildContext context) { String translateGameColorToString(AppColor color, BuildContext context) {
final loc = AppLocalizations.of(context); final loc = AppLocalizations.of(context);
switch (color) { switch (color) {
case GameColor.red: case AppColor.red:
return loc.color_red; return loc.color_red;
case GameColor.blue: case AppColor.blue:
return loc.color_blue; return loc.color_blue;
case GameColor.green: case AppColor.green:
return loc.color_green; return loc.color_green;
case GameColor.yellow: case AppColor.yellow:
return loc.color_yellow; return loc.color_yellow;
case GameColor.purple: case AppColor.purple:
return loc.color_purple; return loc.color_purple;
case GameColor.orange: case AppColor.orange:
return loc.color_orange; return loc.color_orange;
case GameColor.pink: case AppColor.pink:
return loc.color_pink; return loc.color_pink;
case GameColor.teal: case AppColor.teal:
return loc.color_teal; return loc.color_teal;
} }
} }
/// Returns the [Color] object corresponding to a [GameColor] enum value. /// Returns the [Color] object corresponding to a [AppColor] enum value.
Color getColorFromGameColor(GameColor color) { Color getColorFromGameColor(AppColor color) {
switch (color) { switch (color) {
case GameColor.red: case AppColor.red:
return Colors.red; return Colors.red;
case GameColor.blue: case AppColor.blue:
return Colors.blue; return Colors.blue;
case GameColor.green: case AppColor.green:
return Colors.green; return Colors.green;
case GameColor.yellow: case AppColor.yellow:
return const Color(0xFFF7CA28); return const Color(0xFFF7CA28);
case GameColor.purple: case AppColor.purple:
return Colors.purple; return Colors.purple;
case GameColor.orange: case AppColor.orange:
return const Color(0xFFef681f); return const Color(0xFFef681f);
case GameColor.pink: case AppColor.pink:
return Colors.pink; return Colors.pink;
case GameColor.teal: case AppColor.teal:
return Colors.teal; return Colors.teal;
} }
} }
@@ -127,6 +127,7 @@ String getExtraPlayerCount(Match match) {
return ' + ${count.toString()}'; return ' + ${count.toString()}';
} }
/// Returns the player name count if greater 0 in the format " #2", otherwise an empty string
String getNameCountText(Player player) { String getNameCountText(Player player) {
if (player.nameCount >= 1) { if (player.nameCount >= 1) {
return ' #${player.nameCount}'; return ' #${player.nameCount}';
@@ -134,6 +135,7 @@ String getNameCountText(Player player) {
return ''; return '';
} }
/// Returns the correct singular or plural form of "point(s)" based on the [points] value.
String getPointLabel(AppLocalizations loc, int points) { String getPointLabel(AppLocalizations loc, int points) {
if (points == 1) { if (points == 1) {
return '$points ${loc.point}'; return '$points ${loc.point}';

View File

@@ -42,5 +42,5 @@ enum Ruleset {
singleLoser, singleLoser,
} }
/// Different colors for highlighting games /// Different colors for highlighting content
enum GameColor { red, orange, yellow, green, teal, blue, purple, pink } enum AppColor { red, orange, yellow, green, teal, blue, purple, pink }

View File

@@ -92,7 +92,7 @@ class GameDao extends DatabaseAccessor<AppDatabase> with _$GameDaoMixin {
name: row.name, name: row.name,
ruleset: Ruleset.values.firstWhere((e) => e.name == row.ruleset), ruleset: Ruleset.values.firstWhere((e) => e.name == row.ruleset),
description: row.description, description: row.description,
color: GameColor.values.firstWhere((e) => e.name == row.color), color: AppColor.values.firstWhere((e) => e.name == row.color),
icon: row.icon, icon: row.icon,
createdAt: row.createdAt, createdAt: row.createdAt,
), ),
@@ -109,7 +109,7 @@ class GameDao extends DatabaseAccessor<AppDatabase> with _$GameDaoMixin {
name: result.name, name: result.name,
ruleset: Ruleset.values.firstWhere((e) => e.name == result.ruleset), ruleset: Ruleset.values.firstWhere((e) => e.name == result.ruleset),
description: result.description, description: result.description,
color: GameColor.values.firstWhere((e) => e.name == result.color), color: AppColor.values.firstWhere((e) => e.name == result.color),
icon: result.icon, icon: result.icon,
createdAt: result.createdAt, createdAt: result.createdAt,
); );
@@ -156,7 +156,7 @@ class GameDao extends DatabaseAccessor<AppDatabase> with _$GameDaoMixin {
/// Updates the color of the game with the given [gameId]. /// Updates the color of the game with the given [gameId].
Future<bool> updateGameColor({ Future<bool> updateGameColor({
required String gameId, required String gameId,
required GameColor color, required AppColor color,
}) async { }) async {
final rowsAffected = final rowsAffected =
await (update(gameTable)..where((g) => g.id.equals(gameId))).write( await (update(gameTable)..where((g) => g.id.equals(gameId))).write(

View File

@@ -116,7 +116,7 @@ class TeamDao extends DatabaseAccessor<AppDatabase> with _$TeamDaoMixin {
id: row.id, id: row.id,
name: row.name, name: row.name,
createdAt: row.createdAt, createdAt: row.createdAt,
color: GameColor.values.byName(row.color), color: AppColor.values.byName(row.color),
score: row.score, score: row.score,
members: members, members: members,
); );
@@ -151,7 +151,7 @@ class TeamDao extends DatabaseAccessor<AppDatabase> with _$TeamDaoMixin {
id: result.id, id: result.id,
name: result.name, name: result.name,
createdAt: result.createdAt, createdAt: result.createdAt,
color: GameColor.values.byName(result.color), color: AppColor.values.byName(result.color),
score: result.score, score: result.score,
members: members, members: members,
); );
@@ -193,7 +193,7 @@ class TeamDao extends DatabaseAccessor<AppDatabase> with _$TeamDaoMixin {
/// Updates the color of the team with the given [teamId]. /// Updates the color of the team with the given [teamId].
Future<bool> updateTeamColor({ Future<bool> updateTeamColor({
required String teamId, required String teamId,
required GameColor color, required AppColor color,
}) async { }) async {
final rowsAffected = final rowsAffected =
await (update(teamTable)..where((t) => t.id.equals(teamId))).write( await (update(teamTable)..where((t) => t.id.equals(teamId))).write(

View File

@@ -8,13 +8,13 @@ class Game {
final String name; final String name;
final Ruleset ruleset; final Ruleset ruleset;
final String description; final String description;
final GameColor color; final AppColor color;
final String icon; final String icon;
Game({ Game({
required this.name, required this.name,
required this.ruleset, required this.ruleset,
this.color = GameColor.orange, this.color = AppColor.orange,
this.description = '', this.description = '',
this.icon = '', this.icon = '',
String? id, String? id,
@@ -33,7 +33,7 @@ class Game {
String? name, String? name,
Ruleset? ruleset, Ruleset? ruleset,
String? description, String? description,
GameColor? color, AppColor? color,
String? icon, String? icon,
}) { }) {
return Game( return Game(
@@ -73,7 +73,7 @@ class Game {
orElse: () => Ruleset.singleWinner, orElse: () => Ruleset.singleWinner,
), ),
description = json['description'], description = json['description'],
color = GameColor.values.firstWhere((e) => e.name == json['color']), color = AppColor.values.firstWhere((e) => e.name == json['color']),
icon = json['icon']; icon = json['icon'];
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {

View File

@@ -113,7 +113,7 @@ class Match {
name: '', name: '',
ruleset: Ruleset.singleWinner, ruleset: Ruleset.singleWinner,
description: '', description: '',
color: GameColor.blue, color: AppColor.blue,
icon: '', icon: '',
), ),
group = null, group = null,

View File

@@ -8,7 +8,7 @@ class Team {
final String id; final String id;
final String name; final String name;
final DateTime createdAt; final DateTime createdAt;
final GameColor color; final AppColor color;
final int? score; final int? score;
final List<Player> members; final List<Player> members;
@@ -16,7 +16,7 @@ class Team {
String? id, String? id,
required this.name, required this.name,
DateTime? createdAt, DateTime? createdAt,
this.color = GameColor.blue, this.color = AppColor.blue,
this.score, this.score,
required this.members, required this.members,
}) : id = id ?? const Uuid().v4(), }) : id = id ?? const Uuid().v4(),
@@ -31,7 +31,7 @@ class Team {
String? id, String? id,
String? name, String? name,
DateTime? createdAt, DateTime? createdAt,
GameColor? color, AppColor? color,
int? score, int? score,
List<Player>? members, List<Player>? members,
}) { }) {
@@ -71,7 +71,7 @@ class Team {
: id = json['id'], : id = json['id'],
name = json['name'], name = json['name'],
createdAt = DateTime.parse(json['createdAt']), createdAt = DateTime.parse(json['createdAt']),
color = GameColor.values.byName(json['color'] ?? GameColor.blue.name), color = AppColor.values.byName(json['color'] ?? AppColor.blue.name),
score = json['score'] ?? 0, score = json['score'] ?? 0,
members = []; // Populated during import via DataTransferService members = []; // Populated during import via DataTransferService

View File

@@ -49,10 +49,10 @@ class _CreateGameViewState extends State<CreateGameView> {
late final AppDatabase db; late final AppDatabase db;
late List<(Ruleset, String)> _rulesets; late List<(Ruleset, String)> _rulesets;
late List<(GameColor, String)> _colors; late List<(AppColor, String)> _colors;
Ruleset? selectedRuleset = Ruleset.singleWinner; Ruleset? selectedRuleset = Ruleset.singleWinner;
GameColor? selectedColor = GameColor.orange; AppColor? selectedColor = AppColor.orange;
/// Controller for the game name input field. /// Controller for the game name input field.
final _gameNameController = TextEditingController(); final _gameNameController = TextEditingController();
@@ -87,10 +87,10 @@ class _CreateGameViewState extends State<CreateGameView> {
), ),
); );
_colors = List.generate( _colors = List.generate(
GameColor.values.length, AppColor.values.length,
(index) => ( (index) => (
GameColor.values[index], AppColor.values[index],
translateGameColorToString(GameColor.values[index], context), translateGameColorToString(AppColor.values[index], context),
), ),
); );

View File

@@ -39,7 +39,7 @@ class _MatchViewState extends State<MatchView> {
game: Game( game: Game(
name: 'Game name', name: 'Game name',
ruleset: Ruleset.singleWinner, ruleset: Ruleset.singleWinner,
color: GameColor.blue, color: AppColor.blue,
icon: '', icon: '',
), ),
group: Group( group: Group(

View File

@@ -12,7 +12,7 @@ class GameLabel extends StatelessWidget {
final String title; final String title;
final String description; final String description;
final GameColor color; final AppColor color;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {

View File

@@ -51,7 +51,7 @@ class GameTile extends StatelessWidget {
? (badgeColor!.computeLuminance() > 0.5 ? Colors.black : Colors.white) ? (badgeColor!.computeLuminance() > 0.5 ? Colors.black : Colors.white)
: Colors.white; : Colors.white;
final gameColor = badgeColor ?? getColorFromGameColor(GameColor.orange); final gameColor = badgeColor ?? getColorFromGameColor(AppColor.orange);
return GestureDetector( return GestureDetector(
onTap: () async { onTap: () async {

View File

@@ -18,7 +18,7 @@ class TeamCreationTile extends StatefulWidget {
this.onColorSelection, this.onColorSelection,
}); });
final GameColor color; final AppColor color;
final TextEditingController controller; final TextEditingController controller;
@@ -26,7 +26,7 @@ class TeamCreationTile extends StatefulWidget {
final VoidCallback? onDelete; final VoidCallback? onDelete;
final ValueChanged<GameColor>? onColorSelection; final ValueChanged<AppColor>? onColorSelection;
@override @override
State<TeamCreationTile> createState() => _TeamCreationTileState(); State<TeamCreationTile> createState() => _TeamCreationTileState();
@@ -34,7 +34,7 @@ class TeamCreationTile extends StatefulWidget {
class _TeamCreationTileState extends State<TeamCreationTile> { class _TeamCreationTileState extends State<TeamCreationTile> {
final teamColors = List.generate( final teamColors = List.generate(
GameColor.values.length, AppColor.values.length,
(index) => getTeamColor(index), (index) => getTeamColor(index),
); );

View File

@@ -278,7 +278,7 @@ class DataTransferService {
name: 'Unknown', name: 'Unknown',
ruleset: Ruleset.singleWinner, ruleset: Ruleset.singleWinner,
description: '', description: '',
color: GameColor.blue, color: AppColor.blue,
icon: '', icon: '',
); );
} }

View File

@@ -56,7 +56,7 @@ void main() {
name: 'Test Game', name: 'Test Game',
ruleset: Ruleset.singleWinner, ruleset: Ruleset.singleWinner,
description: 'A test game', description: 'A test game',
color: GameColor.blue, color: AppColor.blue,
icon: '', icon: '',
); );
testMatch1 = Match( testMatch1 = Match(

View File

@@ -49,7 +49,7 @@ void main() {
testGame = Game( testGame = Game(
name: 'Test Game', name: 'Test Game',
ruleset: Ruleset.highestScore, ruleset: Ruleset.highestScore,
color: GameColor.blue, color: AppColor.blue,
icon: '', icon: '',
); );
testMatch1 = Match( testMatch1 = Match(

View File

@@ -28,7 +28,7 @@ void main() {
name: 'Chess', name: 'Chess',
ruleset: Ruleset.singleWinner, ruleset: Ruleset.singleWinner,
description: 'A classic strategy game', description: 'A classic strategy game',
color: GameColor.blue, color: AppColor.blue,
icon: 'chess_icon', icon: 'chess_icon',
); );
testGame2 = Game( testGame2 = Game(
@@ -36,7 +36,7 @@ void main() {
name: 'Poker', name: 'Poker',
ruleset: Ruleset.multipleWinners, ruleset: Ruleset.multipleWinners,
description: 'Card game with multiple winners', description: 'Card game with multiple winners',
color: GameColor.red, color: AppColor.red,
icon: 'poker_icon', icon: 'poker_icon',
); );
testGame3 = Game( testGame3 = Game(
@@ -44,7 +44,7 @@ void main() {
name: 'Monopoly', name: 'Monopoly',
ruleset: Ruleset.highestScore, ruleset: Ruleset.highestScore,
description: 'A board game about real estate', description: 'A board game about real estate',
color: GameColor.orange, color: AppColor.orange,
icon: '', icon: '',
); );
}); });
@@ -124,7 +124,7 @@ void main() {
name: 'Game\'s & "Special" <Name>', name: 'Game\'s & "Special" <Name>',
ruleset: Ruleset.multipleWinners, ruleset: Ruleset.multipleWinners,
description: 'Description with émojis 🎮🎲', description: 'Description with émojis 🎮🎲',
color: GameColor.purple, color: AppColor.purple,
icon: '', icon: '',
); );
await database.gameDao.addGame(game: specialGame); await database.gameDao.addGame(game: specialGame);
@@ -280,19 +280,19 @@ void main() {
await database.gameDao.updateGameColor( await database.gameDao.updateGameColor(
gameId: testGame1.id, gameId: testGame1.id,
color: GameColor.green, color: AppColor.green,
); );
final updatedGame = await database.gameDao.getGameById( final updatedGame = await database.gameDao.getGameById(
gameId: testGame1.id, gameId: testGame1.id,
); );
expect(updatedGame.color, GameColor.green); expect(updatedGame.color, AppColor.green);
}); });
test('updateGameColor() does nothing for non-existent game', () async { test('updateGameColor() does nothing for non-existent game', () async {
final updated = await database.gameDao.updateGameColor( final updated = await database.gameDao.updateGameColor(
gameId: 'non-existent-id', gameId: 'non-existent-id',
color: GameColor.green, color: AppColor.green,
); );
expect(updated, isFalse); expect(updated, isFalse);
@@ -336,7 +336,7 @@ void main() {
name: newName, name: newName,
); );
const newGameColor = GameColor.teal; const newGameColor = AppColor.teal;
await database.gameDao.updateGameColor( await database.gameDao.updateGameColor(
gameId: testGame1.id, gameId: testGame1.id,
color: newGameColor, color: newGameColor,

View File

@@ -42,7 +42,7 @@ void main() {
name: 'Test Game', name: 'Test Game',
ruleset: Ruleset.singleWinner, ruleset: Ruleset.singleWinner,
description: 'A test game', description: 'A test game',
color: GameColor.blue, color: AppColor.blue,
icon: '', icon: '',
); );
testMatch1 = Match( testMatch1 = Match(

View File

@@ -40,7 +40,7 @@ void main() {
name: 'Test Game', name: 'Test Game',
ruleset: Ruleset.singleWinner, ruleset: Ruleset.singleWinner,
description: 'A test game', description: 'A test game',
color: GameColor.blue, color: AppColor.blue,
icon: '', icon: '',
); );
testMatch1 = Match( testMatch1 = Match(

View File

@@ -45,7 +45,7 @@ void main() {
name: 'Chess', name: 'Chess',
ruleset: Ruleset.singleWinner, ruleset: Ruleset.singleWinner,
description: 'Strategic board game', description: 'Strategic board game',
color: GameColor.blue, color: AppColor.blue,
icon: 'chess_icon', icon: 'chess_icon',
); );
@@ -445,19 +445,19 @@ void main() {
Game( Game(
name: 'Red Game', name: 'Red Game',
ruleset: Ruleset.singleWinner, ruleset: Ruleset.singleWinner,
color: GameColor.red, color: AppColor.red,
icon: 'icon', icon: 'icon',
), ),
Game( Game(
name: 'Blue Game', name: 'Blue Game',
ruleset: Ruleset.singleWinner, ruleset: Ruleset.singleWinner,
color: GameColor.blue, color: AppColor.blue,
icon: 'icon', icon: 'icon',
), ),
Game( Game(
name: 'Green Game', name: 'Green Game',
ruleset: Ruleset.singleWinner, ruleset: Ruleset.singleWinner,
color: GameColor.green, color: AppColor.green,
icon: 'icon', icon: 'icon',
), ),
]; ];
@@ -481,19 +481,19 @@ void main() {
Game( Game(
name: 'Highest Score Game', name: 'Highest Score Game',
ruleset: Ruleset.highestScore, ruleset: Ruleset.highestScore,
color: GameColor.blue, color: AppColor.blue,
icon: 'icon', icon: 'icon',
), ),
Game( Game(
name: 'Lowest Score Game', name: 'Lowest Score Game',
ruleset: Ruleset.lowestScore, ruleset: Ruleset.lowestScore,
color: GameColor.blue, color: AppColor.blue,
icon: 'icon', icon: 'icon',
), ),
Game( Game(
name: 'Single Winner', name: 'Single Winner',
ruleset: Ruleset.singleWinner, ruleset: Ruleset.singleWinner,
color: GameColor.blue, color: AppColor.blue,
icon: 'icon', icon: 'icon',
), ),
]; ];