Datenbankkorrekturen #25

Merged
flixcoo merged 7 commits from enhancement/24-datenbankkorrekturen into development 2025-11-16 20:57:40 +00:00
6 changed files with 44 additions and 90 deletions
Showing only changes of commit f06f333a8e - Show all commits

View File

@@ -1,8 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:game_tracker/core/custom_theme.dart'; import 'package:game_tracker/core/custom_theme.dart';
import 'package:game_tracker/data/db/database.dart'; import 'package:game_tracker/data/db/database.dart';
import 'package:game_tracker/data/dto/group.dart';
import 'package:game_tracker/data/dto/player.dart';
import 'package:game_tracker/presentation/views/main_menu/custom_navigation_bar.dart'; import 'package:game_tracker/presentation/views/main_menu/custom_navigation_bar.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@@ -21,7 +19,6 @@ class GameTracker extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
addSampleGroupData(context);
return MaterialApp( return MaterialApp(
debugShowCheckedModeBanner: false, debugShowCheckedModeBanner: false,
title: 'Game Tracker', title: 'Game Tracker',
flixcoo marked this conversation as resolved Outdated

musst dir die neue branch von mir reinmergen, sonst hast du ganz viele konflikte, unteranderem hier

musst dir die neue branch von mir reinmergen, sonst hast du ganz viele konflikte, unteranderem hier
@@ -42,74 +39,4 @@ class GameTracker extends StatelessWidget {
home: const CustomNavigationBar(), home: const CustomNavigationBar(),
); );
} }
Future<void> addSampleGroupData(BuildContext context) async {
final db = Provider.of<AppDatabase>(context, listen: false);
if (await db.groupDao.getGroupCount() == 0) {
final List<Player> allPlayers = [
Player(id: '1', name: 'Alex'),
Player(id: '2', name: 'Ben'),
Player(id: '3', name: 'Chris'),
Player(id: '4', name: 'Daniel'),
Player(id: '5', name: 'Max Mustermann'),
Player(id: '6', name: 'Sebastian'),
Player(id: '7', name: 'Jonathan'),
Player(id: '8', name: 'Alexander'),
];
// 2. Erstelle und füge 8 Gruppen mit unterschiedlicher Spieleranzahl hinzu
await db.groupDao.addGroup(
group: Group(
id: '1',
name: 'Anfänger',
members: allPlayers.sublist(0, 3),
),
); // 3 Spieler
await db.groupDao.addGroup(
group: Group(
id: '2',
name: 'Die glorreichen Sieben',
members: allPlayers.sublist(0, 7),
),
); // 7 Spieler
await db.groupDao.addGroup(
group: Group(
id: '3',
name: 'Profis',
members: allPlayers.sublist(4, 8),
),
); // 4 Spieler
await db.groupDao.addGroup(
group: Group(
id: '4',
name: 'Duo Infernale',
members: [allPlayers[0], allPlayers[7]],
),
); // 2 Spieler
await db.groupDao.addGroup(
group: Group(
id: '5',
name: 'Die fantastischen Fünf',
members: allPlayers.sublist(1, 6),
),
); // 5 Spieler
await db.groupDao.addGroup(
group: Group(
id: '6',
name: 'Feierabend-Zocker',
members: allPlayers.sublist(0, 6),
),
); // 6 Spieler
await db.groupDao.addGroup(
group: Group(id: '7', name: 'Alle Mann an Bord!', members: allPlayers),
); // 8 Spieler
await db.groupDao.addGroup(
group: Group(
id: '8',
name: 'Testgruppe Alpha',
members: [allPlayers[1], allPlayers[3]],
),
);
}
}
} }

View File

