import 'dart:developer'; 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/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/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'; var DEVICE_IP = "10.10.14.11"; // 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(); 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 ); } 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; }); log("\n\n"); log("--------------------"); log("Current: $currentInClinic"); log("Waiting: $waitingCalls"); log("--------------------"); log("\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(){ log("SignalR: onConnect"); } onDisconnect(exception){ log("SignalR: onDisconnect"); } onConnecting(){ log("SignalR: onConnecting"); } listenNetworkConnectivity() async{ Connectivity().onConnectivityChanged.listen((event) { switch (event) { case ConnectivityResult.wifi: signalRHelper.connection.start(); break; case ConnectivityResult.none: signalRHelper.closeConnection(context); break; case ConnectivityResult.mobile: break; } }); } }