fix: inconsistent saving

This commit is contained in:
Jacques Doeleman 2022-11-15 11:20:48 +01:00
parent a1e00e0980
commit ad22c1011c
9 changed files with 51 additions and 29 deletions

View file

@ -12,4 +12,12 @@
## 0.0.7 ## 0.0.7
* Submit all edited fields on submit of one field * 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.

View file

@ -17,7 +17,7 @@ class ExampleProfileService extends ProfileService {
void editProfile( void editProfile(
User user, User user,
String key, String key,
String value, String? value,
) { ) {
debugPrint('Editing key: $key with $value'); debugPrint('Editing key: $key with $value');
} }

View file

@ -41,7 +41,7 @@ class User {
'last_name': lastName, 'last_name': lastName,
'image': image, 'image': image,
'image_url': image, 'image_url': image,
'profile_data': profileData, 'profile_data': profileData?.toMap(),
}; };
} }

View file

@ -19,7 +19,7 @@ abstract class ProfileService {
FutureOr<void> pageBottomAction(); FutureOr<void> pageBottomAction();
FutureOr<void> editProfile(User user, String key, String value); FutureOr<void> editProfile(User user, String key, String? value);
FutureOr<void> uploadImage(BuildContext context); FutureOr<void> uploadImage(BuildContext context);
} }

View file

@ -16,7 +16,7 @@ class ItemBuilder {
final ItemBuilderOptions options; final ItemBuilderOptions options;
Widget build(String key, dynamic value, Widget? widget, Widget build(String key, dynamic value, Widget? widget,
Function(String) updateItem, Function(String) saveItem) { Function(String) updateItem, Function(String?) saveItem) {
if (widget == null) { if (widget == null) {
var controller = TextEditingController( var controller = TextEditingController(
text: '${value ?? ''}', text: '${value ?? ''}',
@ -34,14 +34,10 @@ class ItemBuilder {
decoration: inputDecoration, decoration: inputDecoration,
readOnly: options.readOnly, readOnly: options.readOnly,
onFieldSubmitted: (value) { onFieldSubmitted: (value) {
if (formFieldKey.currentState!.validate()) { updateItem(value);
updateItem(value);
}
}, },
onSaved: (newValue) { onSaved: (newValue) {
if (newValue != null && newValue != value) { saveItem(newValue);
saveItem(newValue);
}
}, },
validator: (value) { validator: (value) {
return options.validators?[key]?.call(value); return options.validators?[key]?.call(value);

View file

@ -22,7 +22,7 @@ class ItemList extends StatefulWidget {
final Map<String, dynamic> items; final Map<String, dynamic> items;
final Map<String, dynamic> typeMap; final Map<String, dynamic> typeMap;
final double spacing; final double spacing;
final Function(String, String) updateProfile; final Function(String, String?) updateProfile;
final Function() saveProfile; final Function() saveProfile;
final ItemBuilder? itemBuilder; final ItemBuilder? itemBuilder;
final ItemBuilderOptions? itemBuilderOptions; final ItemBuilderOptions? itemBuilderOptions;

View file

@ -52,6 +52,7 @@ class _ProfileWrapperState extends State<ProfileWrapper> {
GlobalKey<FormState> formKey = GlobalKey<FormState>(); GlobalKey<FormState> formKey = GlobalKey<FormState>();
Map<String, dynamic> formValues = {}; Map<String, dynamic> formValues = {};
late final Widget child;
@override @override
void initState() { void initState() {
@ -69,8 +70,10 @@ class _ProfileWrapperState extends State<ProfileWrapper> {
submitAllChangedFields(); submitAllChangedFields();
}, },
(v) { (v) {
widget.user.firstName = v; if (widget.user.firstName != v) {
widget.service.editProfile(widget.user, 'first_name', v); widget.user.firstName = v;
widget.service.editProfile(widget.user, 'first_name', v);
}
}, },
), ),
); );
@ -88,8 +91,10 @@ class _ProfileWrapperState extends State<ProfileWrapper> {
submitAllChangedFields(); submitAllChangedFields();
}, },
(v) { (v) {
widget.user.lastName = v; if (widget.user.lastName != v) {
widget.service.editProfile(widget.user, 'last_name', v); widget.user.lastName = v;
widget.service.editProfile(widget.user, 'last_name', v);
}
}, },
), ),
); );
@ -108,8 +113,10 @@ class _ProfileWrapperState extends State<ProfileWrapper> {
submitAllChangedFields(); submitAllChangedFields();
}, },
(v) { (v) {
widget.user.firstName = v; if (widget.user.firstName != v) {
widget.service.editProfile(widget.user, 'first_name', v); widget.user.firstName = v;
widget.service.editProfile(widget.user, 'first_name', v);
}
}, },
), ),
); );
@ -127,8 +134,10 @@ class _ProfileWrapperState extends State<ProfileWrapper> {
submitAllChangedFields(); submitAllChangedFields();
}, },
(v) { (v) {
widget.user.lastName = v; if (widget.user.lastName != v) {
widget.service.editProfile(widget.user, 'last_name', v); widget.user.lastName = v;
widget.service.editProfile(widget.user, 'last_name', v);
}
}, },
), ),
); );
@ -138,10 +147,6 @@ class _ProfileWrapperState extends State<ProfileWrapper> {
), ),
); );
} }
}
@override
Widget build(BuildContext context) {
var items = Column( var items = Column(
children: [ children: [
ItemList( ItemList(
@ -155,7 +160,11 @@ class _ProfileWrapperState extends State<ProfileWrapper> {
), ),
widget.style.betweenDefaultItemPadding, widget.style.betweenDefaultItemPadding,
(key, value) { (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(); submitAllChangedFields();
@ -177,7 +186,11 @@ class _ProfileWrapperState extends State<ProfileWrapper> {
), ),
widget.style.betweenDefaultItemPadding, widget.style.betweenDefaultItemPadding,
(key, value) { (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(); submitAllChangedFields();
@ -188,7 +201,12 @@ class _ProfileWrapperState extends State<ProfileWrapper> {
), ),
], ],
); );
var child = widget.wrapItemsBuilder?.call(context, items) ?? items;
child = widget.wrapItemsBuilder?.call(context, items) ?? items;
}
@override
Widget build(BuildContext context) {
return Material( return Material(
color: Colors.transparent, color: Colors.transparent,
child: Padding( child: Padding(

View file

@ -1,6 +1,6 @@
name: flutter_profile name: flutter_profile
description: Flutter profile package description: Flutter profile package
version: 0.0.9 version: 0.0.11
repository: https://github.com/Iconica-Development/flutter_profile repository: https://github.com/Iconica-Development/flutter_profile
environment: environment:

View file

@ -15,7 +15,7 @@ class TestProfileService extends ProfileService {
void editProfile( void editProfile(
User user, User user,
String key, String key,
String value, String? value,
) {} ) {}
@override @override