mirror of
https://github.com/Iconica-Development/flutter_profile.git
synced 2025-05-19 01:03:45 +02:00
fix: inconsistent saving
This commit is contained in:
parent
a1e00e0980
commit
ad22c1011c
9 changed files with 51 additions and 29 deletions
|
@ -13,3 +13,11 @@
|
||||||
## 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.
|
|
@ -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');
|
||||||
}
|
}
|
||||||
|
|
|
@ -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(),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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) {
|
||||||
|
if (widget.user.firstName != v) {
|
||||||
widget.user.firstName = v;
|
widget.user.firstName = v;
|
||||||
widget.service.editProfile(widget.user, 'first_name', v);
|
widget.service.editProfile(widget.user, 'first_name', v);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
@ -88,8 +91,10 @@ class _ProfileWrapperState extends State<ProfileWrapper> {
|
||||||
submitAllChangedFields();
|
submitAllChangedFields();
|
||||||
},
|
},
|
||||||
(v) {
|
(v) {
|
||||||
|
if (widget.user.lastName != v) {
|
||||||
widget.user.lastName = v;
|
widget.user.lastName = v;
|
||||||
widget.service.editProfile(widget.user, 'last_name', v);
|
widget.service.editProfile(widget.user, 'last_name', v);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
@ -108,8 +113,10 @@ class _ProfileWrapperState extends State<ProfileWrapper> {
|
||||||
submitAllChangedFields();
|
submitAllChangedFields();
|
||||||
},
|
},
|
||||||
(v) {
|
(v) {
|
||||||
|
if (widget.user.firstName != v) {
|
||||||
widget.user.firstName = v;
|
widget.user.firstName = v;
|
||||||
widget.service.editProfile(widget.user, 'first_name', v);
|
widget.service.editProfile(widget.user, 'first_name', v);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
@ -127,8 +134,10 @@ class _ProfileWrapperState extends State<ProfileWrapper> {
|
||||||
submitAllChangedFields();
|
submitAllChangedFields();
|
||||||
},
|
},
|
||||||
(v) {
|
(v) {
|
||||||
|
if (widget.user.lastName != v) {
|
||||||
widget.user.lastName = v;
|
widget.user.lastName = v;
|
||||||
widget.service.editProfile(widget.user, 'last_name', 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) {
|
||||||
|
if (widget.user.toMap()['profile_data'][key] == null) {
|
||||||
widget.service.editProfile(widget.user, key, value);
|
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) {
|
||||||
|
if (widget.user.toMap()['profile_data'][key] == null) {
|
||||||
widget.service.editProfile(widget.user, key, value);
|
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(
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue