initializeForm method
void
initializeForm(
- String componentName,
- FormDefinition formJson,
- Map<
String, dynamic> ? existingData, - DisplayMode mode,
Implementation
void initializeForm(String componentName, FormDefinition formJson,
Map<String, dynamic>? existingData, DisplayMode mode) async {
formDefinitions[componentName] = formJson;
formValidation = formJson.formValidation;
displayMode = mode;
values.clear();
errors.clear();
touched.clear();
fieldsDisabled.clear();
await Future.delayed(Duration(milliseconds: 100));
int startIndex = formJson.startWithIndex ?? 0;
// Handle repeatable sections with existing data
if (formJson.repeatable == true &&
existingData != null &&
formJson.sections != null) {
for (var section in formJson.sections!) {
if (section.fields.isNotEmpty) {
// Get the array path for repeatables
final firstFieldName = section.fields.first.name;
final arrayPath = deriveRepeatableArrayPath(firstFieldName);
if (arrayPath != null) {
// Get the nested value (array) for this section
final result = getNestedValue(existingData, arrayPath);
if (result != null && result is List && result.isNotEmpty) {
// Update startWithIndex based on existing data length
startIndex = result.length - 1;
formJson.startWithIndex = startIndex;
}
}
}
}
}
for (int index = 0; index <= startIndex; index++) {
allFields.addAll(extractFields(formJson, index: index));
}
if (existingData != null) {
values.addAll(flattenObject(existingData));
}
// Set default values & disabled fields
for (var field in allFields) {
await processFieldLogic(field);
}
notifyListeners();
}