TKK_E32231279/lib/screens/admin_home_screen.dart

160 lines
4.9 KiB
Dart

import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import '../widgets/tambah_user.dart';
class AdminHomeScreen extends StatefulWidget {
const AdminHomeScreen({super.key});
@override
State<AdminHomeScreen> createState() => _AdminHomeScreenState();
}
class _AdminHomeScreenState extends State<AdminHomeScreen> {
final FirebaseFirestore _firestore = FirebaseFirestore.instance;
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: const Color(0xFF0B1600),
appBar: AppBar(
title: const Text(
"Manajemen Pengguna",
style: TextStyle(
fontWeight: FontWeight.bold,
),
),
centerTitle: true,
backgroundColor: const Color(0xFFA5CC36),
foregroundColor: Colors.black,
elevation: 0,
),
floatingActionButton: FloatingActionButton.extended(
backgroundColor: const Color(0xFFA5CC36),
foregroundColor: Colors.black,
icon: const Icon(Icons.person_add),
label: const Text("Tambah User"),
onPressed: () {
showDialog(
context: context,
barrierDismissible: false,
builder: (_) => const TambahUserDialog(),
);
},
),
body: StreamBuilder<QuerySnapshot>(
stream: _firestore.collection('users').snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return const Center(
child: CircularProgressIndicator(),
);
}
final users = snapshot.data!.docs;
if (users.isEmpty) {
return const Center(
child: Text(
"Belum ada user",
style: TextStyle(
color: Colors.white,
fontSize: 16,
),
),
);
}
return ListView.builder(
padding: const EdgeInsets.all(15),
itemCount: users.length,
itemBuilder: (context, index) {
final data =
users[index].data() as Map<String, dynamic>;
return Card(
margin: const EdgeInsets.only(bottom: 12),
elevation: 5,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20),
),
child: ListTile(
contentPadding: const EdgeInsets.all(15),
leading: CircleAvatar(
radius: 28,
backgroundColor:
const Color(0xFFA5CC36),
child: Icon(
data['role'] == 'admin'
? Icons.admin_panel_settings
: Icons.person,
color: Colors.black,
),
),
title: Text(
data['nama'] ?? '-',
style: const TextStyle(
fontWeight: FontWeight.bold,
),
),
subtitle: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
const SizedBox(height: 5),
Text(data['email'] ?? '-'),
const SizedBox(height: 5),
Container(
padding:
const EdgeInsets.symmetric(
horizontal: 10,
vertical: 4,
),
decoration: BoxDecoration(
color: data['role'] == 'admin'
? Colors.red.shade100
: Colors.green.shade100,
borderRadius:
BorderRadius.circular(10),
),
child: Text(
data['role'] ?? '-',
style: const TextStyle(
fontWeight:
FontWeight.bold,
),
),
),
if (data['rfid_uid'] != null &&
data['rfid_uid']
.toString()
.isNotEmpty)
Padding(
padding:
const EdgeInsets.only(
top: 5,
),
child: Text(
"RFID : ${data['rfid_uid']}",
),
),
],
),
),
);
},
);
},
),
);
}
}