From 1fc8d94def4592aeb52418043f689e044c884e73 Mon Sep 17 00:00:00 2001 From: Goxiaoy Date: Wed, 12 Jul 2023 21:29:27 +0800 Subject: [PATCH] fix panel_dynamic --- lib/ui/elements/panel_dynamic.dart | 6 +++--- .../reactive/reactive_nested_group_array.dart | 20 ++++++++++++++++--- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/lib/ui/elements/panel_dynamic.dart b/lib/ui/elements/panel_dynamic.dart index 6de47c96..164b70d7 100644 --- a/lib/ui/elements/panel_dynamic.dart +++ b/lib/ui/elements/panel_dynamic.dart @@ -6,7 +6,6 @@ import 'package:flutter_survey_js/ui/survey_configuration.dart'; import 'package:flutter_survey_js_model/flutter_survey_js_model.dart' as s; import 'package:reactive_forms/reactive_forms.dart'; - Widget panelDynamicBuilder(BuildContext context, s.Elementbase element, {ElementConfiguration? configuration}) { return PanelDynamicElement( @@ -25,12 +24,13 @@ class PanelDynamicElement extends StatelessWidget { @override Widget build(BuildContext context) { - createNew() { + createNew({Object? value}) { //create new formGroup return elementsToFormGroup( context, (element.templateElements?.map((p0) => p0.realElement).toList() ?? []) - .toList()); + .toList(), + value: value); } return ReactiveNestedGroupArray( diff --git a/lib/ui/reactive/reactive_nested_group_array.dart b/lib/ui/reactive/reactive_nested_group_array.dart index 10e7bd87..298617c2 100644 --- a/lib/ui/reactive/reactive_nested_group_array.dart +++ b/lib/ui/reactive/reactive_nested_group_array.dart @@ -12,7 +12,7 @@ class ReactiveNestedGroupArray extends StatelessWidget { final FormArray? formArray; final Widget? child; final ReactiveNestedGroupArrayBuilder builder; - final AbstractControl Function()? createNew; + final FormGroup Function({Object? value}) createNew; final int minLength; final int? maxLength; @@ -23,7 +23,7 @@ class ReactiveNestedGroupArray extends StatelessWidget { this.formArray, this.child, required this.builder, - this.createNew, + required this.createNew, this.minLength = 0, this.maxLength, }) : assert(minLength >= 0), @@ -48,7 +48,21 @@ class ReactiveNestedGroupArray extends StatelessWidget { child: child, builder: (context, formArray, child) { while (formArray.controls.length < minLength) { - formArray.add(createNew!()); + formArray.add(createNew()); + } + final formGroups = []; + bool modified = false; + for (final c in formArray.controls) { + if (c is FormGroup) { + formGroups.add(c); + } else { + formGroups.add(createNew(value: c.value)); + modified = true; + } + } + if (modified) { + formArray.clear(); + formArray.addAll(formGroups); } final controls = formArray.controls.cast().toList(); return Column(children: [