279 lines
9.9 KiB
Dart
279 lines
9.9 KiB
Dart
// GENERATED CODE - DO NOT MODIFY BY HAND
|
|
|
|
// **************************************************************************
|
|
// StackedFormGenerator
|
|
// **************************************************************************
|
|
|
|
// ignore_for_file: public_member_api_docs, constant_identifier_names, non_constant_identifier_names,unnecessary_this
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:stacked/stacked.dart';
|
|
import 'package:yimaru_app/ui/common/validators/form_validator.dart';
|
|
|
|
const bool _autoTextFieldValidation = true;
|
|
|
|
const String EmailValueKey = 'email';
|
|
const String PhoneNumberValueKey = 'phoneNumber';
|
|
const String LastNameValueKey = 'lastName';
|
|
const String FirstNameValueKey = 'firstName';
|
|
|
|
final Map<String, TextEditingController>
|
|
_ProfileDetailViewTextEditingControllers = {};
|
|
|
|
final Map<String, FocusNode> _ProfileDetailViewFocusNodes = {};
|
|
|
|
final Map<String, String? Function(String?)?>
|
|
_ProfileDetailViewTextValidations = {
|
|
EmailValueKey: FormValidator.validateForm,
|
|
PhoneNumberValueKey: FormValidator.validatePhoneNumber,
|
|
LastNameValueKey: FormValidator.validateForm,
|
|
FirstNameValueKey: FormValidator.validateForm,
|
|
};
|
|
|
|
mixin $ProfileDetailView {
|
|
TextEditingController get emailController =>
|
|
_getFormTextEditingController(EmailValueKey);
|
|
TextEditingController get phoneNumberController =>
|
|
_getFormTextEditingController(PhoneNumberValueKey);
|
|
TextEditingController get lastNameController =>
|
|
_getFormTextEditingController(LastNameValueKey);
|
|
TextEditingController get firstNameController =>
|
|
_getFormTextEditingController(FirstNameValueKey);
|
|
|
|
FocusNode get emailFocusNode => _getFormFocusNode(EmailValueKey);
|
|
FocusNode get phoneNumberFocusNode => _getFormFocusNode(PhoneNumberValueKey);
|
|
FocusNode get lastNameFocusNode => _getFormFocusNode(LastNameValueKey);
|
|
FocusNode get firstNameFocusNode => _getFormFocusNode(FirstNameValueKey);
|
|
|
|
TextEditingController _getFormTextEditingController(
|
|
String key, {
|
|
String? initialValue,
|
|
}) {
|
|
if (_ProfileDetailViewTextEditingControllers.containsKey(key)) {
|
|
return _ProfileDetailViewTextEditingControllers[key]!;
|
|
}
|
|
|
|
_ProfileDetailViewTextEditingControllers[key] =
|
|
TextEditingController(text: initialValue);
|
|
return _ProfileDetailViewTextEditingControllers[key]!;
|
|
}
|
|
|
|
FocusNode _getFormFocusNode(String key) {
|
|
if (_ProfileDetailViewFocusNodes.containsKey(key)) {
|
|
return _ProfileDetailViewFocusNodes[key]!;
|
|
}
|
|
_ProfileDetailViewFocusNodes[key] = FocusNode();
|
|
return _ProfileDetailViewFocusNodes[key]!;
|
|
}
|
|
|
|
/// Registers a listener on every generated controller that calls [model.setData()]
|
|
/// with the latest textController values
|
|
void syncFormWithViewModel(FormStateHelper model) {
|
|
emailController.addListener(() => _updateFormData(model));
|
|
phoneNumberController.addListener(() => _updateFormData(model));
|
|
lastNameController.addListener(() => _updateFormData(model));
|
|
firstNameController.addListener(() => _updateFormData(model));
|
|
|
|
_updateFormData(model, forceValidate: _autoTextFieldValidation);
|
|
}
|
|
|
|
/// Registers a listener on every generated controller that calls [model.setData()]
|
|
/// with the latest textController values
|
|
@Deprecated(
|
|
'Use syncFormWithViewModel instead.'
|
|
'This feature was deprecated after 3.1.0.',
|
|
)
|
|
void listenToFormUpdated(FormViewModel model) {
|
|
emailController.addListener(() => _updateFormData(model));
|
|
phoneNumberController.addListener(() => _updateFormData(model));
|
|
lastNameController.addListener(() => _updateFormData(model));
|
|
firstNameController.addListener(() => _updateFormData(model));
|
|
|
|
_updateFormData(model, forceValidate: _autoTextFieldValidation);
|
|
}
|
|
|
|
/// Updates the formData on the FormViewModel
|
|
void _updateFormData(FormStateHelper model, {bool forceValidate = false}) {
|
|
model.setData(
|
|
model.formValueMap
|
|
..addAll({
|
|
EmailValueKey: emailController.text,
|
|
PhoneNumberValueKey: phoneNumberController.text,
|
|
LastNameValueKey: lastNameController.text,
|
|
FirstNameValueKey: firstNameController.text,
|
|
}),
|
|
);
|
|
|
|
if (_autoTextFieldValidation || forceValidate) {
|
|
updateValidationData(model);
|
|
}
|
|
}
|
|
|
|
bool validateFormFields(FormViewModel model) {
|
|
_updateFormData(model, forceValidate: true);
|
|
return model.isFormValid;
|
|
}
|
|
|
|
/// Calls dispose on all the generated controllers and focus nodes
|
|
void disposeForm() {
|
|
// The dispose function for a TextEditingController sets all listeners to null
|
|
|
|
for (var controller in _ProfileDetailViewTextEditingControllers.values) {
|
|
controller.dispose();
|
|
}
|
|
for (var focusNode in _ProfileDetailViewFocusNodes.values) {
|
|
focusNode.dispose();
|
|
}
|
|
|
|
_ProfileDetailViewTextEditingControllers.clear();
|
|
_ProfileDetailViewFocusNodes.clear();
|
|
}
|
|
}
|
|
|
|
extension ValueProperties on FormStateHelper {
|
|
bool get hasAnyValidationMessage => this
|
|
.fieldsValidationMessages
|
|
.values
|
|
.any((validation) => validation != null);
|
|
|
|
bool get isFormValid {
|
|
if (!_autoTextFieldValidation) this.validateForm();
|
|
|
|
return !hasAnyValidationMessage;
|
|
}
|
|
|
|
String? get emailValue => this.formValueMap[EmailValueKey] as String?;
|
|
String? get phoneNumberValue =>
|
|
this.formValueMap[PhoneNumberValueKey] as String?;
|
|
String? get lastNameValue => this.formValueMap[LastNameValueKey] as String?;
|
|
String? get firstNameValue => this.formValueMap[FirstNameValueKey] as String?;
|
|
|
|
set emailValue(String? value) {
|
|
this.setData(
|
|
this.formValueMap..addAll({EmailValueKey: value}),
|
|
);
|
|
|
|
if (_ProfileDetailViewTextEditingControllers.containsKey(EmailValueKey)) {
|
|
_ProfileDetailViewTextEditingControllers[EmailValueKey]?.text =
|
|
value ?? '';
|
|
}
|
|
}
|
|
|
|
set phoneNumberValue(String? value) {
|
|
this.setData(
|
|
this.formValueMap..addAll({PhoneNumberValueKey: value}),
|
|
);
|
|
|
|
if (_ProfileDetailViewTextEditingControllers.containsKey(
|
|
PhoneNumberValueKey)) {
|
|
_ProfileDetailViewTextEditingControllers[PhoneNumberValueKey]?.text =
|
|
value ?? '';
|
|
}
|
|
}
|
|
|
|
set lastNameValue(String? value) {
|
|
this.setData(
|
|
this.formValueMap..addAll({LastNameValueKey: value}),
|
|
);
|
|
|
|
if (_ProfileDetailViewTextEditingControllers.containsKey(
|
|
LastNameValueKey)) {
|
|
_ProfileDetailViewTextEditingControllers[LastNameValueKey]?.text =
|
|
value ?? '';
|
|
}
|
|
}
|
|
|
|
set firstNameValue(String? value) {
|
|
this.setData(
|
|
this.formValueMap..addAll({FirstNameValueKey: value}),
|
|
);
|
|
|
|
if (_ProfileDetailViewTextEditingControllers.containsKey(
|
|
FirstNameValueKey)) {
|
|
_ProfileDetailViewTextEditingControllers[FirstNameValueKey]?.text =
|
|
value ?? '';
|
|
}
|
|
}
|
|
|
|
bool get hasEmail =>
|
|
this.formValueMap.containsKey(EmailValueKey) &&
|
|
(emailValue?.isNotEmpty ?? false);
|
|
bool get hasPhoneNumber =>
|
|
this.formValueMap.containsKey(PhoneNumberValueKey) &&
|
|
(phoneNumberValue?.isNotEmpty ?? false);
|
|
bool get hasLastName =>
|
|
this.formValueMap.containsKey(LastNameValueKey) &&
|
|
(lastNameValue?.isNotEmpty ?? false);
|
|
bool get hasFirstName =>
|
|
this.formValueMap.containsKey(FirstNameValueKey) &&
|
|
(firstNameValue?.isNotEmpty ?? false);
|
|
|
|
bool get hasEmailValidationMessage =>
|
|
this.fieldsValidationMessages[EmailValueKey]?.isNotEmpty ?? false;
|
|
bool get hasPhoneNumberValidationMessage =>
|
|
this.fieldsValidationMessages[PhoneNumberValueKey]?.isNotEmpty ?? false;
|
|
bool get hasLastNameValidationMessage =>
|
|
this.fieldsValidationMessages[LastNameValueKey]?.isNotEmpty ?? false;
|
|
bool get hasFirstNameValidationMessage =>
|
|
this.fieldsValidationMessages[FirstNameValueKey]?.isNotEmpty ?? false;
|
|
|
|
String? get emailValidationMessage =>
|
|
this.fieldsValidationMessages[EmailValueKey];
|
|
String? get phoneNumberValidationMessage =>
|
|
this.fieldsValidationMessages[PhoneNumberValueKey];
|
|
String? get lastNameValidationMessage =>
|
|
this.fieldsValidationMessages[LastNameValueKey];
|
|
String? get firstNameValidationMessage =>
|
|
this.fieldsValidationMessages[FirstNameValueKey];
|
|
}
|
|
|
|
extension Methods on FormStateHelper {
|
|
setEmailValidationMessage(String? validationMessage) =>
|
|
this.fieldsValidationMessages[EmailValueKey] = validationMessage;
|
|
setPhoneNumberValidationMessage(String? validationMessage) =>
|
|
this.fieldsValidationMessages[PhoneNumberValueKey] = validationMessage;
|
|
setLastNameValidationMessage(String? validationMessage) =>
|
|
this.fieldsValidationMessages[LastNameValueKey] = validationMessage;
|
|
setFirstNameValidationMessage(String? validationMessage) =>
|
|
this.fieldsValidationMessages[FirstNameValueKey] = validationMessage;
|
|
|
|
/// Clears text input fields on the Form
|
|
void clearForm() {
|
|
emailValue = '';
|
|
phoneNumberValue = '';
|
|
lastNameValue = '';
|
|
firstNameValue = '';
|
|
}
|
|
|
|
/// Validates text input fields on the Form
|
|
void validateForm() {
|
|
this.setValidationMessages({
|
|
EmailValueKey: getValidationMessage(EmailValueKey),
|
|
PhoneNumberValueKey: getValidationMessage(PhoneNumberValueKey),
|
|
LastNameValueKey: getValidationMessage(LastNameValueKey),
|
|
FirstNameValueKey: getValidationMessage(FirstNameValueKey),
|
|
});
|
|
}
|
|
}
|
|
|
|
/// Returns the validation message for the given key
|
|
String? getValidationMessage(String key) {
|
|
final validatorForKey = _ProfileDetailViewTextValidations[key];
|
|
if (validatorForKey == null) return null;
|
|
|
|
String? validationMessageForKey = validatorForKey(
|
|
_ProfileDetailViewTextEditingControllers[key]!.text,
|
|
);
|
|
|
|
return validationMessageForKey;
|
|
}
|
|
|
|
/// Updates the fieldsValidationMessages on the FormViewModel
|
|
void updateValidationData(FormStateHelper model) =>
|
|
model.setValidationMessages({
|
|
EmailValueKey: getValidationMessage(EmailValueKey),
|
|
PhoneNumberValueKey: getValidationMessage(PhoneNumberValueKey),
|
|
LastNameValueKey: getValidationMessage(LastNameValueKey),
|
|
FirstNameValueKey: getValidationMessage(FirstNameValueKey),
|
|
});
|