This commit is contained in:
2025-04-08 15:28:18 +02:00
parent a287f4cf85
commit 91feadff64
2 changed files with 154 additions and 155 deletions

View File

@@ -325,10 +325,10 @@ class AstromicFormController extends FormController {
// Initialize the group instances // Initialize the group instances
_initializeGroupControllers(groupStructure, initialCount); _initializeGroupControllers(groupStructure, initialCount);
} }
/// Recursively initialize controllers for the group and its subgroups /// Recursively initialize controllers for the group and its subgroups
void _initializeGroupControllers(FormGroupStructure groupStructure, int initialCount, {String parentPrefix = ''}) { void _initializeGroupControllers(FormGroupStructure groupStructure, int initialCount, {String parentPrefix = ''}) {
// Add main group fields/values // Add main group fields/values
for (int groupIndex = 0; groupIndex < initialCount; groupIndex++) { for (int groupIndex = 0; groupIndex < initialCount; groupIndex++) {
_addGroupControllers(groupStructure, groupIndex, parentPrefix: parentPrefix); _addGroupControllers(groupStructure, groupIndex, parentPrefix: parentPrefix);
@@ -347,10 +347,10 @@ void _initializeGroupControllers(FormGroupStructure groupStructure, int initialC
} }
} }
} }
} }
/// Validate subgroups recursively /// Validate subgroups recursively
void _validateSubGroups(FormGroupStructure groupStructure) { void _validateSubGroups(FormGroupStructure groupStructure) {
groupStructure.subGroups?.forEach((subGroupTuple) { groupStructure.subGroups?.forEach((subGroupTuple) {
final subGroup = subGroupTuple.$1; final subGroup = subGroupTuple.$1;
assert(subGroup.fields.isNotEmpty, '${subGroup.id}: Subgroup fields should NOT be empty.'); assert(subGroup.fields.isNotEmpty, '${subGroup.id}: Subgroup fields should NOT be empty.');
@@ -360,8 +360,7 @@ void _validateSubGroups(FormGroupStructure groupStructure) {
_validateSubGroups(subGroup); _validateSubGroups(subGroup);
} }
}); });
} }
// void initializeFormGroup(FormGroupStructure groupStructure, {int initialCount = 1}) { // void initializeFormGroup(FormGroupStructure groupStructure, {int initialCount = 1}) {
// assert(groupStructure.fields.isNotEmpty, '$groupStructure: Group Fields should NOT be empty.'); // assert(groupStructure.fields.isNotEmpty, '$groupStructure: Group Fields should NOT be empty.');

View File

