import 'dart:convert'; import 'dart:io'; 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/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/generic_attachment_model.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/modules/cm_module/utilities/service_request_utils.dart'; import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart'; import 'package:test_sa/modules/traf_module/traf_request_model.dart'; import 'package:test_sa/modules/traf_module/traf_request_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/default_app_bar.dart'; import 'package:test_sa/new_views/common_widgets/multiple_item_drop_down_menu.dart'; import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart'; import 'package:test_sa/providers/lookups/classification_lookup_provider.dart'; import 'package:test_sa/providers/lookups/recommendation_lookup_provider.dart'; import 'package:test_sa/providers/lookups/request_type_lookup_provider.dart'; import 'package:test_sa/views/widgets/equipment/asset_picker.dart'; import 'package:test_sa/models/device/asset.dart'; import 'package:test_sa/views/widgets/images/multi_image_picker.dart'; class UpdateTrafRequestPage extends StatefulWidget { static const String id = "/update-TRAF"; UpdateTrafRequestPage({Key? key}) : super(key: key); @override _UpdateTrafRequestPageState createState() { return _UpdateTrafRequestPageState(); } } class _UpdateTrafRequestPageState extends State { Lookup? requestType; Lookup? assessorRecommendation; Lookup? classificationType; late TrafRequestProvider trafRequestProvider; late TrafRequestDataModel trafRequest; List abc = []; List _deviceList = []; Asset? asset; List attachments = []; @override void initState() { super.initState(); Provider.of(context, listen: false).reset(); Provider.of(context, listen: false).reset(); trafRequestProvider = Provider.of(context, listen: false); trafRequest = trafRequestProvider.trafRequestDataModel!; attachments = trafRequest.attachments?.map((item) => GenericAttachmentModel(id: item.id, name: item.attachmentName)).toList() ?? []; } @override void dispose() { super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( appBar: const DefaultAppBar(title: "Update TRAF Request"), body: Column( children: [ SingleChildScrollView( padding: const EdgeInsets.all(16), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ SingleItemDropDownMenu( context: context, showAsBottomSheet: true, backgroundColor: AppColor.neutral100, showShadow: false, title: "Classification", initialValue: classificationType, onSelect: (value) { classificationType = value; trafRequest?.cla = value?.value; // setState(() {}); }, ), 12.height, SingleItemDropDownMenu( context: context, showAsBottomSheet: true, backgroundColor: AppColor.neutral100, showShadow: false, title: context.translation.requestType, initialValue: requestType, onSelect: (value) { requestType = value; setState(() {}); }, ), if (requestType?.id == 732) ...[ 12.height, AppTextFormField( initialValue: "", makeMultiLinesNull: true, labelText: "Recommended Quantity", backgroundColor: AppColor.fieldBgColor(context), labelStyle: AppTextStyles.textFieldLabelStyle.copyWith(color: AppColor.textColor(context)), showShadow: false, textInputType: TextInputType.number, onChange: (value) { trafRequest.qty = int.tryParse(value); }, ), ], if (requestType?.id == 733) ...[ 12.height, AssetPicker( device: asset, editable: false, showLoading: false, // borderColor: AppColor.black20, // backgroundColor: AppColor.white936, onPick: (asset) async { this.asset = asset; setState(() {}); // pendingAssetServiceRequest = null; // _serviceRequest.device = asset; // await checkAssetForPendingServiceRequest(asset.id!.toInt()); // if (pendingAssetServiceRequest != null && pendingAssetServiceRequest!.details!.isNotEmpty) { // showPendingRequestBottomSheet(); // } }, ), ], // 12.height, // MultipleItemDropDownMenu( // context: context, // showAsBottomSheet: true, // backgroundColor: AppColor.neutral100, // showShadow: false, // showCancel: true, // title: "Please specify departments and relations", // initialValue: abc, // onSelect: (value) { // abc = value ?? []; // // setState(() { // // // // }); // }, // ), 12.height, Text( "Quantity to be Transfer", style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50, fontWeight: FontWeight.w500), ), 8.height, AssetPicker( deviceList: _deviceList, showLoading: false, borderColor: AppColor.black20, buttonColor: AppColor.white936, multiSelection: true, onAssetRemove: (itemId) { _deviceList.removeWhere((asset) => asset.id?.toInt() == itemId); setState(() {}); }, onMultiAssetPick: (assetList) { _deviceList.addAll(assetList); final seenIds = {}; _deviceList = _deviceList.where((item) => seenIds.add(item.id)).toList(); setState(() {}); }, ), 12.height, SingleItemDropDownMenu( context: context, showAsBottomSheet: true, backgroundColor: AppColor.neutral100, showShadow: false, title: "Assessor Recommendation", initialValue: assessorRecommendation, onSelect: (value) { assessorRecommendation = value; trafRequest?.requestTypeId = value?.value; // trafRequest?.requestTypeId = value?.value; // setState(() {}); }, ), 12.height, AppTextFormField( initialValue: "", textInputType: TextInputType.multiline, alignLabelWithHint: true, labelText: "Assessor comment", backgroundColor: AppColor.fieldBgColor(context), labelStyle: AppTextStyles.textFieldLabelStyle.copyWith(color: AppColor.textColor(context)), showShadow: false, onChange: (value) { trafRequest?.comment = value; // todo confirm parameter shaheer }, ), 12.height, AttachmentPicker( label: context.translation.attachFiles, attachment: attachments, buttonColor: AppColor.black10, onlyImages: false, buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.neutral120), onChange: (attachment) { attachments = attachment; }, ), ], ).toShadowContainer(context, borderRadius: 20, padding: 12), ).expanded, FooterActionButton.footerContainer( context: context, child: AppFilledButton( buttonColor: AppColor.primary10, label: "Update", onPressed: () { trafRequest.attachments = []; for (var item in attachments) { String fileName = ServiceRequestUtils.isLocalUrl(item.name ?? '') ? ("${item.name ?? ''.split("/").last}|${base64Encode(File(item.name ?? '').readAsBytesSync())}") : item.name ?? ''; trafRequest.attachments!.add( Attachments(id: item.id, trafId: item.id, attachmentName: fileName), ); } } // buttonColor: AppColor.primary10, ), ), ], )); } }