E32221324_Iot_Running/lib/screens/edit_profile_screen.dart

142 lines
4.7 KiB
Dart

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<EditProfileScreen> createState() => _EditProfileScreenState();
}
class _EditProfileScreenState extends State<EditProfileScreen> {
final TextEditingController usernameController = TextEditingController();
String? selectedGender;
bool isLoading = true;
@override
void initState() {
super.initState();
fetchUserData();
}
Future<void> 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<void> 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<String>(
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)),
),
),
],
),
),
);
}
}