import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart'; import 'package:monitoringlistrik/adminhome.dart'; class TokenScreen extends StatefulWidget { @override _TokenScreenState createState() => _TokenScreenState(); const TokenScreen({ Key? key, required this.token, }) : super(key: key); final String token; } class _TokenScreenState extends State { final FirebaseFirestore _firestore = FirebaseFirestore.instance; final TextEditingController _tokenController = TextEditingController(); DateTime _selectedDate = DateTime.now(); int _selectedPackage = 0; Future updateDeadline() async { int days; switch (_selectedPackage) { case 1: days = 10; break; case 2: days = 15; break; case 3: days = 30; break; default: return; } try { QuerySnapshot querySnapshot = await _firestore .collection('room') .where('token', isEqualTo: widget.token) .get(); if (querySnapshot.docs.isNotEmpty) { String docId = querySnapshot.docs[0].id; DocumentSnapshot doc = querySnapshot.docs[0]; Timestamp currentDeadline = doc['deadline']; DateTime newDeadline = currentDeadline.toDate().add(Duration(days: days)); Timestamp deadlineTimestamp = Timestamp.fromDate(newDeadline); await _firestore.collection('room').doc(docId).update({ 'deadline': deadlineTimestamp, }); ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text('Deadline berhasil diperbarui'), backgroundColor: Colors.green, ), ); // Display the token } else { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text('Token tidak ditemukan'), backgroundColor: Colors.red, ), ); } } catch (e) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text('Gagal memperbarui deadline: $e'), backgroundColor: Colors.red, ), ); } } Widget _buildPackageButton(String text, int packageId) { return Container( margin: EdgeInsets.symmetric(vertical: 10.0, horizontal: 20.0), width: 300, child: ElevatedButton( onPressed: () { setState(() { _selectedPackage = packageId; }); }, child: Text( text, style: TextStyle(fontSize: 18), ), style: ElevatedButton.styleFrom( primary: _selectedPackage == packageId ? Colors.blue : Colors.white, onPrimary: _selectedPackage == packageId ? Colors.white : Colors.black, padding: EdgeInsets.symmetric(horizontal: 24, vertical: 12), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(30), ), ), ), ); } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.grey, body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Container( padding: EdgeInsets.all(16.0), decoration: BoxDecoration( color: const Color.fromARGB(255, 227, 227, 227), borderRadius: BorderRadius.all(Radius.circular(30)), ), child: Text( 'Pembelian Token Listrik', style: TextStyle(fontSize: 24), ), ), Spacer(), Container( padding: EdgeInsets.all(16.0), child: Text( 'Token', style: TextStyle(fontSize: 20), ), ), Padding( padding: EdgeInsets.symmetric(horizontal: 50), child: TextField( readOnly: true, decoration: InputDecoration( hintText: widget.token, border: OutlineInputBorder( borderRadius: BorderRadius.circular(10), borderSide: BorderSide( color: Colors.blue, // Warna border biru ), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(10), borderSide: BorderSide( color: Colors.blue, width: 2.0, ), ), enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(10), borderSide: BorderSide( color: Colors.blue, width: 1.0, ), ), focusColor: Colors.blue, hoverColor: Colors.blue, fillColor: Colors.white, filled: true, ), )), Container( padding: EdgeInsets.all(16.0), child: Text( 'Pilih Paket', style: TextStyle(fontSize: 20), ), ), _buildPackageButton('10 Hari', 1), _buildPackageButton('15 Hari', 2), _buildPackageButton('30 Hari', 3), SizedBox(height: 20), if (_selectedPackage != 0) ElevatedButton( onPressed: updateDeadline, child: Text( 'Kirim Pilihan Paket', style: TextStyle(color: Colors.white), ), style: ElevatedButton.styleFrom( primary: Colors.blue, padding: EdgeInsets.symmetric(horizontal: 24, vertical: 12), ), ), SizedBox(height: 20), SizedBox(height: 20), ElevatedButton( onPressed: () { Navigator.pushReplacement( context, MaterialPageRoute(builder: (context) => AdminHomeScreen()), ); }, child: Text( 'Kembali', style: TextStyle(color: Colors.white), ), style: ElevatedButton.styleFrom( primary: Colors.blue, padding: EdgeInsets.symmetric(horizontal: 24, vertical: 12), ), ), Spacer(), ], ), ), ); } }