diff --git a/CHANGELOG.md b/CHANGELOG.md index dd90266..4b986b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,4 +12,12 @@ ## 0.0.7 -* Submit all edited fields on submit of one field \ No newline at end of file +* Submit all edited fields on submit of one field + +## 0.0.10 + +* Fixed bug where keyboard would close on selecting custom input fields. + +## 0.0.11 + +* Fixed bug where some field wouldn't update when submitted. \ No newline at end of file diff --git a/example/lib/utils/example_profile_service.dart b/example/lib/utils/example_profile_service.dart index 48a3de1..4a74b7d 100644 --- a/example/lib/utils/example_profile_service.dart +++ b/example/lib/utils/example_profile_service.dart @@ -17,7 +17,7 @@ class ExampleProfileService extends ProfileService { void editProfile( User user, String key, - String value, + String? value, ) { debugPrint('Editing key: $key with $value'); } diff --git a/lib/src/models/user.dart b/lib/src/models/user.dart index 21e7e2e..45c54ec 100644 --- a/lib/src/models/user.dart +++ b/lib/src/models/user.dart @@ -41,7 +41,7 @@ class User { 'last_name': lastName, 'image': image, 'image_url': image, - 'profile_data': profileData, + 'profile_data': profileData?.toMap(), }; } diff --git a/lib/src/services/profile_service.dart b/lib/src/services/profile_service.dart index 806daec..54ed581 100644 --- a/lib/src/services/profile_service.dart +++ b/lib/src/services/profile_service.dart @@ -19,7 +19,7 @@ abstract class ProfileService { FutureOr pageBottomAction(); - FutureOr editProfile(User user, String key, String value); + FutureOr editProfile(User user, String key, String? value); FutureOr uploadImage(BuildContext context); } diff --git a/lib/src/widgets/item_builder/item_builder.dart b/lib/src/widgets/item_builder/item_builder.dart index c76c740..1c09328 100644 --- a/lib/src/widgets/item_builder/item_builder.dart +++ b/lib/src/widgets/item_builder/item_builder.dart @@ -16,7 +16,7 @@ class ItemBuilder { final ItemBuilderOptions options; Widget build(String key, dynamic value, Widget? widget, - Function(String) updateItem, Function(String) saveItem) { + Function(String) updateItem, Function(String?) saveItem) { if (widget == null) { var controller = TextEditingController( text: '${value ?? ''}', @@ -34,14 +34,10 @@ class ItemBuilder { decoration: inputDecoration, readOnly: options.readOnly, onFieldSubmitted: (value) { - if (formFieldKey.currentState!.validate()) { - updateItem(value); - } + updateItem(value); }, onSaved: (newValue) { - if (newValue != null && newValue != value) { - saveItem(newValue); - } + saveItem(newValue); }, validator: (value) { return options.validators?[key]?.call(value); diff --git a/lib/src/widgets/item_builder/item_list.dart b/lib/src/widgets/item_builder/item_list.dart index 7d174ce..f219475 100644 --- a/lib/src/widgets/item_builder/item_list.dart +++ b/lib/src/widgets/item_builder/item_list.dart @@ -22,7 +22,7 @@ class ItemList extends StatefulWidget { final Map items; final Map typeMap; final double spacing; - final Function(String, String) updateProfile; + final Function(String, String?) updateProfile; final Function() saveProfile; final ItemBuilder? itemBuilder; final ItemBuilderOptions? itemBuilderOptions; diff --git a/lib/src/widgets/profile/profile_wrapper.dart b/lib/src/widgets/profile/profile_wrapper.dart index faf9d90..53c5eea 100644 --- a/lib/src/widgets/profile/profile_wrapper.dart +++ b/lib/src/widgets/profile/profile_wrapper.dart @@ -52,6 +52,7 @@ class _ProfileWrapperState extends State { GlobalKey formKey = GlobalKey(); Map formValues = {}; + late final Widget child; @override void initState() { @@ -69,8 +70,10 @@ class _ProfileWrapperState extends State { submitAllChangedFields(); }, (v) { - widget.user.firstName = v; - widget.service.editProfile(widget.user, 'first_name', v); + if (widget.user.firstName != v) { + widget.user.firstName = v; + widget.service.editProfile(widget.user, 'first_name', v); + } }, ), ); @@ -88,8 +91,10 @@ class _ProfileWrapperState extends State { submitAllChangedFields(); }, (v) { - widget.user.lastName = v; - widget.service.editProfile(widget.user, 'last_name', v); + if (widget.user.lastName != v) { + widget.user.lastName = v; + widget.service.editProfile(widget.user, 'last_name', v); + } }, ), ); @@ -108,8 +113,10 @@ class _ProfileWrapperState extends State { submitAllChangedFields(); }, (v) { - widget.user.firstName = v; - widget.service.editProfile(widget.user, 'first_name', v); + if (widget.user.firstName != v) { + widget.user.firstName = v; + widget.service.editProfile(widget.user, 'first_name', v); + } }, ), ); @@ -127,8 +134,10 @@ class _ProfileWrapperState extends State { submitAllChangedFields(); }, (v) { - widget.user.lastName = v; - widget.service.editProfile(widget.user, 'last_name', v); + if (widget.user.lastName != v) { + widget.user.lastName = v; + widget.service.editProfile(widget.user, 'last_name', v); + } }, ), ); @@ -138,10 +147,6 @@ class _ProfileWrapperState extends State { ), ); } - } - - @override - Widget build(BuildContext context) { var items = Column( children: [ ItemList( @@ -155,7 +160,11 @@ class _ProfileWrapperState extends State { ), widget.style.betweenDefaultItemPadding, (key, value) { - widget.service.editProfile(widget.user, key, value); + if (widget.user.toMap()['profile_data'][key] == null) { + widget.service.editProfile(widget.user, key, value); + } else if (widget.user.toMap()['profile_data'][key] != value) { + widget.service.editProfile(widget.user, key, value); + } }, () { submitAllChangedFields(); @@ -177,7 +186,11 @@ class _ProfileWrapperState extends State { ), widget.style.betweenDefaultItemPadding, (key, value) { - widget.service.editProfile(widget.user, key, value); + if (widget.user.toMap()['profile_data'][key] == null) { + widget.service.editProfile(widget.user, key, value); + } else if (widget.user.toMap()['profile_data'][key] != value) { + widget.service.editProfile(widget.user, key, value); + } }, () { submitAllChangedFields(); @@ -188,7 +201,12 @@ class _ProfileWrapperState extends State { ), ], ); - var child = widget.wrapItemsBuilder?.call(context, items) ?? items; + + child = widget.wrapItemsBuilder?.call(context, items) ?? items; + } + + @override + Widget build(BuildContext context) { return Material( color: Colors.transparent, child: Padding( diff --git a/pubspec.yaml b/pubspec.yaml index 6ddf4a2..257d3ac 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: flutter_profile description: Flutter profile package -version: 0.0.9 +version: 0.0.11 repository: https://github.com/Iconica-Development/flutter_profile environment: diff --git a/test/test_classes/test_profile_service.dart b/test/test_classes/test_profile_service.dart index d6a6ddf..41ee19a 100644 --- a/test/test_classes/test_profile_service.dart +++ b/test/test_classes/test_profile_service.dart @@ -15,7 +15,7 @@ class TestProfileService extends ProfileService { void editProfile( User user, String key, - String value, + String? value, ) {} @override