Regestrierung erweiter
parent
ecd362928d
commit
1a96eb25fe
|
|
@ -14,9 +14,11 @@ class _LoginScreenState extends State<LoginScreen> {
|
||||||
final _formKey = GlobalKey<FormState>();
|
final _formKey = GlobalKey<FormState>();
|
||||||
final _emailController = TextEditingController();
|
final _emailController = TextEditingController();
|
||||||
final _passwordController = TextEditingController();
|
final _passwordController = TextEditingController();
|
||||||
|
final _nameController = TextEditingController();
|
||||||
String? _error;
|
String? _error;
|
||||||
bool _loading = false;
|
bool _loading = false;
|
||||||
bool _isLogin = true;
|
bool _isLogin = true;
|
||||||
|
bool _isTrainer = false;
|
||||||
|
|
||||||
Future<void> _submit() async {
|
Future<void> _submit() async {
|
||||||
setState(() { _loading = true; _error = null; });
|
setState(() { _loading = true; _error = null; });
|
||||||
|
|
@ -46,6 +48,8 @@ class _LoginScreenState extends State<LoginScreen> {
|
||||||
final uid = cred.user!.uid;
|
final uid = cred.user!.uid;
|
||||||
await FirebaseFirestore.instance.collection('User').doc(uid).set({
|
await FirebaseFirestore.instance.collection('User').doc(uid).set({
|
||||||
'email': _emailController.text.trim(),
|
'email': _emailController.text.trim(),
|
||||||
|
'name': _nameController.text.trim(),
|
||||||
|
'role': _isTrainer ? 'trainer' : 'player',
|
||||||
'createdAt': FieldValue.serverTimestamp(),
|
'createdAt': FieldValue.serverTimestamp(),
|
||||||
});
|
});
|
||||||
widget.onLoginSuccess();
|
widget.onLoginSuccess();
|
||||||
|
|
@ -72,6 +76,34 @@ class _LoginScreenState extends State<LoginScreen> {
|
||||||
children: [
|
children: [
|
||||||
Text(_isLogin ? 'Login' : 'Registrieren', style: Theme.of(context).textTheme.headlineMedium),
|
Text(_isLogin ? 'Login' : 'Registrieren', style: Theme.of(context).textTheme.headlineMedium),
|
||||||
const SizedBox(height: 32),
|
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(
|
TextFormField(
|
||||||
controller: _emailController,
|
controller: _emailController,
|
||||||
decoration: const InputDecoration(labelText: 'E-Mail'),
|
decoration: const InputDecoration(labelText: 'E-Mail'),
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:firebase_auth/firebase_auth.dart';
|
import 'package:firebase_auth/firebase_auth.dart';
|
||||||
|
import 'package:cloud_firestore/cloud_firestore.dart';
|
||||||
|
|
||||||
class ProfileTab extends StatelessWidget {
|
class ProfileTab extends StatelessWidget {
|
||||||
final VoidCallback? onLogoutSuccess;
|
final VoidCallback? onLogoutSuccess;
|
||||||
|
|
@ -16,17 +17,39 @@ class ProfileTab extends StatelessWidget {
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final user = FirebaseAuth.instance.currentUser;
|
final user = FirebaseAuth.instance.currentUser;
|
||||||
final email = user?.email ?? 'Keine E-Mail gefunden';
|
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 = {
|
final Map<String, dynamic> userData = {
|
||||||
'name': 'Max Mustermann',
|
'name': name,
|
||||||
'level': 'Fortgeschritten',
|
'level': role,
|
||||||
'joinedDate': '01.01.2024',
|
'joinedDate': createdAtStr,
|
||||||
'workoutsCompleted': 42,
|
'workoutsCompleted': 42,
|
||||||
'totalMinutes': 1260,
|
'totalMinutes': 1260,
|
||||||
};
|
};
|
||||||
|
|
||||||
return Scaffold(
|
return CustomScrollView(
|
||||||
body: CustomScrollView(
|
|
||||||
slivers: [
|
slivers: [
|
||||||
SliverAppBar(
|
SliverAppBar(
|
||||||
expandedHeight: 200,
|
expandedHeight: 200,
|
||||||
|
|
@ -78,7 +101,9 @@ class ProfileTab extends StatelessWidget {
|
||||||
children: [
|
children: [
|
||||||
_buildInfoRow('E-Mail', email, Icons.email),
|
_buildInfoRow('E-Mail', email, Icons.email),
|
||||||
const Divider(),
|
const Divider(),
|
||||||
_buildInfoRow('Level', userData['level'], Icons.star),
|
_buildInfoRow('Name', name, Icons.person),
|
||||||
|
const Divider(),
|
||||||
|
_buildInfoRow('Rolle', role, Icons.badge),
|
||||||
const Divider(),
|
const Divider(),
|
||||||
_buildInfoRow(
|
_buildInfoRow(
|
||||||
'Mitglied seit',
|
'Mitglied seit',
|
||||||
|
|
@ -134,6 +159,8 @@ class ProfileTab extends StatelessWidget {
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
);
|
||||||
|
},
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue