From 4efb171e6f2eef60544905bc489596fbace53f26 Mon Sep 17 00:00:00 2001 From: Petr Nymsa Date: Sun, 24 Mar 2024 11:39:54 +0100 Subject: [PATCH] Fix examples --- .gitignore | 1 + glade_forms/lib/src/core/glade_input.dart | 8 ++- .../src/widgets/glade_model_debug_info.dart | 4 +- .../complex_object_mapping_example.dart | 71 ++++++++++++------- .../one_checkbox_deps_validation.dart | 5 +- .../lib/usecases/two_way_checkbox_change.dart | 2 - 6 files changed, 56 insertions(+), 35 deletions(-) diff --git a/.gitignore b/.gitignore index d7e8082..876c051 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ melos_my_project.iml .vscode/* !.vscode/tasks.json +!.vscode/launch.json !.vscode/settings.json .packages diff --git a/glade_forms/lib/src/core/glade_input.dart b/glade_forms/lib/src/core/glade_input.dart index d7c216c..5e0297b 100644 --- a/glade_forms/lib/src/core/glade_input.dart +++ b/glade_forms/lib/src/core/glade_input.dart @@ -126,7 +126,13 @@ class GladeInput extends ChangeNotifier { return value == initialValue; } - set value(T value) => _setValue(value, shouldTriggerOnChange: true); + set value(T value) { + if (_useTextEditingController) { + _syncValueWithController(value, shouldTriggerOnChange: true); + } else { + _setValue(value, shouldTriggerOnChange: true); + } + } // ignore: avoid_setters_without_getters, ok for internal use set _conversionError(ConvertError value) { diff --git a/glade_forms/lib/src/widgets/glade_model_debug_info.dart b/glade_forms/lib/src/widgets/glade_model_debug_info.dart index 68cadc0..978f385 100644 --- a/glade_forms/lib/src/widgets/glade_model_debug_info.dart +++ b/glade_forms/lib/src/widgets/glade_model_debug_info.dart @@ -24,8 +24,8 @@ class GladeModelDebugInfo extends StatelessWidget { this.showIsValid = true, this.showValidationError = true, this.showConversionError = true, - this.showValue = false, - this.showInitialValue = false, + this.showValue = true, + this.showInitialValue = true, this.showControllerText = false, this.hiddenKeys = const [], this.scrollable = true, diff --git a/storybook/lib/usecases/complex_object_mapping_example.dart b/storybook/lib/usecases/complex_object_mapping_example.dart index fbd8e07..32c88de 100644 --- a/storybook/lib/usecases/complex_object_mapping_example.dart +++ b/storybook/lib/usecases/complex_object_mapping_example.dart @@ -52,6 +52,7 @@ class _Model extends GladeModel { }, converterBack: (input) => input.join(','), ), + useTextEditingController: true, ); super.initialize(); @@ -75,39 +76,57 @@ class ComplexObjectMappingExample extends StatelessWidget { child: Row( children: [ Expanded( - child: Column( - children: [ - TextFormField( - decoration: const InputDecoration(labelText: 'Characters stats'), - controller: model.availableStats.controller, - validator: model.availableStats.textFormFieldInputValidator, - ), - DropdownButton( - items: model.availableItems - .map( - (e) => DropdownMenuItem( - value: e.id, - child: Text(e.name), + child: Padding( + padding: const EdgeInsets.all(8), + child: Column( + children: [ + TextFormField( + decoration: const InputDecoration(labelText: 'Characters stats'), + controller: model.availableStats.controller, + validator: model.availableStats.textFormFieldInputValidator, + ), + Row( + children: [ + const Text('Character item'), + const SizedBox(width: 30), + DropdownButton( + items: model.availableItems + .map( + (e) => DropdownMenuItem( + value: e.id, + child: Text(e.name), + ), + ) + .toList(), + value: model.selectedItem.value?.id, + onChanged: (v) => model.updateInput( + model.selectedItem, + // ignore: avoid-unsafe-collection-methods, ok here. + model.availableItems.firstWhere((element) => element.id == v), ), - ) - .toList(), - value: model.selectedItem.value?.id, - onChanged: (v) => model.updateInput( - model.selectedItem, - // ignore: avoid-unsafe-collection-methods, ok here. - model.availableItems.firstWhere((element) => element.id == v), + ), + ], ), - ), - ], + ], + ), ), ), Expanded( child: Column( children: [ - const Text('Character stats'), - ...model.availableStats.value.map((e) => Text(e.toString())), - const Text('Selected item'), - Text(model.selectedItem.value?.name ?? ''), + Text( + 'Character stats', + style: Theme.of(context).textTheme.bodyLarge?.copyWith(decoration: TextDecoration.underline), + ), + if (model.availableStats.value.isEmpty) + const Text('No stats') + else + ...model.availableStats.value.map((e) => Text(e.toString())), + Text( + 'Selected item', + style: Theme.of(context).textTheme.bodyLarge?.copyWith(decoration: TextDecoration.underline), + ), + Text(model.selectedItem.value?.name ?? 'No item selected'), ], ), ), diff --git a/storybook/lib/usecases/one_checkbox_deps_validation.dart b/storybook/lib/usecases/one_checkbox_deps_validation.dart index 0c49abc..506989c 100644 --- a/storybook/lib/usecases/one_checkbox_deps_validation.dart +++ b/storybook/lib/usecases/one_checkbox_deps_validation.dart @@ -31,9 +31,7 @@ class AgeRestrictedModel extends GladeModel { ..notNull() ..satisfy( (value, extra, dependencies) { - final vipContentInput = dependencies.byKey('vip-input'); - - if (!vipContentInput.value) { + if (!vipInput.value) { return true; } @@ -44,7 +42,6 @@ class AgeRestrictedModel extends GladeModel { )) .build(), value: 0, - dependencies: () => [vipInput], valueConverter: GladeTypeConverters.intConverter, inputKey: 'age-input', translateError: (error, key, devMessage, dependencies) { diff --git a/storybook/lib/usecases/two_way_checkbox_change.dart b/storybook/lib/usecases/two_way_checkbox_change.dart index 2dc01fa..227c056 100644 --- a/storybook/lib/usecases/two_way_checkbox_change.dart +++ b/storybook/lib/usecases/two_way_checkbox_change.dart @@ -122,8 +122,6 @@ If *age* is changed to value under 18, *vip content* is unchecked and vice-versa ), ), const GladeModelDebugInfo( - showValue: true, - showInitialValue: true, showControllerText: true, ), ],