TKK_E32230949/lib/screens/profile_screen.dart

193 lines
5.5 KiB
Dart

import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'login_screen.dart';
class ProfileScreen extends StatefulWidget {
const ProfileScreen({super.key});
@override
State<ProfileScreen> createState() => _ProfileScreenState();
}
class _ProfileScreenState extends State<ProfileScreen> {
String? name;
String? email;
@override
void initState() {
super.initState();
loadUserData();
}
Future<void> loadUserData() async {
final user = FirebaseAuth.instance.currentUser;
if (user != null) {
final doc = await FirebaseFirestore.instance
.collection("users")
.doc(user.uid)
.get();
setState(() {
name = doc.data()?["nama"];
email = doc.data()?["email"];
});
}
}
@override
Widget build(BuildContext context) {
final user = FirebaseAuth.instance.currentUser;
return Scaffold(
backgroundColor: const Color(0xFFF2F2F2),
body: Stack(
children: [
// ================= HEADER HIJAU =================
Container(
height: 180,
width: double.infinity,
decoration: const BoxDecoration(
color: Color(0xFF3DBE5A),
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(25),
bottomRight: Radius.circular(25),
),
),
),
// ================= CARD USER =================
Positioned(
top: 60,
left: 20,
right: 20,
child: Container(
padding: const EdgeInsets.all(15),
decoration: BoxDecoration(
color: Colors.grey.shade200,
borderRadius: BorderRadius.circular(15),
border: Border.all(color: Colors.black26),
boxShadow: const [
BoxShadow(
color: Colors.black12,
blurRadius: 12,
offset: Offset(0, 4),
)
],
),
child: Row(
children: [
const CircleAvatar(
radius: 28,
backgroundColor: Colors.black,
child:
Icon(Icons.person, color: Colors.white, size: 30),
),
const SizedBox(width: 12),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
name ?? "Loading...",
style: const TextStyle(
fontWeight: FontWeight.bold,
fontSize: 16,
),
),
Text(
email ?? user?.email ?? "-",
style:
const TextStyle(color: Colors.black54),
),
],
),
),
],
),
),
),
// ================= MENU =================
Padding(
padding: const EdgeInsets.only(top: 200),
child: Column(
children: [
_menuTile(
icon: Icons.info_outline,
title: "Info Aplikasi",
onTap: () {
showAboutDialog(
context: context,
applicationName: "Smart Watering",
applicationVersion: "1.0",
children: const [
Text(
"Aplikasi monitoring dan kontrol penyiraman otomatis.",
)
],
);
},
),
const SizedBox(height: 15),
_menuTile(
icon: Icons.logout,
title: "Log Out",
onTap: () async {
await FirebaseAuth.instance.signOut();
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(
builder: (_) => const LoginScreen(),
),
(route) => false,
);
},
),
],
),
),
],
),
);
}
// ================= WIDGET MENU =================
static Widget _menuTile({
required IconData icon,
required String title,
required VoidCallback onTap,
}) {
return GestureDetector(
onTap: onTap,
child: Container(
margin: const EdgeInsets.symmetric(horizontal: 20),
padding:
const EdgeInsets.symmetric(horizontal: 15, vertical: 18),
decoration: BoxDecoration(
color: Colors.grey.shade200,
borderRadius: BorderRadius.circular(15),
border: Border.all(color: Colors.black26),
),
child: Row(
children: [
Icon(icon),
const SizedBox(width: 12),
Expanded(
child: Text(
title,
style: const TextStyle(fontSize: 15),
),
),
const Icon(Icons.arrow_forward_ios, size: 16)
],
),
),
);
}
}