save method
Creates or updates the user. Returns true when the dialog can close.
Implementation
Future<bool> save() async {
final List<int> roleTags = <int>[
if (canManageRoles) role.number,
if (canManageRoles && role == TagUser.subAdmin) ...permissions.map((TagUser t) => t.number),
];
if (editing == null) {
return await send(
UServices.user.create(
p: UUserCreateParams(
firstName: firstNameController.text,
lastName: lastNameController.text,
password: passwordController.trimmedLatin(),
email: emailController.trimmedLatin(),
phoneNumber: phoneController.trimmedLatin(),
userName: userNameController.trimmedLatin(),
birthdate: birthdate,
fatherName: fatherNameController.text,
tags: <int>[gender.number, ...roleTags],
),
),
read,
) !=
null;
}
// Tags not picked any more are removed: the other gender, the other roles and the unchecked permissions.
final List<int> removeTags = <int>[
if (gender == TagUser.male) TagUser.female.number else TagUser.male.number,
if (canManageRoles) ...<TagUser>[TagUser.superAdmin, TagUser.subAdmin, TagUser.guest, ...TagUser.permissions].map((TagUser t) => t.number).where((int n) => !roleTags.contains(n)),
];
return await send(
UServices.user.update(
p: UUserUpdateParams(
id: editing!.id,
firstName: firstNameController.text,
lastName: lastNameController.text,
password: passwordController.text,
email: emailController.text.toLatinNumber(),
phoneNumber: phoneController.trimmedLatin(),
userName: userNameController.numString(),
birthdate: birthdate,
fatherName: fatherNameController.text,
addTags: <int>[gender.number, ...roleTags],
removeTags: removeTags,
),
),
read,
) !=
null;
}