LCOV - code coverage report
Current view: top level - src/home/presentation/bloc - home_bloc.dart (source / functions) Hit Total Coverage
Test: lcov.info Lines: 32 32 100.0 %
Date: 2026-03-02 18:37:46 Functions: 0 0 -

          Line data    Source code
       1             : import 'dart:async';
       2             : 
       3             : import 'package:tech_proof/data/repositories/movies_repository_imp.dart';
       4             : import 'package:tech_proof/domain/entities/movie_entity.dart';
       5             : import 'package:bloc_concurrency/bloc_concurrency.dart';
       6             : import 'package:flutter_bloc/flutter_bloc.dart';
       7             : import 'package:equatable/equatable.dart';
       8             : 
       9             : part 'home_event.dart';
      10             : part 'home_state.dart';
      11             : 
      12             : class HomeBloc extends Bloc<HomeEvent, HomeState> {
      13             :   final MovieRepositoryImpl movieRepository;
      14           6 :   HomeBloc({required this.movieRepository}) : super(HomeInitial()) {
      15           4 :     on<HomeEvent>((event, emit) {});
      16           4 :     on<HomeInit>(_homeInit);
      17           6 :     on<HomeShowLoading>(_showLoading, transformer: droppable());
      18           6 :     on<HomeLoadMore>(_homeLoadMore, transformer: droppable());
      19             :   }
      20             : 
      21           1 :   FutureOr<void> _homeInit(HomeInit event, Emitter<HomeState> emit) async {
      22           2 :     emit(HomeLoading());
      23             : 
      24           2 :     final popularMovies = await movieRepository.getPopularMovies();
      25             : 
      26           1 :     popularMovies.fold(
      27           3 :       (l) => emit(HomeError()),
      28           2 :       (r) => emit(
      29           4 :         HomeReady(movies: r.results, page: r.page, totalPages: r.totalPages),
      30             :       ),
      31             :     );
      32             :   }
      33             : 
      34           2 :   FutureOr<void> _homeLoadMore(
      35             :     HomeLoadMore event,
      36             :     Emitter<HomeState> emit,
      37             :   ) async {
      38           4 :     if (state is! HomeReady) return;
      39           2 :     final homeReadyState = state as HomeReady;
      40           4 :     final nextPage = homeReadyState.page + 1;
      41             : 
      42           4 :     final newMovies = await movieRepository.getPopularMovies(page: nextPage);
      43             : 
      44           7 :     newMovies.fold((l) => emit(HomeError()), (r) {
      45           4 :       final updatedMovies = List<MovieEntity>.from(homeReadyState.movies)
      46           4 :         ..addAll(r.results);
      47             : 
      48           2 :       emit(
      49           2 :         HomeReady(
      50             :           movies: updatedMovies,
      51           2 :           page: r.page,
      52           2 :           totalPages: r.totalPages,
      53             :           isLoadingMore: false,
      54             :         ),
      55             :       );
      56             :     });
      57             :   }
      58             : 
      59           2 :   FutureOr<void> _showLoading(
      60             :     HomeShowLoading event,
      61             :     Emitter<HomeState> emit,
      62             :   ) async {
      63           4 :     if (state is! HomeReady) return;
      64           2 :     final homeReadyState = state as HomeReady;
      65           2 :     emit(
      66           2 :       HomeReady(
      67           2 :         movies: homeReadyState.movies,
      68           2 :         page: homeReadyState.page,
      69           2 :         totalPages: homeReadyState.totalPages,
      70             :         isLoadingMore: true,
      71             :       ),
      72             :     );
      73             :   }
      74             : }

Generated by: LCOV version 1.14