import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../providers/auth_provider.dart'; class SignUpScreen extends ConsumerStatefulWidget { const SignUpScreen({super.key}); @override ConsumerState createState() => _SignUpScreenState(); } class _SignUpScreenState extends ConsumerState { final _formKey = GlobalKey(); final _nameController = TextEditingController(); final _emailController = TextEditingController(); final _passwordController = TextEditingController(); final _confirmPasswordController = TextEditingController(); final _organizationIdController = TextEditingController(); bool _isLoading = false; bool _obscurePassword = true; bool _obscureConfirmPassword = true; @override void dispose() { _nameController.dispose(); _emailController.dispose(); _passwordController.dispose(); _confirmPasswordController.dispose(); _organizationIdController.dispose(); super.dispose(); } Future _handleSignUp() async { if (!_formKey.currentState!.validate()) return; setState(() => _isLoading = true); try { final signUp = ref.read(signUpProvider); await signUp( email: _emailController.text.trim(), password: _passwordController.text, displayName: _nameController.text.trim(), organizationId: _organizationIdController.text.trim(), ); if (mounted) { Navigator.pop(context); } } catch (e) { if (mounted) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(e.toString()), backgroundColor: Colors.red, ), ); } } finally { if (mounted) { setState(() => _isLoading = false); } } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Opprett konto'), ), body: SafeArea( child: SingleChildScrollView( padding: const EdgeInsets.all(24.0), child: Form( key: _formKey, child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ // Navn TextFormField( controller: _nameController, decoration: const InputDecoration( labelText: 'Fullt navn', prefixIcon: Icon(Icons.person_outlined), ), validator: (value) { if (value == null || value.isEmpty) { return 'Vennligst skriv inn navn'; } return null; }, ), const SizedBox(height: 16), // E-post TextFormField( controller: _emailController, keyboardType: TextInputType.emailAddress, decoration: const InputDecoration( labelText: 'E-post', prefixIcon: Icon(Icons.email_outlined), ), validator: (value) { if (value == null || value.isEmpty) { return 'Vennligst skriv inn e-post'; } if (!value.contains('@')) { return 'Vennligst skriv inn en gyldig e-post'; } return null; }, ), const SizedBox(height: 16), // Organisasjons-ID TextFormField( controller: _organizationIdController, decoration: const InputDecoration( labelText: 'Organisasjons-ID', prefixIcon: Icon(Icons.business_outlined), helperText: 'Kontakt administrator for organisasjons-ID', ), validator: (value) { if (value == null || value.isEmpty) { return 'Vennligst skriv inn organisasjons-ID'; } return null; }, ), const SizedBox(height: 16), // Passord TextFormField( controller: _passwordController, obscureText: _obscurePassword, decoration: InputDecoration( labelText: 'Passord', prefixIcon: const Icon(Icons.lock_outlined), suffixIcon: IconButton( icon: Icon( _obscurePassword ? Icons.visibility_outlined : Icons.visibility_off_outlined, ), onPressed: () { setState(() { _obscurePassword = !_obscurePassword; }); }, ), ), validator: (value) { if (value == null || value.isEmpty) { return 'Vennligst skriv inn passord'; } if (value.length < 6) { return 'Passordet må være minst 6 tegn'; } return null; }, ), const SizedBox(height: 16), // Bekreft passord TextFormField( controller: _confirmPasswordController, obscureText: _obscureConfirmPassword, decoration: InputDecoration( labelText: 'Bekreft passord', prefixIcon: const Icon(Icons.lock_outlined), suffixIcon: IconButton( icon: Icon( _obscureConfirmPassword ? Icons.visibility_outlined : Icons.visibility_off_outlined, ), onPressed: () { setState(() { _obscureConfirmPassword = !_obscureConfirmPassword; }); }, ), ), validator: (value) { if (value == null || value.isEmpty) { return 'Vennligst bekreft passord'; } if (value != _passwordController.text) { return 'Passordene matcher ikke'; } return null; }, ), const SizedBox(height: 32), // Opprett konto knapp FilledButton( onPressed: _isLoading ? null : _handleSignUp, style: FilledButton.styleFrom( padding: const EdgeInsets.symmetric(vertical: 16), ), child: _isLoading ? const SizedBox( height: 20, width: 20, child: CircularProgressIndicator(strokeWidth: 2), ) : const Text('Opprett konto'), ), ], ), ), ), ), ); } }