From 1c0734b6e70ab8e6411a55419aeb2e7012108192 Mon Sep 17 00:00:00 2001 From: joschy2002 Date: Wed, 25 Jun 2025 18:41:15 +0200 Subject: [PATCH] New Categories added --- trainerbox/lib/models/categories.dart | 20 ++++++++++++++++++++ trainerbox/lib/screens/favorites_tab.dart | 10 ++-------- trainerbox/lib/screens/home_screen.dart | 16 ++++++++-------- trainerbox/lib/screens/home_tab.dart | 14 ++------------ trainerbox/lib/screens/search_tab.dart | 10 ++-------- 5 files changed, 34 insertions(+), 36 deletions(-) create mode 100644 trainerbox/lib/models/categories.dart diff --git a/trainerbox/lib/models/categories.dart b/trainerbox/lib/models/categories.dart new file mode 100644 index 0000000..7577243 --- /dev/null +++ b/trainerbox/lib/models/categories.dart @@ -0,0 +1,20 @@ +// categories.dart +// Central list of all training categories with their names and icons. +import 'package:flutter/material.dart'; + +class TrainingCategory { + final String name; + final IconData icon; + const TrainingCategory({required this.name, required this.icon}); +} + +const List kTrainingCategories = [ + TrainingCategory(name: 'Aufwärmen & Mobilisation', icon: Icons.directions_run), + TrainingCategory(name: 'Wurf- & Torabschluss', icon: Icons.sports_handball), + TrainingCategory(name: 'Torwarttraining', icon: Icons.sports_soccer), + TrainingCategory(name: 'Athletik', icon: Icons.fitness_center), + TrainingCategory(name: 'Pass', icon: Icons.sports_volleyball), + TrainingCategory(name: 'Koordination', icon: Icons.directions_walk), + TrainingCategory(name: 'Spielformen', icon: Icons.sports), + TrainingCategory(name: 'kleine Spiele', icon: Icons.sports_basketball), +]; \ No newline at end of file diff --git a/trainerbox/lib/screens/favorites_tab.dart b/trainerbox/lib/screens/favorites_tab.dart index d764d2c..2373f4d 100644 --- a/trainerbox/lib/screens/favorites_tab.dart +++ b/trainerbox/lib/screens/favorites_tab.dart @@ -5,6 +5,7 @@ import 'package:flutter/material.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'training_detail_screen.dart'; +import '../models/categories.dart'; /// The FavoritesTab displays the user's favorite exercises and allows filtering by category. class FavoritesTab extends StatefulWidget { @@ -17,14 +18,7 @@ class FavoritesTab extends StatefulWidget { /// State for the FavoritesTab, manages category selection and favorite loading. class _FavoritesTabState extends State { - static const List _categories = [ - 'Aufwärmen & Mobilisation', - 'Wurf- & Torabschluss', - 'Torwarttraining', - 'Athletik', - 'Pass', - 'Koordination', - ]; + List get _categories => kTrainingCategories.map((c) => c.name).toList(); String? _selectedCategory; @override diff --git a/trainerbox/lib/screens/home_screen.dart b/trainerbox/lib/screens/home_screen.dart index ca98618..3a63076 100644 --- a/trainerbox/lib/screens/home_screen.dart +++ b/trainerbox/lib/screens/home_screen.dart @@ -10,6 +10,7 @@ import 'favorites_tab.dart'; import 'calendar_tab.dart'; import 'profile_tab.dart'; import 'training_detail_screen.dart'; +import '../models/categories.dart'; /// The main home screen of the app, containing the bottom navigation bar and all main tabs. class HomeScreen extends StatefulWidget { @@ -391,14 +392,11 @@ class _HomeScreenState extends State { scrollDirection: Axis.horizontal, child: Row( mainAxisAlignment: MainAxisAlignment.center, - children: [ - _buildFavoriteCircle('Aufwärmen & Mobilisation', Icons.directions_run, categoryColors['Aufwärmen & Mobilisation']!), - _buildFavoriteCircle('Wurf- & Torabschluss', Icons.sports_handball, categoryColors['Wurf- & Torabschluss']!), - _buildFavoriteCircle('Torwarttraining', Icons.sports, categoryColors['Torwarttraining']!), - _buildFavoriteCircle('Athletik', Icons.fitness_center, categoryColors['Athletik']!), - _buildFavoriteCircle('Pass', Icons.compare_arrows, categoryColors['Pass']!), - _buildFavoriteCircle('Koordination', Icons.directions_walk, categoryColors['Koordination']!), - ], + children: kTrainingCategories.map((cat) => _buildFavoriteCircle( + cat.name, + cat.icon, + categoryColors[cat.name] ?? Colors.grey, + )).toList(), ), ), ), @@ -583,4 +581,6 @@ const Map categoryColors = { 'Athletik': Colors.blue, 'Pass': Colors.purple, 'Koordination': Colors.teal, + 'Spielformen': Colors.indigo, + 'kleine Spiele': Colors.brown, }; \ No newline at end of file diff --git a/trainerbox/lib/screens/home_tab.dart b/trainerbox/lib/screens/home_tab.dart index 30403cb..a10822b 100644 --- a/trainerbox/lib/screens/home_tab.dart +++ b/trainerbox/lib/screens/home_tab.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import '../widgets/category_circle.dart'; import '../widgets/exercise_card.dart'; +import '../models/categories.dart'; /// The HomeTab displays a welcome message, featured image, favorite categories, and exercise suggestions. class HomeTab extends StatelessWidget { @@ -66,18 +67,7 @@ class HomeTab extends StatelessWidget { height: 100, child: ListView( scrollDirection: Axis.horizontal, - children: const [ - CategoryCircle( - title: 'Kondition', - icon: Icons.directions_run, - ), - CategoryCircle(title: 'Wurf', icon: Icons.sports_handball), - CategoryCircle( - title: 'Passen', - icon: Icons.sports_volleyball, - ), - CategoryCircle(title: 'Torhüter', icon: Icons.sports_soccer), - ], + children: kTrainingCategories.map((cat) => CategoryCircle(title: cat.name, icon: cat.icon)).toList(), ), ), const SizedBox(height: 20), diff --git a/trainerbox/lib/screens/search_tab.dart b/trainerbox/lib/screens/search_tab.dart index e365453..774dc9f 100644 --- a/trainerbox/lib/screens/search_tab.dart +++ b/trainerbox/lib/screens/search_tab.dart @@ -5,6 +5,7 @@ import 'package:firebase_storage/firebase_storage.dart'; import 'package:image_picker/image_picker.dart'; import 'dart:io'; import 'training_detail_screen.dart'; +import '../models/categories.dart'; /// The SearchTab displays a searchable and filterable list of training exercises. class SearchTab extends StatefulWidget { @@ -27,14 +28,7 @@ class _SearchTabState extends State { // Controller for the search input field. final TextEditingController _searchController = TextEditingController(); // List of available exercise categories. - final List _categories = [ - 'Aufwärmen & Mobilisation', - 'Wurf- & Torabschluss', - 'Torwarttraining', - 'Athletik', - 'Pass', - 'Koordination', - ]; + List get _categories => kTrainingCategories.map((c) => c.name).toList(); // Currently selected category for filtering. String? _selectedCategory; // Current search term entered by the user.