import 'package:flutter/material.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_auth/firebase_auth.dart'; class EditProfileScreen extends StatefulWidget { const EditProfileScreen({super.key}); @override State createState() => _EditProfileScreenState(); } class _EditProfileScreenState extends State { final TextEditingController usernameController = TextEditingController(); String? selectedGender; bool isLoading = true; @override void initState() { super.initState(); fetchUserData(); } Future fetchUserData() async { final user = FirebaseAuth.instance.currentUser; if (user != null) { final doc = await FirebaseFirestore.instance.collection('users').doc(user.uid).get(); final data = doc.data(); if (data != null) { usernameController.text = data['username'] ?? ''; selectedGender = data['gender'] ?? ''; } } setState(() { isLoading = false; }); } Future saveProfile() async { final username = usernameController.text.trim(); if (username.isEmpty || username.length < 3) { showDialog( context: context, builder: (context) => AlertDialog( title: const Text("Peringatan"), content: const Text("Username minimal 3 karakter"), actions: [ TextButton( child: const Text("OK"), onPressed: () => Navigator.pop(context), ), ], ), ); return; } final user = FirebaseAuth.instance.currentUser; if (user != null) { await FirebaseFirestore.instance.collection('users').doc(user.uid).update({ 'username': username, 'gender': selectedGender, }); ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text('Profil berhasil diperbarui!'), behavior: SnackBarBehavior.floating, margin: EdgeInsets.all(50), duration: Duration(seconds: 2), ), ); Navigator.pop(context, true); } } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.white, appBar: AppBar( title: const Text('Edit profile', style: TextStyle(color: Colors.white),), automaticallyImplyLeading: true, backgroundColor: Colors.blueAccent, iconTheme: const IconThemeData(color: Colors.white), ), body: isLoading ? const Center(child: CircularProgressIndicator()) : Padding( padding: const EdgeInsets.all(20), child: Column( children: [ const SizedBox(height: 20), Card( color: Colors.white, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)), elevation: 4, child: Padding( padding: const EdgeInsets.all(20), child: Column( children: [ TextField( controller: usernameController, decoration: const InputDecoration(labelText: "Username"), ), const SizedBox(height: 16), DropdownButtonFormField( value: selectedGender, items: const [ DropdownMenuItem(value: 'Laki-laki', child: Text('Laki-laki')), DropdownMenuItem(value: 'Perempuan', child: Text('Perempuan')), ], onChanged: (value) { setState(() { selectedGender = value; }); }, decoration: const InputDecoration(labelText: "Jenis Kelamin"), ), ], ), ), ), const Spacer(), ElevatedButton.icon( onPressed: saveProfile, icon: const Icon(Icons.save), label: const Text("Simpan Perubahan"), style: ElevatedButton.styleFrom( backgroundColor: Colors.blueAccent, foregroundColor: Colors.white, padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 12), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), ), ), ], ), ), ); } }