@@ -1,132 +1,132 @@
//s1 Imports // //s1 Imports
//s2 Packages // //s2 Packages
//s3 Core Packages // //s3 Core Packages
import 'package:flutter/material.dart'; // import 'package:flutter/material.dart';
import '../../../astromic_helpers.dart'; // import '../../../astromic_helpers.dart';
//s3 Internal Packages // //s3 Internal Packages
// import 'package:astromic_elements/astromic_elements.dart'; // // import 'package:astromic_elements/astromic_elements.dart';
//s3 3rd-party Packages // //s3 3rd-party Packages
//s2 Utility // //s2 Utility
//s3 Configs // //s3 Configs
// import '../../../../../core/configs/routing/routing.config.dart'; // // import '../../../../../core/configs/routing/routing.config.dart';
//s3 Misc // //s3 Misc
//s2 Domain // //s2 Domain
//s3 Entities // //s3 Entities
//s3 Usecases // //s3 Usecases
//s2 Presentation // //s2 Presentation
//s3 Design // //s3 Design
// import '../../../../design-system/design_system.dart'; // // import '../../../../design-system/design_system.dart';
//s3 Presenters // //s3 Presenters
//s3 Widgets // //s3 Widgets
//s1 Exports // //s1 Exports
class FormGroupWrapper extends StatefulWidget { // class FormGroupWrapper extends StatefulWidget {
//SECTION - Widget Arguments // //SECTION - Widget Arguments
final AstromicFormController formController; // final AstromicFormController formController;
final String groupID; // final String groupID;
final Widget Function(List<Widget> children, String Function() addItem, void Function(int) removeItem) groupBuilder; // final Widget Function(List<Widget> children, String Function() addItem, void Function(int) removeItem) groupBuilder;
final Widget Function(int index, String composedID, VoidCallback removeItem) itemBuilder; // final Widget Function(int index, String composedID, VoidCallback removeItem) itemBuilder;
final int startLength; // final int startLength;
final bool isSubGroup; // final bool isSubGroup;
//!SECTION // //!SECTION
// // //
const FormGroupWrapper({ // const FormGroupWrapper({
super.key, // super.key,
required this.formController, // required this.formController,
required this.groupID, // required this.groupID,
required this.groupBuilder, // required this.groupBuilder,
required this.itemBuilder, // required this.itemBuilder,
this.isSubGroup = false, // this.isSubGroup = false,
this.startLength = 0, // this.startLength = 0,
}); // });
@override // @override
State<FormGroupWrapper> createState() => _FormGroupWrapperState(); // State<FormGroupWrapper> createState() => _FormGroupWrapperState();
} // }
class _FormGroupWrapperState extends State<FormGroupWrapper> { // class _FormGroupWrapperState extends State<FormGroupWrapper> {
// // //
//SECTION - State Variables // //SECTION - State Variables
//s1 --State // //s1 --State
late List<FormGroupInstance> instances; // late List<FormGroupInstance> instances;
//s1 --State // //s1 --State
// // //
//s1 --Controllers // //s1 --Controllers
//s1 --Controllers // //s1 --Controllers
// // //
//s1 --Constants // //s1 --Constants
//s1 --Constants // //s1 --Constants
//!SECTION // //!SECTION
@override // @override
void initState() { // void initState() {
super.initState(); // super.initState();
// // //
//SECTION - State Variables initializations & Listeners // //SECTION - State Variables initializations & Listeners
//s1 --State // //s1 --State
//s1 --State // //s1 --State
// // //
//s1 --Controllers & Listeners // //s1 --Controllers & Listeners
instances = widget.formController.getFormGroupValue(widget.groupID, isSubGroup: widget.isSubGroup)!.instances; // instances = widget.formController.getFormGroupValue(widget.groupID, isSubGroup: widget.isSubGroup)!.instances;
//s1 --Controllers & Listeners // //s1 --Controllers & Listeners
// // //
//s1 --Late & Async Initializers // //s1 --Late & Async Initializers
//s1 --Late & Async Initializers // //s1 --Late & Async Initializers
//!SECTION // //!SECTION
} // }
//SECTION - Dumb Widgets // //SECTION - Dumb Widgets
//!SECTION // //!SECTION
//SECTION - Stateless functions // //SECTION - Stateless functions
//!SECTION // //!SECTION
//SECTION - Action Callbacks // //SECTION - Action Callbacks
//!SECTION // //!SECTION
@override // @override
Widget build(BuildContext context) { // Widget build(BuildContext context) {
//SECTION - Build Setup // //SECTION - Build Setup
//s1 --Values // //s1 --Values
//double w = MediaQuery.of(context).size.width; // //double w = MediaQuery.of(context).size.width;
//double h = MediaQuery.of(context).size.height; // //double h = MediaQuery.of(context).size.height;
//s1 --Values // //s1 --Values
// // //
//s1 --Contexted Widgets // //s1 --Contexted Widgets
//s1 --Contexted Widgets // //s1 --Contexted Widgets
//!SECTION // //!SECTION
//SECTION - Build Return // //SECTION - Build Return
return widget.groupBuilder( // return widget.groupBuilder(
// Children // // Children
List<Widget>.generate(instances.length, (int i) => widget.itemBuilder(i, instances[i].composedID, () => _removeItem(i))), // List<Widget>.generate(instances.length, (int i) => widget.itemBuilder(i, instances[i].composedID, () => _removeItem(i))),
// Add Callback // // Add Callback
() { // () {
String id = ''; // String id = '';
setState(() { // setState(() {
// id = widget.formController.addInstanceToFormGroup(widget.groupID,isSubGroup: widget.isSubGroup); // // id = widget.formController.addInstanceToFormGroup(widget.groupID,isSubGroup: widget.isSubGroup);
// instances = widget.formController.getFormGroupValue(widget.groupID,isSubGroup: widget.isSubGroup)!.instances; // // instances = widget.formController.getFormGroupValue(widget.groupID,isSubGroup: widget.isSubGroup)!.instances;
}); // });
return id; // return id;
}, // },
// Remove Callback // // Remove Callback
(int i) => _removeItem(i), // (int i) => _removeItem(i),
); // );
//!SECTION // //!SECTION
} // }
void _removeItem(int i) { // void _removeItem(int i) {
setState(() { // setState(() {
// widget.formController.removeInstanceFromFormGroup(widget.groupID, i,isSubGroup: widget.isSubGroup); // // widget.formController.removeInstanceFromFormGroup(widget.groupID, i,isSubGroup: widget.isSubGroup);
// instances = widget.formController.getFormGroupValue(widget.groupID,isSubGroup: widget.isSubGroup)!.instances; // // instances = widget.formController.getFormGroupValue(widget.groupID,isSubGroup: widget.isSubGroup)!.instances;
}); // });
} // }
@override // @override
void dispose() { // void dispose() {
//SECTION - Disposable variables // //SECTION - Disposable variables
//!SECTION // //!SECTION
super.dispose(); // super.dispose();
} // }
} // }