Pushing till working demo

dev_faiz
Faiz Hashmi 3 years ago
parent 54f6c7c185
commit c73daeb8e8

@ -45,7 +45,7 @@ android {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.example.queuing_system"
minSdkVersion localProperties.getProperty('flutter.minSdkVersion').toInteger()
targetSdkVersion flutter.targetSdkVersion
targetSdkVersion localProperties.getProperty('flutter.targetSdkVersion').toInteger()
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -13,13 +13,19 @@ class API {
onSuccess: (response, status) {
if (status == 200) {
var calledByNurse = (response["CalledByNurse"] as List).map((j) => Tickets.fromJson(j)).toList();
print("calledByNurse Length: ${calledByNurse.length}");
final patients = (response["ClinicCurrentPatient"] as List).map((j) => Tickets.fromJson(j)).toList();
print("patients Length: ${patients.length}");
calledByNurse.addAll(patients);
calledByNurse.sort((a, b) => a.callNo.compareTo(b.callNo));
// calledByNurse.sort((a, b) => a.callNo.compareTo(b.callNo));
// final clinicCurrentPatient = (response["ClinicCurrentPatient"] as List).map((j) => Tickets.fromJson(j)).toList();
onSuccess(calledByNurse);
onSuccess(calledByNurse.reversed.toList());
} else {
onFailure(response);
}
@ -27,26 +33,25 @@ class API {
onFailure: (error, status) => onFailure(error));
}
static Call_UpdateNotIsQueueRecordByIDAsync(String deviceIp, {@required List<Tickets> tickets, @required Function(List<Tickets>) onSuccess, @required Function(dynamic) onFailure}) async {
if (tickets.isEmpty) {
static Call_UpdateNotIsQueueRecordByIDAsync(String deviceIp, {@required Tickets ticket, @required Function(List<Tickets>) onSuccess, @required Function(dynamic) onFailure}) async {
if (ticket.id == null) {
return;
}
List<Tickets> _ticketsUpdated = [];
for (var ticket in tickets) {
final body = {"CallID": ticket.callNo};
// for (var ticket in tickets) {
final body = {"CallID": ticket.id};
await BaseAppClient.post(_call_UpdateNotIsQueueRecordByIDAsync,
body: body,
onSuccess: (response, status) {
print("response: $response");
if (status == 200) {
ticket.call_updated = true;
_ticketsUpdated.add(ticket);
}
},
onFailure: (error, status) => onFailure(error));
}
// }
if (_ticketsUpdated.isNotEmpty) {
onSuccess(_ticketsUpdated);

@ -1,4 +1,3 @@
import 'package:queuing_system/utils/call_type.dart';
class Tickets {
@ -13,10 +12,20 @@ class Tickets {
this.mobileNo,
this.patientGender,
this.patientID,
this.callNoStr,
this.queueNo,
});
String getParsedDateTime(String date) {
print("gotDate: $date");
DateTime dateTime = DateTime.parse(date);
}
Tickets.fromJson(dynamic json) {
print("here json: $json");
id = json['ID'];
callNo = json['CallNo'];
roomNo = json['RoomNo'];
callType = json['callType'];
@ -28,8 +37,10 @@ class Tickets {
patientGender = json['PatientGender'];
patientID = json['PatientID'];
queueNo = json['QueueNo'];
callNoStr = json['CallNoStr'] ?? json['CallNo'].toString();
}
int id;
int callNo;
String roomNo;
int callType;
@ -41,10 +52,12 @@ class Tickets {
int patientGender;
int patientID;
String queueNo;
String callNoStr;
bool call_updated = false;
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['ID'] = id;
map['CallNo'] = callNo;
map['RoomNo'] = roomNo;
map['callType'] = callType;
@ -55,6 +68,7 @@ class Tickets {
map['MobileNo'] = mobileNo;
map['PatientGender'] = patientGender;
map['PatientID'] = patientID;
map['CallNoStr'] = callNoStr;
map['QueueNo'] = queueNo;
return map;
}

@ -14,8 +14,9 @@ import 'package:queuing_system/utils/call_type.dart';
import 'package:queuing_system/utils/signalR_utils.dart';
import 'package:queuing_system/utils/utils.dart';
import 'package:queuing_system/widget/data_display/app_texts_widget.dart';
import 'package:text_to_speech/text_to_speech.dart';
var DEVICE_IP = "10.10.14.11"; // Testing IP
var DEVICE_IP = "10.10.15.11"; // Testing IP
// var DEVICE_IP = "10.10.14.11"; // Testing IP
// var DEVICE_IP = "10.10.15.11";
@ -44,6 +45,7 @@ class _MyHomePageState extends State<MyHomePage> {
@override
void initState() {
listenNetworkConnectivity();
if (!signalRHelper.getConnectionState()) {
signalRHelper.startSignalRConnection(DEVICE_IP, onUpdateAvailable: onUpdateAvailable, onConnect: onConnect, onConnecting: onConnecting, onDisconnect: onDisconnect);
}
@ -53,6 +55,7 @@ class _MyHomePageState extends State<MyHomePage> {
TextEditingController controller = TextEditingController();
@override
Widget build(BuildContext context) {
return AppScaffold(
@ -150,13 +153,20 @@ class _MyHomePageState extends State<MyHomePage> {
voiceCall() async {
if (waitings.isNotEmpty && voiceCaller == null) {
final postVoice = waitings.first.getCallType().audio('en');
voiceCaller = CallByVoice(waitings.first.callNo.toString(), preVoice: 'ticket_number.mp3', postVoice: postVoice, lang: 'en');
voiceCaller = CallByVoice(waitings.first.callNoStr.toString(), preVoice: 'ticket_number.mp3', postVoice: postVoice, lang: 'en');
await voiceCaller.start();
voiceCaller = null;
}
}
printWaiting() {
for (var value in waitings) {
print("waiting: ${value.callNoStr}");
}
}
onUpdateAvailable(data) async {
waitings.clear();
API.GetCallRequestInfoByClinincInfo(DEVICE_IP, onSuccess: (waitingCalls) {
setState(() {
waitings = waitingCalls;
@ -166,7 +176,8 @@ class _MyHomePageState extends State<MyHomePage> {
log("\n\n");
log("--------------------");
// log("Current: $currentInClinic");
log("Waiting: $waitingCalls");
// log("Waiting: $waitingCalls");
printWaiting();
log("--------------------");
log("\n\n");
@ -175,12 +186,12 @@ class _MyHomePageState extends State<MyHomePage> {
}
updateTickets() {
List<Tickets> _ticketsToUpdate = waitings.where((t) => t.call_updated == false).toList();
API.Call_UpdateNotIsQueueRecordByIDAsync(DEVICE_IP, tickets: _ticketsToUpdate, onSuccess: (tickets_updated) {
print("[${tickets_updated.length}] Tickets Updated: $tickets_updated");
}, onFailure: (e) {
print("API UPDate Tickets Failed with : ${e.toString()}");
});
// List<Tickets> _ticketsToUpdate = waitings.where((t) => t.call_updated == false).toList();
// API.Call_UpdateNotIsQueueRecordByIDAsync(DEVICE_IP, ticket: _ticketsToUpdate.first, onSuccess: (tickets_updated) {
// print("[${tickets_updated.length}] Tickets Updated: $tickets_updated");
// }, onFailure: (e) {
// print("API UPDate Tickets Failed with : ${e.toString()}");
// });
}
onConnect() {
@ -189,7 +200,7 @@ class _MyHomePageState extends State<MyHomePage> {
onDisconnect(exception) {
log("SignalR: onDisconnect");
signalRHelper.startSignalRConnection(DEVICE_IP, onUpdateAvailable: onUpdateAvailable, onConnect: onConnect, onConnecting: onConnecting, onDisconnect: onDisconnect);
// signalRHelper.startSignalRConnection(DEVICE_IP, onUpdateAvailable: onUpdateAvailable, onConnect: onConnect, onConnecting: onConnecting, onDisconnect: onDisconnect);
}
onConnecting() {

@ -1,74 +1,84 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:queuing_system/core/config/config.dart';
import 'package:queuing_system/core/config/size_config.dart';
import 'package:queuing_system/core/response_model/patient_call.dart';
import 'package:queuing_system/home/priority_calls.dart';
import 'package:queuing_system/utils/call_type.dart';
import 'package:queuing_system/widget/data_display/app_texts_widget.dart';
Widget noPatientInQueue(){
Widget noPatientInQueue() {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Center(
child: AppText("Awaiting Patients Arrival",
fontFamily: 'Poppins-SemiBold.ttf',
fontSize: SizeConfig.getWidthMultiplier() * 9),
child: AppText("Awaiting Patients Arrival", fontFamily: 'Poppins-SemiBold.ttf', fontSize: SizeConfig.getWidthMultiplier() * 9),
),
],
);
}
Widget priorityTickets(List<Tickets> tickets){
Widget priorityTickets(List<Tickets> tickets) {
return PriorityTickets(tickets);
}
Widget priorityTicketsWithSideList(List<Tickets> tickets){
final priorityTickets = tickets.sublist(0,3);
final otherTickets = tickets.sublist(3,tickets.length);
Widget priorityTicketsWithSideList(List<Tickets> tickets) {
final priorityTickets = tickets.sublist(0, 3);
final otherTickets = tickets.sublist(3, tickets.length);
return Row(
children: [
Expanded(
flex: 3,
child: PriorityTickets(priorityTickets)
),
Container(color: Colors.grey.withOpacity(0.1), width: 10, margin: const EdgeInsets.symmetric(horizontal: 20, vertical: 50)),
Expanded(flex: 2, child: PriorityTickets(priorityTickets)),
Container(color: Colors.grey.withOpacity(0.1), width: 10, margin: const EdgeInsets.symmetric(horizontal: 10, vertical: 50)),
Expanded(
flex: 2,
child: ListView.builder(
padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 50),
itemCount: otherTickets.length,
itemBuilder: (ctx,idx){
itemBuilder: (ctx, idx) {
final itm = otherTickets[idx];
return ListTile(
contentPadding: const EdgeInsets.all(8),
title: Row(
return Padding(
padding: const EdgeInsets.all(8),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(
width: 140,
width: SizeConfig.getWidthMultiplier() * 13,
child: AppText(
itm.callNo.toString(),
itm.callNoStr.toString(),
letterSpacing: -2.32,
fontWeight: FontWeight.bold,
fontSize: SizeConfig.getWidthMultiplier() * 5,
fontSize: SizeConfig.getWidthMultiplier() * 4.5,
textAlign: TextAlign.end,
),
),
const SizedBox(width: 10),
Row(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
itm.getCallType().icon(SizeConfig.getHeightMultiplier()*2.5),
SizedBox(
width: SizeConfig.getWidthMultiplier() * 3.3,
child: itm.getCallType().icon(SizeConfig.getHeightMultiplier() * 2.5),
),
const SizedBox(width: 10),
SizedBox(
width: SizeConfig.getWidthMultiplier() * 29,
child: AppText(
itm.getCallType().message('en'),
color: itm.getCallType().color(),
letterSpacing: -1.5,
fontSize: SizeConfig.getWidthMultiplier() * 3.3,
fontWeight: FontWeight.w600,
fontHeight: 0.5,
),
),
Container(
color: Colors.grey.withOpacity(0.3),
width: 6,
height: SizeConfig.getHeightMultiplier() * 3,
margin: const EdgeInsets.symmetric(horizontal: 10),
),
AppText(
itm.getCallType().message('en'),
"Room: ${itm.roomNo}",
color: itm.getCallType().color(),
letterSpacing: -1.5,
fontSize: SizeConfig.getWidthMultiplier() * 3.3,
@ -85,4 +95,4 @@ Widget priorityTicketsWithSideList(List<Tickets> tickets){
)
],
);
}
}

@ -1,10 +1,7 @@
import 'package:blinking_text/blinking_text.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:queuing_system/core/config/config.dart';
import 'package:queuing_system/core/config/size_config.dart';
import 'package:queuing_system/core/response_model/patient_call.dart';
import 'package:queuing_system/home/que_item/que_item.dart';
import 'package:queuing_system/utils/call_type.dart';
import 'package:queuing_system/widget/data_display/app_texts_widget.dart';
@ -15,61 +12,67 @@ class PriorityTickets extends StatelessWidget {
@override
Widget build(BuildContext context) {
final firstTicket = tickets[0];
final otherTickets = tickets.sublist(1,tickets.length);
final otherTickets = tickets.sublist(1, tickets.length);
return Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
vTicketItem(ticketNo: "${firstTicket.callNo ?? ''}", callType: firstTicket.getCallType(), scale: 1.2, blink: true),
const SizedBox(height: 100),
if(tickets.length > 1)
...[
SizedBox(height: SizeConfig.getHeightMultiplier()*1.5),
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: otherTickets.map((ticket) => vTicketItem(ticketNo: "${ticket.callNo ?? ''}", callType: ticket.getCallType(), scale: 0.8)).toList(),
)
]
const SizedBox(height: 20),
vTicketItem(
ticketNo: firstTicket.callNoStr ?? '',
callType: firstTicket.getCallType(),
scale: 1,
blink: true,
roomNo: firstTicket.roomNo,
),
const SizedBox(height: 40),
if (tickets.length > 1) ...[
SizedBox(height: SizeConfig.getHeightMultiplier() * 1.5),
Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: otherTickets
.map((ticket) => Padding(
padding: EdgeInsets.only(top: SizeConfig.getHeightMultiplier() * 2),
child: vTicketItem(
ticketNo: ticket.callNoStr ?? '',
callType: ticket.getCallType(),
scale: 0.7,
roomNo: ticket.roomNo,
),
))
.toList(),
)
]
],
);
}
}
class vTicketItem extends StatelessWidget{
class vTicketItem extends StatelessWidget {
final String ticketNo;
final String roomNo;
final CallType callType;
final bool blink;
final double scale;
vTicketItem({@required this.ticketNo, @required this.callType, this.scale, this.blink = false});
const vTicketItem({@required this.ticketNo, @required this.roomNo, @required this.callType, this.scale, this.blink = false});
@override
Widget build(BuildContext context) {
return Transform.scale(
scale: scale,
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
BlinkText(
ticketNo,
style: TextStyle(
fontSize: SizeConfig.getWidthMultiplier() * 16,
letterSpacing: -9.32,
height: 0.5,
fontWeight: FontWeight.bold
),
BlinkText(ticketNo,
style: TextStyle(fontSize: SizeConfig.getWidthMultiplier() * 10, letterSpacing: -9.32, height: 0.5, fontWeight: FontWeight.bold),
beginColor: Colors.black,
endColor: blink ? Colors.black.withOpacity(0.1) : Colors.black,
// endColor: blink ? AppGlobal.appRedColor : Colors.black,
times: 0,
duration: const Duration(seconds: 1)
),
duration: const Duration(seconds: 1)),
// AppText(
// ticketNo,
// letterSpacing: -9.32,
@ -77,18 +80,32 @@ class vTicketItem extends StatelessWidget{
// fontWeight: FontWeight.bold,
// fontHeight: 0.7,
// ),
const SizedBox(height: 10),
Row(
crossAxisAlignment: CrossAxisAlignment.end,
mainAxisAlignment: MainAxisAlignment.center,
children: [
callType.icon(SizeConfig.getHeightMultiplier()*2.5),
callType.icon(SizeConfig.getHeightMultiplier() * 3),
const SizedBox(width: 10),
AppText(
callType.message('en'),
color: callType.color(),
letterSpacing: -1.5,
fontSize: SizeConfig.getWidthMultiplier() * 3.3,
fontSize: SizeConfig.getWidthMultiplier() * 3.8,
fontWeight: FontWeight.w600,
fontHeight: 0.5,
),
Container(
color: Colors.grey.withOpacity(0.3),
width: 6,
height: SizeConfig.getHeightMultiplier() * 3,
margin: const EdgeInsets.symmetric(horizontal: 10),
),
AppText(
"Room: $roomNo",
color: callType.color(),
letterSpacing: -1.5,
fontSize: SizeConfig.getWidthMultiplier() * 3.8,
fontWeight: FontWeight.w600,
fontHeight: 0.5,
),

@ -22,11 +22,11 @@ class CallByVoice {
final characters = ticketNo.characters.toList();
for (int i = 0; i < characters.length; i++) {
final no = characters[i];
if (no.isNotEmpty) {
if (no.isNotEmpty && no != "-" && no != "_" && no != " ") {
await Future.delayed(const Duration(milliseconds: 200));
await _player.stop();
await _player.setAsset('assets/voice_$lang/$no.mp3');
await _player.setAsset('assets/voice_$lang/${no.toUpperCase()}.mp3');
await _player.play();
}
}

@ -9,10 +9,12 @@ import audio_session
import connectivity_macos
import just_audio
import path_provider_macos
import text_to_speech_macos
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
AudioSessionPlugin.register(with: registry.registrar(forPlugin: "AudioSessionPlugin"))
ConnectivityPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlugin"))
JustAudioPlugin.register(with: registry.registrar(forPlugin: "JustAudioPlugin"))
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
TextToSpeechMacOsPlugin.register(with: registry.registrar(forPlugin: "TextToSpeechMacOsPlugin"))
}

@ -14,7 +14,7 @@ packages:
name: audio_session
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.10"
version: "0.1.13"
blinking_text:
dependency: "direct main"
description:
@ -190,7 +190,7 @@ packages:
name: just_audio
url: "https://pub.dartlang.org"
source: hosted
version: "0.9.30"
version: "0.9.31"
just_audio_platform_interface:
dependency: transitive
description:
@ -365,7 +365,7 @@ packages:
name: rxdart
url: "https://pub.dartlang.org"
source: hosted
version: "0.27.5"
version: "0.27.7"
signalr_core:
dependency: "direct main"
description:
@ -427,6 +427,34 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "0.4.12"
text_to_speech:
dependency: "direct main"
description:
name: text_to_speech
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.3"
text_to_speech_macos:
dependency: transitive
description:
name: text_to_speech_macos
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.1"
text_to_speech_platform_interface:
dependency: transitive
description:
name: text_to_speech_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.3"
text_to_speech_web:
dependency: transitive
description:
name: text_to_speech_web
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.2"
tuple:
dependency: transitive
description:

@ -39,8 +39,8 @@ dependencies:
flutter_svg: ^1.0.3
http: ^0.13.0
blinking_text: ^1.0.2
just_audio: ^0.9.29
just_audio: ^0.9.31
text_to_speech: ^0.2.3
#signalr core
signalr_core: ^1.1.1

Loading…
Cancel
Save