import 'package:flutter/material.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:firebase_database/firebase_database.dart'; import 'package:firebase_core/firebase_core.dart'; class RegisterPage extends StatefulWidget { const RegisterPage({super.key}); @override State createState() => _RegisterPageState(); } class _RegisterPageState extends State { final usernameController = TextEditingController(); final emailController = TextEditingController(); final passwordController = TextEditingController(); bool isLoading = false; Future registerUser() async { // Validasi input sederhana agar tidak mengirim data kosong if (usernameController.text.isEmpty || emailController.text.isEmpty || passwordController.text.isEmpty) { ScaffoldMessenger.of( context, ).showSnackBar(const SnackBar(content: Text("Semua kolom harus diisi"))); return; } setState(() => isLoading = true); try { // 1. Buat user di Firebase Auth UserCredential userCredential = await FirebaseAuth.instance .createUserWithEmailAndPassword( email: emailController.text.trim(), password: passwordController.text.trim(), ); String uid = userCredential.user!.uid; // 2. Simpan profil ke Realtime Database // Gunakan key 'nama' agar terbaca oleh AkunPage await FirebaseDatabase.instanceFor( app: Firebase.app(), databaseURL: "https://tugas-akhir-9947b-default-rtdb.asia-southeast1.firebasedatabase.app", ).ref("users/$uid").set({ "nama": usernameController.text.trim(), // Key ini harus 'nama' "email": emailController.text.trim(), "uid": uid, // Opsional: simpan UID juga untuk referensi }); // 3. Logout dan kembali ke halaman sebelumnya (Login) await FirebaseAuth.instance.signOut(); if (mounted) { ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text("Registrasi berhasil, silakan login")), ); Navigator.pop(context); // Kembali ke halaman Login } } on FirebaseAuthException catch (e) { String message = "Registrasi gagal"; if (e.code == 'weak-password') message = "Password terlalu lemah"; if (e.code == 'email-already-in-use') message = "Email sudah terdaftar"; ScaffoldMessenger.of( context, ).showSnackBar(SnackBar(content: Text(message))); } catch (e) { ScaffoldMessenger.of( context, ).showSnackBar(SnackBar(content: Text("Terjadi kesalahan: $e"))); } finally { if (mounted) { setState(() => isLoading = false); } } } Widget buildTextField({ required String hint, required IconData icon, required TextEditingController controller, bool obscure = false, }) { return Container( margin: const EdgeInsets.only(bottom: 15), decoration: BoxDecoration( color: const Color(0xFFDCE9E1), borderRadius: BorderRadius.circular(10), ), child: TextField( controller: controller, obscureText: obscure, decoration: InputDecoration( prefixIcon: Icon(icon, color: Colors.grey), hintText: hint, border: InputBorder.none, contentPadding: const EdgeInsets.symmetric(vertical: 18), ), ), ); } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: const Color(0xFFE6F0EA), body: Padding( padding: const EdgeInsets.all(20), child: Center( child: SingleChildScrollView( child: Column( children: [ Image.asset( "assets/images/logo1.png", height: 240, // ✅ 2x lebih besar fit: BoxFit.contain, ), const SizedBox(height: 40), buildTextField( hint: "Username", icon: Icons.person, controller: usernameController, ), buildTextField( hint: "Email", icon: Icons.email, controller: emailController, ), buildTextField( hint: "Password", icon: Icons.lock, controller: passwordController, obscure: true, ), const SizedBox(height: 10), SizedBox( width: double.infinity, height: 50, child: ElevatedButton( onPressed: isLoading ? null : registerUser, style: ElevatedButton.styleFrom( backgroundColor: const Color(0xFF67B985), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(8), ), ), child: isLoading ? const CircularProgressIndicator(color: Colors.white) : const Text("Register"), ), ), const SizedBox(height: 15), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ const Text("sudah punya akun? "), GestureDetector( onTap: () => Navigator.pop(context), child: const Text( "Login", style: TextStyle( fontWeight: FontWeight.bold, color: Colors.black, ), ), ), ], ), ], ), ), ), ), ); } }