Untitled
unknown
plain_text
a month ago
52 kB
2
Indexable
import 'dart:convert'; import 'package:amatia/services/color-constants.dart'; import 'package:amatia/services/custom_widgets.dart'; import 'package:dropdown_search/dropdown_search.dart'; import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:provider/provider.dart'; import 'package:rounded_loading_button/rounded_loading_button.dart'; import '../../custom_widgets/autocomplete_modal_widget.dart'; import '../../providers/data-class.dart'; import '../../providers/form-data-provider.dart'; import 'package:path/path.dart' as path; import '../../providers/home_provider.dart'; import '../../providers/service_provider.dart'; import '../../services/custom-input-formatters.dart'; import '../../services/page-redirect-provider.dart'; import '../../services/web_viewer_page.dart'; class DynamicFormPage extends StatefulWidget { const DynamicFormPage( {Key? key, this.formId, this.formTitle, this.predefinedValues, this.elementDetails, this.formData}) : super(key: key); final List<Map<String, dynamic>>? formData; final Map<String, dynamic>? elementDetails; final String? formId; final String? formTitle; final Map<String, dynamic>? predefinedValues; @override State<DynamicFormPage> createState() => _DynamicFormPageState( elementDetails: elementDetails, formId: formId, formTitle: formTitle, predefinedValues: predefinedValues, formData: formData); } class _DynamicFormPageState extends State<DynamicFormPage> { _DynamicFormPageState( {this.formId, this.formTitle, this.predefinedValues, this.elementDetails, this.formData}); final List<Map<String, dynamic>>? formData; final Map<String, dynamic>? elementDetails; final String? formId; final String? formTitle; final Map<String, dynamic>? predefinedValues; FocusNode dropdownFocusNode = FocusNode(); @override void initState() { // print("elementDetails === ${jsonEncode(widget.elementDetails)}"); if (formData == null) { Provider.of<FormDataProvider>(context, listen: false).fetchFormDetails( context, formId, formTitle, predefinedValues, elementDetails); String pendingMsg = Provider.of<DashboardProvider>(context, listen: false) .getFormPendingMessage(formId); // print("pendingMsg === $pendingMsg"); if (pendingMsg != "") { Future.delayed(const Duration(seconds: 1), () async { await customAlert(context, header: "Atención!", okText: "¡Comprendo!", body: pendingMsg, barrierDismissible: false); Provider.of<FormDataProvider>(context, listen: false) .checkDraftReport(context, formId: formId); }); } else { Future.delayed(const Duration(seconds: 1), () { Provider.of<FormDataProvider>(context, listen: false) .checkDraftReport(context, formId: formId); }); } } else { Provider.of<FormDataProvider>(context, listen: false).populateFormDetails( context, formData: formData, formId: formId, formTitle: formTitle, predefinedValues: predefinedValues, elementDetails: elementDetails); } super.initState(); } int count = 0; @override Widget build(BuildContext context) { return Consumer<FormDataProvider>(builder: (context, providerData, child) { // log("providerData.dynamicFormList === ${jsonEncode(providerData.dynamicFormList)}"); // for (Map<String, dynamic>? item // in providerData.dynamicFormList ?? []) // if (item!['control_type'] == "html"){ // print("item == ${jsonEncode(item)}"); // } return Scaffold( appBar: AppBar( backgroundColor: CustomColor.primary, elevation: 0, title: CustomTextTitle( formTitle ?? "", fontSize: FontSizes.s16, fontWeight: FontWeight.w500, maxLines: 2, ), iconTheme: const IconThemeData( color: Colors.white, // Change the color of the AppBar buttons ), titleTextStyle: GoogleFonts.roboto( color: Colors.white, // Change the color of the AppBar title text fontSize: 16.0, ), ), body: (providerData.showLoader || providerData.showButtonLoader) ? customLoader() : Form( key: providerData.dynamicFormKey, child: ListView( addAutomaticKeepAlives: true, padding: const EdgeInsets.symmetric( vertical: 20, horizontal: 20), children: [ if (Provider.of<ServiceProvider>(context, listen: true) .isInternetConnected == false) Container( decoration: BoxDecoration( color: CustomColor.error.withOpacity(0.4), borderRadius: BorderRadius.circular(4.0), border: Border.all(color: CustomColor.error)), padding: const EdgeInsets.all(10), margin: const EdgeInsets.only(bottom: 10), child: CustomTextTitle( "No tiene acceso a Internet!", fontSize: FontSizes.s16, textAlign: TextAlign.center, color: CustomColor.error, ), ), // text,textarea,dropdown,radio,checkbox,date,datetime,file for (Map<String, dynamic>? item in providerData.dynamicFormList ?? []) Container( decoration: BoxDecoration( color: item!["has_comment_field"] == '1' ? CustomColor.pageBackground.withOpacity(0.5) : null, borderRadius: BorderRadius.circular(6), border: item["has_comment_field"] == '1' ? Border.all(color: CustomColor.border) : null, ), padding: EdgeInsets.symmetric( horizontal: item["has_comment_field"] == '1' ? 10 : 0), margin: EdgeInsets.symmetric( vertical: item["has_comment_field"] == '1' ? 10 : 0), child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ if (item.isNotEmpty == true && providerData.fieldGroupValidationFilter( context, item["field_group"])) Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ Expanded( child: getWidgetContainer( item, providerData)), const SizedBox( width: 10, ), getInformationIcon(item) ], ), if (item["has_comment_field"] == '1') CustomInputField( width: double.maxFinite, containerColor: CustomColor.pageBackground, hintTextColor: Colors.grey, margin: const EdgeInsets.only(bottom: 10, top: 5), maxLines: item['control_type'] == "text" ? 1 : null, hintText: item["comment_placeholder"] ?? "", onChanged: (value) => providerData.setInputFieldValue( item['id'].toString(), value, isAdditional: true), fontSize: FontSizes.s14, initialValue: providerData .additionalData[item['id'].toString()], ) ], ), ), ///---- Submit Button ----- // Container( // margin: const EdgeInsets.symmetric(vertical: 15), // child: RoundedLoadingButton( // color: CustomColor.primary, // borderRadius: 4.0, // width: double.maxFinite, // successColor: Colors.green, // controller: providerData.submitButtonController, // onPressed: ()=>providerData.onFormSubmit(context), // child: CustomTextTitle("Guardar", color: Colors.white,), // ), // ), // // Container( // margin: const EdgeInsets.symmetric(vertical: 0), // child: RoundedLoadingButton( // color: CustomColor.primary, // borderRadius: 4.0, // width: double.maxFinite, // successColor: Colors.green, // controller: providerData.submitButtonController, // onPressed: ()=>providerData.onFormSubmit(context, downloadReport: true, title: formTitle), // child: CustomTextTitle("Descargar reporte", color: Colors.white,), // ), // ), Container( width: double.maxFinite, margin: const EdgeInsets.symmetric(vertical: 15), child: Row( children: [ if (providerData .currentFormElementDetails["formType"] != "calendar-inspection") Expanded( child: RoundedLoadingButton( color: CustomColor.lightTextColor, borderRadius: 4.0, width: double.maxFinite, successColor: Colors.green, valueColor: Colors.green, controller: providerData.downloadButtonController, onPressed: () => providerData .saveAsDraft(context, formId: formId), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon( Icons.save, color: CustomColor.primary, ), const SizedBox( width: 5, ), CustomTextTitle( "Guardar borrador", color: CustomColor.primary, fontSize: 14, ), ], ), ), ), if (providerData .currentFormElementDetails["formType"] != "calendar-inspection") const SizedBox( width: 15, ), Expanded( child: RoundedLoadingButton( color: CustomColor.primary, borderRadius: 4.0, width: double.maxFinite, successColor: Colors.green, controller: providerData.submitButtonController, onPressed: () => providerData.onFormSubmit(context), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ const Icon( Icons.upload, color: Colors.white, ), const SizedBox( width: 5, ), CustomTextTitle( Provider.of<ServiceProvider>(context, listen: true) .isInternetConnected == false ? "Enviar sin conexión " : "Guardar", color: Colors.white, fontSize: 14, ), ], )), ), ], ), ), const SizedBox( height: 10, ), Row( children: [ Expanded( child: GestureDetector( onTap: () => providerData.onFormSubmit( context, downloadReport: true, title: formTitle), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ const Icon(Icons.download, color: Color(0xFF2e2e2e)), const SizedBox(width: 5), CustomTextTitle( "Descargar reporte", color: CustomColor.darkTextColor, fontSize: 14, ), ], ))) ], ), const SizedBox( height: 20, ), ], ), )); }); } Widget filterWidget(String? valueData) { if (valueData == null) { return CustomTextTitle("Subir archivo", fontSize: FontSizes.s14); } else if (valueData == 'processing') { return CustomTextTitle("Procesando...", fontSize: FontSizes.s14); } else { String ext = path.extension(valueData); // print("ext === $ext"); if (ext == ".png" || ext == ".jpg" || ext == ".jpeg") { return Container( padding: const EdgeInsets.only(top: 10, bottom: 5), child: Image.network( valueData, height: 80, ), ); } else { return Icon( Icons.file_copy, color: CustomColor.primary, ); } } } Widget getWidgetContainer( Map<String, dynamic> item, FormDataProvider providerData) { //989: null, 990: null, 971: null, 972: null if (item['has_autocomplete'].toString().toLowerCase() == "yes") { return Container( margin: EdgeInsets.only(bottom: 10), child: Column( children: [ CustomTextTitle( "${item['label_es'] ?? " "}${item['is_require'] == "1" ? " *" : ""}", color: CustomColor.primary, fontSize: 14, maxLines: 10), const SizedBox( height: 10, ), AutocompleteModal( item, onChanged: (Map<String, dynamic> selectedValue) => providerData.setInputFieldValue( item['id'].toString(), selectedValue), selectedValue: providerData.valeData[item['id'].toString()], validator: (value) { if (value?.trim().isEmpty == true && item['is_require'] == "1") { return "El campo es requerido y debe ser diligenciado"; } return null; }, ), ], ), ); } if (item['id'].toString() == "989" || item['id'].toString() == "990" || item['id'].toString() == "972") // print("-----------${item['id']} ---- ${providerData.valeData[item['id'].toString()]}"); // print("invalid field id --- ${item['id'].toString()}"); if (item['control_type'] == "html") { return Container( decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(8), border: Border.all(color: CustomColor.border), boxShadow: [ BoxShadow( color: Colors.grey.shade200, spreadRadius: 1, blurRadius: 8) ]), margin: EdgeInsets.only(bottom: 10, top: 10), height: double.parse((item['html_height'] ?? 300).toString()), child: ClipRRect( borderRadius: BorderRadius.circular(8), child: WebViewerPage(url: (item["label_es"]), showAppBar: false), ), ); } if ((item['control_type'] == "text" || item['control_type'] == "textarea") && item['status'] == "Active") { return CustomInputField( keyboardType: (item['validation'] == "positiveinteger" || item['validation'] == "number") ? TextInputType.number : null, inputFormatters: [ if (item['validation'] == "positiveinteger") CustomPositiveIntegerFormatter(), if (item['validation'] == "alphanumeric") CustomAlphanumericFormatter(), if (item['validation'] == "number") CustomNumberFormatter(), if (item['validation'] == "lettersonly") CustomLettersOnlyFormatter(), if (item['validation'] == "integer") CustomSignedIntegerFormatter(), if (item['validation'] == "letterswithbasicpunc") CustomLettersWithBasicPunctuationFormatter() ], key: Key(item['id'].toString()), width: double.maxFinite, containerColor: CustomColor.pageBackground, hintTextColor: CustomColor.darkTextColor, margin: const EdgeInsets.symmetric(vertical: 10), maxLines: item['control_type'] == "text" ? 1 : null, hintText: "${item['label_es'] ?? " "}${item['is_require'] == "1" ? " *" : ""}", labelText: "", customLabelWidget: CustomTextTitle( "${item['label_es'] ?? " "}${item['is_require'] == "1" ? " *" : ""}", color: CustomColor.primary, fontSize: 15, maxLines: 10), onChanged: (value) => providerData.setInputFieldValue(item['id'].toString(), value), fontSize: FontSizes.s15, initialValue: providerData.valeData[item['id'].toString()], validator: (value) { if (value?.trim().isEmpty == true && item['is_require'] == "1") { return "El campo es requerido y debe ser diligenciado"; } return null; }, ); } else if (item['control_type'] == "label" && item['label_es'] != null && item['label_es'] != "") { return customLabelText(item['label_es'] ?? "", color: CustomColor.pageBackground); } else if (item['control_type'] == "file" && item['status'] == "Active") { return Container( key: Key(item['id'].toString()), margin: const EdgeInsets.symmetric(vertical: 10), decoration: BoxDecoration( color: Provider.of<ServiceProvider>(context, listen: true) .isInternetConnected == true ? CustomColor.lightTextColor : CustomColor.border.withOpacity(0.3), borderRadius: BorderRadius.circular(4.0)), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ CustomTextTitle( "${item['label_es'] ?? " "}${item['is_require'] == "1" ? " *" : ""}", color: CustomColor.primary, fontSize: 14, maxLines: 10), const SizedBox( height: 5, ), InputDecorator( decoration: InputDecoration( contentPadding: const EdgeInsets.only( left: 20, right: 10, top: 7.5, bottom: 5), border: OutlineInputBorder( borderRadius: BorderRadius.circular(4.0), ), enabledBorder: OutlineInputBorder( borderSide: BorderSide(color: CustomColor.border), borderRadius: BorderRadius.circular(4.0), ), ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ Expanded( flex: 3, child: filterWidget( providerData.valeData[item['id'].toString()]), ), const SizedBox( width: 5, ), Expanded( flex: 2, child: providerData .valeData[item['id'].toString()] == "processing" ? customLoader(radius: 20) : CustomButton( providerData.valeData[ item['id'].toString()] == null ? "Subir archivo" : "Cambiar archivo", elevation: 0, borderRadius: 4.0, height: 35, fixedHeight: 35, margin: EdgeInsets.zero, fontSizes: FontSizes.s10, onPressed: Provider.of<ServiceProvider>( context, listen: true) .isInternetConnected == true ? () => providerData.chooseImageSource( context, item['id'].toString()) : null, disabledColor: Colors.grey, )) ], ), const SizedBox( height: 5, ), CustomTextTitle( "Tipos de archivo: .jpeg, .jpg, .png, .pdf, .docx, .doc, .xls, .xlsx", fontSize: FontSizes.s10, color: CustomColor.darkTextColor.withOpacity(0.5), ), const SizedBox( height: 10, ), if (Provider.of<ServiceProvider>(context, listen: true) .isInternetConnected == false) CustomTextTitle( "¡Esta función solo está disponible en línea!", color: CustomColor.error, fontSize: FontSizes.s12, ) ])) ], )); } else if (item['control_type'] == "dropdown" && item['status'] == "Active") { // return Container(height: 50, width: double.maxFinite, color: Colors.red,); return Container( key: Key(item['id'].toString()), margin: const EdgeInsets.symmetric(vertical: 10), // color: CustomColor.lightTextColor, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ CustomTextTitle( "${item['label_es'] ?? " "}${item['is_require'] == "1" ? " *" : ""}", color: CustomColor.primary, fontSize: 14, maxLines: 10), const SizedBox( height: 5, ), DropdownSearch<DropDownData>( popupProps: PopupProps.bottomSheet( bottomSheetProps: BottomSheetProps( backgroundColor: CustomColor.pageBackground, enableDrag: false, ), title: Container( padding: const EdgeInsets.only(left: 15), color: CustomColor.primary, child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( child: CustomTextTitle( item['label_es'], fontSize: FontSizes.s16, color: CustomColor.lightTextColor, ), ), IconButton( icon: Icon(Icons.close, color: Colors.white), onPressed: () { Navigator.of(context).pop(); }, ), ], ), ), emptyBuilder: (context, data) => Center( child: CustomTextTitle( "¡Datos no encontrados!", fontSize: FontSizes.s16, ), ), itemBuilder: (context, data, isSelected) { return ListTile( dense: true, minVerticalPadding: 0, contentPadding: const EdgeInsets.symmetric(horizontal: 15), horizontalTitleGap: 0, title: CustomTextTitle(data.option_value, fontSize: FontSizes.s12, fontWeight: FontWeight.w400, color: isSelected ? CustomColor.primary : CustomColor.darkTextColor, maxLines: 2), ); }, ), itemAsString: (DropDownData? u) => u?.option_value ?? "", items: item["select_master_key"] == "" ? providerData.getSplitValues(item["options"]) : providerData.checkConditionValues(item), dropdownDecoratorProps: DropDownDecoratorProps( dropdownSearchDecoration: InputDecoration( contentPadding: const EdgeInsets.symmetric( horizontal: 20, vertical: 20), // labelText: "${item['label_es'] ?? " "}${item['is_require']=="1"?" *":""}", hintText: item['label_es'] ?? "", iconColor: CustomColor.border, suffixIconColor: CustomColor.border, labelStyle: GoogleFonts.roboto( color: CustomColor.primary, fontSize: FontSizes.s16), border: OutlineInputBorder( borderRadius: BorderRadius.circular(4.0), ), enabledBorder: OutlineInputBorder( borderSide: BorderSide(color: CustomColor.border), borderRadius: BorderRadius.circular(4.0), ), focusedBorder: OutlineInputBorder( borderSide: BorderSide(color: CustomColor.border), borderRadius: BorderRadius.circular(4.0), ), ), ), onBeforePopupOpening: (_) async { FocusManager.instance.primaryFocus?.unfocus(); await Future.delayed( Duration(milliseconds: 300)); // Short delay return true; }, onChanged: (DropDownData? value) { // print("item === $item"); providerData.setDropdownValue( value!, item['id'].toString(), item["is_conditional_question"], (item["condition"] == "" || item["condition"] == null || item["condition"].toString() == "[]") ? {} : jsonDecode(item["condition"])); }, selectedItem: providerData.findSelectedItem( providerData.valeData[item['id'].toString()], item['id'].toString(), item["select_master_key"] == "" ? providerData.getSplitValues(item["options"]) : providerData.checkConditionValues(item)), dropdownBuilder: (context, data) { return CustomTextTitle( data?.option_value ?? "Seleccione", fontSize: FontSizes.s12, fontWeight: FontWeight.w500, ); }, validator: (value) { // print("validator ${item['id']} === $value"); if (providerData.valeData[item['id'].toString()] == null && item['is_require'] == "1") { return "El campo es requerido y debe ser diligenciado"; } return null; }, ) ], )); } else if (item['control_type'] == "multiselect_dropdown" && item['status'] == "Active") { return InkWell( onTap: () { providerData.chooseMultiSelectOptions( context, item["select_master_key"] == "" ? providerData.getSplitValues(item["options"]) : providerData.checkConditionValues(item), (item['label_es'] ?? ""), item['id'].toString()); }, child: Container( key: Key(item['id'].toString()), margin: const EdgeInsets.symmetric(vertical: 10), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ CustomTextTitle( "${item['label_es'] ?? " "}${item['is_require'] == "1" ? " *" : ""}", color: CustomColor.primary, fontSize: 14, maxLines: 10), const SizedBox( height: 5, ), InputDecorator( decoration: InputDecoration( contentPadding: const EdgeInsets.symmetric( horizontal: 12, vertical: 12), border: OutlineInputBorder( borderRadius: BorderRadius.circular(4.0), ), enabledBorder: OutlineInputBorder( borderSide: BorderSide(color: CustomColor.border), borderRadius: BorderRadius.circular(4.0), ), ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ if (providerData.valeData[item['id'].toString()] == null || providerData.valeData[item['id'].toString()].length == 0) CustomTextTitle( "Seleccione", fontSize: FontSizes.s12, fontWeight: FontWeight.w500, ), for (String element in providerData.valeData[item['id'].toString()] ?? []) Container( margin: const EdgeInsets.symmetric(vertical: 3), padding: const EdgeInsets.all(8), decoration: BoxDecoration( color: CustomColor.border.withOpacity(0.5), borderRadius: BorderRadius.circular(4)), width: double.maxFinite, child: CustomTextTitle( providerData.getSelectedItemValue( element, item["select_master_key"] == "" ? providerData .getSplitValues(item["options"]) : providerData.checkConditionValues(item)), fontSize: FontSizes.s14, fontWeight: FontWeight.w500, color: CustomColor.darkTextColor, maxLines: 10, ), ) ], )) ], ), ), ); } else if (item['control_type'] == "datetime" && item['status'] == "Active") { return InkWell( key: Key(item['id'].toString()), splashColor: Colors.transparent, hoverColor: Colors.transparent, onTap: () => providerData.selectDateTime(item['id'].toString(), context), child: Container( margin: const EdgeInsets.symmetric(vertical: 10), color: CustomColor.lightTextColor, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ CustomTextTitle( "${item['label_es'] ?? " "}${item['is_require'] == "1" ? " *" : ""}", color: CustomColor.primary, fontSize: 14, maxLines: 10), const SizedBox( height: 5, ), InputDecorator( decoration: InputDecoration( contentPadding: const EdgeInsets.symmetric( horizontal: 20, vertical: 20), border: OutlineInputBorder( borderRadius: BorderRadius.circular(4.0), ), enabledBorder: OutlineInputBorder( borderSide: BorderSide(color: CustomColor.border), borderRadius: BorderRadius.circular(4.0), ), ), child: CustomTextTitle( providerData.valeData[item['id'].toString()] ?? "18/04/2022 09:30 AM", fontSize: FontSizes.s14, color: providerData.valeData[item['id'].toString()] == null ? CustomColor.textColor : CustomColor.darkTextColor, ), ), ]))); } else if (item['control_type'] == "date" && item['status'] == "Active") { return InkWell( key: Key(item['id'].toString()), splashColor: Colors.transparent, hoverColor: Colors.transparent, onTap: () => providerData.selectDateOnly(item['id'].toString(), context), child: Container( margin: const EdgeInsets.symmetric(vertical: 10), color: CustomColor.lightTextColor, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ CustomTextTitle( "${item['label_es'] ?? " "}${item['is_require'] == "1" ? " *" : ""}", color: CustomColor.primary, fontSize: 14, maxLines: 10), const SizedBox( height: 5, ), InputDecorator( decoration: InputDecoration( contentPadding: const EdgeInsets.symmetric( horizontal: 20, vertical: 20), border: OutlineInputBorder( borderRadius: BorderRadius.circular(4.0), ), enabledBorder: OutlineInputBorder( borderSide: BorderSide(color: CustomColor.border), borderRadius: BorderRadius.circular(4.0), ), ), child: CustomTextTitle( providerData.valeData[item['id'].toString()] ?? "18/04/2022", fontSize: FontSizes.s14, color: providerData.valeData[item['id'].toString()] == null ? CustomColor.textColor : CustomColor.darkTextColor, ), ), ]))); } else if (item['control_type'] == "checkbox" && item['status'] == "Active") { return Container( key: Key(item['id'].toString()), margin: const EdgeInsets.symmetric(vertical: 10), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ CustomTextTitle( "${item['label_es'] ?? " "}${item['is_require'] == "1" ? " *" : ""}", color: CustomColor.primary, fontSize: 14, maxLines: 10), const SizedBox( height: 5, ), InputDecorator( decoration: InputDecoration( contentPadding: const EdgeInsets.symmetric(horizontal: 0, vertical: 10), border: OutlineInputBorder( borderRadius: BorderRadius.circular(4.0), ), enabledBorder: OutlineInputBorder( borderSide: BorderSide(color: CustomColor.border), borderRadius: BorderRadius.circular(4.0), ), ), child: Column( children: [ for (DropDownData options in item["select_master_key"] == "" ? providerData.getSplitValues(item["options"]) : providerData .dropdownValues[item['id'].toString()]!['dataSet']) CheckboxListTile( activeColor: CustomColor.primary, dense: true, value: providerData.valeData[item['id'].toString()] .contains(options.id) ?? false, onChanged: (bool? value) => providerData.setCheckBoxValue( item['id'].toString(), value, options.id), title: CustomTextTitle(options.option_value, fontSize: FontSizes.s16, fontWeight: FontWeight.w400, maxLines: 10), ), ], ), ) ], )); } else if (item['control_type'] == "radio" && item['status'] == "Active") { return Container( key: Key(item['id'].toString()), margin: const EdgeInsets.symmetric(vertical: 10), child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ CustomTextTitle( "${item['label_es'] ?? " "}${item['is_require'] == "1" ? " *" : ""}", color: CustomColor.primary, fontSize: 14, maxLines: 10), const SizedBox( height: 5, ), InputDecorator( decoration: InputDecoration( contentPadding: const EdgeInsets.all(0), border: OutlineInputBorder( borderRadius: BorderRadius.circular(4.0), ), enabledBorder: OutlineInputBorder( borderSide: BorderSide(color: CustomColor.border), borderRadius: BorderRadius.circular(4.0), ), ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Column( mainAxisAlignment: MainAxisAlignment.start, mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ for (DropDownData options in item["select_master_key"] == "" ? providerData.getSplitValues(item["options"]) : providerData.dropdownValues[ item['id'].toString()]!['dataSet']) RadioListTile( dense: true, value: options.id, groupValue: providerData.valeData[item['id'].toString()], activeColor: CustomColor.primary, onChanged: (value) => providerData.setRadioValue( item['id'].toString(), value), title: CustomTextTitle( options.option_value, fontSize: FontSizes.s14, fontWeight: FontWeight.w500, ), ), ], ) ], )) ]), ); } else if (item['control_type'] == "heading" && item['status'] == "Active") { return Container( margin: const EdgeInsets.symmetric(vertical: 10), color: CustomColor.lightTextColor, child: CustomTextTitle( item['label_es'], fontSize: 16, maxLines: 10, ), ); } else if (item['control_type'] == "subform") { return CustomButton( item['label_es'] == "" ? "Test (${jsonDecode(item['form_data']).length})" : item['label_es'] + " (${providerData.getCount(item['id'].toString()) ?? 0})", textColor: CustomColor.lightTextColor, margin: const EdgeInsets.symmetric(vertical: 10), elevation: 0, borderRadius: 6.0, fontSizes: FontSizes.s16, onPressed: () => providerData.openSubForm(context, item), maxLines: 10, ); } else if (item['control_type'] == "signature") { return Container( key: Key(item['id'].toString()), margin: const EdgeInsets.symmetric(vertical: 10), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ CustomTextTitle( "${item['label_es'] ?? " "}${item['is_require'] == "1" ? " *" : ""}", color: CustomColor.primary, fontSize: 14, maxLines: 10), const SizedBox( height: 5, ), InputDecorator( decoration: InputDecoration( contentPadding: const EdgeInsets.only( left: 20, right: 10, top: 7.5, bottom: 5), border: OutlineInputBorder( borderRadius: BorderRadius.circular(4.0), ), enabledBorder: OutlineInputBorder( borderSide: BorderSide(color: CustomColor.border), borderRadius: BorderRadius.circular(4.0), ), ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center, children: [ Expanded( flex: 3, child: (providerData.valeData[ item['id'].toString()] == null || providerData.valeData[ item['id'].toString()] == "processing") ? CustomTextTitle("Firma", fontSize: FontSizes.s14) : Image.memory( providerData.b64toUnit8List(providerData .valeData[item['id'].toString()]), height: 80, ), ), const SizedBox( width: 5, ), Expanded( flex: 2, child: providerData .valeData[item['id'].toString()] == "processing" ? customLoader(radius: 20) : CustomButton( "Dibujar firma", elevation: 0, borderRadius: 4.0, height: 35, fixedHeight: 35, margin: EdgeInsets.zero, fontSizes: FontSizes.s10, onPressed: () => providerData.uploadSignature( context, item['id'].toString()), )) ], ), ])) ], )); } else { return Container(); } } Widget getInformationIcon(Map<String, dynamic> item) { // print("tool_tip - ${item["tool_tip_link"]}--${item["tool_tip"]}"); if ((item["tool_tip"] == null || item["tool_tip"] == "") && (item["tool_tip_link"] == null || item["tool_tip_link"] == "")) { return Container(); } if ((item["tool_tip"] != null && item["tool_tip"] != "") && (item["tool_tip_link"] != null && item["tool_tip_link"] != "")) { return Container( margin: const EdgeInsets.only(top: 20), child: InkWell( child: const Icon( Icons.info_outline, color: Colors.black, ), onTap: () => customAlert( context, okText: "Ok", header: item['label_es'], body: item["tool_tip"], button2: true, openLinkUrl: item["tool_tip_link"], ), ), ); } if ((item["tool_tip"] != null && item["tool_tip"] != "") && (item["tool_tip_link"] == null || item["tool_tip_link"] == "")) { return Container( margin: const EdgeInsets.only(top: 20), child: InkWell( child: const Icon( Icons.info_outline, color: Colors.black, ), onTap: () => customAlert( context, okText: "Ok", header: item['label_es'], body: item["tool_tip"], ), ), ); } if ((item["tool_tip"] == null || item["tool_tip"] == "") && (item["tool_tip_link"] != null && item["tool_tip_link"] != "")) { return Container( margin: const EdgeInsets.only(top: 20), child: InkWell( child: const Icon( Icons.info_outline, color: Colors.black, ), onTap: () => pushModalPage( context, WebViewerPage( url: item["tool_tip_link"], pageHeaderTitle: item['label_es'], ), ), ), ); } return Container(); } }
Editor is loading...
Leave a Comment