import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/string_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/helper_data_models/workorder/work_order_helper_models.dart'; import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart'; import 'package:test_sa/modules/demo_module/demo_extension_bottom_sheet.dart'; import 'package:test_sa/modules/demo_module/models/demo_request_model.dart'; import 'package:test_sa/modules/demo_module/provider/demo_provider.dart'; import 'package:test_sa/modules/loan_module/models/loan_attachment_model.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart'; import '../../controllers/api_routes/urls.dart'; import '../../extensions/text_extensions.dart'; import '../../new_views/common_widgets/default_app_bar.dart'; import '../../views/widgets/images/files_list.dart'; import '../../views/widgets/requests/request_status.dart'; import '../loan_module/models/loan_request_model.dart'; import 'demo_activities_page.dart'; class DemoDetailViewPage extends StatefulWidget { static const String id = "/demo-detail-page"; final int demoId; DemoDetailViewPage({Key? key, required this.demoId}) : super(key: key); @override _DemoDetailViewPageState createState() { return _DemoDetailViewPageState(); } } class _DemoDetailViewPageState extends State { bool isLoading = false; DemoRequestModel? dataModel; DemoProvider? demoProvider; List allAttachments = []; //Todo need to check about attachments. bool loading = false; @override void initState() { demoProvider = Provider.of(context, listen: false); WidgetsBinding.instance.addPostFrameCallback((_) { getDetailsById(); }); super.initState(); } Future getDetailsById() async { setState(() { loading = true; }); // dataModel = await demoProvider?.getDemoById(widget.demoId) ?? DemoRequestModel(); dataModel = await demoProvider?.getDemoById(11) ?? DemoRequestModel(); // _attachments = dataModel.demoAttachments.toList() ?? []; setState(() { loading = false; }); } @override void dispose() { super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( appBar: const DefaultAppBar(title: "Request Details"), body: loading ? const CircularProgressIndicator(color: AppColor.primary10).center : dataModel == null ? const NoDataFound().center : Column( children: [ SingleChildScrollView( padding: const EdgeInsets.all(16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ if (dataModel?.status != null) ...[ StatusLabel( label: dataModel?.status?.name, id: dataModel?.status?.value, radius: 4, textColor: AppColor.demoRequestStatusTextColor(context, dataModel!.status!.value!), backgroundColor: AppColor.demoRequestStatus(context, dataModel!.status!.value!), ), 8.height, ], ...requesterDetails(context, dataModel), 12.height, ...requestDetails(context, dataModel), 12.height, ...doctorDetails(context, dataModel), 12.height, ...assetDetails(context, dataModel), 12.height, ...vendorDetails(context, dataModel), if (allAttachments.isNotEmpty) ...[ const Divider().defaultStyle(context), Text( "Attachments".addTranslation, style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), ), FilesList(images: allAttachments.map((e) => URLs.getFileUrl(e.name ?? '') ?? '').toList() ?? []), ], ], ).toShadowContainer(context, padding: 12), ).expanded, FooterActionButton.demoRequestDetailsFooterWidget( demoRequestStage: dataModel!.status!.demoRequestStepEnum!, dataModel: dataModel!, status: dataModel!.status!, context: context, refreshData: (status) { if (status) { getDetailsById(); } }).toShadowContainer(context, padding: 0, showShadow: false, borderRadius: 0), ], )); } List requestDetails(BuildContext context, DemoRequestModel? model) { return [ Text("Request Details", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), // 'Demo No: ${model. ?? "-"}'.bodyText(context), 'Demo Period: ${model?.demoPeriod?.name ?? "-"}'.bodyText(context), '${context.translation.site}: ${model?.site?.custName ?? "-"}'.bodyText(context), '${context.translation.department}: ${model?.department?.name ?? "-"}'.bodyText(context), 'Item Description: ${model?.itemDescription ?? "-"}'.bodyText(context), 'Request Description: ${model?.requestDescription ?? "-"}'.bodyText(context), ]; } List vendorDetails(BuildContext context, DemoRequestModel? model) { return [ Text("Vendor Information", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), 'Name: ${model?.supplier?.name ?? "-"}'.bodyText(context), 'Representative Name: ${model?.suppPerson?.name ?? "-"}'.bodyText(context), 'Contact: ${model?.supplier?.contact ?? "-"}'.bodyText(context), 'Email: ${model?.supplier?.email ?? "-"}'.bodyText(context), ]; } List assetDetails(BuildContext context, DemoRequestModel? model) { return [ Text("Asset Information", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), '${context.translation.assetName}: ${model?.assetName ?? "-"}'.bodyText(context), '${context.translation.manufacture}: ${model?.manufacturer ?? "-"}'.bodyText(context), '${context.translation.model}: ${model?.model ?? "-"}'.bodyText(context), ]; } List doctorDetails(BuildContext context, DemoRequestModel? model) { return [ Text("Doctor Information", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), 'Name: ${model?.doctorName ?? "-"}'.bodyText(context), 'Contact: ${model?.doctorContactNumber ?? "-"}'.bodyText(context), 'Email: ${model?.doctorContactEmail ?? "-"}'.bodyText(context), ]; } List requesterDetails(BuildContext context, DemoRequestModel? model) { return [ Text("Requester Information", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), 'Name: ${model?.requesterUser?.requesterName ?? "-"}'.bodyText(context), 'Email: ${model?.requesterUser?.requesterEmail ?? "-"}'.bodyText(context), 'Contact: ${model?.requesterUser?.requesterMobile ?? "-"}'.bodyText(context), // 'Extension: ${loanData.requesterExtensionNo ?? "-"}'.bodyText(context), ]; } void _update() {} }