I am at my wits end. Code that worked before now stops working with no changes made. Main issue is with Firebase throwing error that password must be at least 6 characters. However, I have a validation of at least 8 characters on the password form field that is correctly validated before passing the value to the account registration module. That's when Firebase returns the error of "password must be at least 6 chars". How could this be; especially when this worked before and was able to create new users? Now I can no longer create an account. Here are the relevant code snippets and I thank you for your help.
Registration module:
Future<User?> register(
context,
String name,
String phone,
String email,
String password,
String mediaUrl,
) async {
var date = DateTime.now().toString();
var parsedDate = DateTime.parse(date);
var formattedDate =
'${parsedDate.month}/${parsedDate.day}/${parsedDate.year}';
try {
await _read(firebaseAuthProvider).createUserWithEmailAndPassword(
email: email.toLowerCase().trim(),
password: password.trim(),
);
final User? user = _read(firebaseAuthProvider).currentUser;
final _uid = user!.uid;
await _read(firebaseFirestoreProvider).collection('users').doc(_uid).set(
{
'id': _uid,
'name': name,
'phone': phone,
'email': email,
'mediaUrl': '',
'joinedDate': formattedDate,
// 'createdAt': Timestamp.now(),
},
);
Navigator.canPop(context) ? Navigator.pop(context) : null;
// .then((value) =>
// Navigator.canPop(context) ? Navigator.pop(context) : null);
} on FirebaseAuthException catch (e) {
throw CustomException(message: e.message);
}
}
The form part relevant to password:
TextFormField(
key: const ValueKey('password'),
controller: _passwordController,
focusNode: _passwordFocusScope,
// onEditingComplete: _submit,
onEditingComplete: () => FocusScope.of(context)
.requestFocus(_confirmFocusScope),
obscureText: _isVisible.value,
validator: (value) {
if (value!.isEmpty || value.length < 8) {
return 'Password cannot be empty and must be at least 8 chars!';
}
return null;
},
onSaved: (value) {
_password = value!.trim();
},
textInputAction: _authMode.value == AuthMode.register
? TextInputAction.next
: TextInputAction.done,
onFieldSubmitted: (_) {
FocusScope.of(context)
.requestFocus(_confirmFocusScope);
},
decoration: kTextInputDecoration.copyWith(
labelText: 'Password',
labelStyle: TextStyle(
fontSize: Device.screenType == ScreenType.mobile
? 16.sp
: 18.sp,
),
filled: true,
fillColor: Theme.of(context).cardColor,
prefixIcon: Icon(
Icons.lock,
size: Device.screenType == ScreenType.mobile
? 4.w
: 6.w, //30,
),
suffixIcon: IconButton(
icon: _isVisible.value
? Icon(
Icons.visibility_off,
size: Device.screenType == ScreenType.mobile
? 3.w
: 4.w, //30,
)
: Icon(
Icons.visibility,
size: Device.screenType == ScreenType.mobile
? 3.w
: 4.w, //30,
),
onPressed: () {
_isVisible.value = !_isVisible.value;
},
),
contentPadding: const EdgeInsets.all(10),
),
),
SizedBox(
height: 1.8.h, //10,
),
if (_authMode.value == AuthMode.register)
TextFormField(
focusNode: _confirmFocusScope,
// controller: _passwordController,
textInputAction: TextInputAction.done,
// onFieldSubmitted: (_) {
// FocusScope.of(context)
// .requestFocus(_confirmFocusScope);
// },
// onEditingComplete: FocusScope.of(context)
// .unfocus(),
key: const ValueKey('confirm'),
obscureText: _isVisible.value,
validator: (value) {
if (value != _passwordController.text) {
return 'Passwords do not match!';
}
return null;
},
decoration: kTextInputDecoration.copyWith(
labelText: 'Confirm Password',
labelStyle: TextStyle(
fontSize: Device.screenType == ScreenType.mobile
? 16.sp
: 18.sp,
),
filled: true,
fillColor: Theme.of(context).cardColor,
prefixIcon: Icon(
Icons.lock,
size: Device.screenType == ScreenType.mobile
? 4.w
: 6.w, //30,
),
suffixIcon: IconButton(
icon: _isVisible.value
? Icon(
Icons.visibility_off,
size:
Device.screenType == ScreenType.mobile
? 3.w
: 3.5.w, //30,
)
: Icon(
Icons.visibility,
size:
Device.screenType == ScreenType.mobile
? 3.w
: 4.w, //30,
),
onPressed: () {
_isVisible.value = !_isVisible.value;
},
),
contentPadding: const EdgeInsets.all(10),
),
),
SizedBox(
height: 1.8.h, //10,
),
MyButton(
text: _authMode.value == AuthMode.login
? 'Login'
: 'Sign Up',
txtColor: Colors.white,
txtSize: Device.screenType == ScreenType.mobile
? 19.sp
: 24.sp,
bgColor: Colors.deepPurple,
onTap: () {
FocusScope.of(context)
.unfocus(); // used to dismiss the keyboard
// _submit();
final _isValid = _formKey.currentState!.validate();
if (_isValid) {
_formKey.currentState?.save();
_formKey.currentState?.reset();
_authMode.value == AuthMode.login
? ref
.read(authRepositoryProvider)
.login(context, _email, _password)
: ref.read(authRepositoryProvider).register(
context,
_name,
_email,
_password,
_mediaUrl,
_phone,
);
Navigator.pushReplacementNamed(
context, BottomNavScreen.routeName);
}
},
),
Referenced providers:
final storageRefProvider = Provider<FirebaseStorage>((ref) => FirebaseStorage.instance);
final firebaseAuthProvider =
Provider<FirebaseAuth>((ref) => FirebaseAuth.instance);
final firebaseFirestoreProvider =
Provider<FirebaseFirestore>((ref) => FirebaseFirestore.instance);