diff --git a/android/app/build.gradle b/android/app/build.gradle index fa085a0..80eb644 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -59,12 +59,12 @@ android { } signingConfigs { - debug { - keyAlias keystoreProperties['keyAlias'] - keyPassword keystoreProperties['keyPassword'] - storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null - storePassword keystoreProperties['storePassword'] - } +// debug { +// keyAlias keystoreProperties['keyAlias'] +// keyPassword keystoreProperties['keyPassword'] +// storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null +// storePassword keystoreProperties['storePassword'] +// } release { keyAlias keystoreProperties['keyAlias'] keyPassword keystoreProperties['keyPassword'] diff --git a/lib/models/get_eit_dff_structure_list_model.dart b/lib/models/get_eit_dff_structure_list_model.dart index 3aed98c..c659cc2 100644 --- a/lib/models/get_eit_dff_structure_list_model.dart +++ b/lib/models/get_eit_dff_structure_list_model.dart @@ -31,6 +31,7 @@ class GetEITDFFStructureList { List? pARENTSEGMENTSVSSplitedVS; String? rEADONLY; String? rEQUIREDFLAG; + String? rEQCOLTIP; String? sEGMENTNAME; String? sEGMENTPROMPT; int? sEGMENTSEQNUM; @@ -73,6 +74,7 @@ class GetEITDFFStructureList { this.pARENTSEGMENTSVSSplitedVS, this.rEADONLY, this.rEQUIREDFLAG, + this.rEQCOLTIP, this.sEGMENTNAME, this.sEGMENTPROMPT, this.sEGMENTSEQNUM, @@ -132,7 +134,6 @@ class GetEITDFFStructureList { }); } pARENTSEGMENTSVS = json['PARENT_SEGMENTS_VS']; - if (json['PARENT_SEGMENTS_VS_SplitedVS'] != null) { pARENTSEGMENTSVSSplitedVS = []; json['PARENT_SEGMENTS_VS_SplitedVS'].forEach((v) { @@ -141,6 +142,7 @@ class GetEITDFFStructureList { } rEADONLY = json['READ_ONLY']; rEQUIREDFLAG = json['REQUIRED_FLAG']; + rEQCOLTIP = json['REQ_COL_TIP']; sEGMENTNAME = json['SEGMENT_NAME']; sEGMENTPROMPT = json['SEGMENT_PROMPT']; sEGMENTSEQNUM = json['SEGMENT_SEQ_NUM']; @@ -171,9 +173,6 @@ class GetEITDFFStructureList { if (this.eSERVICESVS != null) { data['E_SERVICES_VS'] = this.eSERVICESVS!.map((v) => v.toJson()).toList(); } - // if (this.eSERVICESVS != null) { - // data['E_SERVICES_VS'] = this.eSERVICESVS!.toList(); - // } data['FLEX_VALUE_SET_NAME'] = this.fLEXVALUESETNAME; data['FORMAT_TYPE'] = this.fORMATTYPE; data['FORMAT_TYPE_DSP'] = this.fORMATTYPEDSP; @@ -193,9 +192,9 @@ class GetEITDFFStructureList { if (this.pARENTSEGMENTSVSSplitedVS != null) { data['PARENT_SEGMENTS_VS_SplitedVS'] = this.pARENTSEGMENTSVSSplitedVS!.map((v) => v.toJson()).toList(); } - data['READ_ONLY'] = this.rEADONLY; data['REQUIRED_FLAG'] = this.rEQUIREDFLAG; + data['REQ_COL_TIP'] = this.rEQCOLTIP; data['SEGMENT_NAME'] = this.sEGMENTNAME; data['SEGMENT_PROMPT'] = this.sEGMENTPROMPT; data['SEGMENT_SEQ_NUM'] = this.sEGMENTSEQNUM; diff --git a/lib/ui/leave_balance/add_leave_balance_screen.dart b/lib/ui/leave_balance/add_leave_balance_screen.dart index a16e81d..d8ba32f 100644 --- a/lib/ui/leave_balance/add_leave_balance_screen.dart +++ b/lib/ui/leave_balance/add_leave_balance_screen.dart @@ -313,6 +313,7 @@ class _AddLeaveBalanceScreenState extends State { model.eSERVICESDV?.pIDCOLUMNNAME ?? "", isReadOnly: model.rEADONLY == "Y", isInputTypeNum: true, + length: model.mAXIMUMSIZE, onChange: (text) { model.eSERVICESDV ??= ESERVICESDV(); model.eSERVICESDV!.pIDCOLUMNNAME = text; @@ -501,6 +502,7 @@ class _AddLeaveBalanceScreenState extends State { (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), model.eSERVICESDV?.pIDCOLUMNNAME ?? "", isReadOnly: model.rEADONLY == "Y", + length: model.mAXIMUMSIZE, onChange: (text) { //model.fieldAnswer = text; }, diff --git a/lib/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart b/lib/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart index bd9305d..8451764 100644 --- a/lib/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart +++ b/lib/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart @@ -492,6 +492,8 @@ class _DynamicInputScreenState extends State { model.eSERVICESDV?.pIDCOLUMNNAME ?? "", isReadOnly: model.rEADONLY == "Y", isInputTypeNum: true, + length: model.mAXIMUMSIZE, + toolTip: model.rEQCOLTIP, onChange: (text) { model.fieldAnswer = text; model.eSERVICESDV ??= ESERVICESDV(); @@ -514,6 +516,7 @@ class _DynamicInputScreenState extends State { displayText, suffixIconData: Icons.calendar_today, isEnable: false, + toolTip: model.rEQCOLTIP, onTap: () async { if ((getEitDffStructureList![index].eSERVICESDV?.pVALUECOLUMNNAME != null)) { if (getEitDffStructureList![index].isDefaultTypeIsCDPS) { @@ -689,6 +692,7 @@ class _DynamicInputScreenState extends State { (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), model.eSERVICESDV?.pIDCOLUMNNAME ?? "", isReadOnly: model.rEADONLY == "Y", + length: model.mAXIMUMSIZE, onChange: (text) { model.fieldAnswer = text; }, diff --git a/lib/ui/profile/add_update_family_member.dart b/lib/ui/profile/add_update_family_member.dart index 5a31447..442f529 100644 --- a/lib/ui/profile/add_update_family_member.dart +++ b/lib/ui/profile/add_update_family_member.dart @@ -286,6 +286,7 @@ class _AddUpdateFamilyMemberState extends State { (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), model.getContactDetailsList!.sEGMENTVALUEDSP ?? "", isInputTypeNum: true, + length: model.mAXIMUMSIZE, onChange: (String text) { model.getContactDetailsList!.sEGMENTVALUEDSP = text; }, @@ -345,6 +346,7 @@ class _AddUpdateFamilyMemberState extends State { (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), model.getContactDetailsList!.sEGMENTVALUEDSP ?? "", isInputTypeNum: true, + length: model.mAXIMUMSIZE, onChange: (String text) { model.getContactDetailsList!.sEGMENTVALUEDSP = text; }, diff --git a/lib/ui/profile/dynamic_screens/dynamic_input_address_screen.dart b/lib/ui/profile/dynamic_screens/dynamic_input_address_screen.dart index a3b4656..aa0c931 100644 --- a/lib/ui/profile/dynamic_screens/dynamic_input_address_screen.dart +++ b/lib/ui/profile/dynamic_screens/dynamic_input_address_screen.dart @@ -227,6 +227,7 @@ class _DynamicInputScreenState extends State { (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), model.getEmployeeAddressList?.sEGMENTVALUEDSP ?? "", isReadOnly: model.rEADONLY == "Y", + length: model.mAXIMUMSIZE, onChange: (text) { model.getEmployeeAddressList?.sEGMENTVALUEDSP = text; }, diff --git a/lib/ui/screens/my_requests/new_request.dart b/lib/ui/screens/my_requests/new_request.dart index 670b18d..3b138b8 100644 --- a/lib/ui/screens/my_requests/new_request.dart +++ b/lib/ui/screens/my_requests/new_request.dart @@ -176,6 +176,7 @@ class _NewRequestState extends State { model.eSERVICESDV?.pIDCOLUMNNAME ?? "", isReadOnly: model.rEADONLY == "Y", isInputTypeNum: true, + length: model.mAXIMUMSIZE, onChange: (text) { model.fieldAnswer = text; model.eSERVICESDV ??= ESERVICESDV(); @@ -323,6 +324,7 @@ class _NewRequestState extends State { isPopup: true, isInputTypeNum: true, isReadOnly: model.rEADONLY == "Y", + length: model.mAXIMUMSIZE, ).paddingOnly(bottom: 12), itemBuilder: (_) => >[ for (int i = 0; i < model.eSERVICESVS!.length; i++) PopupMenuItem(child: Text(model.eSERVICESVS![i].vALUECOLUMNNAME!), value: i), diff --git a/lib/ui/termination/end_employement.dart b/lib/ui/termination/end_employement.dart index 8837806..161532a 100644 --- a/lib/ui/termination/end_employement.dart +++ b/lib/ui/termination/end_employement.dart @@ -303,6 +303,7 @@ class _EndEmploymentScreenState extends State { model.eSERVICESDV?.pIDCOLUMNNAME ?? "", isReadOnly: model.rEADONLY == "Y", isInputTypeNum: true, + length: model.mAXIMUMSIZE, onChange: (text) { model.eSERVICESDV ??= ESERVICESDV(); model.eSERVICESDV!.pIDCOLUMNNAME = text; @@ -475,6 +476,7 @@ class _EndEmploymentScreenState extends State { (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), model.eSERVICESDV?.pIDCOLUMNNAME ?? "", isReadOnly: model.rEADONLY == "Y", + length: model.mAXIMUMSIZE, onChange: (text) { //model.fieldAnswer = text; }, diff --git a/lib/widgets/dynamic_forms/dynamic_textfield_widget.dart b/lib/widgets/dynamic_forms/dynamic_textfield_widget.dart index ec4146b..586681a 100644 --- a/lib/widgets/dynamic_forms/dynamic_textfield_widget.dart +++ b/lib/widgets/dynamic_forms/dynamic_textfield_widget.dart @@ -1,5 +1,8 @@ import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:mohem_flutter_app/classes/colors.dart'; +import 'package:mohem_flutter_app/classes/utils.dart'; +import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; class DynamicTextFieldWidget extends StatelessWidget { final String labelText; @@ -17,11 +20,14 @@ class DynamicTextFieldWidget extends StatelessWidget { final bool isInputTypeNumSigned; final bool isObscureText; final bool isBackgroundEnable; + final int? length; + final String? toolTip; final void Function(String)? onChange; DynamicTextFieldWidget(this.labelText, this.hintText, //this.controller, {this.isObscureText = false, this.onTap, + this.onToolTipTap, this.suffixIconData, this.isEnable = true, this.isReadOnly = false, @@ -31,6 +37,8 @@ class DynamicTextFieldWidget extends StatelessWidget { this.onChange, this.isInputTypeNum = false, this.isInputTypeNumSigned = true, + this.length, + this.toolTip = "", this.isBackgroundEnable = false}); @override @@ -68,13 +76,18 @@ class DynamicTextFieldWidget extends StatelessWidget { enabled: isEnable, scrollPadding: EdgeInsets.zero, readOnly: isReadOnly, - keyboardType: (isInputTypeNum) ? (isInputTypeNumSigned ? const TextInputType.numberWithOptions(signed: true, decimal: true) : TextInputType.numberWithOptions(signed: true, decimal: true)) : TextInputType.text, + keyboardType: (isInputTypeNum) + ? (isInputTypeNumSigned ? const TextInputType.numberWithOptions(signed: true, decimal: true) : TextInputType.numberWithOptions(signed: true, decimal: true)) + : TextInputType.text, textInputAction: TextInputAction.done, //controller: controller, maxLines: lines, obscuringCharacter: "*", obscureText: isObscureText, onChanged: onChange, + inputFormatters: [ + LengthLimitingTextInputFormatter(length), + ], style: const TextStyle( fontSize: 14, height: 21 / 14, @@ -107,6 +120,10 @@ class DynamicTextFieldWidget extends StatelessWidget { ), if (isPopup) const Icon(Icons.keyboard_arrow_down_outlined, color: MyColors.darkIconColor), if (onTap != null) Icon(suffixIconData ?? Icons.keyboard_arrow_down_outlined, color: MyColors.darkIconColor), + if (toolTip!.isNotEmpty) + Icon(Icons.help_outline_rounded, color: MyColors.darkIconColor).onPress(() { + Utils.showToast(toolTip!); + }).paddingOnly(left: 6), ], ), ),