Skip to content

Commit

Permalink
Flutter Firebase & DDD Course [8] done
Browse files Browse the repository at this point in the history
  • Loading branch information
FlutterWiz committed Oct 21, 2022
1 parent 58165d3 commit a8af0a6
Show file tree
Hide file tree
Showing 12 changed files with 495 additions and 296 deletions.
89 changes: 52 additions & 37 deletions lib/application/auth/sign_in_form/sign_in_form_bloc.dart
Original file line number Diff line number Diff line change
@@ -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';
Expand All @@ -14,12 +15,15 @@ part 'sign_in_form_bloc.freezed.dart';
@injectable
class SignInFormBloc extends Bloc<SignInFormEvent, SignInFormState> {
SignInFormBloc(this._authFacade) : super(SignInFormState.initial()) {
on<SignInWithEmailAndPassword>(
on<SignInWithEmailAndPasswordPressed>(
(event, emit) => signInWithEmailAndPassword(event, emit),
);
on<RegisterWithEmailAndPassword>(
on<RegisterWithEmailAndPasswordPressed>(
(event, emit) => registerWithEmailAndPassword(event, emit),
);
on<SignInWithGooglePressed>(
(event, emit) => signInWithGoogle(event, emit),
);
on<EmailChanged>(
(event, emit) => changeEmailAddress(event, emit),
);
Expand Down Expand Up @@ -49,51 +53,41 @@ class SignInFormBloc extends Bloc<SignInFormEvent, SignInFormState> {
}

Future<void> registerWithEmailAndPassword(
RegisterWithEmailAndPassword event, Emitter<SignInFormState> emit) async {
_performActionOnAuthFacadeWithEmailAndPassword(
right(event),
emit,
_authFacade.registerWithEmailAndPassword,
);
}
RegisterWithEmailAndPasswordPressed event,
Emitter<SignInFormState> emit,
) async {
Either<AuthFailure, Unit>? failureOrSuccess;

Future<void> signInWithEmailAndPassword(
SignInWithEmailAndPassword event, Emitter<SignInFormState> emit) async {
_performActionOnAuthFacadeWithEmailAndPassword(
left(event),
emit,
_authFacade.signInWithEmailAndPassword,
);
}
final isEmailValid = state.emailAddress.isValid();
final isPasswordValid = state.password.isValid();

Future<void> signInWithGoogle(
PasswordChanged event, Emitter<SignInFormState> 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<SignInFormState> _performActionOnAuthFacadeWithEmailAndPassword(
Either<SignInWithEmailAndPassword, RegisterWithEmailAndPassword> event,
Future<void> signInWithEmailAndPassword(
SignInWithEmailAndPasswordPressed event,
Emitter<SignInFormState> emit,
Future<Either<AuthFailure, Unit>> Function({
required EmailAddress emailAddress,
required Password password,
})
forwardedCall,
) async* {
) async {
Either<AuthFailure, Unit>? failureOrSuccess;

final isEmailValid = state.emailAddress.isValid();
Expand All @@ -107,7 +101,7 @@ class SignInFormBloc extends Bloc<SignInFormEvent, SignInFormState> {
),
);

failureOrSuccess = await forwardedCall(
failureOrSuccess = await _authFacade.signInWithEmailAndPassword(
emailAddress: state.emailAddress,
password: state.password,
);
Expand All @@ -116,9 +110,30 @@ class SignInFormBloc extends Bloc<SignInFormEvent, SignInFormState> {
emit(
state.copyWith(
isSubmitting: false,
showErrorMessages: true,
showErrorMessages: AutovalidateMode.onUserInteraction,
authFailureOrSuccessOption: optionOf(failureOrSuccess),
),
);
}

Future<void> signInWithGoogle(
SignInWithGooglePressed event,
Emitter<SignInFormState> emit,
) async {
emit(
state.copyWith(
isSubmitting: true,
authFailureOrSuccessOption: none(),
),
);

final failureOrSuccess = await _authFacade.signInWithGoogle();

emit(
state.copyWith(
isSubmitting: false,
authFailureOrSuccessOption: some(failureOrSuccess),
),
);
}
}
Loading

0 comments on commit a8af0a6

Please sign in to comment.