HomeView Mock-Daten entfernen #51

Merged
sneeex merged 7 commits from enhancement/46-homeview-mockdaten-entfernen into development 2025-11-23 18:19:54 +00:00
Showing only changes of commit def37aa640 - Show all commits

View File

@@ -7,7 +7,6 @@ import 'package:game_tracker/presentation/widgets/buttons/quick_create_button.da
import 'package:game_tracker/presentation/widgets/tiles/game_tile.dart'; import 'package:game_tracker/presentation/widgets/tiles/game_tile.dart';
import 'package:game_tracker/presentation/widgets/tiles/info_tile.dart'; import 'package:game_tracker/presentation/widgets/tiles/info_tile.dart';
import 'package:game_tracker/presentation/widgets/tiles/quick_info_tile.dart'; import 'package:game_tracker/presentation/widgets/tiles/quick_info_tile.dart';
import 'package:game_tracker/presentation/widgets/top_centered_message.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:skeletonizer/skeletonizer.dart'; import 'package:skeletonizer/skeletonizer.dart';
@@ -35,8 +34,7 @@ class _HomeViewState extends State<HomeView> {
Player(name: 'Skeleton Player 2'), Player(name: 'Skeleton Player 2'),
], ],
), ),
winner: winner: Player(name: 'Skeleton Player 1'),
"Winner ID", //TODO: Should be player object, but isnt yet, waiting for pr
), ),
); );
@@ -73,7 +71,7 @@ class _HomeViewState extends State<HomeView> {
enabled: isLoading, enabled: isLoading,
enableSwitchAnimation: true, enableSwitchAnimation: true,
switchAnimationConfig: SwitchAnimationConfig( switchAnimationConfig: SwitchAnimationConfig(
duration: Duration(milliseconds: 200), duration: const Duration(milliseconds: 200),
switchInCurve: Curves.linear, switchInCurve: Curves.linear,
switchOutCurve: Curves.linear, switchOutCurve: Curves.linear,
transitionBuilder: AnimatedSwitcher.defaultTransitionBuilder, transitionBuilder: AnimatedSwitcher.defaultTransitionBuilder,
@@ -130,70 +128,79 @@ class _HomeViewState extends State<HomeView> {
), ),
], ],
), ),
FutureBuilder( Padding(
future: _recentGamesFuture, padding: const EdgeInsets.symmetric(vertical: 16.0),
builder: (context, snapshot) { child: InfoTile(
if (snapshot.hasError) { width: constraints.maxWidth * 0.95,
return const Center( title: 'Recent Games',
child: TopCenteredMessage( icon: Icons.timer,
icon: Icons.report, content: Padding(
title: 'Error', padding: const EdgeInsets.symmetric(horizontal: 40.0),
message: 'Group data couldn\'t\nbe loaded.', child: FutureBuilder(
), future: _recentGamesFuture,
); builder: (context, snapshot) {
} if (snapshot.hasError) {
if (snapshot.connectionState == ConnectionState.done && return const Center(
(!snapshot.hasData || snapshot.data!.isEmpty)) { heightFactor: 4,
return const Center( child: Text('Error while loading recent games.'),
child: TopCenteredMessage( );
icon: Icons.info, }
title: 'Info', if (snapshot.connectionState ==
message: 'No games created yet.', ConnectionState.done &&
), (!snapshot.hasData || snapshot.data!.isEmpty)) {
); return const Center(
} heightFactor: 4,
final List<Game> games = child: Text('No recent games available.'),
isLoading ? skeletonData : (snapshot.data ?? []) );
..sort((a, b) => b.createdAt.compareTo(a.createdAt)); }
return Padding( final List<Game> games =
sneeex marked this conversation as resolved Outdated

Fehler taucht auf, wenn man die App startet. Könnte an dieser Zeile liegen. Ggf. die Skeleton Daten in der gleichen Variable wie die reelen Daten speichern und dann überhscreiben, wenn diese geladen sind

grafik.png

Fehler taucht auf, wenn man die App startet. Könnte an dieser Zeile liegen. Ggf. die Skeleton Daten in der gleichen Variable wie die reelen Daten speichern und dann überhscreiben, wenn diese geladen sind ![grafik.png](/attachments/c5f0c078-7338-480e-9c90-457afca0237c)
285 KiB
padding: const EdgeInsets.symmetric(vertical: 16.0), (isLoading ? skeletonData : (snapshot.data ?? [])
child: InfoTile( ..sort(
width: constraints.maxWidth * 0.95, (a, b) =>
title: 'Recent Games', b.createdAt.compareTo(a.createdAt),
icon: Icons.timer, ))
content: Padding( .take(2)
padding: EdgeInsets.symmetric(horizontal: 40.0), .toList();
child: Column( return Column(
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
GameTile( GameTile(
gameTitle: games[0].name, gameTitle: games[0].name,
gameType: "Gametype", gameType: 'Winner',
ruleset: 'Ruleset', ruleset: 'Ruleset',
players: _getPlayerText(games[0]), players: _getPlayerText(games[0]),
winner: winner: games[0].winner == null
'Leonard', //TODO: Replace Winner with real Winner ? 'No winner set.'
: games[0].winner!.name,
), ),
Padding( const Padding(
padding: EdgeInsets.symmetric(vertical: 8.0), padding: EdgeInsets.symmetric(vertical: 8.0),
child: Divider(), child: Divider(),
), ),
GameTile( if (games.length >= 2) ...[
gameTitle: games[1].name, GameTile(
gameType: 'Gametype', gameTitle: games[1].name,
ruleset: 'Ruleset', gameType: 'Winner',
players: _getPlayerText(games[1]), ruleset: 'Ruleset',
winner: players: _getPlayerText(games[1]),
'Lina', //TODO: Replace Winner with real Winner winner: games[1].winner == null
), ? 'No winner set.'
sneeex marked this conversation as resolved Outdated

Lieber sowas wie Game in Progress oder so

Lieber sowas wie `Game in Progress` oder so
SizedBox(height: 8), : games[1].winner!.name,
),
const SizedBox(height: 8),
] else ...[
const Center(
heightFactor: 4,
child: Text('No second game available.'),
),
],
], ],
), );
), },
), ),
); ),
}, ),
), ),
InfoTile( InfoTile(
width: constraints.maxWidth * 0.95, width: constraints.maxWidth * 0.95,
@@ -254,7 +261,8 @@ class _HomeViewState extends State<HomeView> {
String _getPlayerText(Game game) { String _getPlayerText(Game game) {
if (game.group == null) { if (game.group == null) {
return game.players?.map((p) => p.name).join(', ') ?? 'No Players'; final playerCount = game.players?.length ?? 0;
return '$playerCount Player(s)';
sneeex marked this conversation as resolved Outdated

Eigentlich reicht "Players", es soll eigentlich keine Spieler mit einem Spieler geben

Eigentlich reicht "Players", es soll eigentlich keine Spieler mit einem Spieler geben
} }
if (game.players == null || game.players!.isEmpty) { if (game.players == null || game.players!.isEmpty) {
return game.group!.name; return game.group!.name;