import 'package:duration_picker/duration_picker.dart'; import 'package:flutter/material.dart'; import 'package:queue_mgr/backend/DataManager.dart'; import 'package:queue_mgr/backend/Dialogs.dart'; class NewService extends StatefulWidget { NewService({Key? key,this.id}) : super(key: key); String? id; @override State createState() => _NewServiceState(); } class _NewServiceState extends State { TextEditingController nameController = TextEditingController(); DateTime sDate = DateTime.now(); TimeOfDay sTime = TimeOfDay(hour: 2, minute: 2); DateTime eDate = DateTime.now(); TimeOfDay eTime = TimeOfDay(hour: 2, minute: 2); Duration duration = Duration(hours:0, minutes: 15); @override void initState() { // TODO: implement initState super.initState(); bool isEdit = widget.id != null; if(isEdit){ Map service = DataManager.instance().GetServiceById(widget.id.toString()); nameController.text = service['name']; sDate = DateTime.parse(service['start_time']); sTime = TimeOfDay.fromDateTime(sDate); eDate = DateTime.parse(service['end_time']); eTime = TimeOfDay.fromDateTime(eDate); duration = Helpers.ParseDuration(service['duration']); setState(() { }); } } @override Widget build(BuildContext context) { bool isEdit = widget.id != null; return Scaffold( appBar: AppBar(title: Text(isEdit? "Edit Service" :"New Service")), body: Container( padding: EdgeInsets.all(20), child: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Column( children: [ ListTile( title: Text("Service Name"), subtitle: TextField( controller: nameController, ), ), ListTile( title: Text("Starting Time"), subtitle: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ ElevatedButton( child: Padding( padding: const EdgeInsets.all(8.0), child: Text("${sDate.year}-${sDate.month}-${sDate.day}"), ), onPressed: () async{ sDate = await showDatePicker(context: context, initialDate: DateTime.now(), firstDate: DateTime.now().subtract(const Duration(days: 350)), lastDate: DateTime.now().add(const Duration(days: 350))) ?? sDate; setState(() { }); }, ), SizedBox(width: 10,), ElevatedButton( child: Padding( padding: const EdgeInsets.all(8.0), child: Text(sTime.format(context)), ), onPressed: () async{ sTime = await showTimePicker(context: context, initialTime: sTime) ?? sTime; setState(() { }); }, ), ], ), ), ListTile( title: Text("Ending Time"), subtitle: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ ElevatedButton( child: Padding( padding: const EdgeInsets.all(8.0), child: Text("${eDate.year}-${eDate.month}-${eDate.day}"), ), onPressed: () async{ eDate = await showDatePicker(context: context, initialDate: DateTime.now(), firstDate: DateTime.now().subtract(const Duration(days: 350)), lastDate: DateTime.now().add(const Duration(days: 350))) ?? eDate; setState(() { }); }, ), SizedBox(width: 10,), ElevatedButton( child: Padding( padding: const EdgeInsets.all(8.0), child: Text(eTime.format(context)), ), onPressed: () async{ eTime = await showTimePicker(context: context, initialTime: eTime) ?? eTime; setState(() { }); }, ), ], ), ), ListTile( title:Text("Session Duration"), subtitle: ElevatedButton( child: Text("${duration.ToHoursAndMinutes()}"), onPressed: () async{ // duration = await showTimePicker(context: context, initialTime: duration) ?? duration; duration = await showDurationPicker(context: context, initialTime: duration) ?? Duration(minutes: 15); setState(() { }); }, ), ) ], ), Column( children: [ Container(width:200,height:50,child: ElevatedButton(onPressed: () async{ Dialogs.waiting(context); DateTime s_date = DateTime(sDate.year, sDate.month, sDate.day, sTime.hour, sTime.minute); DateTime e_date = DateTime(eDate.year, eDate.month, eDate.day, eTime.hour, eTime.minute); if(isEdit){ await DataManager.instance().EditService(widget.id.toString(),nameController.text, s_date, e_date,duration); }else{ await DataManager.instance().AddService(nameController.text, s_date, e_date,duration); } setState(() { }); Dialogs.hide(context); Navigator.pop(context); }, child: Text(isEdit ? "Save" : "Add"))), (isEdit) ? Container(margin: EdgeInsets.all(20),width:200,height:50,child: ElevatedButton(onPressed: () async{ bool confirm = await Dialogs.AskQuestion(context, "CAUTION", "Are you sure to delete this service?"); if(!confirm){return;} Dialogs.waiting(context); await DataManager.instance().DeleteService(widget.id.toString()); setState(() { }); Dialogs.hide(context); Navigator.pop(context); }, child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon(Icons.delete), Text(" Delete"), ], ),style: ElevatedButton.styleFrom(backgroundColor: Colors.redAccent, foregroundColor: Colors.white),)) : Container(), ], ), ], ), ), ); } }