Compare commits

...

13 Commits

Author SHA1 Message Date
FaizHashmiCS22 0bf0ff2ddc removed logs 9 months ago
FaizHashmiCS22 58afcf184a Data Accuracy 9 months ago
FaizHashmiCS22 a9e72035e9 Fixed the _ issue 9 months ago
FaizHashmiCS22 06f0b61add Fixed the _ issue 9 months ago
Faiz Hashmi 10ff8170a0 Merge branch 'master' of http://34.17.52.180/Haroon6138/queuing_system
# Conflicts:
#	lib/home/priority_calls_components.dart
9 months ago
Faiz Hashmi 55b750f623 refactoring 9 months ago
Faiz Hashmi 2046eb9149 refactoring 9 months ago
FaizHashmiCS22 ba3a9a2d9c Debugged HTTPTransportType 9 months ago
FaizHashmiCS22 95a92e6ccd Added Icon and Name 10 months ago
FaizHashmiCS22 b39ec7eb17 updated URL 10 months ago
FaizHashmiCS22 0a87036fcd icon size updated 10 months ago
FaizHashmiCS22 a0b625f0b9 Refactor 10 months ago
FaizHashmiCS22 6f4bf07e9c tested QueuingSystem 5thApril 11 months ago

@ -14,7 +14,7 @@
<application
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher"
android:label="queuing_system">
android:label="HMG Qline">
<receiver
android:name="BootReceiver"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 544 B

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 442 B

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 721 B

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 8.4 KiB