@@ -178,9 +178,15 @@ class _GameHistoryViewState extends State<GameHistoryView> {
Widget gameHistoryListView(allGameData, suggestedGameData) { Widget gameHistoryListView(allGameData, suggestedGameData) {
if (suggestedGameData.isEmpty && allGameData.isEmpty) { if (suggestedGameData.isEmpty && allGameData.isEmpty) {
return TopCenteredMessage(message: "Keine Spiele erstellt"); return TopCenteredMessage(
icon: Icons.info,
title: "Info",
message: "Keine Spiele erstellt",
);
} else if (suggestedGameData.isEmpty) { } else if (suggestedGameData.isEmpty) {
return TopCenteredMessage( return TopCenteredMessage(
flixcoo marked this conversation as resolved Outdated

hier z.B. auch

hier z.B. auch
icon: Icons.search,
title: "Info",
message: "Kein Spiel mit den Suchparametern gefunden.", message: "Kein Spiel mit den Suchparametern gefunden.",
); );
} }

View File

@@ -4,7 +4,7 @@ import 'package:game_tracker/data/db/database.dart';
import 'package:game_tracker/data/dto/group.dart'; import 'package:game_tracker/data/dto/group.dart';
import 'package:game_tracker/data/dto/player.dart'; import 'package:game_tracker/data/dto/player.dart';
import 'package:game_tracker/presentation/widgets/full_width_button.dart'; import 'package:game_tracker/presentation/widgets/full_width_button.dart';
import 'package:game_tracker/presentation/widgets/group_tile.dart'; import 'package:game_tracker/presentation/widgets/tiles/group_tile.dart';
import 'package:game_tracker/presentation/widgets/top_centered_message.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';
@@ -21,11 +21,11 @@ class _GroupsViewState extends State<GroupsView> {
final player = Player(id: 'p1', name: 'Sample'); final player = Player(id: 'p1', name: 'Sample');
late final List<Group> skeletonData = List.filled( late final List<Group> skeletonData = List.filled(
8, 7,
Group( Group(
id: '0', id: '0',
name: 'Sample Game', name: 'Sample Game',
members: [player, player, player, player], members: [player, player, player, player, player, player],
), ),
); );
@@ -50,7 +50,9 @@ class _GroupsViewState extends State<GroupsView> {
if (snapshot.hasError) { if (snapshot.hasError) {
return const Center( return const Center(
child: TopCenteredMessage( child: TopCenteredMessage(
message: 'Error while loading group data.', icon: Icons.report,
title: 'Error',
message: 'Group data couldn\'t\nbe loaded.',
), ),
); );
} }
@@ -58,6 +60,8 @@ class _GroupsViewState extends State<GroupsView> {
(!snapshot.hasData || snapshot.data!.isEmpty)) { (!snapshot.hasData || snapshot.data!.isEmpty)) {
return const Center( return const Center(
child: TopCenteredMessage( child: TopCenteredMessage(
icon: Icons.info,
title: 'Info',
message: 'No groups created yet.', message: 'No groups created yet.',
), ),
); );

View File

@@ -12,7 +12,7 @@ class FullWidthButton extends StatelessWidget {
return ElevatedButton( return ElevatedButton(
onPressed: onPressed, onPressed: onPressed,
style: ElevatedButton.styleFrom( style: ElevatedButton.styleFrom(
minimumSize: Size(MediaQuery.of(context).size.width * 0.90, 60), minimumSize: Size(MediaQuery.sizeOf(context).width * 0.9, 60),
backgroundColor: CustomTheme.primaryColor, backgroundColor: CustomTheme.primaryColor,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)),
), ),

View File

@@ -11,8 +11,7 @@ class GroupTile extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return Container(
width: MediaQuery.of(context).size.width * 0.90, margin: const EdgeInsets.symmetric(horizontal: 12, vertical: 10),
margin: const EdgeInsets.symmetric(horizontal: 20, vertical: 10),
padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 10), padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 10),
decoration: BoxDecoration( decoration: BoxDecoration(
color: CustomTheme.boxColor, color: CustomTheme.boxColor,
@@ -30,7 +29,7 @@ class GroupTile extends StatelessWidget {
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
style: const TextStyle( style: const TextStyle(
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
fontSize: 20, fontSize: 18,
), ),
), ),
const Spacer(), const Spacer(),
@@ -38,11 +37,11 @@ class GroupTile extends StatelessWidget {
'${group.members.length}', '${group.members.length}',
style: const TextStyle( style: const TextStyle(
fontWeight: FontWeight.w900, fontWeight: FontWeight.w900,
fontSize: 20, fontSize: 18,
), ),
), ),
const SizedBox(width: 3), const SizedBox(width: 3),
const Icon(Icons.group), const Icon(Icons.group, size: 22),
], ],
), ),
const SizedBox(height: 5), const SizedBox(height: 5),
@@ -66,7 +65,7 @@ class GroupTile extends StatelessWidget {
child: Text( child: Text(
member.name, member.name,
style: const TextStyle( style: const TextStyle(
fontSize: 17, fontSize: 14,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),
), ),

View File

@@ -1,9 +1,16 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class TopCenteredMessage extends StatelessWidget { class TopCenteredMessage extends StatelessWidget {
const TopCenteredMessage({super.key, required this.message}); const TopCenteredMessage({
super.key,
required this.icon,
required this.title,
required this.message,
});
final String title;
final String message; final String message;
final IconData icon;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@@ -11,10 +18,21 @@ class TopCenteredMessage extends StatelessWidget {
padding: const EdgeInsets.only(top: 100), padding: const EdgeInsets.only(top: 100),
margin: const EdgeInsets.symmetric(horizontal: 10), margin: const EdgeInsets.symmetric(horizontal: 10),
alignment: Alignment.topCenter, alignment: Alignment.topCenter,
child: Text( child: Column(
message, children: [
style: const TextStyle(fontSize: 20), Icon(icon, size: 45),
textAlign: TextAlign.center, const SizedBox(height: 10),
Text(
title,
style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
textAlign: TextAlign.center,
),
Text(
message,
style: const TextStyle(fontSize: 16),
textAlign: TextAlign.center,
),
],
), ),
); );
} }