TKK_E32210743/lib/adminhome.dart

156 lines
5.3 KiB
Dart

import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:monitoringlistrik/addtoken.dart';
import 'package:monitoringlistrik/monitoring.dart';
import 'package:monitoringlistrik/token.dart';
class AdminHomeScreen extends StatefulWidget {
@override
_AdminHomeScreenState createState() => _AdminHomeScreenState();
}
class _AdminHomeScreenState extends State<AdminHomeScreen> {
final FirebaseFirestore _firestore = FirebaseFirestore.instance;
bool isLoading = true;
List<Map<String, dynamic>> collectionData = [];
@override
void initState() {
super.initState();
fetchData();
}
Future<void> fetchData() async {
setState(() {
isLoading = true;
});
try {
QuerySnapshot querySnapshot = await _firestore.collection('room').get();
setState(() {
collectionData = querySnapshot.docs
.map((doc) => doc.data() as Map<String, dynamic>)
.toList();
});
} catch (e) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('Failed to fetch data: $e'),
backgroundColor: Colors.red,
),
);
} finally {
setState(() {
isLoading = false;
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.blueGrey[100],
appBar: AppBar(
backgroundColor: Colors.grey,
title: const Column(
children: [
Icon(Icons.desktop_windows_outlined, size: 30, color: Colors.white),
Text(
'DASHBOARD',
style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
),
Text(
'MONITORING',
style: TextStyle(fontSize: 16),
),
],
),
centerTitle: true,
toolbarHeight: 100,
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Container(
padding: EdgeInsets.symmetric(horizontal: 80),
width: MediaQuery.of(context).size.width,
height: 400,
child: isLoading
? Center(child: CircularProgressIndicator())
: Center(
child: ListView.builder(
itemCount: collectionData.length,
itemBuilder: (context, index) {
var data = collectionData[index];
return Padding(
padding: EdgeInsets.symmetric(vertical: 10),
child: ElevatedButton(
onPressed: () async {
print("aaaaaaa");
print(data['token'].toString());
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) =>
MonitoringScreen(
token: data['token'],
name: data['name'],
deadline: data['deadline'],
)),
);
},
child: Text(data['name']),
style: ElevatedButton.styleFrom(
primary: Colors.white,
onPrimary: Colors.black,
minimumSize: Size(200, 50),
textStyle: TextStyle(fontSize: 18),
),
));
}),
),
),
SizedBox(height: 40),
Container(
padding: EdgeInsets.all(8.0),
child: Text(
'Tambah Daya / Buat Token',
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold,
color: Colors.black,
),
textAlign: TextAlign.center,
),
),
Container(
margin: EdgeInsets.all(8.0),
child: ElevatedButton(
onPressed: () {
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => AddTokenScreen()),
);
},
child: Text('Buat Token'),
style: ElevatedButton.styleFrom(
primary: Colors.greenAccent,
padding: EdgeInsets.symmetric(horizontal: 24, vertical: 12),
),
),
),
const SizedBox(height: 40),
const Text(
'Pilih Kamar Untuk Monitoring dan Kontrol',
style: TextStyle(fontSize: 16, color: Colors.black),
),
],
),
),
);
}
}