import 'dart:convert'; import 'dart:io'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/device_transfer_provider.dart'; import 'package:test_sa/controllers/validator/validator.dart'; import 'package:test_sa/dashboard_latest/dashboard_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/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/helper/utils.dart'; import 'package:test_sa/models/device/asset.dart'; import 'package:test_sa/models/enums/user_types.dart'; import 'package:test_sa/models/generic_attachment_model.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/new_models/site.dart'; import 'package:test_sa/models/new_models/task_request/task_type_model.dart'; import 'package:test_sa/models/new_models/work_order_detail_model.dart'; import 'package:test_sa/models/service_request/supplier_details.dart'; import 'package:test_sa/modules/cm_module/cm_request_utils.dart'; import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart'; import 'package:test_sa/modules/loan_module/models/loan_form_model.dart'; import 'package:test_sa/modules/loan_module/models/medical_department_model.dart'; import 'package:test_sa/modules/loan_module/provider/loan_period_provider.dart'; import 'package:test_sa/modules/loan_module/provider/loan_provider.dart'; import 'package:test_sa/modules/loan_module/provider/loan_provider.dart'; import 'package:test_sa/modules/loan_module/provider/medical_department_provider.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/new_views/common_widgets/app_text_form_field.dart'; import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart'; import 'package:test_sa/providers/department_provider.dart'; import 'package:test_sa/providers/gas_request_providers/site_provider.dart'; import 'package:test_sa/providers/loading_list_notifier.dart'; import 'package:test_sa/providers/work_order/vendor_provider.dart'; import 'package:test_sa/views/widgets/images/multi_image_picker.dart'; import '../../../../../../new_views/common_widgets/default_app_bar.dart'; class CreateDemoRequestPage extends StatefulWidget { static const String id = "/create-medical-gas"; CreateDemoRequestPage({Key? key}) : super(key: key); @override _CreateDemoRequestPageState createState() => _CreateDemoRequestPageState(); } class _CreateDemoRequestPageState extends State with TickerProviderStateMixin { final List attachments = []; final GlobalKey _formKey = GlobalKey(); final GlobalKey _scaffoldKey = GlobalKey(); TaskType? selectedType; final LoanFormModel _loanFormModel = LoanFormModel(); TextEditingController commentController = TextEditingController(); SupplierDetails? supplier; // List loanTypes = []; @override void initState() { super.initState(); // Provider.of(context, listen: false).reset(); // Provider.of(context, listen: false).reset(); // loanTypes = [Lookup(id: 0, name: "Standard", value: 1), Lookup(id: 1, name: "Backup", value: 2)]; } @override Widget build(BuildContext context) { return Scaffold( key: _scaffoldKey, appBar: DefaultAppBar(title: 'Medical Gas Inspection'.addTranslation), body: Form( key: _formKey, child: Column( children: [ SingleChildScrollView( padding: const EdgeInsets.all(16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ SingleItemDropDownMenu( context: context, title: "Order Type", validator: (value) { if (value == null) return "Mandatory"; return null; }, enabled: false, staticData: [], initialValue: null, showShadow: false, backgroundColor: AppColor.fieldBgColor(context), showAsBottomSheet: true, onSelect: (value) {}, ), 8.height, SingleItemDropDownMenu( context: context, title: "Item Type", validator: (value) { if (value == null) return "Mandatory"; return null; }, enabled: false, staticData: [], initialValue: null, showShadow: false, backgroundColor: AppColor.fieldBgColor(context), showAsBottomSheet: true, onSelect: (value) {}, ), 8.height, SingleItemDropDownMenu( context: context, title: context.translation.site, initialValue: _loanFormModel.site, showShadow: false, validator: (value) { if (value == null) return "Please select a site"; return null; }, backgroundColor: AppColor.fieldBgColor(context), showAsBottomSheet: true, onSelect: (value) { _loanFormModel.site = value; setState(() {}); }, ), 8.height, SingleItemDropDownMenu( context: context, title: context.translation.department, showShadow: false, validator: (value) { if (value == null) return "Please select a department"; return null; }, showAsBottomSheet: true, initialValue: _loanFormModel.department, requestById: context.userProvider.user?.clientId, backgroundColor: AppColor.fieldBgColor(context), onSelect: (value) { _loanFormModel.department = value; setState(() {}); }, ), 8.height, SingleItemDropDownMenu( context: context, title: context.translation.supplier, backgroundColor: AppColor.fieldBgColor(context), initialValue: supplier, showAsBottomSheet: true, showShadow: false, showCancel: true, onSelect: (_supplier) { supplier = _supplier; setState(() {}); }, ), 8.height, if (supplier != null) ...[ 'Name: ${supplier?.name ?? "-"}'.addTranslation.bodyText(context).custom(color: AppColor.black10), 'Email: ${supplier?.email ?? "-"}'.addTranslation.bodyText(context).custom(color: AppColor.black10), 'Contact: ${supplier?.contact ?? "-"}'.addTranslation.bodyText(context).custom(color: AppColor.black10), ], 16.height, AttachmentPicker( label: context.translation.attachments, attachment: attachments, buttonColor: AppColor.black10, onlyImages: false, showAsListView: true, buttonIcon: 'image-plus'.toSvgAsset(color: context.isDark ? AppColor.primary10 : AppColor.neutral120), onChange: (attachments) { attachments = attachments; setState(() {}); }, ), ], ).toShadowContainer(context, borderRadius: 20), ).expanded, FooterActionButton.footerContainer( context: context, child: AppFilledButton( buttonColor: AppColor.primary10, label: context.translation.submitRequest, onPressed: _submit, // buttonColor: AppColor.primary10, ), ), ], ), ), ); } Future _submit() async { // Navigator.of(context).push(MaterialPageRoute(builder: (_) => MedicalGasInspectionDetailPage(inspectionId: 0))); return; FocusScope.of(context).unfocus(); if (_formKey.currentState!.validate()) { _formKey.currentState!.save(); _loanFormModel.loanAttachment = []; for (var item in attachments) { String fileName = CMRequestUtils.isLocalUrl(item.name ?? '') ? ("${item.name ?? ''.split("/").last}|${base64Encode(File(item.name ?? '').readAsBytesSync())}") : item.name ?? ''; _loanFormModel.loanAttachment?.add(LoanAttachments(id: 0, attachmentName: fileName, loanId: 0)); } Utils.showLoading(context); LoanProvider loanProvider = Provider.of(context, listen: false); Map body = _loanFormModel.toJson(); body["id"] = 0; body["LoanTypeId"] = 0; body["requestorUserID"] = context.userProvider.user!.userID; bool isSuccess = await loanProvider.addLoanRequest(body); Utils.hideLoading(context); if (isSuccess) { Navigator.pop(context); } } } }