@ -93,243 +93,315 @@ class _ToDoState extends State<ToDo> {
itemBuilder: ( context , index ) {
itemBuilder: ( context , index ) {
return Container (
return Container (
margin: EdgeInsets . all ( 10.0 ) ,
margin: EdgeInsets . all ( 10.0 ) ,
child: Card (
child: Column (
margin: EdgeInsets . fromLTRB ( 8.0 , 0.0 , 8.0 , 8.0 ) ,
children: [
color: Colors . white ,
Container (
shape: RoundedRectangleBorder (
child: Card (
borderRadius: BorderRadius . circular ( 10 ) ,
margin: EdgeInsets . fromLTRB ( 8.0 , 0.0 , 8.0 , 8.0 ) ,
) ,
color: Colors . white ,
child: Container (
shape: RoundedRectangleBorder (
width: MediaQuery . of ( context ) . size . width ,
borderRadius: BorderRadius . circular ( 10 ) ,
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: 10.0 ) ,
child: Text (
DateUtil . getWeekDayMonthDayYearDateFormatted (
DateUtil . convertStringToDate (
widget . appoList [ index ]
. appointmentDate ) ,
projectViewModel . isArabic
? " ar "
: " en " ) +
" " +
widget . appoList [ index ] . startTime
. substring ( 0 , 5 ) ,
style: TextStyle ( fontSize: 10.0 ) ) ,
) ,
! widget . appoList [ index ] . isLiveCareAppointment
? Image . asset (
" assets/images/new-design/hospital_address_icon.png " ,
width: 20.0 ,
height: 20.0 )
: Container ( ) ,
Container (
margin:
EdgeInsets . only ( left: 5.0 , right: 5.0 ) ,
child: widget
. appoList [ index ] . isLiveCareAppointment
? Container ( )
: Text (
widget . appoList [ index ] . projectName ! =
null
? widget
. appoList [ index ] . projectName
: " - " ,
overflow: TextOverflow . clip ,
maxLines: 2 ,
style: TextStyle ( fontSize: 10.0 ) ) ,
) ,
] ,
) ,
Container (
margin: EdgeInsets . only ( top: 5.0 ) ,
child: Divider (
color: Colors . grey [ 500 ] ,
) ,
) ,
) ,
Flex (
child: Container (
direction: Axis . horizontal ,
width: MediaQuery . of ( context ) . size . width ,
children: < Widget > [
padding: EdgeInsets . all ( 10.0 ) ,
Expanded (
child: Column (
flex: 1 ,
crossAxisAlignment: CrossAxisAlignment . start ,
child: Container (
mainAxisSize: MainAxisSize . max ,
height: MediaQuery . of ( context ) . size . height *
children: < Widget > [
0.1 ,
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: 10.0 ) ,
child: Text (
DateUtil . getWeekDayMonthDayYearDateFormatted (
DateUtil . convertStringToDate (
widget . appoList [ index ]
. appointmentDate ) ,
projectViewModel . isArabic
? " ar "
: " en " ) +
" " +
widget . appoList [ index ] . startTime
. substring ( 0 , 5 ) ,
style: TextStyle ( fontSize: 10.0 ) ) ,
) ,
! widget . appoList [ index ]
. isLiveCareAppointment
? Image . asset (
" assets/images/new-design/hospital_address_icon.png " ,
width: 20.0 ,
height: 20.0 )
: Container ( ) ,
Container (
margin: EdgeInsets . only (
left: 5.0 , right: 5.0 ) ,
child: widget . appoList [ index ]
. isLiveCareAppointment
? Container ( )
: Text (
widget . appoList [ index ]
. projectName ! =
null
? widget . appoList [ index ]
. projectName
: " - " ,
overflow: TextOverflow . clip ,
maxLines: 2 ,
style:
TextStyle ( fontSize: 10.0 ) ) ,
) ,
] ,
) ,
Container (
margin: EdgeInsets . only ( top: 5.0 ) ,
margin: EdgeInsets . only ( top: 5.0 ) ,
child: ClipRRect (
child: Divider (
borderRadius:
color: Colors . grey [ 500 ] ,
BorderRadius . circular ( 100.0 ) ,
child: Image . network (
widget . appoList [ index ] . doctorImageURL ,
fit: BoxFit . fill ) ,
) ,
) ,
) ,
) ,
) ,
Flex (
Expanded (
direction: Axis . horizontal ,
flex: 3 ,
children: < Widget > [
child: Container (
Expanded (
margin: EdgeInsets . only (
flex: 1 ,
top: 10.0 , left: 20.0 , right: 20.0 ) ,
child: Container (
child: Column (
height: MediaQuery . of ( context )
crossAxisAlignment:
. size
CrossAxisAlignment . start ,
. height *
children: < Widget > [
0.1 ,
Text (
margin: EdgeInsets . only ( top: 5.0 ) ,
widget . appoList [ index ] . doctorTitle +
child: ClipRRect (
" " +
borderRadius:
BorderRadius . circular ( 100.0 ) ,
child: Image . network (
widget . appoList [ index ]
widget . appoList [ index ]
. doctorNameObj ,
. doctorImageURL ,
style: TextStyle (
fit: BoxFit . fill ) ,
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:
Expanded (
MainAxisAlignment . spaceBetween ,
flex: 3 ,
mainAxisSize: MainAxisSize . max ,
child: Container (
children: < Widget > [
margin: EdgeInsets . only (
RatingBar . readOnly (
top: 10.0 ,
initialRating: widget
left: 20.0 ,
. appoList [ index ]
right: 20.0 ) ,
. actualDoctorRate
child: Column (
. toDouble ( ) ,
crossAxisAlignment:
size: 20.0 ,
CrossAxisAlignment . start ,
filledColor: Colors . yellow [ 700 ] ,
children: < Widget > [
emptyColor: Colors . grey [ 500 ] ,
Text (
isHalfAllowed: true ,
widget . appoList [ index ]
halfFilledIcon: Icons . star_half ,
. doctorTitle +
filledIcon: Icons . star ,
" " +
emptyIcon: Icons . star ,
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 ,
) ,
] ,
) ,
Container (
child: CountdownTimer (
controller: new CountdownTimerController (
endTime: DateTime . now ( )
. millisecondsSinceEpoch +
( widget
. appoList [
index ]
. remaniningHoursTocanPay *
1000 ) *
60 ) ,
widgetBuilder: ( _ ,
CurrentRemainingTime
time ) {
return time ! = null
? Text (
' ${ time . days ! = null ? time . days : " 0 " } : ${ time . hours . toString ( ) . length = = 1 ? " 0 " + time . hours . toString ( ) : time . hours } : ${ time . min } : ${ time . sec } ' +
TranslationBase . of (
context )
. upcomingTimeLeft ,
style: TextStyle (
fontSize: 12.0 ,
color: Color (
0xff40ACC9 ) ) )
: Container ( ) ;
} ,
) ,
) ,
] ,
) ,
) ,
) ,
Container (
) ,
child: CountdownTimer (
Expanded (
controller: new CountdownTimerController (
flex: 1 ,
endTime: DateTime . now ( )
child: InkWell (
. millisecondsSinceEpoch +
onTap: ( ) = > performNextAction (
( widget . appoList [ index ]
widget . appoList [ index ] ) ,
. remaniningHoursTocanPay *
child: Container (
1000 ) *
margin: EdgeInsets . only ( top: 20.0 ) ,
60 ) ,
child: Column (
widgetBuilder:
children: < Widget > [
( _ , CurrentRemainingTime time ) {
Image . asset (
return time ! = null
getNextActionImage ( widget
? Text (
. appoList [ index ]
' ${ time . days ! = null ? time . days : " 0 " } : ${ time . hours . toString ( ) . length = = 1 ? " 0 " + time . hours . toString ( ) : time . hours } : ${ time . min } : ${ time . sec } ' +
. nextAction ) ,
TranslationBase . of (
width: 50.0 ,
context )
height: 50.0 ) ,
. upcomingTimeLeft ,
Container (
margin:
EdgeInsets . only ( top: 5.0 ) ,
child: Text (
getNextActionText ( widget
. appoList [ index ]
. nextAction ) ,
textAlign:
TextAlign . center ,
style: TextStyle (
style: TextStyle (
fontSize: 12.0 ,
fontSize: 12.0 ) ) ,
color: Color (
)
0xff40ACC9 ) ) )
] ,
: Container ( ) ;
) ,
} ,
) ,
) ,
) ,
) ,
] ,
)
) ,
] ,
) ,
Divider (
color: Colors . grey [ 500 ] ,
) ,
) ,
) ,
Flex (
Expanded (
direction: Axis . horizontal ,
flex: 1 ,
children: < Widget > [
child: InkWell (
Expanded (
onTap: ( ) = > performNextAction (
flex: 2 ,
widget . appoList [ index ] ) ,
child: Container (
child: Container (
child: Text (
margin: EdgeInsets . only ( top: 20.0 ) ,
getNextActionDescription ( widget
child: Column (
children: < Widget > [
Image . asset (
getNextActionImage ( widget
. appoList [ index ] . nextAction ) ,
. appoList [ index ] . nextAction ) ,
width: 50.0 ,
style: TextStyle (
height: 50.0 ) ,
fontSize: 12.0 ,
Container (
color: Colors . grey [ 700 ] ) ) ,
margin: EdgeInsets . only ( top: 5.0 ) ,
) ,
child: Text (
getNextActionText ( widget
. appoList [ index ]
. nextAction ) ,
textAlign: TextAlign . center ,
style:
TextStyle ( fontSize: 12.0 ) ) ,
)
] ,
) ,
) ,
) ,
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:
new Color ( 0xFF40ACC9 ) ,
decoration: TextDecoration
. underline ) ) ,
) ,
) ,
)
] ,
) ,
) ,
)
] ,
] ,
) ,
) ,
Divider (
color: Colors . grey [ 500 ] ,
) ,
) ,
Flex (
) ,
direction: Axis . horizontal ,
) ,
children: < Widget > [
Container (
Expanded (
decoration: BoxDecoration (
flex: 2 ,
borderRadius: BorderRadius . only (
child: Container (
bottomLeft: Radius . circular ( 10.0 ) ,
child: Text (
bottomRight: Radius . circular ( 10.0 ) ) ,
getNextActionDescription (
color: Color ( 0xff20bc44 ) ,
widget . appoList [ index ] . nextAction ) ,
) ,
style: TextStyle (
height: 30.0 ,
fontSize: 12.0 ,
margin: projectViewModel . isArabic ? EdgeInsets . fromLTRB ( 160.0 , 0.0 , 30.0 , 0.0 ) : EdgeInsets . fromLTRB ( 30.0 , 0.0 , 160.0 , 0.0 ) ,
color: Colors . grey [ 700 ] ) ) ,
transform: Matrix4 . translationValues ( 0.0 , - 8.0 , 0.0 ) ,
) ,
child: Row (
) ,
mainAxisAlignment: MainAxisAlignment . start ,
Expanded (
children: [
flex: 1 ,
widget . appoList [ index ] . isLiveCareAppointment
child: GestureDetector (
? Container (
onTap: ( ) {
margin: EdgeInsets . fromLTRB (
navigateToAppointmentDetails (
5.0 , 0.0 , 5.0 , 0.0 ) ,
context , widget . appoList [ index ] ) ;
child: Image . asset (
} ,
" assets/images/new-design/video.png " ) ,
child: Container (
)
child: Text (
: Container (
TranslationBase . of ( context )
margin: EdgeInsets . fromLTRB (
. upcomingDetails ,
5.0 , 0.0 , 5.0 , 0.0 ) ,
textAlign: TextAlign . end ,
child: Image . asset (
style: TextStyle (
" assets/images/new-design/walkin.png " ) ,
fontSize: 12.0 ,
color: new Color ( 0xFF40ACC9 ) ,
decoration:
TextDecoration . underline ) ) ,
) ,
) ,
) ,
widget . appoList [ index ] . isLiveCareAppointment
)
? Container (
] ,
child: Text ( TranslationBase . of ( context ) . videoAppo ,
) ,
style: TextStyle (
] ,
color: Colors . white ,
fontWeight: FontWeight . bold ,
fontSize: 12.0 ) ) ,
)
: Container (
child: Text ( TranslationBase . of ( context ) . walkinAppo ,
style: TextStyle (
color: Colors . white ,
fontWeight: FontWeight . bold ,
fontSize: 12.0 ) ) ,
)
] ,
) ,
) ,
) ,
) ,
] ,
) ,
) ,
) ;
) ;
} ,
} ,
@ -688,7 +760,12 @@ class _ToDoState extends State<ToDo> {
authenticatedUser . firstName ,
authenticatedUser . firstName ,
authenticatedUser . patientID ,
authenticatedUser . patientID ,
authenticatedUser ,
authenticatedUser ,
widget . browser ) ;
widget . browser ,
appo . isLiveCareAppointment ,
appo . appointmentDate ,
appo . appointmentNo ,
appo . clinicID ,
appo . doctorID ) ;
}
}
onBrowserLoadStart ( String url ) {
onBrowserLoadStart ( String url ) {