@ -1,13 +1,21 @@
import ' dart:convert ' ;
import ' dart:io ' ;
import ' dart:typed_data ' ;
import ' package:diplomaticquarterapp/core/model/labs/patient_lab_orders.dart ' ;
import ' package:diplomaticquarterapp/core/viewModels/medical/labs_view_model.dart ' ;
import ' package:diplomaticquarterapp/core/viewModels/project_view_model.dart ' ;
import ' package:diplomaticquarterapp/pages/base/base_view.dart ' ;
import ' package:diplomaticquarterapp/uitl/app_toast.dart ' ;
import ' package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart ' ;
import ' package:diplomaticquarterapp/uitl/translations_delegate_base.dart ' ;
import ' package:diplomaticquarterapp/widgets/buttons/defaultButton.dart ' ;
import ' package:diplomaticquarterapp/widgets/data_display/medical/LabResult/laboratory_result_widget.dart ' ;
import ' package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart ' ;
import ' package:flutter/cupertino.dart ' ;
import ' package:flutter/material.dart ' ;
import ' package:open_filex/open_filex.dart ' ;
import ' package:path_provider/path_provider.dart ' ;
import ' package:provider/provider.dart ' ;
class LaboratoryResultPage extends StatefulWidget {
@ -37,27 +45,73 @@ class _LaboratoryResultPageState extends State<LaboratoryResultPage> {
showNewAppBar: true ,
showNewAppBarTitle: true ,
backgroundColor: Color ( 0xffF8F8F8 ) ,
body: ListView . builder (
physics: BouncingScrollPhysics ( ) ,
padding: EdgeInsets . only ( bottom: 12 ) ,
itemBuilder: ( context , index ) = > LaboratoryResultWidget (
onTap: ( ) async {
GifLoaderDialogUtils . showMyDialog ( context ) ;
await model . sendLabReportEmail ( patientLabOrder: widget . patientLabOrders , mes: TranslationBase . of ( context ) . sendSuc , userObj: projectViewModel . user ) ;
GifLoaderDialogUtils . hideDialog ( context ) ;
} ,
billNo: widget . patientLabOrders . invoiceNo ,
/ / details: model . patientLabSpecialResult [ index ] . resultDataHTML ,
details: model . patientLabSpecialResult . isEmpty ? null : getSpecialResults ( model ) ,
orderNo: widget . patientLabOrders . orderNo ,
patientLabOrder: widget . patientLabOrders ,
body: SingleChildScrollView (
child: Column (
children: [
ListView . builder (
physics: BouncingScrollPhysics ( ) ,
shrinkWrap: true ,
padding: EdgeInsets . only ( bottom: 12 ) ,
itemBuilder: ( context , index ) = > LaboratoryResultWidget (
onTap: ( ) async {
GifLoaderDialogUtils . showMyDialog ( context ) ;
await model . sendLabReportEmail ( patientLabOrder: widget . patientLabOrders , mes: TranslationBase . of ( context ) . sendSuc , userObj: projectViewModel . user ) ;
GifLoaderDialogUtils . hideDialog ( context ) ;
} ,
billNo: widget . patientLabOrders . invoiceNo ,
/ / details: model . patientLabSpecialResult [ index ] . resultDataHTML ,
details: model . patientLabSpecialResult . isEmpty ? null : getSpecialResults ( model ) ,
orderNo: widget . patientLabOrders . orderNo ,
patientLabOrder: widget . patientLabOrders ,
) ,
itemCount: 1 ,
) ,
SizedBox (
height: 120.0 ,
)
] ,
) ,
) ,
bottomSheet: Container (
color: Colors . white ,
height: MediaQuery . of ( context ) . size . height * 0.081 ,
width: double . infinity ,
padding: EdgeInsets . all ( 12.0 ) ,
child: Column (
children: < Widget > [
Container (
width: MediaQuery . of ( context ) . size . width * 0.9 ,
child: DefaultButton (
TranslationBase . of ( context ) . downloadReport ,
( ) async {
GifLoaderDialogUtils . showMyDialog ( context ) ;
await model . sendLabReportEmail ( patientLabOrder: widget . patientLabOrders , mes: TranslationBase . of ( context ) . sendSuc , userObj: projectViewModel . user , isDownload: true ) ;
GifLoaderDialogUtils . hideDialog ( context ) ;
try {
String path = await _createFileFromString ( model . labReportPDF , " pdf " ) ;
OpenFilex . open ( path ) ;
} catch ( ex ) {
AppToast . showErrorToast ( message: " Cannot open file. " ) ;
}
} ,
textColor: Colors . white ,
) ,
) ,
] ,
) ,
itemCount: 1 ,
) ,
) ,
) ;
}
Future < String > _createFileFromString ( String encodedStr , String ext ) async {
Uint8List bytes = base64 . decode ( encodedStr ) ;
String dir = ( await getApplicationDocumentsDirectory ( ) ) . path ;
File file = File ( " $ dir / " + DateTime . now ( ) . millisecondsSinceEpoch . toString ( ) + " . " + ext ) ;
await file . writeAsBytes ( bytes ) ;
return file . path ;
}
String getSpecialResults ( LabsViewModel model ) {
String labResults = " " ;
model . patientLabSpecialResult . forEach ( ( element ) {