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

          Line data    Source code
       1             : import 'package:tech_proof/data/repositories/movies_repository_imp.dart';
       2             : import 'package:tech_proof/presentation/widgets/tt_app_bar.dart';
       3             : import 'package:tech_proof/presentation/widgets/tt_loading_logo.dart';
       4             : import 'package:tech_proof/presentation/widgets/tt_movie_grid.dart';
       5             : import 'package:tech_proof/src/home/presentation/bloc/home_bloc.dart';
       6             : import 'package:flutter/material.dart';
       7             : import 'package:flutter_bloc/flutter_bloc.dart';
       8             : 
       9             : class HomePage extends StatelessWidget {
      10           0 :   const HomePage({super.key});
      11             : 
      12           0 :   @override
      13             :   Widget build(BuildContext context) {
      14           0 :     return BlocProvider(
      15           0 :       create: (context) => HomeBloc(
      16           0 :          movieRepository: context.read<MovieRepositoryImpl>(),
      17           0 :       )..add(HomeInit()),
      18           0 :       child: BlocBuilder<HomeBloc, HomeState>(
      19           0 :         builder: (context, state) {
      20           0 :           return HomePageView(
      21             :             
      22             :           );
      23             :         },
      24             :       ),
      25             :     );
      26             :   }
      27             : }
      28             : 
      29             : class HomePageView extends StatefulWidget {
      30           1 :   const HomePageView({super.key});
      31             : 
      32           1 :   @override
      33           1 :   State<HomePageView> createState() => _HomePageViewState();
      34             :   
      35             : }
      36             : 
      37             : class _HomePageViewState extends State<HomePageView> {
      38             :     final ScrollController _scrollController = ScrollController();
      39             : 
      40           1 :    @override
      41             :   void initState() {
      42           1 :     super.initState();
      43           3 :     _scrollController.addListener(_onScroll);
      44             :   }
      45             : 
      46           1 :   void _onScroll() {
      47           4 :     if (_scrollController.position.pixels >=
      48           4 :         _scrollController.position.maxScrollExtent - 200) {
      49           4 :         context.read<HomeBloc>().add(HomeShowLoading());
      50           4 :         context.read<HomeBloc>().add(HomeLoadMore());
      51             :     }
      52             :   }
      53             : 
      54           1 :   @override
      55             :   void dispose() {
      56             :     
      57           2 :     _scrollController.dispose();
      58           1 :     super.dispose();
      59             :   }
      60             : 
      61           1 :   @override
      62             :   Widget build(BuildContext context) {
      63           2 :     final currentState = context.watch<HomeBloc>().state;
      64             : 
      65           2 :     if (currentState is HomeLoading || currentState is HomeInitial) {
      66           1 :       return Column(
      67           1 :         children: [
      68           2 :           Expanded(child: TtLoadingLogo()),
      69             :         ],
      70             :       );
      71             :     }
      72           1 :     if (currentState is HomeReady) {
      73           1 :     return Scaffold(
      74           1 :       appBar: TtAppBar(
      75             :         title: 'Popular Movies',
      76             :       ),
      77           1 :       body: CustomScrollView(
      78           1 :         key: ValueKey('home_scroll_view'),
      79           1 :         controller: _scrollController,
      80           1 :         slivers: [
      81           1 :           SliverPadding(
      82             :             padding: const EdgeInsets.all(24.0),
      83           2 :             sliver: TtMovieGrid(movieList: currentState.movies),
      84             :           ),
      85           1 :           if (currentState.isLoadingMore)
      86           0 :             SliverToBoxAdapter(
      87           0 :               child: Padding(
      88             :                 padding: const EdgeInsets.all(16.0),
      89           0 :                 child: TtLoadingLogo(),
      90             :               ),
      91             :             ),
      92             :         ],
      93             :       ),
      94             :     );
      95             :   }
      96           1 :   if (currentState is HomeError) {
      97           1 :     return Scaffold(
      98           1 :       appBar: TtAppBar(),
      99           1 :       body: Center(
     100           1 :         child: Text('An error occurred. Please try again later.'),
     101             :       ),
     102             :     );
     103             :   }
     104           0 :   return SizedBox.shrink();
     105             :   }
     106             : }
     107             : 
     108             : 

Generated by: LCOV version 1.14