270 lines
9.4 KiB
Dart
270 lines
9.4 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 OtpValueKey = 'otp';
|
|
const String EmailValueKey = 'email';
|
|
const String PasswordValueKey = 'password';
|
|
const String PhoneNumberValueKey = 'phoneNumber';
|
|
|
|
final Map<String, TextEditingController> _LoginViewTextEditingControllers = {};
|
|
|
|
final Map<String, FocusNode> _LoginViewFocusNodes = {};
|
|
|
|
final Map<String, String? Function(String?)?> _LoginViewTextValidations = {
|
|
OtpValueKey: FormValidator.validateForm,
|
|
EmailValueKey: FormValidator.validateEmailForm,
|
|
PasswordValueKey: FormValidator.validateForm,
|
|
PhoneNumberValueKey: FormValidator.validateForm,
|
|
};
|
|
|
|
mixin $LoginView {
|
|
TextEditingController get otpController =>
|
|
_getFormTextEditingController(OtpValueKey);
|
|
TextEditingController get emailController =>
|
|
_getFormTextEditingController(EmailValueKey);
|
|
TextEditingController get passwordController =>
|
|
_getFormTextEditingController(PasswordValueKey);
|
|
TextEditingController get phoneNumberController =>
|
|
_getFormTextEditingController(PhoneNumberValueKey);
|
|
|
|
FocusNode get otpFocusNode => _getFormFocusNode(OtpValueKey);
|
|
FocusNode get emailFocusNode => _getFormFocusNode(EmailValueKey);
|
|
FocusNode get passwordFocusNode => _getFormFocusNode(PasswordValueKey);
|
|
FocusNode get phoneNumberFocusNode => _getFormFocusNode(PhoneNumberValueKey);
|
|
|
|
TextEditingController _getFormTextEditingController(
|
|
String key, {
|
|
String? initialValue,
|
|
}) {
|
|
if (_LoginViewTextEditingControllers.containsKey(key)) {
|
|
return _LoginViewTextEditingControllers[key]!;
|
|
}
|
|
|
|
_LoginViewTextEditingControllers[key] =
|
|
TextEditingController(text: initialValue);
|
|
return _LoginViewTextEditingControllers[key]!;
|
|
}
|
|
|
|
FocusNode _getFormFocusNode(String key) {
|
|
if (_LoginViewFocusNodes.containsKey(key)) {
|
|
return _LoginViewFocusNodes[key]!;
|
|
}
|
|
_LoginViewFocusNodes[key] = FocusNode();
|
|
return _LoginViewFocusNodes[key]!;
|
|
}
|
|
|
|
/// Registers a listener on every generated controller that calls [model.setData()]
|
|
/// with the latest textController values
|
|
void syncFormWithViewModel(FormStateHelper model) {
|
|
otpController.addListener(() => _updateFormData(model));
|
|
emailController.addListener(() => _updateFormData(model));
|
|
passwordController.addListener(() => _updateFormData(model));
|
|
phoneNumberController.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) {
|
|
otpController.addListener(() => _updateFormData(model));
|
|
emailController.addListener(() => _updateFormData(model));
|
|
passwordController.addListener(() => _updateFormData(model));
|
|
phoneNumberController.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({
|
|
OtpValueKey: otpController.text,
|
|
EmailValueKey: emailController.text,
|
|
PasswordValueKey: passwordController.text,
|
|
PhoneNumberValueKey: phoneNumberController.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 _LoginViewTextEditingControllers.values) {
|
|
controller.dispose();
|
|
}
|
|
for (var focusNode in _LoginViewFocusNodes.values) {
|
|
focusNode.dispose();
|
|
}
|
|
|
|
_LoginViewTextEditingControllers.clear();
|
|
_LoginViewFocusNodes.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 otpValue => this.formValueMap[OtpValueKey] as String?;
|
|
String? get emailValue => this.formValueMap[EmailValueKey] as String?;
|
|
String? get passwordValue => this.formValueMap[PasswordValueKey] as String?;
|
|
String? get phoneNumberValue =>
|
|
this.formValueMap[PhoneNumberValueKey] as String?;
|
|
|
|
set otpValue(String? value) {
|
|
this.setData(
|
|
this.formValueMap..addAll({OtpValueKey: value}),
|
|
);
|
|
|
|
if (_LoginViewTextEditingControllers.containsKey(OtpValueKey)) {
|
|
_LoginViewTextEditingControllers[OtpValueKey]?.text = value ?? '';
|
|
}
|
|
}
|
|
|
|
set emailValue(String? value) {
|
|
this.setData(
|
|
this.formValueMap..addAll({EmailValueKey: value}),
|
|
);
|
|
|
|
if (_LoginViewTextEditingControllers.containsKey(EmailValueKey)) {
|
|
_LoginViewTextEditingControllers[EmailValueKey]?.text = value ?? '';
|
|
}
|
|
}
|
|
|
|
set passwordValue(String? value) {
|
|
this.setData(
|
|
this.formValueMap..addAll({PasswordValueKey: value}),
|
|
);
|
|
|
|
if (_LoginViewTextEditingControllers.containsKey(PasswordValueKey)) {
|
|
_LoginViewTextEditingControllers[PasswordValueKey]?.text = value ?? '';
|
|
}
|
|
}
|
|
|
|
set phoneNumberValue(String? value) {
|
|
this.setData(
|
|
this.formValueMap..addAll({PhoneNumberValueKey: value}),
|
|
);
|
|
|
|
if (_LoginViewTextEditingControllers.containsKey(PhoneNumberValueKey)) {
|
|
_LoginViewTextEditingControllers[PhoneNumberValueKey]?.text = value ?? '';
|
|
}
|
|
}
|
|
|
|
bool get hasOtp =>
|
|
this.formValueMap.containsKey(OtpValueKey) &&
|
|
(otpValue?.isNotEmpty ?? false);
|
|
bool get hasEmail =>
|
|
this.formValueMap.containsKey(EmailValueKey) &&
|
|
(emailValue?.isNotEmpty ?? false);
|
|
bool get hasPassword =>
|
|
this.formValueMap.containsKey(PasswordValueKey) &&
|
|
(passwordValue?.isNotEmpty ?? false);
|
|
bool get hasPhoneNumber =>
|
|
this.formValueMap.containsKey(PhoneNumberValueKey) &&
|
|
(phoneNumberValue?.isNotEmpty ?? false);
|
|
|
|
bool get hasOtpValidationMessage =>
|
|
this.fieldsValidationMessages[OtpValueKey]?.isNotEmpty ?? false;
|
|
bool get hasEmailValidationMessage =>
|
|
this.fieldsValidationMessages[EmailValueKey]?.isNotEmpty ?? false;
|
|
bool get hasPasswordValidationMessage =>
|
|
this.fieldsValidationMessages[PasswordValueKey]?.isNotEmpty ?? false;
|
|
bool get hasPhoneNumberValidationMessage =>
|
|
this.fieldsValidationMessages[PhoneNumberValueKey]?.isNotEmpty ?? false;
|
|
|
|
String? get otpValidationMessage =>
|
|
this.fieldsValidationMessages[OtpValueKey];
|
|
String? get emailValidationMessage =>
|
|
this.fieldsValidationMessages[EmailValueKey];
|
|
String? get passwordValidationMessage =>
|
|
this.fieldsValidationMessages[PasswordValueKey];
|
|
String? get phoneNumberValidationMessage =>
|
|
this.fieldsValidationMessages[PhoneNumberValueKey];
|
|
}
|
|
|
|
extension Methods on FormStateHelper {
|
|
setOtpValidationMessage(String? validationMessage) =>
|
|
this.fieldsValidationMessages[OtpValueKey] = validationMessage;
|
|
setEmailValidationMessage(String? validationMessage) =>
|
|
this.fieldsValidationMessages[EmailValueKey] = validationMessage;
|
|
setPasswordValidationMessage(String? validationMessage) =>
|
|
this.fieldsValidationMessages[PasswordValueKey] = validationMessage;
|
|
setPhoneNumberValidationMessage(String? validationMessage) =>
|
|
this.fieldsValidationMessages[PhoneNumberValueKey] = validationMessage;
|
|
|
|
/// Clears text input fields on the Form
|
|
void clearForm() {
|
|
otpValue = '';
|
|
emailValue = '';
|
|
passwordValue = '';
|
|
phoneNumberValue = '';
|
|
}
|
|
|
|
/// Validates text input fields on the Form
|
|
void validateForm() {
|
|
this.setValidationMessages({
|
|
OtpValueKey: getValidationMessage(OtpValueKey),
|
|
EmailValueKey: getValidationMessage(EmailValueKey),
|
|
PasswordValueKey: getValidationMessage(PasswordValueKey),
|
|
PhoneNumberValueKey: getValidationMessage(PhoneNumberValueKey),
|
|
});
|
|
}
|
|
}
|
|
|
|
/// Returns the validation message for the given key
|
|
String? getValidationMessage(String key) {
|
|
final validatorForKey = _LoginViewTextValidations[key];
|
|
if (validatorForKey == null) return null;
|
|
|
|
String? validationMessageForKey = validatorForKey(
|
|
_LoginViewTextEditingControllers[key]!.text,
|
|
);
|
|
|
|
return validationMessageForKey;
|
|
}
|
|
|
|
/// Updates the fieldsValidationMessages on the FormViewModel
|
|
void updateValidationData(FormStateHelper model) =>
|
|
model.setValidationMessages({
|
|
OtpValueKey: getValidationMessage(OtpValueKey),
|
|
EmailValueKey: getValidationMessage(EmailValueKey),
|
|
PasswordValueKey: getValidationMessage(PasswordValueKey),
|
|
PhoneNumberValueKey: getValidationMessage(PhoneNumberValueKey),
|
|
});
|