import 'dart:async'; import 'dart:io'; import 'package:connectivity/connectivity.dart'; import 'package:flutter/material.dart'; import 'package:queuing_system/core/api.dart'; import 'package:queuing_system/core/base/app_scaffold_widget.dart'; import 'package:queuing_system/core/base/base_app_client.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/header/app_header.dart'; import 'package:queuing_system/home/home_screen_components.dart'; import 'package:queuing_system/home/que_item_list.dart'; import 'package:queuing_system/utils/call_by_voice.dart'; 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:signalr_core/signalr_core.dart'; import 'package:text_to_speech/text_to_speech.dart'; import 'first_column.dart'; var DEVICE_IP = "10.20.20.19"; // Testing IP // var DEVICE_IP = "10.70.249.21"; // (Make sure by Haroon before use it) Production IP class MyHomePage extends StatefulWidget { String title = "MyHomePage"; @override State createState() => _MyHomePageState(); } class _MyHomePageState extends State { SignalRHelper signalRHelper = SignalRHelper(); final _tts = TextToSpeech(); List waitings = []; List currents = []; @override void dispose() { super.dispose(); } @override void initState() { listenNetworkConnectivity(); if (!signalRHelper.getConnectionState()) { signalRHelper.startSignalRConnection( DEVICE_IP, onUpdateAvailable: onUpdateAvailable, onConnect: onConnect, onConnecting: onConnecting, onDisconnect: onDisconnect ); } _tts.setLanguage("en"); _tts.setRate(0.7); // _tts.getVoiceByLang('en').then((value){ // // }) _tts.getVoice().then((value){ _tts.setVoice(value[2]); }); super.initState(); } @override Widget build(BuildContext context) { return AppScaffold( appBar: AppHeader(), body: content(), bottomNavigationBar: Container( color: Colors.grey.withOpacity(0.1), height: Utils.getHeight(), width: double.infinity, child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ const SizedBox(width: 20), AppText( "Powered By", fontSize: SizeConfig.getWidthMultiplier() * 2.6, fontFamily: 'Poppins-Medium.ttf', ), const SizedBox(width: 20), Image.asset( "assets/images/cloud_logo.png", height: SizeConfig.getHeightMultiplier() * 4, ), const SizedBox(width: 20), ], ), ), ); } Widget content(){ // waitings = waitings.sublist(0,3); voiceCall(); if(waitings.isEmpty) { // No Patient in Queue return noPatientInQueue(); }else if(waitings.length > 4){ // Return Content With Side List return priorityTicketsWithSideList(waitings); }else{ // Return Content In Center Aligned return priorityTickets(waitings); } } CallByVoice voiceCaller; 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'); await voiceCaller.start(); voiceCaller = null; } } onUpdateAvailable(data) async{ API.GetCallRequestInfoByClinincInfo( DEVICE_IP, onSuccess: (waitingCalls, currentInClinic){ setState(() { waitings = waitingCalls; currents = currentInClinic; }); print("\n\n"); print("--------------------"); print("Current: $currentInClinic"); print("Waiting: $waitingCalls"); print("--------------------"); print("\n\n"); updateTickets(); }, onFailure: (error){ }); } updateTickets(){ List _ticketsToUpdate = waitings.where((t) => t.call_updated == false); API.Call_UpdateNotIsQueueRecordByIDAsync(DEVICE_IP, tickets: _ticketsToUpdate, onSuccess: (tickets_updated){ print("[${tickets_updated.length}] Tickets Updated: $tickets_updated"); }, onFailure: (e){ }); } onConnect(){ print("SignalR: onConnect"); } onDisconnect(exception){ print("SignalR: onDisconnect"); } onConnecting(){ print("SignalR: onConnecting"); } listenNetworkConnectivity() async{ Connectivity().onConnectivityChanged.listen((event) { switch (event) { case ConnectivityResult.wifi: signalRHelper.connection.start(); break; case ConnectivityResult.none: signalRHelper.closeConnection(context); break; } }); } }