dep
This commit is contained in:
@@ -383,15 +383,14 @@
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import '../../../core/providers/dynamic_theme_provider.dart';
|
||||
import '../fields/base_field.dart';
|
||||
import '../fields/dependent_dropdown_field.dart';
|
||||
import '../../../shared/widgets/buttons/modern_button.dart';
|
||||
import '../../../core/constants/ui_constants.dart';
|
||||
import 'dart:convert';
|
||||
|
||||
/// Reusable form component that dynamically renders fields based on field definitions
|
||||
/// This allows UI to be independent of field types and enables reusability
|
||||
@@ -419,12 +418,14 @@ class _EntityFormState extends State<EntityForm> {
|
||||
final _formKey = GlobalKey<FormState>();
|
||||
final Map<String, TextEditingController> _controllers = {};
|
||||
final Map<String, BaseField> _fieldByKey = {};
|
||||
final Map<String, List<DependentDropdownField>> _dependentFields = {};
|
||||
late final Map<String, dynamic> _initialData;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_initializeControllers();
|
||||
_setupDependentFields();
|
||||
}
|
||||
|
||||
void _initializeControllers() {
|
||||
@@ -452,6 +453,37 @@ class _EntityFormState extends State<EntityForm> {
|
||||
}
|
||||
}
|
||||
|
||||
void _setupDependentFields() {
|
||||
// Group dependent dropdown fields by their dependent field key
|
||||
for (final field in widget.fields) {
|
||||
if (field is DependentDropdownField) {
|
||||
final dependentFieldKey = field.dependentFieldKey;
|
||||
if (!_dependentFields.containsKey(dependentFieldKey)) {
|
||||
_dependentFields[dependentFieldKey] = [];
|
||||
}
|
||||
_dependentFields[dependentFieldKey]!.add(field);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void _handleFieldChange(String fieldKey) {
|
||||
setState(() {});
|
||||
|
||||
// Check if this field has dependent dropdowns
|
||||
if (_dependentFields.containsKey(fieldKey)) {
|
||||
final dependentFields = _dependentFields[fieldKey]!;
|
||||
final fieldValue = _controllers[fieldKey]?.text ?? '';
|
||||
|
||||
// Clear dependent dropdown values when parent field changes
|
||||
for (final dependentField in dependentFields) {
|
||||
_controllers[dependentField.fieldKey]?.clear();
|
||||
}
|
||||
|
||||
// Trigger rebuild to update dependent dropdowns
|
||||
setState(() {});
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
for (final controller in _controllers.values) {
|
||||
@@ -482,7 +514,7 @@ class _EntityFormState extends State<EntityForm> {
|
||||
child: field.buildField(
|
||||
controller: _controllers[field.fieldKey]!,
|
||||
colorScheme: colorScheme,
|
||||
onChanged: () => setState(() {}),
|
||||
onChanged: () => _handleFieldChange(field.fieldKey),
|
||||
),
|
||||
)),
|
||||
|
||||
|
||||
Reference in New Issue
Block a user