Skip to content

Commit ead1ad9

Browse files
committed
Add MovieDetailsCubit and integrate movie details loading in DetailsPage
1 parent 4e94f7d commit ead1ad9

File tree

5 files changed

+297
-250
lines changed

5 files changed

+297
-250
lines changed

lib/app/app.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
22
import 'package:flutter_bloc/flutter_bloc.dart';
33
import 'package:tmdb_flutter/app/cubit/favorite_movies_cubit.dart';
44
import 'package:tmdb_flutter/app/cubit/home_cubit.dart';
5+
import 'package:tmdb_flutter/app/cubit/movie_details_cubit.dart';
56
import 'package:tmdb_flutter/app/injection.dart';
67
import 'package:tmdb_flutter/app/view/main_page.dart';
78

@@ -18,6 +19,9 @@ class App extends StatelessWidget {
1819
BlocProvider(
1920
create: (context) => getIt<FavoriteMoviesCubit>(),
2021
),
22+
BlocProvider(
23+
create: (context) => getIt<MovieDetailsCubit>(),
24+
),
2125
],
2226
child: MaterialApp(
2327
title: 'TMDB Movies',
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import 'package:flutter_bloc/flutter_bloc.dart';
2+
import 'package:tmdb_flutter/app/data/repository/movies_repository.dart';
3+
import 'package:tmdb_flutter/app/cubit/movie_details_state.dart';
4+
5+
class MovieDetailsCubit extends Cubit<MovieDetailsState> {
6+
MovieDetailsCubit(this._repository) : super(MovieDetailsInitial());
7+
8+
final MoviesRepository _repository;
9+
10+
Future<void> loadMovieDetails(int movieId) async {
11+
try {
12+
emit(MovieDetailsLoading());
13+
final movieDetails = await _repository.getMovieDetails(movieId);
14+
final credits = await _repository.getMovieCredits(movieId);
15+
emit(MovieDetailsLoaded(
16+
movieDetails: movieDetails,
17+
credits: credits,
18+
));
19+
} catch (e) {
20+
emit(MovieDetailsError(e.toString()));
21+
}
22+
}
23+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import 'package:equatable/equatable.dart';
2+
import 'package:tmdb_flutter/app/data/remote/models/movie_responses.dart';
3+
4+
abstract class MovieDetailsState extends Equatable {
5+
const MovieDetailsState();
6+
7+
@override
8+
List<Object?> get props => [];
9+
}
10+
11+
class MovieDetailsInitial extends MovieDetailsState {}
12+
13+
class MovieDetailsLoading extends MovieDetailsState {}
14+
15+
class MovieDetailsLoaded extends MovieDetailsState {
16+
const MovieDetailsLoaded({
17+
required this.movieDetails,
18+
required this.credits,
19+
});
20+
21+
final MovieDetailsResponse movieDetails;
22+
final CreditsResponse credits;
23+
24+
@override
25+
List<Object?> get props => [movieDetails, credits];
26+
}
27+
28+
class MovieDetailsError extends MovieDetailsState {
29+
const MovieDetailsError(this.message);
30+
31+
final String message;
32+
33+
@override
34+
List<Object?> get props => [message];
35+
}

lib/app/injection.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'package:tmdb_flutter/app/data/local/database_helper.dart';
66
import 'package:tmdb_flutter/app/data/local/favorite_movies_local_data_source.dart';
77
import 'package:tmdb_flutter/app/data/remote/movie_api.dart';
88
import 'package:tmdb_flutter/app/data/repository/movies_repository.dart';
9+
import 'package:tmdb_flutter/app/cubit/movie_details_cubit.dart';
910

1011
final getIt = GetIt.instance;
1112

@@ -31,5 +32,6 @@ Future<void> configureDependencies() async {
3132
)
3233
..registerFactory<FavoriteMoviesCubit>(
3334
() => FavoriteMoviesCubit(getIt<MoviesRepository>()),
34-
);
35+
)
36+
..registerFactory(() => MovieDetailsCubit(getIt()));
3537
}

0 commit comments

Comments
 (0)