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 { final FirebaseFirestore _firestore = FirebaseFirestore.instance; bool isLoading = true; List> collectionData = []; @override void initState() { super.initState(); fetchData(); } Future fetchData() async { setState(() { isLoading = true; }); try { QuerySnapshot querySnapshot = await _firestore.collection('room').get(); setState(() { collectionData = querySnapshot.docs .map((doc) => doc.data() as Map) .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: [ 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), ), ], ), ), ); } }