import 'dart:typed_data'; import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; import '../../Utils/image_constant.dart'; import '../../Utils/size_utils.dart'; import '../../providers/token_manager.dart'; import '../../theme/app_style.dart'; import '../../widgets/app_bar/appbar_image.dart'; import '../../widgets/app_bar/appbar_title.dart'; import '../../widgets/app_bar/custom_app_bar.dart'; import '../../widgets/custom_button.dart'; import '../../widgets/custom_text_form_field.dart'; import 'SystemParameterApiService.dart'; class SysParameter extends StatefulWidget { final int sysparameter=1; // const SysParameter({Key? key, required this.sysparameter}) : super(key: key); @override _SysParameterState createState() => _SysParameterState(); } class _SysParameterState extends State { TextEditingController schedulerTimerController = TextEditingController(); TextEditingController leaseTaxCodeController = TextEditingController(); TextEditingController vesselConfirmationController = TextEditingController(); TextEditingController rowToDisplayController = TextEditingController(); TextEditingController linkToDisplayController = TextEditingController(); TextEditingController rowToAddController = TextEditingController(); TextEditingController lovRowToDisplayController = TextEditingController(); TextEditingController lovLinkToDisplayController = TextEditingController(); TextEditingController oidServerNameController = TextEditingController(); TextEditingController oidBaseController = TextEditingController(); TextEditingController oidAdminUserController = TextEditingController(); TextEditingController oidServerPortController = TextEditingController(); TextEditingController userDefaultGroupController = TextEditingController(); TextEditingController defaultDepartmentController = TextEditingController(); TextEditingController defaultPositionController = TextEditingController(); TextEditingController singleChargeController = TextEditingController(); TextEditingController firstDayOfWeekController = TextEditingController(); TextEditingController hourPerShiftController = TextEditingController(); TextEditingController cnBillingFrequencyController = TextEditingController(); TextEditingController billingDepartmentCodeController = TextEditingController(); TextEditingController basePriceListController = TextEditingController(); TextEditingController nonContainerServiceController = TextEditingController(); TextEditingController ediMaeSchedulerController = TextEditingController(); TextEditingController ediSchedulerController = TextEditingController(); TextEditingController lastController = TextEditingController(); TextEditingController companynameController = TextEditingController(); bool isRegistrationAllow=false; Map formData = {}; var logoname; var logopath; SystemParameterApiService apiService = SystemParameterApiService(); String? uploadimageurl; Uint8List? _imageBytes; // Uint8List to store the image data String? _imageFileName; late Map sysparameter; @override void initState() { _loadParameters(); } Future _loadParameters() async { final token = await TokenManager.getToken(); try { final projectData = await apiService.getsystemparameters(token!,widget.sysparameter); setState(() { sysparameter = projectData; lastController.text = "('SYSADMIN','ITSUPPORTMSC')"; schedulerTimerController.text = sysparameter['schedulerTime'].toString()??''; isRegistrationAllow = sysparameter['regitrationAllowed']??false; leaseTaxCodeController.text = sysparameter['leaseTaxCode'].toString()??''; vesselConfirmationController.text = sysparameter['vesselConfProcessLimit'].toString()??''; rowToDisplayController.text = sysparameter['rowToDisplay'].toString()??''; linkToDisplayController.text = sysparameter['linkToDisplay'].toString()??''; rowToAddController.text = sysparameter['rowToAdd'].toString()??''; lovRowToDisplayController.text = sysparameter['lovRowToDisplay'].toString()??''; lovLinkToDisplayController.text = sysparameter['lovLinkToDisplay'].toString()??''; oidServerNameController.text = sysparameter['oidserverName'].toString()??''; oidBaseController.text = sysparameter['oidBase'].toString()??''; oidAdminUserController.text = sysparameter['oidAdminUser'].toString()??''; oidServerPortController.text = sysparameter['oidServerPort'].toString()??''; userDefaultGroupController.text = sysparameter['userDefaultGroup'].toString()??''; defaultDepartmentController.text = sysparameter['defaultDepartment'].toString()??''; defaultPositionController.text = sysparameter['defaultPosition'].toString()??''; singleChargeController.text = sysparameter['singleCharge'].toString()??''; firstDayOfWeekController.text = sysparameter['firstDayOftheWeek'].toString()??''; hourPerShiftController.text = sysparameter['hourPerShift'].toString()??''; cnBillingFrequencyController.text = sysparameter['cnBillingFrequency'].toString()??''; billingDepartmentCodeController.text = sysparameter['billingDepartmentCode'].toString()??''; basePriceListController.text = sysparameter['basePriceList'].toString()??''; nonContainerServiceController.text = sysparameter['nonContainerServiceOrder'].toString()??''; ediMaeSchedulerController.text = sysparameter['ediMaeSchedulerONOFF'].toString()??''; ediSchedulerController.text = sysparameter['ediSchedulerONOFF'].toString()??''; lastController.text = "('SYSADMIN','ITSUPPORTMSC')"??''; companynameController.text = sysparameter['company_Display_Name'].toString()??''; print(sysparameter['schedulerTime']); }); } catch (e) { print('Failed to load projects: $e'); } } Future _uploadImageFile() async { final imagePicker = ImagePicker(); try { final pickedImage = await imagePicker.pickImage(source: ImageSource.gallery); if (pickedImage != null) { final imageBytes = await pickedImage.readAsBytes(); setState(() { _imageBytes = imageBytes; _imageFileName = pickedImage.name; // Store the file name }); } _submitImage(); } catch (e) { print(e); } } Future _submitImage() async { if (_imageBytes == null) { // Show an error message if no image is selected showDialog( context: context, builder: (BuildContext context) { return AlertDialog( title: const Text('Error'), content: Text('Please select an image.'), actions: [ TextButton( child: const Text('OK'), onPressed: () { Navigator.of(context).pop(); }, ), ], ); }, ); return; } if (_imageFileName == null) { // Handle the case where _imageFileName is null (no file name provided) print('File name is missing.'); return; } try { final token = await TokenManager.getToken(); Map fileuploadeddata = await apiService.createFile(_imageBytes!, _imageFileName!, token!); logoname = fileuploadeddata['image_name']; logopath = fileuploadeddata['image_path']; } catch (e) { showDialog( context: context, builder: (BuildContext context) { return AlertDialog( title: const Text('Error'), content: Text('Failed to upload image: $e'), actions: [ TextButton( child: const Text('OK'), onPressed: () { Navigator.of(context).pop(); }, ), ], ); }, ); } } @override Widget build(BuildContext context) { return Scaffold( appBar: CustomAppBar( height: getVerticalSize(49), leadingWidth: 40, leading: AppbarImage( height: getSize(24), width: getSize(24), svgPath: ImageConstant.imgArrowleftBlueGray900, margin: getMargin(left: 16, top: 12, bottom: 13), onTap: () { Navigator.pop(context); }), centerTitle: true, title: AppbarTitle(text: "System Parameter")), body: Material(child:SingleChildScrollView( // Wrap the form in a SingleChildScrollView scrollDirection: Axis.vertical, // Allow vertical scrolling child:Padding( padding: const EdgeInsets.all(16.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ _buildFieldWithTooltip( fieldName: 'Scheduler Timer', controller: schedulerTimerController, tooltip: 'Tooltip for Scheduler Timer', ), _buildFieldWithTooltip( fieldName: 'Lease Tax Code', controller: leaseTaxCodeController, tooltip: 'Tooltip for Lease Tax Code', ), _buildFieldWithTooltip( fieldName: 'Vessel Confirmation Process Limit', controller: vesselConfirmationController, tooltip: 'Tooltip for Vessel Confirmation Process Limit', ), _buildFieldWithTooltip( fieldName: 'Row To Display', controller: rowToDisplayController, tooltip: 'Tooltip for Row To Display', ), _buildFieldWithTooltip( fieldName: 'Link To Display', controller: linkToDisplayController, tooltip: 'Tooltip for Link To Display', ), _buildFieldWithTooltip( fieldName: 'Row To Add', controller: rowToAddController, tooltip: 'Tooltip for Row To Add', ), _buildFieldWithTooltip( fieldName: 'LOV Row To Display', controller: lovRowToDisplayController, tooltip: 'Tooltip for LOV Row To Display', ), _buildFieldWithTooltip( fieldName: 'LOV Link To Display', controller: lovLinkToDisplayController, tooltip: 'Tooltip for LOV Link To Display', ), _buildFieldWithTooltip( fieldName: 'OID Server Name', controller: oidServerNameController, tooltip: 'Tooltip for OID Server Name', ), _buildFieldWithTooltip( fieldName: 'OID Base', controller: oidBaseController, tooltip: 'Tooltip for OID Base', ), _buildFieldWithTooltip( fieldName: 'OID Admin User', controller: oidAdminUserController, tooltip: 'Tooltip for OID Admin User', ), _buildFieldWithTooltip( fieldName: 'OID Server Port', controller: oidServerPortController, tooltip: 'Tooltip for OID Server Port', ), _buildFieldWithTooltip( fieldName: 'User Default Group', controller: userDefaultGroupController, tooltip: 'Tooltip for User Default Group', ), _buildFieldWithTooltip( fieldName: 'Default Department', controller: defaultDepartmentController, tooltip: 'Tooltip for Default Department', ), _buildFieldWithTooltip( fieldName: 'Default Position', controller: defaultPositionController, tooltip: 'Tooltip for Default Position', ), _buildFieldWithTooltip( fieldName: 'Single Charge', controller: singleChargeController, tooltip: 'Tooltip for Single Charge', ), _buildFieldWithTooltip( fieldName: 'First Day of The Week', controller: firstDayOfWeekController, tooltip: 'Tooltip for First Day of The Week', ), _buildFieldWithTooltip( fieldName: 'Hour per Shift', controller: hourPerShiftController, tooltip: 'Tooltip for Hour per Shift', ), _buildFieldWithTooltip( fieldName: 'CN Billing Frequency', controller: cnBillingFrequencyController, tooltip: 'Tooltip for CN Billing Frequency', ), _buildFieldWithTooltip( fieldName: 'Billing Department Code', controller: billingDepartmentCodeController, tooltip: 'Tooltip for Billing Department Code', ), _buildFieldWithTooltip( fieldName: 'Base Price List', controller: basePriceListController, tooltip: 'Tooltip for Base Price List', ), _buildFieldWithTooltip( fieldName: 'Non-Container Service Order Auto-Approval Department Code', controller: nonContainerServiceController, tooltip: 'Tooltip for Non-Container Service Order Auto-Approval Department Code', ), _buildFieldWithTooltip( fieldName: 'EDI MAE Scheduler ON/OFF', controller: ediMaeSchedulerController, tooltip: 'Tooltip for EDI MAE Scheduler ON/OFF', ), _buildFieldWithTooltip( fieldName: 'EDI Scheduler ON/OFF', controller: ediSchedulerController, tooltip: 'Tooltip for EDI Scheduler ON/OFF', ), _buildFieldWithTooltip( fieldName: 'Company Name', controller: companynameController, tooltip: 'Company Name', ), Text("Is Registration Allowed?", overflow: TextOverflow.ellipsis, textAlign: TextAlign.left, style: AppStyle .txtGilroyMedium16Bluegray800), Row( children: [ Radio( value: true, groupValue: isRegistrationAllow, onChanged: (value) { setState(() { isRegistrationAllow = value as bool; }); }, ), Text("Yes", overflow: TextOverflow.ellipsis, textAlign: TextAlign.left, style: AppStyle .txtGilroyMedium16Bluegray800), Radio( value: false, groupValue: isRegistrationAllow, onChanged: (value) { setState(() { isRegistrationAllow = value as bool; }); }, ), Text("No", overflow: TextOverflow.ellipsis, textAlign: TextAlign.left, style: AppStyle .txtGilroyMedium16Bluegray800), ], ), ElevatedButton( onPressed: () { _uploadImageFile(); }, style: ButtonStyle( backgroundColor: _imageBytes==null?MaterialStateProperty.all(Colors.red):MaterialStateProperty.all(Colors.green), // Change to the desired color ), child: _imageBytes == null ? Text("Pick a Company Logo", overflow: TextOverflow.ellipsis, textAlign: TextAlign.left, style: AppStyle .txtGilroyMedium16Bluegray800) : Text("Company Logo uploaded Successful", overflow: TextOverflow.ellipsis, textAlign: TextAlign.left, style: AppStyle .txtGilroyMedium16Bluegray800), ), Tooltip( message: 'Allow customer code for MSC taulia CSV generation', child: Column( children: [ Text("i", overflow: TextOverflow.ellipsis, textAlign: TextAlign.left, style: AppStyle .txtGilroyMedium16Bluegray800), CustomTextFormField( focusNode: FocusNode(), controller:lastController, margin: getMargin(top: 7), textInputType: TextInputType.text), ], ) // TextFormField( // controller: lastController, // decoration: const InputDecoration( // labelText: 'i', // ), // ), ), CustomButton( height: getVerticalSize(50), text: "Save", margin: getMargin(top: 24, bottom: 5), onTap: () async { formData['regitrationAllowed'] = isRegistrationAllow; formData['schedulerTime']=schedulerTimerController.text; formData['leaseTaxCode']=leaseTaxCodeController.text; formData['vesselConfProcessLimit']=vesselConfirmationController.text; formData['rowToDisplay']=rowToDisplayController.text; formData['linkToDisplay']=linkToDisplayController.text; formData['rowToAdd']=rowToAddController.text; formData['lovRowToDisplay']=lovRowToDisplayController.text; formData['lovLinkToDisplay']=lovLinkToDisplayController.text; formData['oidserverName']=oidServerNameController.text; formData['oidBase']=oidBaseController.text; formData['oidAdminUser']=oidAdminUserController.text; formData['oidServerPort']=oidServerPortController.text; formData['userDefaultGroup']=userDefaultGroupController.text; formData['defaultDepartment']=defaultDepartmentController.text; formData['defaultPosition']=defaultPositionController.text; formData['singleCharge']=singleChargeController.text; formData['firstDayOftheWeek']=firstDayOfWeekController.text; formData['hourPerShift']=hourPerShiftController.text; formData['cnBillingFrequency']=cnBillingFrequencyController.text; formData['billingDepartmentCode']=billingDepartmentCodeController.text; formData['basePriceList']=basePriceListController.text; formData['nonContainerServiceOrder']=nonContainerServiceController.text; formData['ediMaeSchedulerONOFF']=ediMaeSchedulerController.text; formData['ediSchedulerONOFF']=ediSchedulerController.text; //formData['']=lastController.text; formData['upload_Logo_name']=logoname; formData['upload_Logo_path']=logopath; formData['company_Display_Name']=companynameController.text; final token = await TokenManager.getToken(); try { print("token is : $token"); print(formData); if (formData != null) { // Create new project apiService.updateParameter(token!, widget.sysparameter, formData); } Navigator.pop(context); // Add navigation or any other logic after successful create/update } catch (e) { print('error is $e'); showDialog( context: context, builder: (BuildContext context) { return AlertDialog( title: const Text('Error'), content: Text( 'Failed to ${widget.sysparameter == null ? 'create' : 'update'} project: $e'), actions: [ TextButton( child: const Text('OK'), onPressed: () { Navigator.of(context).pop(); }, ), ], ); }, ); } }, ), ], ), ), ))); } Widget _buildFieldWithTooltip({ required String fieldName, required TextEditingController controller, required String tooltip, }) { return Tooltip( message: tooltip, child: Padding( padding: getPadding(top: 18), child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, children: [ Text("$fieldName", overflow: TextOverflow.ellipsis, textAlign: TextAlign.left, style: AppStyle .txtGilroyMedium16Bluegray800), CustomTextFormField( focusNode: FocusNode(), controller:controller, hintText: "Enter Your $fieldName", margin: getMargin(top: 7), textInputType: TextInputType.text) ])), // TextFormField( // controller: controller, // decoration: InputDecoration( // labelText: fieldName, // ), // ), ); } }