TKK_E32210743/lib/token.dart

217 lines
6.6 KiB
Dart

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<TokenScreen> {
final FirebaseFirestore _firestore = FirebaseFirestore.instance;
final TextEditingController _tokenController = TextEditingController();
DateTime _selectedDate = DateTime.now();
int _selectedPackage = 0;
Future<void> 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: <Widget>[
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(),
],
),
),
);
}
}