@ -1,22 +1,33 @@
import ' package:diplomaticquarterapp/config/shared_pref_kay.dart ' ;
import ' package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart ' ;
import ' package:diplomaticquarterapp/pages/ ToDoList/widgets/upcomingCard .dart' ;
import ' package:diplomaticquarterapp/pages/ MyAppointments/AppointmentDetails .dart' ;
import ' package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart ' ;
import ' package:diplomaticquarterapp/uitl/app_shared_preferences.dart ' ;
import ' package:diplomaticquarterapp/uitl/app_toast.dart ' ;
import ' package:diplomaticquarterapp/uitl/date_uitl.dart ' ;
import ' package:diplomaticquarterapp/uitl/translations_delegate_base.dart ' ;
import ' package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart ' ;
import ' package:diplomaticquarterapp/widgets/progress_indicator/app_circular_progress_Indeicator.dart ' ;
import ' package:flutter/material.dart ' ;
import ' package:rating_bar/rating_bar.dart ' ;
class ToDo extends StatefulWidget {
DoctorsListService service ;
List < AppoitmentAllHistoryResultList > appoList = [ ] ;
var languageID ;
@ override
_ToDoState createState ( ) = > _ToDoState ( ) ;
}
class _ToDoState extends State < ToDo > {
AppSharedPreferences sharedPref = AppSharedPreferences ( ) ;
bool isLoading = false ;
@ override
void initState ( ) {
print ( " initState " ) ;
widget . service = new DoctorsListService ( ) ;
getPatientAppointmentHistory ( ) ;
super . initState ( ) ;
@ -26,29 +37,383 @@ class _ToDoState extends State<ToDo> {
Widget build ( BuildContext context ) {
return AppScaffold (
appBarTitle: TranslationBase . of ( context ) . todoList ,
body: SingleChildScrollView (
child: Container (
child: ListView . builder (
scrollDirection: Axis . vertical ,
shrinkWrap: true ,
physics: ScrollPhysics ( ) ,
padding: EdgeInsets . all ( 0.0 ) ,
itemCount: widget . appoList . length ,
itemBuilder: ( context , index ) {
return TodoListCard (
appo: widget . appoList [ index ] ,
) ;
} ,
) ,
) ,
) ,
body: isLoading = = false
? SingleChildScrollView (
child: Container (
child: ListView . builder (
scrollDirection: Axis . vertical ,
shrinkWrap: true ,
physics: ScrollPhysics ( ) ,
padding: EdgeInsets . all ( 0.0 ) ,
itemCount: widget . appoList . length ,
itemBuilder: ( context , index ) {
return Container (
margin: EdgeInsets . all ( 10.0 ) ,
child: Card (
margin: EdgeInsets . fromLTRB ( 8.0 , 0.0 , 8.0 , 8.0 ) ,
color: Colors . white ,
shape: RoundedRectangleBorder (
borderRadius: BorderRadius . circular ( 10 ) ,
) ,
child: Container (
width: MediaQuery . of ( context ) . size . width ,
padding: EdgeInsets . all ( 10.0 ) ,
child: Column (
crossAxisAlignment: CrossAxisAlignment . start ,
mainAxisSize: MainAxisSize . max ,
children: < Widget > [
Row (
children: < Widget > [
Image . asset (
" assets/images/new-design/time_icon.png " ,
width: 20.0 ,
height: 20.0 ) ,
Container (
margin: EdgeInsets . only (
left: 10.0 , right: 30.0 ) ,
child: Text (
getDate ( widget
. appoList [ index ] . appointmentDate ) ,
style: TextStyle ( fontSize: 12.0 ) ) ,
) ,
Image . asset (
" assets/images/new-design/hospital_address_icon.png " ,
width: 20.0 ,
height: 20.0 ) ,
Container (
margin: EdgeInsets . only (
left: 10.0 , right: 10.0 ) ,
child: Text (
widget . appoList [ index ] . projectName ,
style: TextStyle ( fontSize: 12.0 ) ) ,
) ,
] ,
) ,
Container (
margin: EdgeInsets . only ( top: 5.0 ) ,
child: Divider (
color: Colors . grey [ 500 ] ,
) ,
) ,
Flex (
direction: Axis . horizontal ,
children: < Widget > [
Expanded (
flex: 1 ,
child: Container (
height:
MediaQuery . of ( context ) . size . height *
0.1 ,
margin: EdgeInsets . only ( top: 5.0 ) ,
child: ClipRRect (
borderRadius:
BorderRadius . circular ( 100.0 ) ,
child: Image . network (
widget
. appoList [ index ] . doctorImageURL ,
fit: BoxFit . fill ) ,
) ,
) ,
) ,
Expanded (
flex: 3 ,
child: Container (
margin: EdgeInsets . only (
top: 20.0 , left: 20.0 , right: 20.0 ) ,
child: Column (
crossAxisAlignment:
CrossAxisAlignment . start ,
children: < Widget > [
Text (
widget . appoList [ index ]
. doctorTitle +
" " +
widget . appoList [ index ]
. doctorNameObj ,
style: TextStyle (
fontSize: 14.0 ,
color: Colors . black ,
fontWeight: FontWeight . bold ,
letterSpacing: 1.0 ) ) ,
Container (
margin: EdgeInsets . only (
top: 3.0 , bottom: 3.0 ) ,
child: Text (
getDoctorSpeciality ( widget
. appoList [ index ]
. doctorSpeciality )
. trim ( ) ,
style: TextStyle (
fontSize: 12.0 ,
color: Colors . grey [ 600 ] ,
letterSpacing: 1.0 ) ) ,
) ,
Row (
mainAxisAlignment:
MainAxisAlignment . spaceBetween ,
mainAxisSize: MainAxisSize . max ,
children: < Widget > [
RatingBar . readOnly (
initialRating: widget . appoList [ index ] . actualDoctorRate . toDouble ( ) ,
size: 20.0 ,
filledColor: Colors . yellow [ 700 ] ,
emptyColor: Colors . grey [ 500 ] ,
isHalfAllowed: true ,
halfFilledIcon: Icons . star_half ,
filledIcon: Icons . star ,
emptyIcon: Icons . star ,
) ,
] ,
) ,
] ,
) ,
) ,
) ,
Expanded (
flex: 1 ,
child: InkWell (
onTap: ( ) = > performNextAction (
widget . appoList [ index ] ) ,
child: Container (
margin: EdgeInsets . only ( top: 20.0 ) ,
child: Column (
children: < Widget > [
Image . asset (
getNextActionImage ( widget
. appoList [ index ]
. nextAction ) ,
width: 50.0 ,
height: 50.0 ) ,
Container (
margin: EdgeInsets . only ( top: 5.0 ) ,
child: Text (
getNextActionText ( widget
. appoList [ index ]
. nextAction ) ,
textAlign: TextAlign . center ,
style: TextStyle (
fontSize: 12.0 ) ) ,
)
] ,
) ,
) ,
) ,
)
] ,
) ,
Divider (
color: Colors . grey [ 500 ] ,
) ,
Flex (
direction: Axis . horizontal ,
children: < Widget > [
Expanded (
flex: 2 ,
child: Container (
child: Text (
getNextActionDescription ( widget
. appoList [ index ] . nextAction ) ,
style: TextStyle (
fontSize: 12.0 ,
color: Colors . grey [ 700 ] ) ) ,
) ,
) ,
Expanded (
flex: 1 ,
child: GestureDetector (
onTap: ( ) {
navigateToAppointmentDetails (
context , widget . appoList [ index ] ) ;
} ,
child: Container (
child: Text (
TranslationBase . of ( context )
. upcomingDetails ,
textAlign: TextAlign . end ,
style: TextStyle (
fontSize: 12.0 ,
color: Colors . red [ 600 ] ,
decoration:
TextDecoration . underline ) ) ,
) ,
) ,
)
] ,
)
] ,
) ,
) ,
) ,
) ;
} ,
) ,
) ,
)
: AppCircularProgressIndicator ( ) ,
) ;
}
String getNextActionImage ( nextAction ) {
switch ( nextAction ) {
case 0 :
return " No Action " ;
break ;
case 10 :
return " assets/images/new-design/confirm_button.png " ;
break ;
case 15 :
return widget . languageID = = ' ar '
? " assets/images/new-design/pay_online_button_arabic_disabled.png "
: " assets/images/new-design/pay_online_button_disabled.png " ;
break ;
case 20 :
return widget . languageID = = ' ar '
? " assets/images/new-design/pay_online_button_arabic.png "
: " assets/images/new-design/pay_online_button.png " ;
break ;
case 30 :
return " assets/images/new-design/qr_code_button.png " ;
break ;
case 40 :
return " assets/images/new-design/video_call_instruction.png " ;
break ;
case 50 :
return " assets/images/new-design/liveCare_logo_icon.png " ;
break ;
default :
return " " ;
}
}
performNextAction ( AppoitmentAllHistoryResultList appo ) {
switch ( appo . nextAction ) {
case 10 :
confirmAppointment ( appo ) ;
break ;
}
}
String getNextActionText ( nextAction ) {
switch ( nextAction ) {
case 0 :
return " No Action " ;
break ;
case 10 :
return TranslationBase . of ( context ) . confirm ;
break ;
case 15 :
return TranslationBase . of ( context ) . pendingPayment ;
break ;
case 20 :
return TranslationBase . of ( context ) . payNow ;
break ;
case 30 :
return TranslationBase . of ( context ) . viewQR ;
break ;
case 40 :
return TranslationBase . of ( context ) . instruction ;
break ;
case 50 :
return TranslationBase . of ( context ) . livecare ;
break ;
default :
return " " ;
}
}
String getNextActionDescription ( nextAction ) {
switch ( nextAction ) {
case 0 :
return " No Action " ;
break ;
case 10 :
return TranslationBase . of ( context ) . upcomingConfirm ;
break ;
case 15 :
return TranslationBase . of ( context ) . upcomingPaymentPending ;
break ;
case 20 :
return TranslationBase . of ( context ) . upcomingPaymentNow ;
break ;
case 30 :
return TranslationBase . of ( context ) . upcomingQR ;
break ;
case 40 :
return TranslationBase . of ( context ) . upcomingVirtual ;
break ;
case 50 :
return TranslationBase . of ( context ) . upcomingLivecare ;
break ;
default :
return " " ;
}
}
getLanguageID ( ) async {
var languageID = await sharedPref . getString ( APP_LANGUAGE ) ;
setState ( ( ) {
widget . languageID = languageID ;
} ) ;
}
String getDate ( String date ) {
DateTime dateObj = DateUtil . convertStringToDate ( date ) ;
return DateUtil . getWeekDay ( dateObj . weekday ) +
" , " +
dateObj . day . toString ( ) +
" " +
DateUtil . getMonth ( dateObj . month ) +
" " +
dateObj . year . toString ( ) +
" " +
dateObj . hour . toString ( ) +
" : " +
getMinute ( dateObj ) ;
}
String getMinute ( DateTime dateObj ) {
if ( dateObj . minute = = 0 ) {
return dateObj . minute . toString ( ) + " 0 " ;
} else {
return dateObj . minute . toString ( ) ;
}
}
String getDoctorSpeciality ( List < String > docSpecial ) {
String docSpeciality = " " ;
docSpecial . forEach ( ( v ) {
docSpeciality = docSpeciality + v + " \n " ;
} ) ;
return docSpeciality ;
}
Future navigateToAppointmentDetails ( context , appo ) async {
Navigator . push (
context , MaterialPageRoute ( builder: ( context ) = > AppointmentDetails ( appo: appo ) ) ) ;
}
getPatientAppointmentHistory ( ) {
loading ( true ) ;
widget . service . getPatientAppointmentHistory ( true ) . then ( ( res ) {
print ( res [ ' AppoimentAllHistoryResultList ' ] ) ;
if ( res [ ' MessageStatus ' ] = = 1 ) {
setState ( ( ) {
if ( res [ ' AppoimentAllHistoryResultList ' ] . length ! = 0 ) {
@ -59,12 +424,39 @@ class _ToDoState extends State<ToDo> {
} ) ;
} else { }
} ) ;
print( widget . appoList . length ) ;
loading( false ) ;
} else {
AppToast . showErrorToast ( message: res [ ' ErrorEndUserMessage ' ] ) ;
loading ( false ) ;
}
} ) . catchError ( ( err ) {
print ( err ) ;
loading ( false ) ;
} ) ;
}
confirmAppointment ( AppoitmentAllHistoryResultList appo ) {
loading ( true ) ;
widget . service
. confirmAppointment ( appo . appointmentNo , appo . clinicID , appo . projectID )
. then ( ( res ) {
if ( res [ ' MessageStatus ' ] = = 1 ) {
AppToast . showSuccessToast ( message: res [ ' ErrorEndUserMessage ' ] ) ;
loading ( false ) ;
getPatientAppointmentHistory ( ) ;
} else {
AppToast . showErrorToast ( message: res [ ' ErrorEndUserMessage ' ] ) ;
loading ( false ) ;
}
} ) . catchError ( ( err ) {
print ( err ) ;
loading ( false ) ;
} ) ;
}
loading ( bool flag ) {
setState ( ( ) {
isLoading = flag ;
} ) ;
}
}