Regestrierung erweiter

main
joschy2002 2025-05-15 18:20:27 +02:00
parent ecd362928d
commit 1a96eb25fe
2 changed files with 171 additions and 112 deletions

View File

@ -14,9 +14,11 @@ class _LoginScreenState extends State<LoginScreen> {
final _formKey = GlobalKey<FormState>();
final _emailController = TextEditingController();
final _passwordController = TextEditingController();
final _nameController = TextEditingController();
String? _error;
bool _loading = false;
bool _isLogin = true;
bool _isTrainer = false;
Future<void> _submit() async {
setState(() { _loading = true; _error = null; });
@ -46,6 +48,8 @@ class _LoginScreenState extends State<LoginScreen> {
final uid = cred.user!.uid;
await FirebaseFirestore.instance.collection('User').doc(uid).set({
'email': _emailController.text.trim(),
'name': _nameController.text.trim(),
'role': _isTrainer ? 'trainer' : 'player',
'createdAt': FieldValue.serverTimestamp(),
});
widget.onLoginSuccess();
@ -72,6 +76,34 @@ class _LoginScreenState extends State<LoginScreen> {
children: [
Text(_isLogin ? 'Login' : 'Registrieren', style: Theme.of(context).textTheme.headlineMedium),
const SizedBox(height: 32),
if (!_isLogin) ...[
TextFormField(
controller: _nameController,
decoration: const InputDecoration(labelText: 'Name'),
validator: (v) => v != null && v.trim().isNotEmpty ? null : 'Name angeben',
),
const SizedBox(height: 16),
Row(
children: [
Checkbox(
value: _isTrainer,
onChanged: (v) {
setState(() { _isTrainer = v ?? false; });
},
),
const Text('Ich bin Trainer'),
const SizedBox(width: 16),
Checkbox(
value: !_isTrainer,
onChanged: (v) {
setState(() { _isTrainer = !(v ?? false); });
},
),
const Text('Ich bin Spieler'),
],
),
const SizedBox(height: 16),
],
TextFormField(
controller: _emailController,
decoration: const InputDecoration(labelText: 'E-Mail'),

View File

@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
class ProfileTab extends StatelessWidget {
final VoidCallback? onLogoutSuccess;
@ -16,17 +17,39 @@ class ProfileTab extends StatelessWidget {
Widget build(BuildContext context) {
final user = FirebaseAuth.instance.currentUser;
final email = user?.email ?? 'Keine E-Mail gefunden';
// Beispiel-Benutzerdaten (kannst du später dynamisch machen)
final uid = user?.uid;
return Scaffold(
body: uid == null
? const Center(child: Text('Nicht eingeloggt'))
: FutureBuilder<DocumentSnapshot>(
future: FirebaseFirestore.instance.collection('User').doc(uid).get(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return const Center(child: CircularProgressIndicator());
}
if (!snapshot.hasData || !snapshot.data!.exists) {
return const Center(child: Text('Keine Profildaten gefunden'));
}
final data = snapshot.data!.data() as Map<String, dynamic>;
final name = data['name'] ?? 'Unbekannt';
final role = data['role'] == 'trainer' ? 'Trainer' : 'Spieler';
final createdAt = (data['createdAt'] is Timestamp)
? (data['createdAt'] as Timestamp).toDate()
: null;
final createdAtStr = createdAt != null
? '${createdAt.day.toString().padLeft(2, '0')}.${createdAt.month.toString().padLeft(2, '0')}.${createdAt.year}'
: 'Unbekannt';
// Beispiel-Benutzerdaten (Statistiken als Demo)
final Map<String, dynamic> userData = {
'name': 'Max Mustermann',
'level': 'Fortgeschritten',
'joinedDate': '01.01.2024',
'name': name,
'level': role,
'joinedDate': createdAtStr,
'workoutsCompleted': 42,
'totalMinutes': 1260,
};
return Scaffold(
body: CustomScrollView(
return CustomScrollView(
slivers: [
SliverAppBar(
expandedHeight: 200,
@ -78,7 +101,9 @@ class ProfileTab extends StatelessWidget {
children: [
_buildInfoRow('E-Mail', email, Icons.email),
const Divider(),
_buildInfoRow('Level', userData['level'], Icons.star),
_buildInfoRow('Name', name, Icons.person),
const Divider(),
_buildInfoRow('Rolle', role, Icons.badge),
const Divider(),
_buildInfoRow(
'Mitglied seit',
@ -134,6 +159,8 @@ class ProfileTab extends StatelessWidget {
),
),
],
);
},
),
);
}