@ -55,6 +55,8 @@ class API {
isQueuePatients.sort((a, b) => a.editedOnTimeStamp.compareTo(b.editedOnTimeStamp));
callPatients.removeWhere((element) => element.isQueue == false);
callPatients.addAll(isQueuePatients);
log("IP: $deviceIp");
log("callPatients: ${callPatients.reversed.toList().toString()}");
log("isQueuePatients: ${isQueuePatients.reversed.toList().toString()}");
onSuccess(callPatients.reversed.toList(), isQueuePatients.reversed.toList(), callConfig);

@ -10,7 +10,7 @@ class BaseAppClient {
static post(String endPoint, {Map<String, dynamic>? body, Function(dynamic response, int statusCode)? onSuccess, Function(String error, int statusCode)? onFailure}) async {
String url;
url = "$BASE_URL/api/PatientCall" + endPoint;
url = "$BASE_URL/api/PatientCall$endPoint";
// try {
logger.i("URL : $url");
@ -29,7 +29,7 @@ class BaseAppClient {
onFailure(Utils.generateContactAdminMsg(), statusCode);
}
} else {
logger.i("Response: ${response.body.toString()}");
log("Response: ${response.body.toString()}");
var parsed = json.decode(response.body.toString());
if (onSuccess != null) {
onSuccess(parsed, statusCode);
@ -50,7 +50,7 @@ class BaseAppClient {
static get(String endPoint, {Map<String, dynamic>? body, Function(dynamic response, int statusCode)? onSuccess, Function(String error, int statusCode)? onFailure}) async {
String url;
url = "$BASE_URL/api/PatientCall" + endPoint;
url = "$BASE_URL/api/PatientCall$endPoint";
try {
// String token = await sharedPref.getString(TOKEN);
@ -86,11 +86,11 @@ class BaseAppClient {
//TODO change this fun
String error = parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'];
if (parsed["ValidationErrors"] != null) {
error = parsed["ValidationErrors"]["StatusMessage"].toString() + "\n";
error = "${parsed["ValidationErrors"]["StatusMessage"]}\n";
if (parsed["ValidationErrors"]["ValidationErrors"] != null && parsed["ValidationErrors"]["ValidationErrors"].length != 0) {
for (var i = 0; i < parsed["ValidationErrors"]["ValidationErrors"].length; i++) {
error = error + parsed["ValidationErrors"]["ValidationErrors"][i]["Messages"][0] + "\n";
error = "${error + parsed["ValidationErrors"]["ValidationErrors"][i]["Messages"][0]}\n";
}
}
}

@ -4,18 +4,16 @@ const MAX_SMALL_SCREEN = 660;
const ONLY_NUMBERS = "[0-9]";
const ONLY_LETTERS = "[a-zA-Z &'\"]";
const ONLY_DATE = "[0-9/]";
// const BASE_URL = 'https://ms.hmg.com/nscapi2'; // Development DB
// const BASE_URL = 'https://ms.hmg.com/nscapi'; // UAT
const BASE_URL = 'https://qline.hmg.com'; // LIVE
const apiKey = 'EE17D21C7943485D9780223CCE55DCE5'; // UAT
// const BASE_URL = 'http://10.200.204.11:2222/Services/Nurses.svc/REST';
// const BASE_URL = 'https://hmgwebservices.com/';
/// Timer Info
const TIMER_MIN = 10;
const currentBuildVersion = 5;
class AppGlobal {
static var CONTEX;
// static Color appRedColor = const Color(0xFFD02127);
// static Color appGreenColor = const Color(0xFF359846);
static Color appTextColor = const Color(0xFF2B353E);

@ -97,7 +97,7 @@ class PatientTicketModel {
createdOn = json['createdOn'];
editedOn = json['editedOn'];
queueNo = json['queueNoM'];
callNoStr = json['callNoStr'];
callNoStr = json['callNoStr'] != null ? (json['callNoStr'] as String).replaceAll('_', '-') : "";
isQueue = json['isQueue'];
isToneReq = json['isToneReq'];
isVoiceReq = json['isVoiceReq'];
@ -151,98 +151,98 @@ class PatientTicketModel {
if (callType == 5) return CallType.nebulization;
return CallType.vitalSign;
}
//
// static List<PatientTicketModel> testCallPatients = [
// PatientTicketModel(
// id: 1,
// patientID: 112,
// mobileNo: "112",
// doctorName: "name",
// doctorNameN: "nameN",
// patientGender: 1,
// callType: 1,
// roomNo: "617",
// createdOn: DateTime.now().millisecondsSinceEpoch.toString(),
// editedOn: DateTime.now().millisecondsSinceEpoch.toString(),
// editedOnTimeStamp: DateTime.now().millisecondsSinceEpoch,
// queueNo: "B-89",
// callNoStr: "B-89",
// isQueue: true,
// isToneReq: true,
// isVoiceReq: true,
// concurrentCallDelaySec: 8,
// ),
// PatientTicketModel(
// id: 1,
// patientID: 112,
// mobileNo: "112",
// doctorName: "name",
// doctorNameN: "nameN",
// patientGender: 1,
// callType: 1,
// roomNo: "617",
// createdOn: DateTime.now().millisecondsSinceEpoch.toString(),
// editedOn: DateTime.now().millisecondsSinceEpoch.toString(),
// queueNo: "B-89",
// callNoStr: "B-89",
// isQueue: true,
// isToneReq: true,
// isVoiceReq: true,
// concurrentCallDelaySec: 8,
// ),
// PatientTicketModel(
// id: 1,
// patientID: 112,
// mobileNo: "112",
// doctorName: "name",
// doctorNameN: "nameN",
// patientGender: 1,
// callType: 1,
// roomNo: "617",
// createdOn: DateTime.now().millisecondsSinceEpoch.toString(),
// editedOn: DateTime.now().millisecondsSinceEpoch.toString(),
// queueNo: "B-89",
// callNoStr: "B-89",
// isQueue: true,
// isToneReq: true,
// isVoiceReq: true,
// concurrentCallDelaySec: 8,
// ),
// PatientTicketModel(
// id: 1,
// patientID: 112,
// mobileNo: "112",
// doctorName: "name",
// doctorNameN: "nameN",
// patientGender: 1,
// callType: 1,
// roomNo: "617",
// createdOn: DateTime.now().millisecondsSinceEpoch.toString(),
// editedOn: DateTime.now().millisecondsSinceEpoch.toString(),
// queueNo: "B-89",
// callNoStr: "B-89",
// isQueue: true,
// isToneReq: true,
// isVoiceReq: true,
// concurrentCallDelaySec: 8,
// ),
// PatientTicketModel(
// id: 1,
// patientID: 112,
// mobileNo: "112",
// doctorName: "name",
// doctorNameN: "nameN",
// patientGender: 1,
// callType: 1,
// roomNo: "617",
// createdOn: DateTime.now().millisecondsSinceEpoch.toString(),
// editedOn: DateTime.now().millisecondsSinceEpoch.toString(),
// queueNo: "B-89",
// callNoStr: "B-89",
// isQueue: true,
// isToneReq: true,
// isVoiceReq: true,
// concurrentCallDelaySec: 8,
// ),
// ];
//
// static List<PatientTicketModel> testCallPatients = [
// PatientTicketModel(
// id: 1,
// patientID: 112,
// mobileNo: "112",
// doctorName: "name",
// doctorNameN: "nameN",
// patientGender: 1,
// callType: 1,
// roomNo: "617",
// createdOn: DateTime.now().millisecondsSinceEpoch.toString(),
// editedOn: DateTime.now().millisecondsSinceEpoch.toString(),
// editedOnTimeStamp: DateTime.now().millisecondsSinceEpoch,
// queueNo: "B-89",
// callNoStr: "B-89",
// isQueue: true,
// isToneReq: true,
// isVoiceReq: true,
// concurrentCallDelaySec: 8,
// ),
// PatientTicketModel(
// id: 1,
// patientID: 112,
// mobileNo: "112",
// doctorName: "name",
// doctorNameN: "nameN",
// patientGender: 1,
// callType: 1,
// roomNo: "617",
// createdOn: DateTime.now().millisecondsSinceEpoch.toString(),
// editedOn: DateTime.now().millisecondsSinceEpoch.toString(),
// queueNo: "B-89",
// callNoStr: "B-89",
// isQueue: true,
// isToneReq: true,
// isVoiceReq: true,
// concurrentCallDelaySec: 8,
// ),
// PatientTicketModel(
// id: 1,
// patientID: 112,
// mobileNo: "112",
// doctorName: "name",
// doctorNameN: "nameN",
// patientGender: 1,
// callType: 1,
// roomNo: "617",
// createdOn: DateTime.now().millisecondsSinceEpoch.toString(),
// editedOn: DateTime.now().millisecondsSinceEpoch.toString(),
// queueNo: "B-89",
// callNoStr: "B-89",
// isQueue: true,
// isToneReq: true,
// isVoiceReq: true,
// concurrentCallDelaySec: 8,
// ),
// PatientTicketModel(
// id: 1,
// patientID: 112,
// mobileNo: "112",
// doctorName: "name",
// doctorNameN: "nameN",
// patientGender: 1,
// callType: 1,
// roomNo: "617",
// createdOn: DateTime.now().millisecondsSinceEpoch.toString(),
// editedOn: DateTime.now().millisecondsSinceEpoch.toString(),
// queueNo: "B-89",
// callNoStr: "B-89",
// isQueue: true,
// isToneReq: true,
// isVoiceReq: true,
// concurrentCallDelaySec: 8,
// ),
// PatientTicketModel(
// id: 1,
// patientID: 112,
// mobileNo: "112",
// doctorName: "name",
// doctorNameN: "nameN",
// patientGender: 1,
// callType: 1,
// roomNo: "617",
// createdOn: DateTime.now().millisecondsSinceEpoch.toString(),
// editedOn: DateTime.now().millisecondsSinceEpoch.toString(),
// queueNo: "B-89",
// callNoStr: "B-89",
// isQueue: true,
// isToneReq: true,
// isVoiceReq: true,
// concurrentCallDelaySec: 8,
// ),
// ];
}

@ -9,6 +9,8 @@ class WidgetsConfigModel {
double? projectLongitude;
int? cityKey;
WidgetsConfigModel({
this.waitingAreaID,
this.waitingAreaName,

@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:marquee/marquee.dart';
import 'package:provider/provider.dart';
import 'package:queuing_system/core/config/config.dart';
import 'package:queuing_system/core/config/size_config.dart';
import 'package:queuing_system/core/response_models/call_config_model.dart';
import 'package:queuing_system/home/app_provider.dart';
@ -37,8 +38,7 @@ class AppFooter extends StatelessWidget {
fontFamily: 'Poppins-Medium.ttf',
),
),
Text(appProvider.currentDeviceIp,
style: TextStyle(fontWeight: FontWeight.w500, fontSize: SizeConfig.getWidthMultiplier() * 2.2)),
Text("v${appProvider.currentDeviceIp}_$currentBuildVersion", style: TextStyle(fontWeight: FontWeight.w500, fontSize: SizeConfig.getWidthMultiplier() * 1.8)),
Row(
children: [
InkWell(

@ -74,7 +74,7 @@ class AppHeader extends StatelessWidget implements PreferredSizeWidget {
return Consumer(
builder: (BuildContext context, AppProvider appProvider, Widget? child) {
return Container(
height: 100,
height: 115,
padding: const EdgeInsets.only(left: 20, right: 20),
decoration: BoxDecoration(color: AppGlobal.vitalSignColor),
child: Directionality(

@ -98,7 +98,7 @@ class AppProvider extends ChangeNotifier {
);
}
logger.i("here logger.ig: ${isQueuePatients.length}");
logger.i("isQueuePatients: ${isQueuePatients.length}");
if (isQueuePatients.isEmpty) {
isCallingInProgress = false;
@ -145,7 +145,6 @@ class AppProvider extends ChangeNotifier {
WidgetsConfigModel? currentWidgetsConfigModel;
Future<void> getInfoWidgetsConfigurationsFromServer() async {
log(" errorHellpo:");
WidgetsConfigModel? widgetsConfigModel = await API.getWidgetConfigsFromServer(currentDeviceIp, onFailure: (error) {
logger.i("Api call failed with this error: ${error.toString()}");
});
@ -172,8 +171,7 @@ class AppProvider extends ChangeNotifier {
void getNextPrayerToShow() {
final current = DateTime.now();
logger.i("Checking Namaz time Locally at ${current.toString()} and ${current.timeZoneName} ");
log("Checking Namaz time Locally at ${current.toString()} and ${current.timeZoneName} ");
if (DateTime.fromMillisecondsSinceEpoch(currentPrayersWidgetModel.fajr!).isAfter(current)) {
final namazTime = DateFormat('hh:mm a').format(DateTime.fromMillisecondsSinceEpoch(currentPrayersWidgetModel.fajr!));
nextPrayerToShowWithTime = "${patientCallConfigurations.fajrText} at $namazTime";
@ -319,9 +317,9 @@ class AppProvider extends ChangeNotifier {
Future<void> callPatientsAPI() async {
logger.i("calling callPatientsAPI");
patientTickets.clear();
API.getCallRequestInfoByClinicInfo(currentDeviceIp,
await API.getCallRequestInfoByClinicInfo(currentDeviceIp,
onSuccess: (waitingCalls, isQueuePatientsCalls, callConfigs) async {
patientTickets.clear();
patientCallConfigurations = callConfigs;
if (waitingCalls.length > patientCallConfigurations.screenMaxDisplayPatients) {
patientTickets = waitingCalls.sublist(0, patientCallConfigurations.screenMaxDisplayPatients);
@ -347,8 +345,9 @@ class AppProvider extends ChangeNotifier {
logger.i("A new Ping Received when isQueuePatients: ${isQueuePatients.length}");
logger.i("isCallingInProgress from onPingReceived: $isCallingInProgress");
logger.i("isApiCallNeeded: $isApiCallNeeded");
logger.i("isQueuePatients: ${isQueuePatients.length}");
if (patientTickets.isNotEmpty) {
if (isCallingInProgress) {
if (isCallingInProgress && isQueuePatients.isNotEmpty) {
isApiCallNeeded = true;
} else {
await callPatientsAPI();
@ -379,16 +378,17 @@ class AppProvider extends ChangeNotifier {
CallByVoice? voiceCaller;
PatientTicketModel currentPatient = PatientTicketModel();
// testCalling() async {
// voiceCaller = CallByVoice(
// preVoice: "رقم التذكرة",
// ticketNo: "AMG A-78",
// postVoice: "دعوة للتطعيم",
// lang: "ar",
// flutterTts: flutterTts,
// );
// await voiceCaller!.startCalling(true);
// }
testCalling() async {
voiceCaller = CallByVoice(
preVoice: "رقم التذكرة",
ticketNo: "AMG A-78",
postVoice: "دعوة للتطعيم",
lang: "ar",
flutterTts: flutterTts,
isMute: false,
);
await voiceCaller!.startCalling(true);
}
voiceCallPatientTicket(PatientTicketModel patientTicket, String calledFrom) async {
logger.i("voiceCallPatientTicket calledFrom : $calledFrom");
@ -397,18 +397,24 @@ class AppProvider extends ChangeNotifier {
isCallingInProgress = true;
logger.i("Setting isCallingInProgress : $isCallingInProgress");
logger.i("isVoiceReq: ${patientTicket.isVoiceReq}");
logger.i("voiceCaller: ${voiceCaller == null}");
logger.i("isQueue: ${patientTicket.isQueue}");
logger.i("isToneReq: ${patientTicket.isToneReq}");
if (patientTicket.isToneReq && !patientTicket.isQueue) {
log("isVoiceReq: ${patientTicket.isVoiceReq}");
log("voiceCaller: ${voiceCaller == null}");
log("isQueue: ${patientTicket.isQueue}");
log("isToneReq: ${patientTicket.isToneReq}");
//TODO: DATA ACCURACY
// if (patientTicket.isToneReq && !patientTicket.isQueue) {
if (!patientTicket.isQueue) {
if (!patientTicket.isToneReq) {
await audioPlayer.setVolume(0.0);
}
audioPlayer.setAsset("assets/tones/call_tone.mp3");
await audioPlayer.play();
await Future.delayed(const Duration(seconds: 2));
}
if (patientTicket.isVoiceReq && voiceCaller == null && !patientTicket.isQueue) {
//TODO: DATA ACCURACY
// if (patientTicket.isVoiceReq && voiceCaller == null && !patientTicket.isQueue) {
if (!patientTicket.isQueue) {
logger.i("patientTicket.voiceLanguage: ${patientTicket.voiceLanguage}");
final postVoice = getCallTypeText(patientTicket);
voiceCaller = CallByVoice(
@ -417,12 +423,16 @@ class AppProvider extends ChangeNotifier {
postVoice: postVoice,
lang: patientTicket.voiceLanguage == 1 ? "en" : "ar",
flutterTts: flutterTts,
isMute: !patientTicket.isVoiceReq,
);
await voiceCaller!.startCalling(patientTicket.queueNo.trim().toString() != patientTicket.callNoStr.trim().toString()).whenComplete(() {
voiceCaller = null;
onVoiceCompleted();
logger.i("Completed Calling!! ${isQueuePatients.length}");
});
//TODO: DATA ACCURACY
// await voiceCaller!.startCalling(patientTicket.queueNo.trim().toString() != patientTicket.callNoStr.trim().toString()).whenComplete(() {
// voiceCaller = null;
// onVoiceCompleted();
// logger.i("Completed Calling!! ${isQueuePatients.length}");
// });
await voiceCaller!.startCalling(patientTicket.queueNo.trim().toString() != patientTicket.callNoStr.trim().toString());
} else {
isCallingInProgress = false;
logger.i("Setting isCallingInProgress : $isCallingInProgress");

@ -22,7 +22,9 @@ class MyHomePage extends StatelessWidget {
return const SizedBox.shrink();
}
return Container(
height: (appProvider.currentScreenRotation == ScreenOrientationEnum.portraitUp || appProvider.currentScreenRotation == ScreenOrientationEnum.portraitDown) ? SizeConfig.getHeightMultiplier() * 8 : SizeConfig.getHeightMultiplier() * 5,
height: (appProvider.currentScreenRotation == ScreenOrientationEnum.portraitUp || appProvider.currentScreenRotation == ScreenOrientationEnum.portraitDown)
? SizeConfig.getHeightMultiplier() * 8
: SizeConfig.getHeightMultiplier() * 5,
padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
decoration: AppGlobal.configWidgetDecoration,
child: Directionality(
@ -64,7 +66,9 @@ class MyHomePage extends StatelessWidget {
return const SizedBox.shrink();
}
return Container(
height: (appProvider.currentScreenRotation == ScreenOrientationEnum.portraitUp || appProvider.currentScreenRotation == ScreenOrientationEnum.portraitDown) ? SizeConfig.getHeightMultiplier() * 8 : SizeConfig.getHeightMultiplier() * 5,
height: (appProvider.currentScreenRotation == ScreenOrientationEnum.portraitUp || appProvider.currentScreenRotation == ScreenOrientationEnum.portraitDown)
? SizeConfig.getHeightMultiplier() * 8
: SizeConfig.getHeightMultiplier() * 5,
padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
decoration: AppGlobal.configWidgetDecoration,
child: Directionality(
@ -157,9 +161,6 @@ class MyHomePage extends StatelessWidget {
}
Widget dataContent({required AppProvider appProvider, required BuildContext context}) {
log("isCallingInProgress from HomeScreen: ${appProvider.isCallingInProgress}");
// appProvider.voiceCallPatientTicket(appProvider.patientTickets.first);
// appProvider.testCalling();
if (appProvider.patientTickets.isEmpty) {
// No Patient in Queue
return noPatientInQueue(screenOrientationEnum: appProvider.currentScreenRotation);

@ -26,7 +26,7 @@ class PriorityTickets extends StatelessWidget {
children: [
const SizedBox(height: 50),
TicketItem(
ticketNo: firstTicket.queueNo ?? '',
ticketNo: firstTicket.queueNo,
callType: firstTicket.getCallType(),
scale: 1.2,
blink: true,
@ -39,19 +39,19 @@ class PriorityTickets extends StatelessWidget {
SizedBox(height: SizeConfig.getHeightMultiplier() * 1.8),
Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: otherTickets
.map((ticket) => Padding(
padding: EdgeInsets.only(top: SizeConfig.getHeightMultiplier() * 2),
child: TicketItem(
ticketNo: ticket.queueNo ?? '',
callType: ticket.getCallType(),
scale: 0.8,
roomNo: ticket.roomNo,
isClinicAdded: ticket.callNoStr != ticket.queueNo,
callConfig: callConfig,
),
))
.toList(),
children: otherTickets.map((ticket) {
return Padding(
padding: EdgeInsets.only(top: SizeConfig.getHeightMultiplier() * 2),
child: TicketItem(
ticketNo: ticket.queueNo,
callType: ticket.getCallType(),
scale: 0.8,
roomNo: ticket.roomNo,
isClinicAdded: ticket.callNoStr != ticket.queueNo,
callConfig: callConfig,
),
);
}).toList(),
)
]
],
@ -82,7 +82,11 @@ class TicketItem extends StatelessWidget {
String getFormattedTicket(String ticketNo, bool isClinicAdded) {
if (isClinicAdded) {
var formattedString = ticketNo.split(" ");
return formattedString[0] + " " + formattedString[1];
if (formattedString.length > 1) {
return "${formattedString[0]} ${formattedString[1]}";
} else {
return ticketNo;
}
}
return ticketNo;
}
@ -94,29 +98,28 @@ class TicketItem extends StatelessWidget {
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
BlinkText(getFormattedTicket(ticketNo, isClinicAdded),
style: TextStyle(
fontSize: SizeConfig.getWidthMultiplier() * 10,
letterSpacing: -1,
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)),
const SizedBox(height: 13),
BlinkText(
getFormattedTicket(ticketNo, isClinicAdded),
style: TextStyle(
fontSize: SizeConfig.getWidthMultiplier() * 10,
letterSpacing: -1,
height: 0.7,
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),
),
const SizedBox(height: 25),
Directionality(
textDirection: callConfig.textDirection,
child: Row(
crossAxisAlignment: CrossAxisAlignment.end,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Padding(
padding: EdgeInsets.only(bottom: callType == CallType.vitalSign ? 0 : 8),
child: callType.icon(SizeConfig.getHeightMultiplier() * 3),
),
callType.icon(SizeConfig.getHeightMultiplier() * 2),
const SizedBox(width: 13),
AppText(
callType.message(callConfig),
@ -124,16 +127,13 @@ class TicketItem extends StatelessWidget {
letterSpacing: -1,
fontSize: SizeConfig.getWidthMultiplier() * 3.8,
fontWeight: FontWeight.w600,
fontHeight: 1,
fontHeight: 0.7,
),
Padding(
padding: const EdgeInsets.only(bottom: 8.0),
child: Container(
color: Colors.grey.withOpacity(0.5),
width: 5,
height: SizeConfig.getHeightMultiplier() * 2,
margin: const EdgeInsets.symmetric(horizontal: 15),
),
Container(
color: Colors.grey.withOpacity(0.5),
width: 5,
height: SizeConfig.getHeightMultiplier() * 2,
margin: const EdgeInsets.symmetric(horizontal: 15),
),
AppText(
callConfig.textDirection == TextDirection.ltr ? "${callConfig.roomText}: $roomNo" : " $roomNo : ${callConfig.roomText}",
@ -141,7 +141,7 @@ class TicketItem extends StatelessWidget {
letterSpacing: -1,
fontSize: SizeConfig.getWidthMultiplier() * 3.8,
fontWeight: FontWeight.w600,
fontHeight: 1,
fontHeight: 0.7,
),
],
),
@ -160,7 +160,9 @@ Widget noPatientInQueue({required ScreenOrientationEnum screenOrientationEnum})
child: AppText(
"Awaiting Patients Arrival",
fontFamily: 'Poppins-SemiBold.ttf',
fontSize: (screenOrientationEnum == ScreenOrientationEnum.portraitDown || screenOrientationEnum == ScreenOrientationEnum.portraitUp) ? SizeConfig.getWidthMultiplier() * 9 : SizeConfig.getWidthMultiplier() * 7,
fontSize: (screenOrientationEnum == ScreenOrientationEnum.portraitDown || screenOrientationEnum == ScreenOrientationEnum.portraitUp)
? SizeConfig.getWidthMultiplier() * 9
: SizeConfig.getWidthMultiplier() * 7,
),
),
],
@ -183,21 +185,20 @@ Widget priorityTicketsWithSideList({required List<PatientTicketModel> tickets, r
final priorityTickets = tickets.sublist(0, 3);
final otherTickets = tickets.sublist(3, tickets.length);
final AppProvider appProvider = context.watch<AppProvider>();
log("appProvider.currentScreenRotation: ${appProvider.currentScreenRotation}");
final List<Widget> children = [
Expanded(flex: 7, child: PriorityTickets(callConfig: callConfig, tickets: priorityTickets)),
Expanded(flex: 8, child: PriorityTickets(callConfig: callConfig, tickets: priorityTickets)),
Container(color: Colors.grey.withOpacity(0.1), width: 10, margin: const EdgeInsets.symmetric(horizontal: 10, vertical: 50)),
Expanded(
flex: 6,
child: ListView(
children: [
Padding(
padding: EdgeInsets.fromLTRB(10, SizeConfig.getHeightMultiplier() * 3.3, 10, 10),
padding: EdgeInsets.fromLTRB(10, SizeConfig.getHeightMultiplier() * 3.3, 10, 20),
child: Directionality(
textDirection: callConfig.textDirection,
child: Row(
crossAxisAlignment: CrossAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
Expanded(
@ -210,7 +211,7 @@ Widget priorityTicketsWithSideList({required List<PatientTicketModel> tickets, r
letterSpacing: -2,
fontHeight: 0.5,
fontWeight: FontWeight.bold,
fontSize: SizeConfig.getWidthMultiplier() * 3.8,
fontSize: SizeConfig.getWidthMultiplier() * 4,
textAlign: TextAlign.center,
),
],
@ -232,7 +233,7 @@ Widget priorityTicketsWithSideList({required List<PatientTicketModel> tickets, r
letterSpacing: -2,
fontHeight: 0.5,
fontWeight: FontWeight.bold,
fontSize: SizeConfig.getWidthMultiplier() * 3.8,
fontSize: SizeConfig.getWidthMultiplier() * 4,
textAlign: TextAlign.center,
),
],
@ -254,7 +255,7 @@ Widget priorityTicketsWithSideList({required List<PatientTicketModel> tickets, r
letterSpacing: -2,
fontHeight: 0.5,
fontWeight: FontWeight.bold,
fontSize: SizeConfig.getWidthMultiplier() * 3.8,
fontSize: SizeConfig.getWidthMultiplier() * 4,
textAlign: TextAlign.center,
),
],
@ -270,11 +271,10 @@ Widget priorityTicketsWithSideList({required List<PatientTicketModel> tickets, r
itemBuilder: (ctx, idx) {
final itm = otherTickets[idx];
return Padding(
padding: const EdgeInsets.all(8),
padding: const EdgeInsets.all(12),
child: Directionality(
textDirection: callConfig.textDirection,
child: Row(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Expanded(
flex: 5,
@ -286,7 +286,7 @@ Widget priorityTicketsWithSideList({required List<PatientTicketModel> tickets, r
letterSpacing: -1,
fontHeight: 0.5,
fontWeight: FontWeight.bold,
fontSize: SizeConfig.getWidthMultiplier() * 3.5,
fontSize: SizeConfig.getWidthMultiplier() * 3.8,
textAlign: TextAlign.center,
),
],
@ -295,38 +295,41 @@ Widget priorityTicketsWithSideList({required List<PatientTicketModel> tickets, r
Container(
color: Colors.grey.withOpacity(0.5),
width: 5,
height: SizeConfig.getHeightMultiplier() * 2,
height: SizeConfig.getHeightMultiplier() * 2.5,
margin: const EdgeInsets.symmetric(horizontal: 15),
),
Expanded(
flex: 5,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Padding(
padding: const EdgeInsets.only(bottom: 10),
child: SizedBox(
width: SizeConfig.getWidthMultiplier() * 3.5,
child: itm.getCallType().icon(SizeConfig.getHeightMultiplier() * 2.5),
child: SizedBox(
height: SizeConfig.getHeightMultiplier() * 3,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Padding(
padding: EdgeInsets.only(bottom: itm.getCallType() == CallType.doctor ? 8.0 : 0.0),
child: itm.getCallType().icon(
itm.getCallType() == CallType.vitalSign ? SizeConfig.getWidthMultiplier() * 3 : SizeConfig.getWidthMultiplier() * 3.5,
fit: BoxFit.cover,
),
),
),
const SizedBox(width: 15),
AppText(
itm.getCallType().message(callConfig, isListView: true),
color: itm.getCallType().color(),
letterSpacing: -1,
fontSize: SizeConfig.getWidthMultiplier() * 3,
fontWeight: FontWeight.w600,
fontHeight: 0.5,
),
],
const SizedBox(width: 15),
AppText(
itm.getCallType().message(callConfig, isListView: true),
color: itm.getCallType().color(),
letterSpacing: 0,
fontSize: SizeConfig.getWidthMultiplier() * 3.8,
fontWeight: FontWeight.w600,
fontHeight: 1,
),
],
),
),
),
Container(
color: Colors.grey.withOpacity(0.5),
width: 5,
height: SizeConfig.getHeightMultiplier() * 2,
height: SizeConfig.getHeightMultiplier() * 2.5,
margin: const EdgeInsets.symmetric(horizontal: 15),
),
Expanded(
@ -336,10 +339,9 @@ Widget priorityTicketsWithSideList({required List<PatientTicketModel> tickets, r
children: [
AppText(
itm.roomNo,
// callConfig.textDirection == TextDirection.ltr ? "${callConfig.roomText}: ${itm.roomNo}" : " ${itm.roomNo} ${callConfig.roomText}: ",
color: itm.getCallType().color(),
letterSpacing: -1.5,
fontSize: SizeConfig.getWidthMultiplier() * 3.3,
letterSpacing: 0,
fontSize: SizeConfig.getWidthMultiplier() * 3.8,
fontWeight: FontWeight.w600,
fontHeight: 0.5,
),
@ -356,5 +358,7 @@ Widget priorityTicketsWithSideList({required List<PatientTicketModel> tickets, r
),
)
];
return (appProvider.currentScreenRotation == ScreenOrientationEnum.portraitUp || appProvider.currentScreenRotation == ScreenOrientationEnum.portraitDown) ? Row(children: children) : Column(children: children);
return (appProvider.currentScreenRotation == ScreenOrientationEnum.portraitUp || appProvider.currentScreenRotation == ScreenOrientationEnum.portraitDown)
? Row(children: children)
: Column(children: children);
}

@ -1,4 +1,3 @@
import 'dart:developer';
import 'dart:io';
import 'package:flutter/material.dart';
@ -20,7 +19,6 @@ Logger logger = Logger(
));
void main() {
//TODO: WE HAVE TO UPDATE THIS BEFORE GOING LIVE.
HttpOverrides.global = MyHttpOverrides();
WidgetsFlutterBinding.ensureInitialized();
WakelockPlus.enable();
@ -28,9 +26,6 @@ void main() {
}
//test commit
//TODO: WE NEED TO IMPLEMENT THE AVAILABILITY MONITORING OF THE SCREENS LIKE IF THEY ARE TURNED ON OR NOT!!
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@ -50,7 +45,7 @@ class MyApp extends StatelessWidget {
],
child: MaterialApp(
showSemanticsDebugger: false,
title: 'Doctors App',
title: 'Qline Appointments',
theme: ThemeData(
primaryColor: Colors.grey,
fontFamily: 'Poppins',

@ -8,24 +8,34 @@ class CallByVoice {
final String preVoice;
final String ticketNo;
final String postVoice;
final bool isMute;
final FlutterTts flutterTts;
CallByVoice({this.lang = 'en', required this.ticketNo, required this.preVoice, required this.postVoice, required this.flutterTts});
CallByVoice({
this.lang = 'en',
required this.isMute,
required this.ticketNo,
required this.preVoice,
required this.postVoice,
required this.flutterTts,
});
double volume = 1.0;
double pitch = 0.6;
double rate = 0.2;
Future<void> startCalling(bool isClinicNameAdded) async {
log("lang: $lang");
log("preVoice: $preVoice");
log("postVoice: $postVoice");
log("ticketNo: $ticketNo");
log("isClinicNameAdded: $isClinicNameAdded");
// log("getEngines: ${await flutterTts.getEngines}");
// log("getDefaultEngine: ${await flutterTts.getDefaultEngine}");
// log("getVoices: ${await flutterTts.getVoices}");
// log("getDefaultVoice: ${await flutterTts.getDefaultVoice}");
String clinicName = "";
String patientAlpha = "";
String patientNumeric = "";
if (isMute) {
volume = 0.0;
}
if (isClinicNameAdded) {
var clinic = ticketNo.split(" ");
@ -49,29 +59,29 @@ class CallByVoice {
}
}
// Create Pre Voice Players
if (postVoice != null && postVoice.isNotEmpty) {
if (postVoice.isNotEmpty) {
log('lang $lang');
flutterTts.setSpeechRate(0.45);
if (lang != "ar") {
await flutterTts.setLanguage(lang);
flutterTts.setPitch(0.9);
flutterTts.setVolume(1.0);
flutterTts.setVolume(volume);
isVoiceActualCompletedGlobally = true;
await flutterTts.awaitSpeakCompletion(true);
await flutterTts.speak(preVoice + " .. " + clinicName + " .. " + patientAlpha + " .. " + patientNumeric + " .. " + postVoice);
await flutterTts.speak("$preVoice .. $clinicName .. $patientAlpha .. $patientNumeric .. $postVoice");
return;
}
flutterTts.setPitch(1.1);
flutterTts.setVolume(1.0);
flutterTts.setVolume(volume);
await flutterTts.setLanguage(lang);
isVoiceActualCompletedGlobally = false;
await flutterTts.awaitSpeakCompletion(true);
// await flutterTts.speak(preVoice + " .. " + clinicName + " .. " + patientAlpha + " .. " + patientNumeric + " .. " + postVoice);
await flutterTts.speak(preVoice + " .. ");
await flutterTts.speak("$preVoice .. ");
await flutterTts.setLanguage("en");
await flutterTts.speak(clinicName + " .. " + patientAlpha + " .. " + patientNumeric + " .. ");
await flutterTts.speak("${clinicName.isNotEmpty ? ".." : ""} $patientAlpha .. $patientNumeric .. ");
await flutterTts.setLanguage(lang);
isVoiceActualCompletedGlobally = true;
await flutterTts.speak(postVoice);

@ -42,19 +42,26 @@ extension XCallType on CallType {
}
}
SvgPicture icon(double height) {
SvgPicture icon(double height, {double? width, BoxFit fit = BoxFit.contain}) {
String iconPath = "";
if (this == CallType.vitalSign) {
return SvgPicture.asset(AppGlobal.vitalSignIcon, height: height, color: color());
iconPath = AppGlobal.vitalSignIcon;
} else if (this == CallType.doctor) {
return SvgPicture.asset(AppGlobal.doctorIcon, height: height, color: color());
iconPath = AppGlobal.doctorIcon;
} else if (this == CallType.procedure) {
return SvgPicture.asset(AppGlobal.procedureIcon, height: height, color: color());
iconPath = AppGlobal.procedureIcon;
} else if (this == CallType.vaccination) {
return SvgPicture.asset(AppGlobal.vaccinationIcon, height: height, color: color());
iconPath = AppGlobal.vaccinationIcon;
} else if (this == CallType.nebulization) {
return SvgPicture.asset(AppGlobal.nebulizationIcon, height: height, color: color());
iconPath = AppGlobal.nebulizationIcon;
}
return SvgPicture.asset("assets/images/wait.svg", height: height, color: color());
return SvgPicture.asset(
iconPath.isEmpty ? "assets/images/wait.svg" : iconPath,
height: height,
width: width,
fit: fit,
);
}
String audio(String lang) {

@ -41,9 +41,7 @@ class SignalRHelper {
url,
HttpConnectionOptions(
client: IOClient(HttpClient()..badCertificateCallback = (x, y, z) => true),
//TODO: IT MUST BE WEB SOCKETS
transport: HttpTransportType.longPolling,
transport: HttpTransportType.webSockets,
logging: (level, message) => log(message),
))
.withAutomaticReconnect()
@ -57,7 +55,11 @@ class SignalRHelper {
connection!.on('addChatMessage', (message) => onUpdateAvailable(message));
await connection!.start();
try {
await connection!.start();
} catch (e) {
logger.i("Exception while connecting: ${e.toString()}");
}
}
void sendMessage(List<dynamic> args) async {

@ -11,7 +11,7 @@ class Utils {
//TODO: Add translation
String localMsg = 'Something wrong happened, please contact the admin';
if (err != null) {
localMsg = localMsg + '\n \n' + err.toString();
localMsg = '$localMsg\n \n$err';
}
return localMsg;
}

@ -0,0 +1,738 @@
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
args:
dependency: transitive
description:
name: args
sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6
url: "https://pub.dev"
source: hosted
version: "2.6.0"
async:
dependency: transitive
description:
name: async
sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
url: "https://pub.dev"
source: hosted
version: "2.11.0"
audio_session:
dependency: transitive
description:
name: audio_session
sha256: "343e83bc7809fbda2591a49e525d6b63213ade10c76f15813be9aed6657b3261"
url: "https://pub.dev"
source: hosted
version: "0.1.21"
blinking_text:
dependency: "direct main"
description:
name: blinking_text
sha256: b5af1883380ab88ee6a9337a1b44fbba7d0670ba889b810c57c9aa58eb33ad92
url: "https://pub.dev"
source: hosted
version: "1.0.4"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
url: "https://pub.dev"
source: hosted
version: "2.1.1"
characters:
dependency: transitive
description:
name: characters
sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
url: "https://pub.dev"
source: hosted
version: "1.3.0"
clock:
dependency: transitive
description:
name: clock
sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
url: "https://pub.dev"
source: hosted
version: "1.1.1"
collection:
dependency: transitive
description:
name: collection
sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
url: "https://pub.dev"
source: hosted
version: "1.18.0"
connectivity_plus:
dependency: "direct main"
description:
name: connectivity_plus
sha256: "876849631b0c7dc20f8b471a2a03142841b482438e3b707955464f5ffca3e4c3"
url: "https://pub.dev"
source: hosted
version: "6.1.0"
connectivity_plus_platform_interface:
dependency: transitive
description:
name: connectivity_plus_platform_interface
sha256: "42657c1715d48b167930d5f34d00222ac100475f73d10162ddf43e714932f204"
url: "https://pub.dev"
source: hosted
version: "2.0.1"
crypto:
dependency: transitive
description:
name: crypto
sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
url: "https://pub.dev"
source: hosted
version: "3.0.6"
dbus:
dependency: transitive
description:
name: dbus
sha256: "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac"
url: "https://pub.dev"
source: hosted
version: "0.7.10"
equatable:
dependency: transitive
description:
name: equatable
sha256: c2b87cb7756efdf69892005af546c56c0b5037f54d2a88269b4f347a505e3ca2
url: "https://pub.dev"
source: hosted
version: "2.0.5"
fading_edge_scrollview:
dependency: transitive
description:
name: fading_edge_scrollview
sha256: "1f84fe3ea8e251d00d5735e27502a6a250e4aa3d3b330d3fdcb475af741464ef"
url: "https://pub.dev"
source: hosted
version: "4.1.1"
fake_async:
dependency: transitive
description:
name: fake_async
sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
url: "https://pub.dev"
source: hosted
version: "1.3.1"
ffi:
dependency: transitive
description:
name: ffi
sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6"
url: "https://pub.dev"
source: hosted
version: "2.1.3"
file:
dependency: transitive
description:
name: file
sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4
url: "https://pub.dev"
source: hosted
version: "7.0.1"
fixnum:
dependency: transitive
description:
name: fixnum
sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be
url: "https://pub.dev"
source: hosted
version: "1.1.1"
flutter:
dependency: "direct main"
description: flutter
source: sdk
version: "0.0.0"
flutter_lints:
dependency: "direct dev"
description:
name: flutter_lints
sha256: "5398f14efa795ffb7a33e9b6a08798b26a180edac4ad7db3f231e40f82ce11e1"
url: "https://pub.dev"
source: hosted
version: "5.0.0"
flutter_svg:
dependency: "direct main"
description:
name: flutter_svg
sha256: "578bd8c508144fdaffd4f77b8ef2d8c523602275cd697cc3db284dbd762ef4ce"
url: "https://pub.dev"
source: hosted
version: "2.0.14"
flutter_test:
dependency: "direct dev"
description: flutter
source: sdk
version: "0.0.0"
flutter_tts:
dependency: "direct main"
description:
name: flutter_tts
sha256: "02c65a10d3423dcd73e0236fb381dbd459d4a13ecfce40b9be41bd0bc4180733"
url: "https://pub.dev"
source: hosted
version: "4.1.0"
flutter_web_plugins:
dependency: transitive
description: flutter
source: sdk
version: "0.0.0"
get_it:
dependency: "direct main"
description:
name: get_it
sha256: c49895c1ecb0ee2a0ec568d39de882e2c299ba26355aa6744ab1001f98cebd15
url: "https://pub.dev"
source: hosted
version: "8.0.2"
http:
dependency: "direct main"
description:
name: http
sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010
url: "https://pub.dev"
source: hosted
version: "1.2.2"
http_parser:
dependency: transitive
description:
name: http_parser
sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b"
url: "https://pub.dev"
source: hosted
version: "4.0.2"
intl:
dependency: "direct main"
description:
name: intl
sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf
url: "https://pub.dev"
source: hosted
version: "0.19.0"
just_audio:
dependency: "direct main"
description:
name: just_audio
sha256: a49e7120b95600bd357f37a2bb04cd1e88252f7cdea8f3368803779b925b1049
url: "https://pub.dev"
source: hosted
version: "0.9.42"
just_audio_platform_interface:
dependency: transitive
description:
name: just_audio_platform_interface
sha256: "0243828cce503c8366cc2090cefb2b3c871aa8ed2f520670d76fd47aa1ab2790"
url: "https://pub.dev"
source: hosted
version: "4.3.0"
just_audio_web:
dependency: transitive
description:
name: just_audio_web
sha256: "9a98035b8b24b40749507687520ec5ab404e291d2b0937823ff45d92cb18d448"
url: "https://pub.dev"
source: hosted
version: "0.4.13"
leak_tracker:
dependency: transitive
description:
name: leak_tracker
sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05"
url: "https://pub.dev"
source: hosted
version: "10.0.5"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806"
url: "https://pub.dev"
source: hosted
version: "3.0.5"
leak_tracker_testing:
dependency: transitive
description:
name: leak_tracker_testing
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
url: "https://pub.dev"
source: hosted
version: "3.0.1"
lints:
dependency: transitive
description:
name: lints
sha256: "3315600f3fb3b135be672bf4a178c55f274bebe368325ae18462c89ac1e3b413"
url: "https://pub.dev"
source: hosted
version: "5.0.0"
logger:
dependency: "direct main"
description:
name: logger
sha256: "697d067c60c20999686a0add96cf6aba723b3aa1f83ecf806a8097231529ec32"
url: "https://pub.dev"
source: hosted
version: "2.4.0"
logging:
dependency: transitive
description:
name: logging
sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
url: "https://pub.dev"
source: hosted
version: "1.3.0"
marquee:
dependency: "direct main"
description:
name: marquee
sha256: a87e7e80c5d21434f90ad92add9f820cf68be374b226404fe881d2bba7be0862
url: "https://pub.dev"
source: hosted
version: "2.3.0"
matcher:
dependency: transitive
description:
name: matcher
sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
url: "https://pub.dev"
source: hosted
version: "0.12.16+1"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
url: "https://pub.dev"
source: hosted
version: "0.11.1"
meta:
dependency: transitive
description:
name: meta
sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
url: "https://pub.dev"
source: hosted
version: "1.15.0"
nested:
dependency: transitive
description:
name: nested
sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20"
url: "https://pub.dev"
source: hosted
version: "1.0.0"
nm:
dependency: transitive
description:
name: nm
sha256: "2c9aae4127bdc8993206464fcc063611e0e36e72018696cd9631023a31b24254"
url: "https://pub.dev"
source: hosted
version: "0.5.0"
package_info_plus:
dependency: transitive
description:
name: package_info_plus
sha256: da8d9ac8c4b1df253d1a328b7bf01ae77ef132833479ab40763334db13b91cce
url: "https://pub.dev"
source: hosted
version: "8.1.1"
package_info_plus_platform_interface:
dependency: transitive
description:
name: package_info_plus_platform_interface
sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66
url: "https://pub.dev"
source: hosted
version: "3.0.1"
path:
dependency: transitive
description:
name: path
sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
url: "https://pub.dev"
source: hosted
version: "1.9.0"
path_parsing:
dependency: transitive
description:
name: path_parsing
sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca"
url: "https://pub.dev"
source: hosted
version: "1.1.0"
path_provider:
dependency: transitive
description:
name: path_provider
sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
url: "https://pub.dev"
source: hosted
version: "2.1.5"
path_provider_android:
dependency: transitive
description:
name: path_provider_android
sha256: c464428172cb986b758c6d1724c603097febb8fb855aa265aeecc9280c294d4a
url: "https://pub.dev"
source: hosted
version: "2.2.12"
path_provider_foundation:
dependency: transitive
description:
name: path_provider_foundation
sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16
url: "https://pub.dev"
source: hosted
version: "2.4.0"
path_provider_linux:
dependency: transitive
description:
name: path_provider_linux
sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279
url: "https://pub.dev"
source: hosted
version: "2.2.1"
path_provider_platform_interface:
dependency: transitive
description:
name: path_provider_platform_interface
sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334"
url: "https://pub.dev"
source: hosted
version: "2.1.2"
path_provider_windows:
dependency: transitive
description:
name: path_provider_windows
sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7
url: "https://pub.dev"
source: hosted
version: "2.3.0"
petitparser:
dependency: transitive
description:
name: petitparser
sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27
url: "https://pub.dev"
source: hosted
version: "6.0.2"
platform:
dependency: transitive
description:
name: platform
sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984"
url: "https://pub.dev"
source: hosted
version: "3.1.6"
plugin_platform_interface:
dependency: transitive
description:
name: plugin_platform_interface
sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
url: "https://pub.dev"
source: hosted
version: "2.1.8"
pool:
dependency: transitive
description:
name: pool
sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a"
url: "https://pub.dev"
source: hosted
version: "1.5.1"
provider:
dependency: "direct main"
description:
name: provider
sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c
url: "https://pub.dev"
source: hosted
version: "6.1.2"
rxdart:
dependency: transitive
description:
name: rxdart
sha256: "5c3004a4a8dbb94bd4bf5412a4def4acdaa12e12f269737a5751369e12d1a962"
url: "https://pub.dev"
source: hosted
version: "0.28.0"
shared_preferences:
dependency: "direct main"
description:
name: shared_preferences
sha256: a752ce92ea7540fc35a0d19722816e04d0e72828a4200e83a98cf1a1eb524c9a
url: "https://pub.dev"
source: hosted
version: "2.3.5"
shared_preferences_android:
dependency: transitive
description:
name: shared_preferences_android
sha256: "02a7d8a9ef346c9af715811b01fbd8e27845ad2c41148eefd31321471b41863d"
url: "https://pub.dev"
source: hosted
version: "2.4.0"
shared_preferences_foundation:
dependency: transitive
description:
name: shared_preferences_foundation
sha256: "07e050c7cd39bad516f8d64c455f04508d09df104be326d8c02551590a0d513d"
url: "https://pub.dev"
source: hosted
version: "2.5.3"
shared_preferences_linux:
dependency: transitive
description:
name: shared_preferences_linux
sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f"
url: "https://pub.dev"
source: hosted
version: "2.4.1"
shared_preferences_platform_interface:
dependency: transitive
description:
name: shared_preferences_platform_interface
sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80"
url: "https://pub.dev"
source: hosted
version: "2.4.1"
shared_preferences_web:
dependency: transitive
description:
name: shared_preferences_web
sha256: d2ca4132d3946fec2184261726b355836a82c33d7d5b67af32692aff18a4684e
url: "https://pub.dev"
source: hosted
version: "2.4.2"
shared_preferences_windows:
dependency: transitive
description:
name: shared_preferences_windows
sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1"
url: "https://pub.dev"
source: hosted
version: "2.4.1"
shelf:
dependency: transitive
description:
name: shelf
sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4
url: "https://pub.dev"
source: hosted
version: "1.4.1"
signalr_core:
dependency: "direct main"
description:
name: signalr_core
sha256: "27c4ce798c8fedc2f7e3e4668c2b1dbcf6ee2a93f40ad24284b5f5bbed84529d"
url: "https://pub.dev"
source: hosted
version: "1.1.2"
sky_engine:
dependency: transitive
description: flutter
source: sdk
version: "0.0.99"
source_span:
dependency: transitive
description:
name: source_span
sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
url: "https://pub.dev"
source: hosted
version: "1.10.0"
sprintf:
dependency: transitive
description:
name: sprintf
sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23"
url: "https://pub.dev"
source: hosted
version: "7.0.0"
sse:
dependency: transitive
description:
name: sse
sha256: "111a05843ea9035042975744fe61d5e8b95bc4d38656dbafc5532da77a0bb89a"
url: "https://pub.dev"
source: hosted
version: "4.1.6"
sse_channel:
dependency: transitive
description:
name: sse_channel
sha256: "9aad5d4eef63faf6ecdefb636c0f857bd6f74146d2196087dcf4b17ab5b49b1b"
url: "https://pub.dev"
source: hosted
version: "0.1.1"
stack_trace:
dependency: transitive
description:
name: stack_trace
sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
url: "https://pub.dev"
source: hosted
version: "1.11.1"
stream_channel:
dependency: transitive
description:
name: stream_channel
sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
url: "https://pub.dev"
source: hosted
version: "2.1.2"
string_scanner:
dependency: transitive
description:
name: string_scanner
sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
url: "https://pub.dev"
source: hosted
version: "1.2.0"
term_glyph:
dependency: transitive
description:
name: term_glyph
sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
url: "https://pub.dev"
source: hosted
version: "1.2.1"
test_api:
dependency: transitive
description:
name: test_api
sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb"
url: "https://pub.dev"
source: hosted
version: "0.7.2"
tuple:
dependency: transitive
description:
name: tuple
sha256: a97ce2013f240b2f3807bcbaf218765b6f301c3eff91092bcfa23a039e7dd151
url: "https://pub.dev"
source: hosted
version: "2.0.2"
typed_data:
dependency: transitive
description:
name: typed_data
sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
url: "https://pub.dev"
source: hosted
version: "1.4.0"
uuid:
dependency: transitive
description:
name: uuid
sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff
url: "https://pub.dev"
source: hosted
version: "4.5.1"
vector_graphics:
dependency: transitive
description:
name: vector_graphics
sha256: "773c9522d66d523e1c7b25dfb95cc91c26a1e17b107039cfe147285e92de7878"
url: "https://pub.dev"
source: hosted
version: "1.1.14"
vector_graphics_codec:
dependency: transitive
description:
name: vector_graphics_codec
sha256: "2430b973a4ca3c4dbc9999b62b8c719a160100dcbae5c819bae0cacce32c9cdb"
url: "https://pub.dev"
source: hosted
version: "1.1.12"
vector_graphics_compiler:
dependency: transitive
description:
name: vector_graphics_compiler
sha256: ab9ff38fc771e9ee1139320adbe3d18a60327370c218c60752068ebee4b49ab1
url: "https://pub.dev"
source: hosted
version: "1.1.15"
vector_math:
dependency: transitive
description:
name: vector_math
sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
url: "https://pub.dev"
source: hosted
version: "2.1.4"
vm_service:
dependency: transitive
description:
name: vm_service
sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d"
url: "https://pub.dev"
source: hosted
version: "14.2.5"
wakelock_plus:
dependency: "direct main"
description:
name: wakelock_plus
sha256: bf4ee6f17a2fa373ed3753ad0e602b7603f8c75af006d5b9bdade263928c0484
url: "https://pub.dev"
source: hosted
version: "1.2.8"
wakelock_plus_platform_interface:
dependency: transitive
description:
name: wakelock_plus_platform_interface
sha256: "422d1cdbb448079a8a62a5a770b69baa489f8f7ca21aef47800c726d404f9d16"
url: "https://pub.dev"
source: hosted
version: "1.2.1"
web:
dependency: transitive
description:
name: web
sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27"
url: "https://pub.dev"
source: hosted
version: "0.5.1"
web_socket_channel:
dependency: transitive
description:
name: web_socket_channel
sha256: "58c6666b342a38816b2e7e50ed0f1e261959630becd4c879c4f26bfa14aa5a42"
url: "https://pub.dev"
source: hosted
version: "2.4.5"
win32:
dependency: "direct main"
description:
name: win32
sha256: "84ba388638ed7a8cb3445a320c8273136ab2631cd5f2c57888335504ddab1bc2"
url: "https://pub.dev"
source: hosted
version: "5.8.0"
xdg_directories:
dependency: transitive
description:
name: xdg_directories
sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15"
url: "https://pub.dev"
source: hosted
version: "1.1.0"
xml:
dependency: transitive
description:
name: xml
sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226
url: "https://pub.dev"
source: hosted
version: "6.5.0"
sdks:
dart: ">=3.5.0 <4.0.0"
flutter: ">=3.24.0"
Loading…
Cancel
Save