import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import '../providers/auth_provider.dart'; import 'dashboard_page.dart'; class RegisterPage extends StatefulWidget { const RegisterPage({super.key}); @override State createState() => _RegisterPageState(); } class _RegisterPageState extends State { final _formKey = GlobalKey(); final _nameController = TextEditingController(); final _emailController = TextEditingController(); final _passwordController = TextEditingController(); final _confirmController = TextEditingController(); Future register() async { if (!_formKey.currentState!.validate()) { return; } final auth = context.read(); final result = await auth.register( name: _nameController.text.trim(), email: _emailController.text.trim(), password: _passwordController.text, ); if (!mounted) return; if (result == null) { Navigator.pushAndRemoveUntil( context, MaterialPageRoute(builder: (_) => const DashboardPage()), (route) => false, ); } else { ScaffoldMessenger.of( context, ).showSnackBar(SnackBar(content: Text(result))); } } @override void dispose() { _nameController.dispose(); _emailController.dispose(); _passwordController.dispose(); _confirmController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { final auth = context.watch(); return Scaffold( appBar: AppBar(title: const Text('Register')), body: SafeArea( child: SingleChildScrollView( padding: const EdgeInsets.all(24), child: Form( key: _formKey, child: Column( children: [ TextFormField( controller: _nameController, decoration: const InputDecoration( labelText: 'Nama', border: OutlineInputBorder(), ), validator: (value) { if (value == null || value.isEmpty) { return 'Nama wajib diisi'; } return null; }, ), const SizedBox(height: 20), TextFormField( controller: _emailController, decoration: const InputDecoration( labelText: 'Email', border: OutlineInputBorder(), ), validator: (value) { if (value == null || value.isEmpty) { return 'Email wajib diisi'; } return null; }, ), const SizedBox(height: 20), TextFormField( controller: _passwordController, obscureText: true, decoration: const InputDecoration( labelText: 'Password', border: OutlineInputBorder(), ), validator: (value) { if (value == null || value.length < 6) { return 'Password minimal 6 karakter'; } return null; }, ), const SizedBox(height: 20), TextFormField( controller: _confirmController, obscureText: true, decoration: const InputDecoration( labelText: 'Konfirmasi Password', border: OutlineInputBorder(), ), validator: (value) { if (value != _passwordController.text) { return 'Password tidak sama'; } return null; }, ), const SizedBox(height: 30), SizedBox( width: double.infinity, height: 50, child: ElevatedButton( onPressed: auth.isLoading ? null : register, child: auth.isLoading ? const CircularProgressIndicator() : const Text('Register'), ), ), ], ), ), ), ), ); } }