diff --git a/android/app/build.gradle b/android/app/build.gradle index 1d1f0af..d4f4f6e 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -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 } diff --git a/assets/voice_en/A.mp3 b/assets/voice_en/A.mp3 new file mode 100644 index 0000000..9e7c9ba Binary files /dev/null and b/assets/voice_en/A.mp3 differ diff --git a/assets/voice_en/B.mp3 b/assets/voice_en/B.mp3 new file mode 100644 index 0000000..d4aedb3 Binary files /dev/null and b/assets/voice_en/B.mp3 differ diff --git a/assets/voice_en/C.mp3 b/assets/voice_en/C.mp3 new file mode 100644 index 0000000..e339eea Binary files /dev/null and b/assets/voice_en/C.mp3 differ diff --git a/assets/voice_en/D.mp3 b/assets/voice_en/D.mp3 new file mode 100644 index 0000000..29703e1 Binary files /dev/null and b/assets/voice_en/D.mp3 differ diff --git a/assets/voice_en/E.mp3 b/assets/voice_en/E.mp3 new file mode 100644 index 0000000..8233369 Binary files /dev/null and b/assets/voice_en/E.mp3 differ diff --git a/assets/voice_en/F.mp3 b/assets/voice_en/F.mp3 new file mode 100644 index 0000000..9e91029 Binary files /dev/null and b/assets/voice_en/F.mp3 differ diff --git a/assets/voice_en/G.mp3 b/assets/voice_en/G.mp3 new file mode 100644 index 0000000..6d466d9 Binary files /dev/null and b/assets/voice_en/G.mp3 differ diff --git a/assets/voice_en/H.mp3 b/assets/voice_en/H.mp3 new file mode 100644 index 0000000..d8db402 Binary files /dev/null and b/assets/voice_en/H.mp3 differ diff --git a/assets/voice_en/I.mp3 b/assets/voice_en/I.mp3 new file mode 100644 index 0000000..ec99690 Binary files /dev/null and b/assets/voice_en/I.mp3 differ diff --git a/assets/voice_en/J.mp3 b/assets/voice_en/J.mp3 new file mode 100644 index 0000000..20c4c7d Binary files /dev/null and b/assets/voice_en/J.mp3 differ diff --git a/assets/voice_en/K.mp3 b/assets/voice_en/K.mp3 new file mode 100644 index 0000000..435bb2a Binary files /dev/null and b/assets/voice_en/K.mp3 differ diff --git a/assets/voice_en/L.mp3 b/assets/voice_en/L.mp3 new file mode 100644 index 0000000..8782f98 Binary files /dev/null and b/assets/voice_en/L.mp3 differ diff --git a/assets/voice_en/M.mp3 b/assets/voice_en/M.mp3 new file mode 100644 index 0000000..241ab72 Binary files /dev/null and b/assets/voice_en/M.mp3 differ diff --git a/assets/voice_en/N.mp3 b/assets/voice_en/N.mp3 new file mode 100644 index 0000000..07845a5 Binary files /dev/null and b/assets/voice_en/N.mp3 differ diff --git a/assets/voice_en/O.mp3 b/assets/voice_en/O.mp3 new file mode 100644 index 0000000..4489e28 Binary files /dev/null and b/assets/voice_en/O.mp3 differ diff --git a/assets/voice_en/P.mp3 b/assets/voice_en/P.mp3 new file mode 100644 index 0000000..8b05b1b Binary files /dev/null and b/assets/voice_en/P.mp3 differ diff --git a/assets/voice_en/Q.mp3 b/assets/voice_en/Q.mp3 new file mode 100644 index 0000000..b19af46 Binary files /dev/null and b/assets/voice_en/Q.mp3 differ diff --git a/assets/voice_en/R.mp3 b/assets/voice_en/R.mp3 new file mode 100644 index 0000000..06a7061 Binary files /dev/null and b/assets/voice_en/R.mp3 differ diff --git a/assets/voice_en/S.mp3 b/assets/voice_en/S.mp3 new file mode 100644 index 0000000..61cd779 Binary files /dev/null and b/assets/voice_en/S.mp3 differ diff --git a/assets/voice_en/T.mp3 b/assets/voice_en/T.mp3 new file mode 100644 index 0000000..87940cf Binary files /dev/null and b/assets/voice_en/T.mp3 differ diff --git a/assets/voice_en/U.mp3 b/assets/voice_en/U.mp3 new file mode 100644 index 0000000..6046904 Binary files /dev/null and b/assets/voice_en/U.mp3 differ diff --git a/assets/voice_en/V.mp3 b/assets/voice_en/V.mp3 new file mode 100644 index 0000000..38b6966 Binary files /dev/null and b/assets/voice_en/V.mp3 differ diff --git a/assets/voice_en/W.mp3 b/assets/voice_en/W.mp3 new file mode 100644 index 0000000..a0b575a Binary files /dev/null and b/assets/voice_en/W.mp3 differ diff --git a/assets/voice_en/X.mp3 b/assets/voice_en/X.mp3 new file mode 100644 index 0000000..3f4ae66 Binary files /dev/null and b/assets/voice_en/X.mp3 differ diff --git a/assets/voice_en/Y.mp3 b/assets/voice_en/Y.mp3 new file mode 100644 index 0000000..bfac3c8 Binary files /dev/null and b/assets/voice_en/Y.mp3 differ diff --git a/assets/voice_en/Z.mp3 b/assets/voice_en/Z.mp3 new file mode 100644 index 0000000..dcc0cc5 Binary files /dev/null and b/assets/voice_en/Z.mp3 differ diff --git a/lib/core/api.dart b/lib/core/api.dart index 4f9c756..b4b61c5 100644 --- a/lib/core/api.dart +++ b/lib/core/api.dart @@ -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, @required Function(List) onSuccess, @required Function(dynamic) onFailure}) async { - if (tickets.isEmpty) { + static Call_UpdateNotIsQueueRecordByIDAsync(String deviceIp, {@required Tickets ticket, @required Function(List) onSuccess, @required Function(dynamic) onFailure}) async { + if (ticket.id == null) { return; } List _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); diff --git a/lib/core/response_model/patient_call.dart b/lib/core/response_model/patient_call.dart index ff913fa..435dcf6 100644 --- a/lib/core/response_model/patient_call.dart +++ b/lib/core/response_model/patient_call.dart @@ -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 toJson() { final map = {}; + 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; } diff --git a/lib/home/home_screen.dart b/lib/home/home_screen.dart index 2ccf9f6..04aa2e8 100644 --- a/lib/home/home_screen.dart +++ b/lib/home/home_screen.dart @@ -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 { @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 { TextEditingController controller = TextEditingController(); + @override Widget build(BuildContext context) { return AppScaffold( @@ -150,13 +153,20 @@ class _MyHomePageState extends State { 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 { 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 { } updateTickets() { - List _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 _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 { 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() { diff --git a/lib/home/home_screen_components.dart b/lib/home/home_screen_components.dart index 3e697e6..3f3408f 100644 --- a/lib/home/home_screen_components.dart +++ b/lib/home/home_screen_components.dart @@ -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){ +Widget priorityTickets(List tickets) { return PriorityTickets(tickets); } - - -Widget priorityTicketsWithSideList(List tickets){ - final priorityTickets = tickets.sublist(0,3); - final otherTickets = tickets.sublist(3,tickets.length); +Widget priorityTicketsWithSideList(List 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){ ) ], ); -} \ No newline at end of file +} diff --git a/lib/home/priority_calls.dart b/lib/home/priority_calls.dart index 18b8695..35ae16b 100644 --- a/lib/home/priority_calls.dart +++ b/lib/home/priority_calls.dart @@ -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, ), diff --git a/lib/utils/call_by_voice.dart b/lib/utils/call_by_voice.dart index d58ec61..557d3f6 100644 --- a/lib/utils/call_by_voice.dart +++ b/lib/utils/call_by_voice.dart @@ -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(); } } diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index f7ea4ff..1d5268d 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -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")) } diff --git a/pubspec.lock b/pubspec.lock index 8b284a7..c94731a 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -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: diff --git a/pubspec.yaml b/pubspec.yaml index 26354ae..0e196ae 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -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