You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mohemm-flutter-app/lib/home/home_screen.dart

196 lines
5.1 KiB
Dart

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<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
SignalRHelper signalRHelper = SignalRHelper();
final _tts = TextToSpeech();
List<Tickets> waitings = [];
List<Tickets> 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<Tickets> _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;
}
});
}
}