diff --git a/lib/src/form/src/controller.dart b/lib/src/form/src/controller.dart index dafa833..65d4893 100644 --- a/lib/src/form/src/controller.dart +++ b/lib/src/form/src/controller.dart @@ -96,15 +96,8 @@ class AstromicFormController extends FormController { //S1 - Methods - /// Prepare a hosted value. - void prepareValue(String id, bool isRequired) { - if (!_hostedValues.keys.toList().contains(id)) { - return _hostedValues.addEntries(>[MapEntry(id, (null, isRequired))]); - } - } - /// Get all the hosted values IDs. - Map get allValues => _hostedValues; + Map get allValues => _hostedValues; /// Get the value of a hosted state variable using it's ID. T? getValue(String id) { @@ -120,11 +113,16 @@ class AstromicFormController extends FormController { } /// Set the value of a hosted state variable using it's ID. - void setValue(String id, T data, {bool isRequired = false}) { - prepareValue(id, isRequired); + void setValue(String id, T? data, {bool isRequired = false}) { + if (!_hostedValues.keys.toList().contains(id)) { + return _hostedValues.addEntries(>[MapEntry(id, (null, isRequired))]); + } // - _hostedValues[id] = (data, _hostedValues[id]!.$2); - _hostedValueValidationStreamController.add((id, false)); + else { + bool isReq = _hostedValues[id]!.$2; + _hostedValues[id] = (data, isReq); + _hostedValueValidationStreamController.add((id, false)); + } } /// Remove the value of a hosted state variable using it's ID. diff --git a/lib/src/form/src/form_value_wrapper.dart b/lib/src/form/src/form_value_wrapper.dart index 923094d..1e0d7b2 100644 --- a/lib/src/form/src/form_value_wrapper.dart +++ b/lib/src/form/src/form_value_wrapper.dart @@ -23,7 +23,7 @@ class FormValueWrapper extends StatefulWidget { final AstromicFormController controller; final String id; final bool isRequired; - final Widget Function(T? value, bool isErroredForValidation, void Function(T value) valueSetter, VoidCallback valueClear) builder; + final Widget Function(T? value, bool isErroredForValidation, void Function(T? value) valueSetter, VoidCallback valueClear) builder; //!SECTION // const FormValueWrapper({ @@ -61,7 +61,9 @@ class _FormValueWrapperState extends State> { //s1 --State // //s1 --Controllers & Listeners - widget.controller.prepareValue(widget.id, widget.isRequired); + if (!widget.controller.allValues.keys.contains(widget.id)) { + widget.controller.setValue(widget.id, null, isRequired: widget.isRequired); + } //s1 --Controllers & Listeners // //s1 --Late & Async Initializers @@ -109,8 +111,8 @@ class _FormValueWrapperState extends State> { stream: widget.controller.hostedValueValidationStream, builder: (BuildContext context, AsyncSnapshot<(String, bool)> validationSnapshot) { return widget.builder(widget.controller.getValue(widget.id), - validationSnapshot.hasData && validationSnapshot.data != null && validationSnapshot.data!.$1 == widget.id && validationSnapshot.data!.$2 ? true : false, (T newValue) { - return widget.controller.setValue(widget.id, newValue, isRequired: widget.isRequired); + validationSnapshot.hasData && validationSnapshot.data != null && validationSnapshot.data!.$1 == widget.id && validationSnapshot.data!.$2 ? true : false, (T? newValue) { + return widget.controller.setValue(widget.id, newValue); }, () => widget.controller.removeValue(widget.id)); }); //!SECTION diff --git a/lib/src/presenting/src/widgets/future_presenter.widget.dart b/lib/src/presenting/src/widgets/future_presenter.widget.dart index f3d6d9e..e0ddec8 100644 --- a/lib/src/presenting/src/widgets/future_presenter.widget.dart +++ b/lib/src/presenting/src/widgets/future_presenter.widget.dart @@ -128,7 +128,7 @@ class _AstromicFuturePresenterState extends State> //S1 -- Method to reinitialize or update `_future` with a new instance void _initializeFuture() { - _future = widget.controller.getFuture(widget.id)?.then((result) => result); + _future = widget.controller.getFuture(widget.id)?.then((dynamic result) => result as T?); } //!SECTION