diff --git a/lib/application/auth/sign_in_form/sign_in_form_bloc.dart b/lib/application/auth/sign_in_form/sign_in_form_bloc.dart index 7c04ea7..7cb8549 100644 --- a/lib/application/auth/sign_in_form/sign_in_form_bloc.dart +++ b/lib/application/auth/sign_in_form/sign_in_form_bloc.dart @@ -1,5 +1,6 @@ // ignore: depend_on_referenced_packages import 'package:bloc/bloc.dart'; +import 'package:flutter/material.dart'; import 'package:flutter_firebase_ddd_bloc/application/auth/sign_in_form/sign_in_form_state.dart'; import 'package:flutter_firebase_ddd_bloc/domain/auth/auth_failure.dart'; import 'package:flutter_firebase_ddd_bloc/domain/auth/i_auth_facade.dart'; @@ -14,12 +15,15 @@ part 'sign_in_form_bloc.freezed.dart'; @injectable class SignInFormBloc extends Bloc { SignInFormBloc(this._authFacade) : super(SignInFormState.initial()) { - on( + on( (event, emit) => signInWithEmailAndPassword(event, emit), ); - on( + on( (event, emit) => registerWithEmailAndPassword(event, emit), ); + on( + (event, emit) => signInWithGoogle(event, emit), + ); on( (event, emit) => changeEmailAddress(event, emit), ); @@ -49,51 +53,41 @@ class SignInFormBloc extends Bloc { } Future registerWithEmailAndPassword( - RegisterWithEmailAndPassword event, Emitter emit) async { - _performActionOnAuthFacadeWithEmailAndPassword( - right(event), - emit, - _authFacade.registerWithEmailAndPassword, - ); - } + RegisterWithEmailAndPasswordPressed event, + Emitter emit, + ) async { + Either? failureOrSuccess; - Future signInWithEmailAndPassword( - SignInWithEmailAndPassword event, Emitter emit) async { - _performActionOnAuthFacadeWithEmailAndPassword( - left(event), - emit, - _authFacade.signInWithEmailAndPassword, - ); - } + final isEmailValid = state.emailAddress.isValid(); + final isPasswordValid = state.password.isValid(); - Future signInWithGoogle( - PasswordChanged event, Emitter emit) async { - emit( - state.copyWith( - isSubmitting: true, - authFailureOrSuccessOption: none(), - ), - ); + if (isEmailValid && isPasswordValid) { + emit( + state.copyWith( + isSubmitting: true, + authFailureOrSuccessOption: none(), + ), + ); - final failureOrSuccess = await _authFacade.signInWithGoogle(); + failureOrSuccess = await _authFacade.registerWithEmailAndPassword( + emailAddress: state.emailAddress, + password: state.password, + ); + } emit( state.copyWith( isSubmitting: false, - authFailureOrSuccessOption: some(failureOrSuccess), + showErrorMessages: AutovalidateMode.onUserInteraction, + authFailureOrSuccessOption: optionOf(failureOrSuccess), ), ); } - Stream _performActionOnAuthFacadeWithEmailAndPassword( - Either event, + Future signInWithEmailAndPassword( + SignInWithEmailAndPasswordPressed event, Emitter emit, - Future> Function({ - required EmailAddress emailAddress, - required Password password, - }) - forwardedCall, - ) async* { + ) async { Either? failureOrSuccess; final isEmailValid = state.emailAddress.isValid(); @@ -107,7 +101,7 @@ class SignInFormBloc extends Bloc { ), ); - failureOrSuccess = await forwardedCall( + failureOrSuccess = await _authFacade.signInWithEmailAndPassword( emailAddress: state.emailAddress, password: state.password, ); @@ -116,9 +110,30 @@ class SignInFormBloc extends Bloc { emit( state.copyWith( isSubmitting: false, - showErrorMessages: true, + showErrorMessages: AutovalidateMode.onUserInteraction, authFailureOrSuccessOption: optionOf(failureOrSuccess), ), ); } + + Future signInWithGoogle( + SignInWithGooglePressed event, + Emitter emit, + ) async { + emit( + state.copyWith( + isSubmitting: true, + authFailureOrSuccessOption: none(), + ), + ); + + final failureOrSuccess = await _authFacade.signInWithGoogle(); + + emit( + state.copyWith( + isSubmitting: false, + authFailureOrSuccessOption: some(failureOrSuccess), + ), + ); + } } diff --git a/lib/application/auth/sign_in_form/sign_in_form_bloc.freezed.dart b/lib/application/auth/sign_in_form/sign_in_form_bloc.freezed.dart index 85aa869..1ace223 100644 --- a/lib/application/auth/sign_in_form/sign_in_form_bloc.freezed.dart +++ b/lib/application/auth/sign_in_form/sign_in_form_bloc.freezed.dart @@ -20,27 +20,27 @@ mixin _$SignInFormEvent { TResult when({ required TResult Function(String email) emailChanged, required TResult Function(String password) passwordChanged, - required TResult Function() signInWithGoogle, - required TResult Function() registerWithEmailAndPassword, - required TResult Function() signInWithEmailAndPassword, + required TResult Function() signInWithGooglePressed, + required TResult Function() registerWithEmailAndPasswordPressed, + required TResult Function() signInWithEmailAndPasswordPressed, }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult? whenOrNull({ TResult? Function(String email)? emailChanged, TResult? Function(String password)? passwordChanged, - TResult? Function()? signInWithGoogle, - TResult? Function()? registerWithEmailAndPassword, - TResult? Function()? signInWithEmailAndPassword, + TResult? Function()? signInWithGooglePressed, + TResult? Function()? registerWithEmailAndPasswordPressed, + TResult? Function()? signInWithEmailAndPasswordPressed, }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult maybeWhen({ TResult Function(String email)? emailChanged, TResult Function(String password)? passwordChanged, - TResult Function()? signInWithGoogle, - TResult Function()? registerWithEmailAndPassword, - TResult Function()? signInWithEmailAndPassword, + TResult Function()? signInWithGooglePressed, + TResult Function()? registerWithEmailAndPasswordPressed, + TResult Function()? signInWithEmailAndPasswordPressed, required TResult orElse(), }) => throw _privateConstructorUsedError; @@ -48,33 +48,34 @@ mixin _$SignInFormEvent { TResult map({ required TResult Function(EmailChanged value) emailChanged, required TResult Function(PasswordChanged value) passwordChanged, - required TResult Function(SignInWithGoogle value) signInWithGoogle, - required TResult Function(RegisterWithEmailAndPassword value) - registerWithEmailAndPassword, - required TResult Function(SignInWithEmailAndPassword value) - signInWithEmailAndPassword, + required TResult Function(SignInWithGooglePressed value) + signInWithGooglePressed, + required TResult Function(RegisterWithEmailAndPasswordPressed value) + registerWithEmailAndPasswordPressed, + required TResult Function(SignInWithEmailAndPasswordPressed value) + signInWithEmailAndPasswordPressed, }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult? mapOrNull({ TResult? Function(EmailChanged value)? emailChanged, TResult? Function(PasswordChanged value)? passwordChanged, - TResult? Function(SignInWithGoogle value)? signInWithGoogle, - TResult? Function(RegisterWithEmailAndPassword value)? - registerWithEmailAndPassword, - TResult? Function(SignInWithEmailAndPassword value)? - signInWithEmailAndPassword, + TResult? Function(SignInWithGooglePressed value)? signInWithGooglePressed, + TResult? Function(RegisterWithEmailAndPasswordPressed value)? + registerWithEmailAndPasswordPressed, + TResult? Function(SignInWithEmailAndPasswordPressed value)? + signInWithEmailAndPasswordPressed, }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult maybeMap({ TResult Function(EmailChanged value)? emailChanged, TResult Function(PasswordChanged value)? passwordChanged, - TResult Function(SignInWithGoogle value)? signInWithGoogle, - TResult Function(RegisterWithEmailAndPassword value)? - registerWithEmailAndPassword, - TResult Function(SignInWithEmailAndPassword value)? - signInWithEmailAndPassword, + TResult Function(SignInWithGooglePressed value)? signInWithGooglePressed, + TResult Function(RegisterWithEmailAndPasswordPressed value)? + registerWithEmailAndPasswordPressed, + TResult Function(SignInWithEmailAndPasswordPressed value)? + signInWithEmailAndPasswordPressed, required TResult orElse(), }) => throw _privateConstructorUsedError; @@ -164,9 +165,9 @@ class _$EmailChanged implements EmailChanged { TResult when({ required TResult Function(String email) emailChanged, required TResult Function(String password) passwordChanged, - required TResult Function() signInWithGoogle, - required TResult Function() registerWithEmailAndPassword, - required TResult Function() signInWithEmailAndPassword, + required TResult Function() signInWithGooglePressed, + required TResult Function() registerWithEmailAndPasswordPressed, + required TResult Function() signInWithEmailAndPasswordPressed, }) { return emailChanged(email); } @@ -176,9 +177,9 @@ class _$EmailChanged implements EmailChanged { TResult? whenOrNull({ TResult? Function(String email)? emailChanged, TResult? Function(String password)? passwordChanged, - TResult? Function()? signInWithGoogle, - TResult? Function()? registerWithEmailAndPassword, - TResult? Function()? signInWithEmailAndPassword, + TResult? Function()? signInWithGooglePressed, + TResult? Function()? registerWithEmailAndPasswordPressed, + TResult? Function()? signInWithEmailAndPasswordPressed, }) { return emailChanged?.call(email); } @@ -188,9 +189,9 @@ class _$EmailChanged implements EmailChanged { TResult maybeWhen({ TResult Function(String email)? emailChanged, TResult Function(String password)? passwordChanged, - TResult Function()? signInWithGoogle, - TResult Function()? registerWithEmailAndPassword, - TResult Function()? signInWithEmailAndPassword, + TResult Function()? signInWithGooglePressed, + TResult Function()? registerWithEmailAndPasswordPressed, + TResult Function()? signInWithEmailAndPasswordPressed, required TResult orElse(), }) { if (emailChanged != null) { @@ -204,11 +205,12 @@ class _$EmailChanged implements EmailChanged { TResult map({ required TResult Function(EmailChanged value) emailChanged, required TResult Function(PasswordChanged value) passwordChanged, - required TResult Function(SignInWithGoogle value) signInWithGoogle, - required TResult Function(RegisterWithEmailAndPassword value) - registerWithEmailAndPassword, - required TResult Function(SignInWithEmailAndPassword value) - signInWithEmailAndPassword, + required TResult Function(SignInWithGooglePressed value) + signInWithGooglePressed, + required TResult Function(RegisterWithEmailAndPasswordPressed value) + registerWithEmailAndPasswordPressed, + required TResult Function(SignInWithEmailAndPasswordPressed value) + signInWithEmailAndPasswordPressed, }) { return emailChanged(this); } @@ -218,11 +220,11 @@ class _$EmailChanged implements EmailChanged { TResult? mapOrNull({ TResult? Function(EmailChanged value)? emailChanged, TResult? Function(PasswordChanged value)? passwordChanged, - TResult? Function(SignInWithGoogle value)? signInWithGoogle, - TResult? Function(RegisterWithEmailAndPassword value)? - registerWithEmailAndPassword, - TResult? Function(SignInWithEmailAndPassword value)? - signInWithEmailAndPassword, + TResult? Function(SignInWithGooglePressed value)? signInWithGooglePressed, + TResult? Function(RegisterWithEmailAndPasswordPressed value)? + registerWithEmailAndPasswordPressed, + TResult? Function(SignInWithEmailAndPasswordPressed value)? + signInWithEmailAndPasswordPressed, }) { return emailChanged?.call(this); } @@ -232,11 +234,11 @@ class _$EmailChanged implements EmailChanged { TResult maybeMap({ TResult Function(EmailChanged value)? emailChanged, TResult Function(PasswordChanged value)? passwordChanged, - TResult Function(SignInWithGoogle value)? signInWithGoogle, - TResult Function(RegisterWithEmailAndPassword value)? - registerWithEmailAndPassword, - TResult Function(SignInWithEmailAndPassword value)? - signInWithEmailAndPassword, + TResult Function(SignInWithGooglePressed value)? signInWithGooglePressed, + TResult Function(RegisterWithEmailAndPasswordPressed value)? + registerWithEmailAndPasswordPressed, + TResult Function(SignInWithEmailAndPasswordPressed value)? + signInWithEmailAndPasswordPressed, required TResult orElse(), }) { if (emailChanged != null) { @@ -322,9 +324,9 @@ class _$PasswordChanged implements PasswordChanged { TResult when({ required TResult Function(String email) emailChanged, required TResult Function(String password) passwordChanged, - required TResult Function() signInWithGoogle, - required TResult Function() registerWithEmailAndPassword, - required TResult Function() signInWithEmailAndPassword, + required TResult Function() signInWithGooglePressed, + required TResult Function() registerWithEmailAndPasswordPressed, + required TResult Function() signInWithEmailAndPasswordPressed, }) { return passwordChanged(password); } @@ -334,9 +336,9 @@ class _$PasswordChanged implements PasswordChanged { TResult? whenOrNull({ TResult? Function(String email)? emailChanged, TResult? Function(String password)? passwordChanged, - TResult? Function()? signInWithGoogle, - TResult? Function()? registerWithEmailAndPassword, - TResult? Function()? signInWithEmailAndPassword, + TResult? Function()? signInWithGooglePressed, + TResult? Function()? registerWithEmailAndPasswordPressed, + TResult? Function()? signInWithEmailAndPasswordPressed, }) { return passwordChanged?.call(password); } @@ -346,9 +348,9 @@ class _$PasswordChanged implements PasswordChanged { TResult maybeWhen({ TResult Function(String email)? emailChanged, TResult Function(String password)? passwordChanged, - TResult Function()? signInWithGoogle, - TResult Function()? registerWithEmailAndPassword, - TResult Function()? signInWithEmailAndPassword, + TResult Function()? signInWithGooglePressed, + TResult Function()? registerWithEmailAndPasswordPressed, + TResult Function()? signInWithEmailAndPasswordPressed, required TResult orElse(), }) { if (passwordChanged != null) { @@ -362,11 +364,12 @@ class _$PasswordChanged implements PasswordChanged { TResult map({ required TResult Function(EmailChanged value) emailChanged, required TResult Function(PasswordChanged value) passwordChanged, - required TResult Function(SignInWithGoogle value) signInWithGoogle, - required TResult Function(RegisterWithEmailAndPassword value) - registerWithEmailAndPassword, - required TResult Function(SignInWithEmailAndPassword value) - signInWithEmailAndPassword, + required TResult Function(SignInWithGooglePressed value) + signInWithGooglePressed, + required TResult Function(RegisterWithEmailAndPasswordPressed value) + registerWithEmailAndPasswordPressed, + required TResult Function(SignInWithEmailAndPasswordPressed value) + signInWithEmailAndPasswordPressed, }) { return passwordChanged(this); } @@ -376,11 +379,11 @@ class _$PasswordChanged implements PasswordChanged { TResult? mapOrNull({ TResult? Function(EmailChanged value)? emailChanged, TResult? Function(PasswordChanged value)? passwordChanged, - TResult? Function(SignInWithGoogle value)? signInWithGoogle, - TResult? Function(RegisterWithEmailAndPassword value)? - registerWithEmailAndPassword, - TResult? Function(SignInWithEmailAndPassword value)? - signInWithEmailAndPassword, + TResult? Function(SignInWithGooglePressed value)? signInWithGooglePressed, + TResult? Function(RegisterWithEmailAndPasswordPressed value)? + registerWithEmailAndPasswordPressed, + TResult? Function(SignInWithEmailAndPasswordPressed value)? + signInWithEmailAndPasswordPressed, }) { return passwordChanged?.call(this); } @@ -390,11 +393,11 @@ class _$PasswordChanged implements PasswordChanged { TResult maybeMap({ TResult Function(EmailChanged value)? emailChanged, TResult Function(PasswordChanged value)? passwordChanged, - TResult Function(SignInWithGoogle value)? signInWithGoogle, - TResult Function(RegisterWithEmailAndPassword value)? - registerWithEmailAndPassword, - TResult Function(SignInWithEmailAndPassword value)? - signInWithEmailAndPassword, + TResult Function(SignInWithGooglePressed value)? signInWithGooglePressed, + TResult Function(RegisterWithEmailAndPasswordPressed value)? + registerWithEmailAndPasswordPressed, + TResult Function(SignInWithEmailAndPasswordPressed value)? + signInWithEmailAndPasswordPressed, required TResult orElse(), }) { if (passwordChanged != null) { @@ -415,35 +418,36 @@ abstract class PasswordChanged implements SignInFormEvent { } /// @nodoc -abstract class _$$SignInWithGoogleCopyWith<$Res> { - factory _$$SignInWithGoogleCopyWith( - _$SignInWithGoogle value, $Res Function(_$SignInWithGoogle) then) = - __$$SignInWithGoogleCopyWithImpl<$Res>; +abstract class _$$SignInWithGooglePressedCopyWith<$Res> { + factory _$$SignInWithGooglePressedCopyWith(_$SignInWithGooglePressed value, + $Res Function(_$SignInWithGooglePressed) then) = + __$$SignInWithGooglePressedCopyWithImpl<$Res>; } /// @nodoc -class __$$SignInWithGoogleCopyWithImpl<$Res> - extends _$SignInFormEventCopyWithImpl<$Res, _$SignInWithGoogle> - implements _$$SignInWithGoogleCopyWith<$Res> { - __$$SignInWithGoogleCopyWithImpl( - _$SignInWithGoogle _value, $Res Function(_$SignInWithGoogle) _then) +class __$$SignInWithGooglePressedCopyWithImpl<$Res> + extends _$SignInFormEventCopyWithImpl<$Res, _$SignInWithGooglePressed> + implements _$$SignInWithGooglePressedCopyWith<$Res> { + __$$SignInWithGooglePressedCopyWithImpl(_$SignInWithGooglePressed _value, + $Res Function(_$SignInWithGooglePressed) _then) : super(_value, _then); } /// @nodoc -class _$SignInWithGoogle implements SignInWithGoogle { - const _$SignInWithGoogle(); +class _$SignInWithGooglePressed implements SignInWithGooglePressed { + const _$SignInWithGooglePressed(); @override String toString() { - return 'SignInFormEvent.signInWithGoogle()'; + return 'SignInFormEvent.signInWithGooglePressed()'; } @override bool operator ==(dynamic other) { return identical(this, other) || - (other.runtimeType == runtimeType && other is _$SignInWithGoogle); + (other.runtimeType == runtimeType && + other is _$SignInWithGooglePressed); } @override @@ -454,11 +458,11 @@ class _$SignInWithGoogle implements SignInWithGoogle { TResult when({ required TResult Function(String email) emailChanged, required TResult Function(String password) passwordChanged, - required TResult Function() signInWithGoogle, - required TResult Function() registerWithEmailAndPassword, - required TResult Function() signInWithEmailAndPassword, + required TResult Function() signInWithGooglePressed, + required TResult Function() registerWithEmailAndPasswordPressed, + required TResult Function() signInWithEmailAndPasswordPressed, }) { - return signInWithGoogle(); + return signInWithGooglePressed(); } @override @@ -466,11 +470,11 @@ class _$SignInWithGoogle implements SignInWithGoogle { TResult? whenOrNull({ TResult? Function(String email)? emailChanged, TResult? Function(String password)? passwordChanged, - TResult? Function()? signInWithGoogle, - TResult? Function()? registerWithEmailAndPassword, - TResult? Function()? signInWithEmailAndPassword, + TResult? Function()? signInWithGooglePressed, + TResult? Function()? registerWithEmailAndPasswordPressed, + TResult? Function()? signInWithEmailAndPasswordPressed, }) { - return signInWithGoogle?.call(); + return signInWithGooglePressed?.call(); } @override @@ -478,13 +482,13 @@ class _$SignInWithGoogle implements SignInWithGoogle { TResult maybeWhen({ TResult Function(String email)? emailChanged, TResult Function(String password)? passwordChanged, - TResult Function()? signInWithGoogle, - TResult Function()? registerWithEmailAndPassword, - TResult Function()? signInWithEmailAndPassword, + TResult Function()? signInWithGooglePressed, + TResult Function()? registerWithEmailAndPasswordPressed, + TResult Function()? signInWithEmailAndPasswordPressed, required TResult orElse(), }) { - if (signInWithGoogle != null) { - return signInWithGoogle(); + if (signInWithGooglePressed != null) { + return signInWithGooglePressed(); } return orElse(); } @@ -494,13 +498,14 @@ class _$SignInWithGoogle implements SignInWithGoogle { TResult map({ required TResult Function(EmailChanged value) emailChanged, required TResult Function(PasswordChanged value) passwordChanged, - required TResult Function(SignInWithGoogle value) signInWithGoogle, - required TResult Function(RegisterWithEmailAndPassword value) - registerWithEmailAndPassword, - required TResult Function(SignInWithEmailAndPassword value) - signInWithEmailAndPassword, + required TResult Function(SignInWithGooglePressed value) + signInWithGooglePressed, + required TResult Function(RegisterWithEmailAndPasswordPressed value) + registerWithEmailAndPasswordPressed, + required TResult Function(SignInWithEmailAndPasswordPressed value) + signInWithEmailAndPasswordPressed, }) { - return signInWithGoogle(this); + return signInWithGooglePressed(this); } @override @@ -508,13 +513,13 @@ class _$SignInWithGoogle implements SignInWithGoogle { TResult? mapOrNull({ TResult? Function(EmailChanged value)? emailChanged, TResult? Function(PasswordChanged value)? passwordChanged, - TResult? Function(SignInWithGoogle value)? signInWithGoogle, - TResult? Function(RegisterWithEmailAndPassword value)? - registerWithEmailAndPassword, - TResult? Function(SignInWithEmailAndPassword value)? - signInWithEmailAndPassword, + TResult? Function(SignInWithGooglePressed value)? signInWithGooglePressed, + TResult? Function(RegisterWithEmailAndPasswordPressed value)? + registerWithEmailAndPasswordPressed, + TResult? Function(SignInWithEmailAndPasswordPressed value)? + signInWithEmailAndPasswordPressed, }) { - return signInWithGoogle?.call(this); + return signInWithGooglePressed?.call(this); } @override @@ -522,57 +527,59 @@ class _$SignInWithGoogle implements SignInWithGoogle { TResult maybeMap({ TResult Function(EmailChanged value)? emailChanged, TResult Function(PasswordChanged value)? passwordChanged, - TResult Function(SignInWithGoogle value)? signInWithGoogle, - TResult Function(RegisterWithEmailAndPassword value)? - registerWithEmailAndPassword, - TResult Function(SignInWithEmailAndPassword value)? - signInWithEmailAndPassword, + TResult Function(SignInWithGooglePressed value)? signInWithGooglePressed, + TResult Function(RegisterWithEmailAndPasswordPressed value)? + registerWithEmailAndPasswordPressed, + TResult Function(SignInWithEmailAndPasswordPressed value)? + signInWithEmailAndPasswordPressed, required TResult orElse(), }) { - if (signInWithGoogle != null) { - return signInWithGoogle(this); + if (signInWithGooglePressed != null) { + return signInWithGooglePressed(this); } return orElse(); } } -abstract class SignInWithGoogle implements SignInFormEvent { - const factory SignInWithGoogle() = _$SignInWithGoogle; +abstract class SignInWithGooglePressed implements SignInFormEvent { + const factory SignInWithGooglePressed() = _$SignInWithGooglePressed; } /// @nodoc -abstract class _$$RegisterWithEmailAndPasswordCopyWith<$Res> { - factory _$$RegisterWithEmailAndPasswordCopyWith( - _$RegisterWithEmailAndPassword value, - $Res Function(_$RegisterWithEmailAndPassword) then) = - __$$RegisterWithEmailAndPasswordCopyWithImpl<$Res>; +abstract class _$$RegisterWithEmailAndPasswordPressedCopyWith<$Res> { + factory _$$RegisterWithEmailAndPasswordPressedCopyWith( + _$RegisterWithEmailAndPasswordPressed value, + $Res Function(_$RegisterWithEmailAndPasswordPressed) then) = + __$$RegisterWithEmailAndPasswordPressedCopyWithImpl<$Res>; } /// @nodoc -class __$$RegisterWithEmailAndPasswordCopyWithImpl<$Res> - extends _$SignInFormEventCopyWithImpl<$Res, _$RegisterWithEmailAndPassword> - implements _$$RegisterWithEmailAndPasswordCopyWith<$Res> { - __$$RegisterWithEmailAndPasswordCopyWithImpl( - _$RegisterWithEmailAndPassword _value, - $Res Function(_$RegisterWithEmailAndPassword) _then) +class __$$RegisterWithEmailAndPasswordPressedCopyWithImpl<$Res> + extends _$SignInFormEventCopyWithImpl<$Res, + _$RegisterWithEmailAndPasswordPressed> + implements _$$RegisterWithEmailAndPasswordPressedCopyWith<$Res> { + __$$RegisterWithEmailAndPasswordPressedCopyWithImpl( + _$RegisterWithEmailAndPasswordPressed _value, + $Res Function(_$RegisterWithEmailAndPasswordPressed) _then) : super(_value, _then); } /// @nodoc -class _$RegisterWithEmailAndPassword implements RegisterWithEmailAndPassword { - const _$RegisterWithEmailAndPassword(); +class _$RegisterWithEmailAndPasswordPressed + implements RegisterWithEmailAndPasswordPressed { + const _$RegisterWithEmailAndPasswordPressed(); @override String toString() { - return 'SignInFormEvent.registerWithEmailAndPassword()'; + return 'SignInFormEvent.registerWithEmailAndPasswordPressed()'; } @override bool operator ==(dynamic other) { return identical(this, other) || (other.runtimeType == runtimeType && - other is _$RegisterWithEmailAndPassword); + other is _$RegisterWithEmailAndPasswordPressed); } @override @@ -583,11 +590,11 @@ class _$RegisterWithEmailAndPassword implements RegisterWithEmailAndPassword { TResult when({ required TResult Function(String email) emailChanged, required TResult Function(String password) passwordChanged, - required TResult Function() signInWithGoogle, - required TResult Function() registerWithEmailAndPassword, - required TResult Function() signInWithEmailAndPassword, + required TResult Function() signInWithGooglePressed, + required TResult Function() registerWithEmailAndPasswordPressed, + required TResult Function() signInWithEmailAndPasswordPressed, }) { - return registerWithEmailAndPassword(); + return registerWithEmailAndPasswordPressed(); } @override @@ -595,11 +602,11 @@ class _$RegisterWithEmailAndPassword implements RegisterWithEmailAndPassword { TResult? whenOrNull({ TResult? Function(String email)? emailChanged, TResult? Function(String password)? passwordChanged, - TResult? Function()? signInWithGoogle, - TResult? Function()? registerWithEmailAndPassword, - TResult? Function()? signInWithEmailAndPassword, + TResult? Function()? signInWithGooglePressed, + TResult? Function()? registerWithEmailAndPasswordPressed, + TResult? Function()? signInWithEmailAndPasswordPressed, }) { - return registerWithEmailAndPassword?.call(); + return registerWithEmailAndPasswordPressed?.call(); } @override @@ -607,13 +614,13 @@ class _$RegisterWithEmailAndPassword implements RegisterWithEmailAndPassword { TResult maybeWhen({ TResult Function(String email)? emailChanged, TResult Function(String password)? passwordChanged, - TResult Function()? signInWithGoogle, - TResult Function()? registerWithEmailAndPassword, - TResult Function()? signInWithEmailAndPassword, + TResult Function()? signInWithGooglePressed, + TResult Function()? registerWithEmailAndPasswordPressed, + TResult Function()? signInWithEmailAndPasswordPressed, required TResult orElse(), }) { - if (registerWithEmailAndPassword != null) { - return registerWithEmailAndPassword(); + if (registerWithEmailAndPasswordPressed != null) { + return registerWithEmailAndPasswordPressed(); } return orElse(); } @@ -623,13 +630,14 @@ class _$RegisterWithEmailAndPassword implements RegisterWithEmailAndPassword { TResult map({ required TResult Function(EmailChanged value) emailChanged, required TResult Function(PasswordChanged value) passwordChanged, - required TResult Function(SignInWithGoogle value) signInWithGoogle, - required TResult Function(RegisterWithEmailAndPassword value) - registerWithEmailAndPassword, - required TResult Function(SignInWithEmailAndPassword value) - signInWithEmailAndPassword, + required TResult Function(SignInWithGooglePressed value) + signInWithGooglePressed, + required TResult Function(RegisterWithEmailAndPasswordPressed value) + registerWithEmailAndPasswordPressed, + required TResult Function(SignInWithEmailAndPasswordPressed value) + signInWithEmailAndPasswordPressed, }) { - return registerWithEmailAndPassword(this); + return registerWithEmailAndPasswordPressed(this); } @override @@ -637,13 +645,13 @@ class _$RegisterWithEmailAndPassword implements RegisterWithEmailAndPassword { TResult? mapOrNull({ TResult? Function(EmailChanged value)? emailChanged, TResult? Function(PasswordChanged value)? passwordChanged, - TResult? Function(SignInWithGoogle value)? signInWithGoogle, - TResult? Function(RegisterWithEmailAndPassword value)? - registerWithEmailAndPassword, - TResult? Function(SignInWithEmailAndPassword value)? - signInWithEmailAndPassword, + TResult? Function(SignInWithGooglePressed value)? signInWithGooglePressed, + TResult? Function(RegisterWithEmailAndPasswordPressed value)? + registerWithEmailAndPasswordPressed, + TResult? Function(SignInWithEmailAndPasswordPressed value)? + signInWithEmailAndPasswordPressed, }) { - return registerWithEmailAndPassword?.call(this); + return registerWithEmailAndPasswordPressed?.call(this); } @override @@ -651,57 +659,60 @@ class _$RegisterWithEmailAndPassword implements RegisterWithEmailAndPassword { TResult maybeMap({ TResult Function(EmailChanged value)? emailChanged, TResult Function(PasswordChanged value)? passwordChanged, - TResult Function(SignInWithGoogle value)? signInWithGoogle, - TResult Function(RegisterWithEmailAndPassword value)? - registerWithEmailAndPassword, - TResult Function(SignInWithEmailAndPassword value)? - signInWithEmailAndPassword, + TResult Function(SignInWithGooglePressed value)? signInWithGooglePressed, + TResult Function(RegisterWithEmailAndPasswordPressed value)? + registerWithEmailAndPasswordPressed, + TResult Function(SignInWithEmailAndPasswordPressed value)? + signInWithEmailAndPasswordPressed, required TResult orElse(), }) { - if (registerWithEmailAndPassword != null) { - return registerWithEmailAndPassword(this); + if (registerWithEmailAndPasswordPressed != null) { + return registerWithEmailAndPasswordPressed(this); } return orElse(); } } -abstract class RegisterWithEmailAndPassword implements SignInFormEvent { - const factory RegisterWithEmailAndPassword() = _$RegisterWithEmailAndPassword; +abstract class RegisterWithEmailAndPasswordPressed implements SignInFormEvent { + const factory RegisterWithEmailAndPasswordPressed() = + _$RegisterWithEmailAndPasswordPressed; } /// @nodoc -abstract class _$$SignInWithEmailAndPasswordCopyWith<$Res> { - factory _$$SignInWithEmailAndPasswordCopyWith( - _$SignInWithEmailAndPassword value, - $Res Function(_$SignInWithEmailAndPassword) then) = - __$$SignInWithEmailAndPasswordCopyWithImpl<$Res>; +abstract class _$$SignInWithEmailAndPasswordPressedCopyWith<$Res> { + factory _$$SignInWithEmailAndPasswordPressedCopyWith( + _$SignInWithEmailAndPasswordPressed value, + $Res Function(_$SignInWithEmailAndPasswordPressed) then) = + __$$SignInWithEmailAndPasswordPressedCopyWithImpl<$Res>; } /// @nodoc -class __$$SignInWithEmailAndPasswordCopyWithImpl<$Res> - extends _$SignInFormEventCopyWithImpl<$Res, _$SignInWithEmailAndPassword> - implements _$$SignInWithEmailAndPasswordCopyWith<$Res> { - __$$SignInWithEmailAndPasswordCopyWithImpl( - _$SignInWithEmailAndPassword _value, - $Res Function(_$SignInWithEmailAndPassword) _then) +class __$$SignInWithEmailAndPasswordPressedCopyWithImpl<$Res> + extends _$SignInFormEventCopyWithImpl<$Res, + _$SignInWithEmailAndPasswordPressed> + implements _$$SignInWithEmailAndPasswordPressedCopyWith<$Res> { + __$$SignInWithEmailAndPasswordPressedCopyWithImpl( + _$SignInWithEmailAndPasswordPressed _value, + $Res Function(_$SignInWithEmailAndPasswordPressed) _then) : super(_value, _then); } /// @nodoc -class _$SignInWithEmailAndPassword implements SignInWithEmailAndPassword { - const _$SignInWithEmailAndPassword(); +class _$SignInWithEmailAndPasswordPressed + implements SignInWithEmailAndPasswordPressed { + const _$SignInWithEmailAndPasswordPressed(); @override String toString() { - return 'SignInFormEvent.signInWithEmailAndPassword()'; + return 'SignInFormEvent.signInWithEmailAndPasswordPressed()'; } @override bool operator ==(dynamic other) { return identical(this, other) || (other.runtimeType == runtimeType && - other is _$SignInWithEmailAndPassword); + other is _$SignInWithEmailAndPasswordPressed); } @override @@ -712,11 +723,11 @@ class _$SignInWithEmailAndPassword implements SignInWithEmailAndPassword { TResult when({ required TResult Function(String email) emailChanged, required TResult Function(String password) passwordChanged, - required TResult Function() signInWithGoogle, - required TResult Function() registerWithEmailAndPassword, - required TResult Function() signInWithEmailAndPassword, + required TResult Function() signInWithGooglePressed, + required TResult Function() registerWithEmailAndPasswordPressed, + required TResult Function() signInWithEmailAndPasswordPressed, }) { - return signInWithEmailAndPassword(); + return signInWithEmailAndPasswordPressed(); } @override @@ -724,11 +735,11 @@ class _$SignInWithEmailAndPassword implements SignInWithEmailAndPassword { TResult? whenOrNull({ TResult? Function(String email)? emailChanged, TResult? Function(String password)? passwordChanged, - TResult? Function()? signInWithGoogle, - TResult? Function()? registerWithEmailAndPassword, - TResult? Function()? signInWithEmailAndPassword, + TResult? Function()? signInWithGooglePressed, + TResult? Function()? registerWithEmailAndPasswordPressed, + TResult? Function()? signInWithEmailAndPasswordPressed, }) { - return signInWithEmailAndPassword?.call(); + return signInWithEmailAndPasswordPressed?.call(); } @override @@ -736,13 +747,13 @@ class _$SignInWithEmailAndPassword implements SignInWithEmailAndPassword { TResult maybeWhen({ TResult Function(String email)? emailChanged, TResult Function(String password)? passwordChanged, - TResult Function()? signInWithGoogle, - TResult Function()? registerWithEmailAndPassword, - TResult Function()? signInWithEmailAndPassword, + TResult Function()? signInWithGooglePressed, + TResult Function()? registerWithEmailAndPasswordPressed, + TResult Function()? signInWithEmailAndPasswordPressed, required TResult orElse(), }) { - if (signInWithEmailAndPassword != null) { - return signInWithEmailAndPassword(); + if (signInWithEmailAndPasswordPressed != null) { + return signInWithEmailAndPasswordPressed(); } return orElse(); } @@ -752,13 +763,14 @@ class _$SignInWithEmailAndPassword implements SignInWithEmailAndPassword { TResult map({ required TResult Function(EmailChanged value) emailChanged, required TResult Function(PasswordChanged value) passwordChanged, - required TResult Function(SignInWithGoogle value) signInWithGoogle, - required TResult Function(RegisterWithEmailAndPassword value) - registerWithEmailAndPassword, - required TResult Function(SignInWithEmailAndPassword value) - signInWithEmailAndPassword, + required TResult Function(SignInWithGooglePressed value) + signInWithGooglePressed, + required TResult Function(RegisterWithEmailAndPasswordPressed value) + registerWithEmailAndPasswordPressed, + required TResult Function(SignInWithEmailAndPasswordPressed value) + signInWithEmailAndPasswordPressed, }) { - return signInWithEmailAndPassword(this); + return signInWithEmailAndPasswordPressed(this); } @override @@ -766,13 +778,13 @@ class _$SignInWithEmailAndPassword implements SignInWithEmailAndPassword { TResult? mapOrNull({ TResult? Function(EmailChanged value)? emailChanged, TResult? Function(PasswordChanged value)? passwordChanged, - TResult? Function(SignInWithGoogle value)? signInWithGoogle, - TResult? Function(RegisterWithEmailAndPassword value)? - registerWithEmailAndPassword, - TResult? Function(SignInWithEmailAndPassword value)? - signInWithEmailAndPassword, + TResult? Function(SignInWithGooglePressed value)? signInWithGooglePressed, + TResult? Function(RegisterWithEmailAndPasswordPressed value)? + registerWithEmailAndPasswordPressed, + TResult? Function(SignInWithEmailAndPasswordPressed value)? + signInWithEmailAndPasswordPressed, }) { - return signInWithEmailAndPassword?.call(this); + return signInWithEmailAndPasswordPressed?.call(this); } @override @@ -780,20 +792,21 @@ class _$SignInWithEmailAndPassword implements SignInWithEmailAndPassword { TResult maybeMap({ TResult Function(EmailChanged value)? emailChanged, TResult Function(PasswordChanged value)? passwordChanged, - TResult Function(SignInWithGoogle value)? signInWithGoogle, - TResult Function(RegisterWithEmailAndPassword value)? - registerWithEmailAndPassword, - TResult Function(SignInWithEmailAndPassword value)? - signInWithEmailAndPassword, + TResult Function(SignInWithGooglePressed value)? signInWithGooglePressed, + TResult Function(RegisterWithEmailAndPasswordPressed value)? + registerWithEmailAndPasswordPressed, + TResult Function(SignInWithEmailAndPasswordPressed value)? + signInWithEmailAndPasswordPressed, required TResult orElse(), }) { - if (signInWithEmailAndPassword != null) { - return signInWithEmailAndPassword(this); + if (signInWithEmailAndPasswordPressed != null) { + return signInWithEmailAndPasswordPressed(this); } return orElse(); } } -abstract class SignInWithEmailAndPassword implements SignInFormEvent { - const factory SignInWithEmailAndPassword() = _$SignInWithEmailAndPassword; +abstract class SignInWithEmailAndPasswordPressed implements SignInFormEvent { + const factory SignInWithEmailAndPasswordPressed() = + _$SignInWithEmailAndPasswordPressed; } diff --git a/lib/application/auth/sign_in_form/sign_in_form_event.dart b/lib/application/auth/sign_in_form/sign_in_form_event.dart index 8e102f8..a271d92 100644 --- a/lib/application/auth/sign_in_form/sign_in_form_event.dart +++ b/lib/application/auth/sign_in_form/sign_in_form_event.dart @@ -6,10 +6,11 @@ class SignInFormEvent with _$SignInFormEvent { EmailChanged; const factory SignInFormEvent.passwordChanged({required String password}) = PasswordChanged; - const factory SignInFormEvent.signInWithGoogle() = SignInWithGoogle; + const factory SignInFormEvent.signInWithGooglePressed() = + SignInWithGooglePressed; - const factory SignInFormEvent.registerWithEmailAndPassword() = - RegisterWithEmailAndPassword; - const factory SignInFormEvent.signInWithEmailAndPassword() = - SignInWithEmailAndPassword; + const factory SignInFormEvent.registerWithEmailAndPasswordPressed() = + RegisterWithEmailAndPasswordPressed; + const factory SignInFormEvent.signInWithEmailAndPasswordPressed() = + SignInWithEmailAndPasswordPressed; } diff --git a/lib/application/auth/sign_in_form/sign_in_form_state.dart b/lib/application/auth/sign_in_form/sign_in_form_state.dart index a9b895f..5316bac 100644 --- a/lib/application/auth/sign_in_form/sign_in_form_state.dart +++ b/lib/application/auth/sign_in_form/sign_in_form_state.dart @@ -1,3 +1,4 @@ +import 'package:flutter/cupertino.dart'; import 'package:flutter_firebase_ddd_bloc/domain/auth/auth_failure.dart'; import 'package:flutter_firebase_ddd_bloc/domain/auth/value_objects.dart'; import 'package:fpdart/fpdart.dart'; @@ -10,7 +11,7 @@ class SignInFormState with _$SignInFormState { required EmailAddress emailAddress, required Password password, required bool isSubmitting, - required bool showErrorMessages, + required AutovalidateMode? showErrorMessages, required Option> authFailureOrSuccessOption, }) = _SignInFormState; @@ -20,7 +21,7 @@ class SignInFormState with _$SignInFormState { emailAddress: EmailAddress(""), password: Password(""), isSubmitting: false, - showErrorMessages: false, + showErrorMessages: AutovalidateMode.disabled, authFailureOrSuccessOption: none(), ); } diff --git a/lib/application/auth/sign_in_form/sign_in_form_state.freezed.dart b/lib/application/auth/sign_in_form/sign_in_form_state.freezed.dart index 99c380c..d1a0c9b 100644 --- a/lib/application/auth/sign_in_form/sign_in_form_state.freezed.dart +++ b/lib/application/auth/sign_in_form/sign_in_form_state.freezed.dart @@ -19,7 +19,7 @@ mixin _$SignInFormState { EmailAddress get emailAddress => throw _privateConstructorUsedError; Password get password => throw _privateConstructorUsedError; bool get isSubmitting => throw _privateConstructorUsedError; - bool get showErrorMessages => throw _privateConstructorUsedError; + AutovalidateMode? get showErrorMessages => throw _privateConstructorUsedError; Option> get authFailureOrSuccessOption => throw _privateConstructorUsedError; @@ -38,7 +38,7 @@ abstract class $SignInFormStateCopyWith<$Res> { {EmailAddress emailAddress, Password password, bool isSubmitting, - bool showErrorMessages, + AutovalidateMode? showErrorMessages, Option> authFailureOrSuccessOption}); } @@ -58,7 +58,7 @@ class _$SignInFormStateCopyWithImpl<$Res, $Val extends SignInFormState> Object? emailAddress = null, Object? password = null, Object? isSubmitting = null, - Object? showErrorMessages = null, + Object? showErrorMessages = freezed, Object? authFailureOrSuccessOption = null, }) { return _then(_value.copyWith( @@ -74,10 +74,10 @@ class _$SignInFormStateCopyWithImpl<$Res, $Val extends SignInFormState> ? _value.isSubmitting : isSubmitting // ignore: cast_nullable_to_non_nullable as bool, - showErrorMessages: null == showErrorMessages + showErrorMessages: freezed == showErrorMessages ? _value.showErrorMessages : showErrorMessages // ignore: cast_nullable_to_non_nullable - as bool, + as AutovalidateMode?, authFailureOrSuccessOption: null == authFailureOrSuccessOption ? _value.authFailureOrSuccessOption : authFailureOrSuccessOption // ignore: cast_nullable_to_non_nullable @@ -98,7 +98,7 @@ abstract class _$$_SignInFormStateCopyWith<$Res> {EmailAddress emailAddress, Password password, bool isSubmitting, - bool showErrorMessages, + AutovalidateMode? showErrorMessages, Option> authFailureOrSuccessOption}); } @@ -116,7 +116,7 @@ class __$$_SignInFormStateCopyWithImpl<$Res> Object? emailAddress = null, Object? password = null, Object? isSubmitting = null, - Object? showErrorMessages = null, + Object? showErrorMessages = freezed, Object? authFailureOrSuccessOption = null, }) { return _then(_$_SignInFormState( @@ -132,10 +132,10 @@ class __$$_SignInFormStateCopyWithImpl<$Res> ? _value.isSubmitting : isSubmitting // ignore: cast_nullable_to_non_nullable as bool, - showErrorMessages: null == showErrorMessages + showErrorMessages: freezed == showErrorMessages ? _value.showErrorMessages : showErrorMessages // ignore: cast_nullable_to_non_nullable - as bool, + as AutovalidateMode?, authFailureOrSuccessOption: null == authFailureOrSuccessOption ? _value.authFailureOrSuccessOption : authFailureOrSuccessOption // ignore: cast_nullable_to_non_nullable @@ -162,7 +162,7 @@ class _$_SignInFormState extends _SignInFormState { @override final bool isSubmitting; @override - final bool showErrorMessages; + final AutovalidateMode? showErrorMessages; @override final Option> authFailureOrSuccessOption; @@ -206,7 +206,7 @@ abstract class _SignInFormState extends SignInFormState { {required final EmailAddress emailAddress, required final Password password, required final bool isSubmitting, - required final bool showErrorMessages, + required final AutovalidateMode? showErrorMessages, required final Option> authFailureOrSuccessOption}) = _$_SignInFormState; _SignInFormState._() : super._(); @@ -218,7 +218,7 @@ abstract class _SignInFormState extends SignInFormState { @override bool get isSubmitting; @override - bool get showErrorMessages; + AutovalidateMode? get showErrorMessages; @override Option> get authFailureOrSuccessOption; @override diff --git a/lib/infrastructure/auth/firebase_auth_facade.dart b/lib/infrastructure/auth/firebase_auth_facade.dart index f81e409..b234d9a 100644 --- a/lib/infrastructure/auth/firebase_auth_facade.dart +++ b/lib/infrastructure/auth/firebase_auth_facade.dart @@ -71,10 +71,10 @@ class FirebaseAuthFacade implements IAuthFacade { final googleUser = await _googleSignIn.signIn(); if (googleUser == null) { - left(const AuthFailure.cancelledByUser()); + return left(const AuthFailure.cancelledByUser()); } - final googleAuth = await googleUser!.authentication; + final googleAuth = await googleUser.authentication; final authCredential = GoogleAuthProvider.credential( idToken: googleAuth.idToken, diff --git a/lib/main.dart b/lib/main.dart index ec85f06..64fd27f 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -2,29 +2,12 @@ import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; import 'package:flutter_firebase_ddd_bloc/firebase_options.dart'; import 'package:flutter_firebase_ddd_bloc/injection.dart'; +import 'package:flutter_firebase_ddd_bloc/presentation/core/app_widget.dart'; import 'package:injectable/injectable.dart'; void main() async { + WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform); configureInjection(Environment.prod); runApp(const AppWidget()); } - -class AppWidget extends StatelessWidget { - const AppWidget({super.key}); - - @override - Widget build(BuildContext context) { - return MaterialApp( - title: 'Material App', - home: Scaffold( - appBar: AppBar( - title: const Text('Material App Bar'), - ), - body: const Center( - child: Text('Hello World'), - ), - ), - ); - } -} diff --git a/lib/presentation/core/app_widget.dart b/lib/presentation/core/app_widget.dart new file mode 100644 index 0000000..b9be7b9 --- /dev/null +++ b/lib/presentation/core/app_widget.dart @@ -0,0 +1,26 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_firebase_ddd_bloc/presentation/sign_in/sign_in_page.dart'; + +class AppWidget extends StatelessWidget { + const AppWidget({super.key}); + + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Notes', + home: SignInPage(), + debugShowCheckedModeBanner: false, + theme: ThemeData.light().copyWith( + primaryColor: Colors.green[800], + colorScheme: ColorScheme.fromSwatch().copyWith( + secondary: Colors.blueAccent, + ), + inputDecorationTheme: InputDecorationTheme( + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(8), + ), + ), + ), + ); + } +} diff --git a/lib/presentation/sign_in/sign_in_page.dart b/lib/presentation/sign_in/sign_in_page.dart new file mode 100644 index 0000000..65f85ab --- /dev/null +++ b/lib/presentation/sign_in/sign_in_page.dart @@ -0,0 +1,20 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter_firebase_ddd_bloc/application/auth/sign_in_form/sign_in_form_bloc.dart'; +import 'package:flutter_firebase_ddd_bloc/injection.dart'; +import 'package:flutter_firebase_ddd_bloc/presentation/sign_in/widgets/sign_in_form.dart'; + +class SignInPage extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: const Text('Sign In'), + ), + body: BlocProvider( + create: (context) => getIt(), + child: SignInForm(), + ), + ); + } +} diff --git a/lib/presentation/sign_in/widgets/sign_in_form.dart b/lib/presentation/sign_in/widgets/sign_in_form.dart new file mode 100644 index 0000000..f7c8b65 --- /dev/null +++ b/lib/presentation/sign_in/widgets/sign_in_form.dart @@ -0,0 +1,140 @@ +import 'package:another_flushbar/flushbar_helper.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter_firebase_ddd_bloc/application/auth/sign_in_form/sign_in_form_bloc.dart'; +import 'package:flutter_firebase_ddd_bloc/application/auth/sign_in_form/sign_in_form_state.dart'; + +class SignInForm extends StatelessWidget { + @override + Widget build(BuildContext context) { + return BlocConsumer( + listener: (context, state) { + state.authFailureOrSuccessOption.fold( + () {}, + (either) => either.fold( + (failure) { + FlushbarHelper.createError( + message: failure.map( + cancelledByUser: (_) => 'Cancelled', + serverError: (_) => 'Server error', + emailAlreadyInUse: (_) => 'Email already in use', + invalidEmailAndPasswordCombination: (_) => + 'Invalid email and password combination', + ), + ).show(context); + }, + (_) { + // TODO: Navigate + }, + ), + ); + }, + builder: (context, state) { + return Form( + autovalidateMode: state.showErrorMessages, + child: ListView( + padding: const EdgeInsets.all(8), + children: [ + const Text( + '📝', + textAlign: TextAlign.center, + style: TextStyle(fontSize: 50), + ), + const SizedBox(height: 8), + TextFormField( + decoration: const InputDecoration( + prefixIcon: Icon(Icons.email), + labelText: 'Email', + ), + autocorrect: false, + onChanged: (value) => context.read().add( + SignInFormEvent.emailChanged(email: value), + ), + validator: (_) => context + .read() + .state + .emailAddress + .value + .fold( + (f) => f.maybeMap( + invalidEmail: (_) => 'Invalid Email', + orElse: () => null, + ), + (_) => null, + ), + ), + const SizedBox(height: 8), + TextFormField( + decoration: const InputDecoration( + prefixIcon: Icon(Icons.lock), + labelText: 'Password', + ), + autocorrect: false, + obscureText: true, + onChanged: (value) => context.read().add( + SignInFormEvent.passwordChanged(password: value), + ), + validator: (_) => + context.read().state.password.value.fold( + (f) => f.maybeMap( + shortPassword: (_) => 'Short Password', + orElse: () => null, + ), + (_) => null, + ), + ), + const SizedBox(height: 8), + Row( + children: [ + Expanded( + child: TextButton( + onPressed: () { + context.read().add( + const SignInFormEvent + .signInWithEmailAndPasswordPressed(), + ); + }, + child: const Text('SIGN IN'), + ), + ), + Expanded( + child: TextButton( + onPressed: () { + context.read().add( + const SignInFormEvent + .registerWithEmailAndPasswordPressed(), + ); + }, + child: const Text('REGISTER'), + ), + ), + ], + ), + ElevatedButton( + onPressed: () { + context.read().add( + const SignInFormEvent.signInWithGooglePressed(), + ); + }, + style: ButtonStyle( + foregroundColor: MaterialStateProperty.all(Colors.lightBlue), + ), + child: const Text( + 'SIGN IN WITH GOOGLE', + style: TextStyle( + color: Colors.white, + fontWeight: FontWeight.bold, + ), + ), + ), + if (state.isSubmitting) ...[ + const SizedBox(height: 8), + const LinearProgressIndicator(), + ] + ], + ), + ); + }, + ); + } +} diff --git a/pubspec.yaml b/pubspec.yaml index 58041d0..cc7396b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -39,6 +39,7 @@ dependencies: firebase_auth: ^4.0.1 injectable: ^1.5.3 get_it: ^7.2.0 + another_flushbar: ^1.12.29 # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.2 diff --git a/test/widget_test.dart b/test/widget_test.dart index 494d4aa..e2614d8 100644 --- a/test/widget_test.dart +++ b/test/widget_test.dart @@ -6,10 +6,9 @@ // tree, read text, and verify that the values of widget properties are correct. import 'package:flutter/material.dart'; +import 'package:flutter_firebase_ddd_bloc/presentation/core/app_widget.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:flutter_firebase_ddd_bloc/main.dart'; - void main() { testWidgets('Counter increments smoke test', (WidgetTester tester) async { // Build our app and trigger a frame.