import 'package:flutter/material.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'dashboard.dart'; class SettingsPage extends StatefulWidget { const SettingsPage({super.key}); @override State createState() => _SettingsPageState(); } class _SettingsPageState extends State { final oldController = TextEditingController(); final newController = TextEditingController(); bool showOld = false; bool showNew = false; // 🔥 AMBIL PASSWORD DARI FIRESTORE Future getPassword() async { final doc = await FirebaseFirestore.instance .collection('settings') .doc('admin') .get(); return doc['password']; } // 🔥 UPDATE PASSWORD Future updatePassword() async { String currentPassword = await getPassword(); if (oldController.text != currentPassword) { ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text("Password lama salah")), ); return; } if (newController.text.isEmpty) { ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text("Password baru tidak boleh kosong")), ); return; } await FirebaseFirestore.instance .collection('settings') .doc('admin') .set({ 'password': newController.text, }); ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text("Password berhasil diubah")), ); Navigator.pushAndRemoveUntil( context, MaterialPageRoute(builder: (_) => Dashboard()), (route) => false, ); } @override void dispose() { oldController.dispose(); newController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: const Color(0xFFE6E7A3), body: SafeArea( child: Column( children: [ // 🔶 HEADER Padding( padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 10), child: Row( children: [ // 🔙 BACK GestureDetector( onTap: () => Navigator.pop(context), child: const CircleAvatar( backgroundColor: Colors.white, child: Icon(Icons.arrow_back), ), ), const SizedBox(width: 10), const Text( "Ganti Password", style: TextStyle( fontWeight: FontWeight.bold, fontSize: 16, ), ) ], ), ), const SizedBox(height: 20), // 🔶 CARD Container( margin: const EdgeInsets.symmetric(horizontal: 20), padding: const EdgeInsets.all(20), decoration: BoxDecoration( color: Colors.grey[200], borderRadius: BorderRadius.circular(20), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.1), blurRadius: 10, ) ], ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ const Text("Password lama"), const SizedBox(height: 5), TextField( controller: oldController, obscureText: !showOld, decoration: InputDecoration( filled: true, fillColor: Colors.white, border: OutlineInputBorder( borderRadius: BorderRadius.circular(10), ), suffixIcon: IconButton( icon: Icon( showOld ? Icons.visibility : Icons.visibility_off, ), onPressed: () { setState(() { showOld = !showOld; }); }, ), ), ), const SizedBox(height: 15), const Text("Password baru"), const SizedBox(height: 5), TextField( controller: newController, obscureText: !showNew, decoration: InputDecoration( filled: true, fillColor: Colors.white, border: OutlineInputBorder( borderRadius: BorderRadius.circular(10), ), suffixIcon: IconButton( icon: Icon( showNew ? Icons.visibility : Icons.visibility_off, ), onPressed: () { setState(() { showNew = !showNew; }); }, ), ), ), const SizedBox(height: 20), Center( child: ElevatedButton( style: ElevatedButton.styleFrom( backgroundColor: const Color(0xFFEFE49A), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(10), ), padding: const EdgeInsets.symmetric( horizontal: 40, vertical: 10), ), onPressed: updatePassword, child: const Text( "Update", style: TextStyle(color: Colors.black), ), ), ) ], ), ), ], ), ), ); } }