import 'package:flutter/material.dart'; import 'package:SIBAYAM/api_services/api_services.dart'; // Halaman Pendaftaran class RegisterPage extends StatefulWidget { @override _RegisterPageState createState() => _RegisterPageState(); } class _RegisterPageState extends State { final TextEditingController nameController = TextEditingController(); final TextEditingController emailController = TextEditingController(); final TextEditingController passwordController = TextEditingController(); final TextEditingController alamatController = TextEditingController(); final TextEditingController nomorHpController = TextEditingController(); bool _isLoading = false; final ApiService apiService = ApiService(); void _showErrorDialog(String message) { showDialog( context: context, builder: (context) => AlertDialog( title: Row( children: [ Icon(Icons.error_outline, color: Colors.red), SizedBox(width: 10), Text('Registrasi Gagal'), ], ), content: Text(message), actions: [ TextButton( onPressed: () => Navigator.of(context).pop(), child: Text( 'OK', style: TextStyle(color: Color(0xFF9DC08D)), ), ), ], shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(15), ), ), ); } void _showSuccessDialog() { showDialog( context: context, builder: (context) => AlertDialog( title: Row( children: [ Icon(Icons.check_circle, color: Color(0xFF9DC08D)), SizedBox(width: 10), Text('Berhasil'), ], ), content: Text('Registrasi berhasil! Silahkan login dengan akun Anda.'), actions: [ TextButton( onPressed: () { Navigator.of(context).pop(); // Close dialog Navigator.of(context).pop(); // Back to login page }, child: Text( 'OK', style: TextStyle(color: Color(0xFF9DC08D)), ), ), ], shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(15), ), ), ); } Future _handleRegister() async { // Validasi input if (nameController.text.isEmpty || emailController.text.isEmpty || passwordController.text.isEmpty || alamatController.text.isEmpty) { _showErrorDialog('Semua field harus diisi'); return; } setState(() { _isLoading = true; }); try { await apiService.registerUser( name: nameController.text, email: emailController.text, password: passwordController.text, alamat: alamatController.text, nomorTelepon: nomorHpController.text, ); _showSuccessDialog(); } catch (e) { _showErrorDialog(e.toString()); } finally { setState(() { _isLoading = false; }); } } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Color(0xFF9DC08D), appBar: AppBar( backgroundColor: Color(0xFF9DC08D), title: Text('Pendaftaran'), ), body: Center( child: SingleChildScrollView( child: Padding( padding: const EdgeInsets.symmetric(horizontal: 20.0), child: Card( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(15), ), elevation: 5, child: Padding( padding: const EdgeInsets.all(20.0), child: Column( children: [ TextField( decoration: InputDecoration( labelText: 'Nama', labelStyle: TextStyle(color: Colors.black.withOpacity(0.7)), border: OutlineInputBorder( borderRadius: BorderRadius.circular(10), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(10), borderSide: BorderSide(color: Colors.black.withOpacity(0.6), width: 2), ), ), controller: nameController, ), SizedBox(height: 20), TextField( obscureText: true, decoration: InputDecoration( labelText: 'Password', labelStyle: TextStyle(color: Colors.black.withOpacity(0.7)), border: OutlineInputBorder( borderRadius: BorderRadius.circular(10), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(10), borderSide: BorderSide(color: Colors.black.withOpacity(0.6), width: 2), ), ), controller: passwordController, ), SizedBox(height: 20), TextField( decoration: InputDecoration( labelText: 'Email', labelStyle: TextStyle(color: Colors.black.withOpacity(0.7)), border: OutlineInputBorder( borderRadius: BorderRadius.circular(10), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(10), borderSide: BorderSide(color: Colors.black.withOpacity(0.6), width: 2), ), ), controller: emailController, ), SizedBox(height: 20), TextField( decoration: InputDecoration( labelText: 'Alamat', labelStyle: TextStyle(color: Colors.black.withOpacity(0.7)), border: OutlineInputBorder( borderRadius: BorderRadius.circular(10), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(10), borderSide: BorderSide(color: Colors.black.withOpacity(0.6), width: 2), ), ), controller: alamatController, ), SizedBox(height: 20), // TextField( // decoration: InputDecoration( // labelText: 'Nomor HP', // labelStyle: TextStyle(color: Colors.black.withOpacity(0.7)), // border: OutlineInputBorder( // borderRadius: BorderRadius.circular(10), // ), // focusedBorder: OutlineInputBorder( // borderRadius: BorderRadius.circular(10), // borderSide: BorderSide(color: Colors.black.withOpacity(0.6), width: 2), // ), // ), // controller: nomorHpController, // ), SizedBox(height: 20), SizedBox( width: double.infinity, height: 50, child: ElevatedButton( style: ElevatedButton.styleFrom( backgroundColor: Colors.green, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(10), ), ), onPressed: _isLoading ? null : _handleRegister, child: _isLoading ? CircularProgressIndicator(color: Colors.white) : Text( 'Daftar', style: TextStyle( color: Colors.white, fontSize: 16, fontWeight: FontWeight.bold, ), ), ), ), ], ), ), ), ), ), ), ); } }