This commit is contained in:
2023-08-08 08:28:09 +05:30
commit 30f30966a3
131 changed files with 5212 additions and 0 deletions

View File

@@ -0,0 +1,56 @@
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:queue_mgr/backend/DebugHelper.dart';
// DateFormat dateFormat;
final String API_ENDPOINT= "https://vps.playpoolstudios.com/qms/api/";
class DataManager{
static _DataManager? m_instance = null;
static _DataManager instance(){
m_instance ??= _DataManager();
return m_instance!;
}
}
class _DataManager{
_DataManager();
List<dynamic> services = [];
Future<void> GetData() async{
try{
var response = (await http.post(
Uri.parse('${API_ENDPOINT}get_services.php'),
body: <String, String>{}));
Debug.LogResponse(response.body.toString());
services = jsonDecode(response.body.toString());
Debug.LogResponse(services);
}catch(e){
Debug.LogError(e);
}
}
Future<void> AddService(String name, DateTime sTime, DateTime eTime,TimeOfDay duration) async {
try{
var response = (await http.post(
Uri.parse('${API_ENDPOINT}add_service.php'),
body: <String, String>{
'name':name,
'stime':sTime.toString(),
'etime':eTime.toString(),
'duration':"${duration.hour}:${duration.minute}"
}));
Debug.LogResponse(response.body.toString());
services = jsonDecode(response.body.toString());
Debug.LogResponse(services);
}catch(e){
Debug.LogError(e);
}
}
}

View File

@@ -0,0 +1,32 @@
import 'dart:developer';
class Debug{
static bool enableLogging = true;
static bool enableResponseLogging = true;
static bool enableErrorLoggin = true;
static bool enableTestLogging = true;
static void LogResponse(Object? response, {Object src= ''}){
if(!enableLogging){return;}
if(!enableResponseLogging) {return;}
print('\x1B[32m$src response\n$response\x1B[0m');
}
static void LogError(Object? msg){
if(!enableLogging){return;}
if(!enableErrorLoggin) {return;}
print('\x1B[31m$msg\x1B[0m');
}
static void Log(Object? msg){
if(!enableLogging) {return;}
print('\x1B[36m$msg\x1B[0m');
}
static void LogTest(Object? msg){
if(!enableLogging){return;}
if(!enableTestLogging) {return;}
print('\x1B[35m$msg\x1B[0m');
}
}

109
lib/main.dart Normal file
View File

@@ -0,0 +1,109 @@
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:queue_mgr/backend/DataManager.dart';
import 'package:queue_mgr/new_service.dart';
import 'backend/DebugHelper.dart';
void main() {
DataManager.instance().GetData();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple, brightness: Brightness.dark),
useMaterial3: true,
),
home: const Home(),
);
}
}
class Home extends StatefulWidget {
const Home({Key? key}) : super(key: key);
@override
State<Home> createState() => _HomeState();
}
class _HomeState extends State<Home> {
@override
void initState() {
// TODO: implement initState
super.initState();
refresh();
}
void refresh()async{
await DataManager.instance().GetData();
setState(() {
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Queue Management - Admin"),),
body: Container(
padding: EdgeInsets.all(20),
child: Column(
children: [
ListView.builder(
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemCount:DataManager.instance().services.length,
itemBuilder: (context,index){
dynamic service = jsonDecode(DataManager.instance().services[index]);
return Card(
child: Center(
child: Container(
padding: EdgeInsets.all(10),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(service['start_time']),
Text(service['name']),
Container(decoration: BoxDecoration(borderRadius: BorderRadius.circular(50),color: Colors.deepPurple), child: SizedBox(width:20,height: 20,child: Center(child: Text(service['members'].toString().split(',').length.toString()))),)
],
),
),
),
);
}
),
SizedBox(height: 50,),
InkWell(
onTap: (){
Navigator.of(context).push(MaterialPageRoute(builder: (context)=> NewService()));
},
child: Card(
child: Container(
padding: EdgeInsets.all(10),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,children: [
Icon(Icons.add),
Text("New Service")
],),
),
),
)
],
),
),
);
}
}

118
lib/new_service.dart Normal file
View File

@@ -0,0 +1,118 @@
import 'package:flutter/material.dart';
import 'package:queue_mgr/backend/DataManager.dart';
class NewService extends StatefulWidget {
const NewService({Key? key}) : super(key: key);
@override
State<NewService> createState() => _NewServiceState();
}
class _NewServiceState extends State<NewService> {
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);
TimeOfDay duration = TimeOfDay(hour:0, minute: 15);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("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: 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(() {
});
},
),
ElevatedButton(
child: Text("${sTime.hour}:${sTime.minute}"),
onPressed: () async{
sTime = await showTimePicker(context: context, initialTime: sTime) ?? sTime;
setState(() {
});
},
),
],
),
),
ListTile(
title: Text("Ending Time"),
subtitle: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
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(() {
});
},
),
ElevatedButton(
child: Text("${eTime.hour}:${eTime.minute}"),
onPressed: () async{
eTime = await showTimePicker(context: context, initialTime: eTime) ?? eTime;
setState(() {
});
},
),
],
),
),
ListTile(
title:Text("Duration for each"),
subtitle: ElevatedButton(
child: Text("${duration.hour}:${duration.minute}"),
onPressed: () async{
duration = await showTimePicker(context: context, initialTime: duration) ?? duration;
setState(() {
});
},
),
)
],
),
Container(margin: EdgeInsets.all(20),width:200,height:50,child: ElevatedButton(onPressed: () async{
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);
await DataManager.instance().AddService(nameController.text, s_date, e_date,duration);
setState(() {
});
Navigator.pop(context);
}, child: Text("Add")))
],
),
),
);
}
}