import 'dart:async'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:hmg_patient_app_new/core/app_assets.dart'; import 'package:hmg_patient_app_new/core/app_state.dart'; import 'package:hmg_patient_app_new/core/dependencies.dart'; import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; import 'package:hmg_patient_app_new/core/utils/utils.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/features/radiology/models/resp_models/patient_radiology_response_model.dart'; import 'package:hmg_patient_app_new/features/radiology/radiology_view_model.dart'; import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart'; import 'package:open_filex/open_filex.dart'; import 'package:provider/provider.dart'; import 'package:url_launcher/url_launcher.dart'; import 'dart:ui' as ui; class RadiologyResultPage extends StatefulWidget { RadiologyResultPage({super.key, required this.patientRadiologyResponseModel}); PatientRadiologyResponseModel patientRadiologyResponseModel; @override State createState() => _RadiologyResultPageState(); } class _RadiologyResultPageState extends State { late RadiologyViewModel radiologyViewModel; @override void initState() { scheduleMicrotask(() { radiologyViewModel.getRadiologyImage(patientRadiologyResponseModel: widget.patientRadiologyResponseModel); }); super.initState(); } @override Widget build(BuildContext context) { radiologyViewModel = Provider.of(context); AppState _appState = getIt.get(); return Scaffold( backgroundColor: AppColors.bgScaffoldColor, body: Column( children: [ Expanded( child: CollapsingListView( title: LocaleKeys.radiologyResult.tr(context: context), downloadReport: () async { LoaderBottomSheet.showLoader(); await radiologyViewModel .getRadiologyPDF( patientRadiologyResponseModel: widget.patientRadiologyResponseModel, authenticatedUser: _appState.getAuthenticatedUser()!, onError: (err) { LoaderBottomSheet.hideLoader(); showCommonBottomSheetWithoutHeight( context, child: Utils.getErrorWidget(loadingText: err), callBackFunc: () {}, isFullScreen: false, isCloseButtonVisible: true, ); }) .then((val) async { LoaderBottomSheet.hideLoader(); if (radiologyViewModel.patientRadiologyReportPDFBase64.isNotEmpty) { String path = await Utils.createFileFromString(radiologyViewModel.patientRadiologyReportPDFBase64, "pdf"); try { OpenFilex.open(path); } catch (ex) { showCommonBottomSheetWithoutHeight( context, child: Utils.getErrorWidget(loadingText: "Cannot open file"), callBackFunc: () {}, isFullScreen: false, isCloseButtonVisible: true, ); } } }); }, // viewImage: () { // if (radiologyViewModel.radiologyImageURL.isNotEmpty) { // Uri uri = Uri.parse(radiologyViewModel.radiologyImageURL); // launchUrl(uri, mode: LaunchMode.platformDefault, webOnlyWindowName: ""); // } else { // Utils.showToast("Radiology image not available"); // } // }, child: SingleChildScrollView( child: Padding( padding: EdgeInsets.symmetric(horizontal: 24.h), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox(height: 24.h), Container( decoration: RoundedRectangleBorder().toSmoothCornerDecoration( color: AppColors.whiteColor, borderRadius: 20.h, hasShadow: true, ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox(height: 16.h), // widget.patientRadiologyResponseModel.description!.toText16(isBold: true), SizedBox(height: 8.h), Directionality( textDirection: ui.TextDirection.ltr, child: widget.patientRadiologyResponseModel.reportData!.trim().toText12(isBold: true, color: AppColors.textColorLight, isEnglishOnly: true), ), SizedBox(height: 16.h), // CustomButton( // text: LocaleKeys.viewRadiologyImage.tr(context: context), // onPressed: () async { // if (radiologyViewModel.radiologyImageURL.isNotEmpty) { // Uri uri = Uri.parse(radiologyViewModel.radiologyImageURL); // launchUrl(uri, mode: LaunchMode.platformDefault, webOnlyWindowName: ""); // } else { // Utils.showToast("Radiology image not available"); // } // }, // backgroundColor: AppColors.primaryRedColor, // borderColor: AppColors.primaryRedColor, // textColor: Colors.white, // fontSize: 14, // fontWeight: FontWeight.w500, // borderRadius: 12, // padding: EdgeInsets.fromLTRB(10, 0, 10, 0), // height: 40.h, // icon: AppAssets.download, // iconColor: Colors.white, // iconSize: 20.h, // ), // SizedBox(height: 16.h), ], ).paddingSymmetrical(16.h, 0.h), ), SizedBox(height: 24.h), ], ), ), ), ), ), Container( decoration: RoundedRectangleBorder().toSmoothCornerDecoration( color: AppColors.whiteColor, borderRadius: 24.h, hasShadow: true, ), child: widget.patientRadiologyResponseModel.dIAPACSURL != "" ? CustomButton( text: LocaleKeys.openRad.tr(context: context), onPressed: () async { if (radiologyViewModel.radiologyImageURL.isNotEmpty) { Uri uri = Uri.parse(radiologyViewModel.radiologyImageURL); launchUrl(uri, mode: LaunchMode.platformDefault, webOnlyWindowName: ""); } else { Utils.showToast("Radiology image not available"); } }, backgroundColor: AppColors.primaryRedColor, borderColor: AppColors.primaryRedColor, textColor: Colors.white, fontSize: 16, fontWeight: FontWeight.w500, borderRadius: 12, padding: EdgeInsets.fromLTRB(10, 0, 10, 0), height: 45.h, icon: AppAssets.imageIcon, iconColor: Colors.white, iconSize: 20.h, ).paddingSymmetrical(24.h, 24.h) : SizedBox.shrink(), ), ], ), ); } }