TKK_E32230939/poultryrail/lib/settings_page.dart

213 lines
6.2 KiB
Dart

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<SettingsPage> createState() => _SettingsPageState();
}
class _SettingsPageState extends State<SettingsPage> {
final oldController = TextEditingController();
final newController = TextEditingController();
bool showOld = false;
bool showNew = false;
// 🔥 AMBIL PASSWORD DARI FIRESTORE
Future<String> getPassword() async {
final doc = await FirebaseFirestore.instance
.collection('settings')
.doc('admin')
.get();
return doc['password'];
}
// 🔥 UPDATE PASSWORD
Future<void> 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),
),
),
)
],
),
),
],
),
),
);
}
}