Untitled
unknown
plain_text
10 months ago
52 kB
6
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