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

4 years ago
import 'dart:async';
3 years ago
import 'dart:io';
import 'package:connectivity/connectivity.dart';
4 years ago
import 'package:flutter/material.dart';
3 years ago
import 'package:queuing_system/core/api.dart';
4 years ago
import 'package:queuing_system/core/base/app_scaffold_widget.dart';
3 years ago
import 'package:queuing_system/core/base/base_app_client.dart';
4 years ago
import 'package:queuing_system/core/config/config.dart';
import 'package:queuing_system/core/config/size_config.dart';
3 years ago
import 'package:queuing_system/core/response_model/patient_call.dart';
import 'package:queuing_system/header/app_header.dart';
3 years ago
import 'package:queuing_system/home/home_screen_components.dart';
import 'package:queuing_system/home/que_item_list.dart';
3 years ago
import 'package:queuing_system/utils/call_by_voice.dart';
import 'package:queuing_system/utils/call_type.dart';
4 years ago
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';
3 years ago
import 'package:signalr_core/signalr_core.dart';
import 'package:text_to_speech/text_to_speech.dart';
4 years ago
import 'first_column.dart';
4 years ago
3 years ago
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
4 years ago
class MyHomePage extends StatefulWidget {
String title = "MyHomePage";
4 years ago
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
3 years ago
SignalRHelper signalRHelper = SignalRHelper();
final _tts = TextToSpeech();
List<Tickets> waitings = [];
List<Tickets> currents = [];
4 years ago
@override
void dispose() {
super.dispose();
}
@override
void initState() {
3 years ago
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]);
});
4 years ago
super.initState();
}
4 years ago
@override
Widget build(BuildContext context) {
4 years ago
return AppScaffold(
appBar: AppHeader(),
3 years ago
body: content(),
bottomNavigationBar: Container(
color: Colors.grey.withOpacity(0.1),
4 years ago
height: Utils.getHeight(),
4 years ago
width: double.infinity,
child: Row(
3 years ago
crossAxisAlignment: CrossAxisAlignment.center,
4 years ago
children: [
3 years ago
const SizedBox(width: 20),
AppText(
"Powered By",
fontSize: SizeConfig.getWidthMultiplier() * 2.6,
fontFamily: 'Poppins-Medium.ttf',
),
3 years ago
const SizedBox(width: 20),
Image.asset(
"assets/images/cloud_logo.png",
height: SizeConfig.getHeightMultiplier() * 4,
4 years ago
),
3 years ago
const SizedBox(width: 20),
4 years ago
],
),
3 years ago
),
4 years ago
);
}
3 years ago
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(){
3 years ago
// 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){
//
// });
3 years ago
}
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;
}
});
}
4 years ago
}