New Categories added
parent
9a8561e45e
commit
1c0734b6e7
|
|
@ -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<TrainingCategory> 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),
|
||||||
|
];
|
||||||
|
|
@ -5,6 +5,7 @@ import 'package:flutter/material.dart';
|
||||||
import 'package:cloud_firestore/cloud_firestore.dart';
|
import 'package:cloud_firestore/cloud_firestore.dart';
|
||||||
import 'package:firebase_auth/firebase_auth.dart';
|
import 'package:firebase_auth/firebase_auth.dart';
|
||||||
import 'training_detail_screen.dart';
|
import 'training_detail_screen.dart';
|
||||||
|
import '../models/categories.dart';
|
||||||
|
|
||||||
/// The FavoritesTab displays the user's favorite exercises and allows filtering by category.
|
/// The FavoritesTab displays the user's favorite exercises and allows filtering by category.
|
||||||
class FavoritesTab extends StatefulWidget {
|
class FavoritesTab extends StatefulWidget {
|
||||||
|
|
@ -17,14 +18,7 @@ class FavoritesTab extends StatefulWidget {
|
||||||
|
|
||||||
/// State for the FavoritesTab, manages category selection and favorite loading.
|
/// State for the FavoritesTab, manages category selection and favorite loading.
|
||||||
class _FavoritesTabState extends State<FavoritesTab> {
|
class _FavoritesTabState extends State<FavoritesTab> {
|
||||||
static const List<String> _categories = [
|
List<String> get _categories => kTrainingCategories.map((c) => c.name).toList();
|
||||||
'Aufwärmen & Mobilisation',
|
|
||||||
'Wurf- & Torabschluss',
|
|
||||||
'Torwarttraining',
|
|
||||||
'Athletik',
|
|
||||||
'Pass',
|
|
||||||
'Koordination',
|
|
||||||
];
|
|
||||||
String? _selectedCategory;
|
String? _selectedCategory;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ import 'favorites_tab.dart';
|
||||||
import 'calendar_tab.dart';
|
import 'calendar_tab.dart';
|
||||||
import 'profile_tab.dart';
|
import 'profile_tab.dart';
|
||||||
import 'training_detail_screen.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.
|
/// The main home screen of the app, containing the bottom navigation bar and all main tabs.
|
||||||
class HomeScreen extends StatefulWidget {
|
class HomeScreen extends StatefulWidget {
|
||||||
|
|
@ -391,14 +392,11 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||||
scrollDirection: Axis.horizontal,
|
scrollDirection: Axis.horizontal,
|
||||||
child: Row(
|
child: Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
children: [
|
children: kTrainingCategories.map((cat) => _buildFavoriteCircle(
|
||||||
_buildFavoriteCircle('Aufwärmen & Mobilisation', Icons.directions_run, categoryColors['Aufwärmen & Mobilisation']!),
|
cat.name,
|
||||||
_buildFavoriteCircle('Wurf- & Torabschluss', Icons.sports_handball, categoryColors['Wurf- & Torabschluss']!),
|
cat.icon,
|
||||||
_buildFavoriteCircle('Torwarttraining', Icons.sports, categoryColors['Torwarttraining']!),
|
categoryColors[cat.name] ?? Colors.grey,
|
||||||
_buildFavoriteCircle('Athletik', Icons.fitness_center, categoryColors['Athletik']!),
|
)).toList(),
|
||||||
_buildFavoriteCircle('Pass', Icons.compare_arrows, categoryColors['Pass']!),
|
|
||||||
_buildFavoriteCircle('Koordination', Icons.directions_walk, categoryColors['Koordination']!),
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
@ -583,4 +581,6 @@ const Map<String, Color> categoryColors = {
|
||||||
'Athletik': Colors.blue,
|
'Athletik': Colors.blue,
|
||||||
'Pass': Colors.purple,
|
'Pass': Colors.purple,
|
||||||
'Koordination': Colors.teal,
|
'Koordination': Colors.teal,
|
||||||
|
'Spielformen': Colors.indigo,
|
||||||
|
'kleine Spiele': Colors.brown,
|
||||||
};
|
};
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import '../widgets/category_circle.dart';
|
import '../widgets/category_circle.dart';
|
||||||
import '../widgets/exercise_card.dart';
|
import '../widgets/exercise_card.dart';
|
||||||
|
import '../models/categories.dart';
|
||||||
|
|
||||||
/// The HomeTab displays a welcome message, featured image, favorite categories, and exercise suggestions.
|
/// The HomeTab displays a welcome message, featured image, favorite categories, and exercise suggestions.
|
||||||
class HomeTab extends StatelessWidget {
|
class HomeTab extends StatelessWidget {
|
||||||
|
|
@ -66,18 +67,7 @@ class HomeTab extends StatelessWidget {
|
||||||
height: 100,
|
height: 100,
|
||||||
child: ListView(
|
child: ListView(
|
||||||
scrollDirection: Axis.horizontal,
|
scrollDirection: Axis.horizontal,
|
||||||
children: const [
|
children: kTrainingCategories.map((cat) => CategoryCircle(title: cat.name, icon: cat.icon)).toList(),
|
||||||
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),
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(height: 20),
|
const SizedBox(height: 20),
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import 'package:firebase_storage/firebase_storage.dart';
|
||||||
import 'package:image_picker/image_picker.dart';
|
import 'package:image_picker/image_picker.dart';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
import 'training_detail_screen.dart';
|
import 'training_detail_screen.dart';
|
||||||
|
import '../models/categories.dart';
|
||||||
|
|
||||||
/// The SearchTab displays a searchable and filterable list of training exercises.
|
/// The SearchTab displays a searchable and filterable list of training exercises.
|
||||||
class SearchTab extends StatefulWidget {
|
class SearchTab extends StatefulWidget {
|
||||||
|
|
@ -27,14 +28,7 @@ class _SearchTabState extends State<SearchTab> {
|
||||||
// Controller for the search input field.
|
// Controller for the search input field.
|
||||||
final TextEditingController _searchController = TextEditingController();
|
final TextEditingController _searchController = TextEditingController();
|
||||||
// List of available exercise categories.
|
// List of available exercise categories.
|
||||||
final List<String> _categories = [
|
List<String> get _categories => kTrainingCategories.map((c) => c.name).toList();
|
||||||
'Aufwärmen & Mobilisation',
|
|
||||||
'Wurf- & Torabschluss',
|
|
||||||
'Torwarttraining',
|
|
||||||
'Athletik',
|
|
||||||
'Pass',
|
|
||||||
'Koordination',
|
|
||||||
];
|
|
||||||
// Currently selected category for filtering.
|
// Currently selected category for filtering.
|
||||||
String? _selectedCategory;
|
String? _selectedCategory;
|
||||||
// Current search term entered by the user.
|
// Current search term entered by the user.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue