Skip to content

Commit 31c56fc

Browse files
authored
Merge pull request #9 from piashcse/feat-artist-detail
Implemented artist detail page
2 parents 66ca835 + 12dd432 commit 31c56fc

File tree

12 files changed

+430
-79
lines changed

12 files changed

+430
-79
lines changed

lib/features/movie/data/datasources/movie_remote_data_source.dart

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'package:dio/dio.dart';
2+
import 'package:flutter_movie_clean_architecture/features/movie/data/models/artist_detail_model.dart';
23
import 'package:flutter_movie_clean_architecture/features/movie/data/models/credit_model.dart';
34
import 'package:flutter_movie_clean_architecture/features/movie/data/models/movie_detail_model.dart';
45
import 'package:flutter_movie_clean_architecture/features/movie/data/models/movie_model.dart';
@@ -58,16 +59,21 @@ class MovieRemoteDataSource {
5859
.map((e) => MovieModel.fromJson(e))
5960
.toList();
6061
}
62+
6163
Future<List<MovieModel>> getRecommendedMovie(int movieId) async {
62-
final response =
63-
await dio.get('movie/$movieId/recommendations');
64+
final response = await dio.get('movie/$movieId/recommendations');
6465
return (response.data['results'] as List)
6566
.map((e) => MovieModel.fromJson(e))
6667
.toList();
6768
}
68-
Future<Credit> getMovieCredits(int movieId) async {
69-
final response =
70-
await dio.get('movie/$movieId/credits');
71-
return Credit.fromJson(response.data as Map<String, dynamic>);
69+
70+
Future<CreditModel> getMovieCredits(int movieId) async {
71+
final response = await dio.get('movie/$movieId/credits');
72+
return CreditModel.fromJson(response.data as Map<String, dynamic>);
73+
}
74+
75+
Future<ArtistDetailModel> getArtistDetail(int artistId) async {
76+
final response = await dio.get('person/$artistId');
77+
return ArtistDetailModel.fromJson(response.data as Map<String, dynamic>);
7278
}
7379
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import 'package:freezed_annotation/freezed_annotation.dart';
2+
3+
part 'artist_detail_model.freezed.dart';
4+
part 'artist_detail_model.g.dart';
5+
6+
@freezed
7+
class ArtistDetailModel with _$ArtistDetailModel{
8+
const factory ArtistDetailModel({
9+
required bool adult,
10+
@JsonKey(name: 'also_known_as') required List<String> alsoKnownAs,
11+
required String biography,
12+
String? birthday,
13+
String? deathday,
14+
required int gender,
15+
String? homepage,
16+
required int id,
17+
@JsonKey(name: 'imdb_id') String? imdbId,
18+
@JsonKey(name: 'known_for_department') required String knownForDepartment,
19+
required String name,
20+
@JsonKey(name: 'place_of_birth') String? placeOfBirth,
21+
required double popularity,
22+
@JsonKey(name: 'profile_path') String? profilePath,
23+
}) = _ArtistDetailModel;
24+
25+
factory ArtistDetailModel.fromJson(Map<String, dynamic> json) =>
26+
_$ArtistDetailModelFromJson(json);
27+
}

lib/features/movie/data/models/credit_model.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ part 'credit_model.freezed.dart';
44
part 'credit_model.g.dart';
55

66
@freezed
7-
class Credit with _$Credit {
8-
const factory Credit({
7+
class CreditModel with _$CreditModel {
8+
const factory CreditModel({
99
required int id,
1010
List<Cast>? cast,
1111
List<Crew>? crew,
12-
}) = _Credit;
12+
}) = _CreditModel;
1313

14-
factory Credit.fromJson(Map<String, dynamic> json) => _$CreditFromJson(json);
14+
factory CreditModel.fromJson(Map<String, dynamic> json) => _$CreditModelFromJson(json);
1515
}
1616

1717
@freezed

lib/features/movie/data/repositories/movie_repository_impl.dart

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'package:flutter_movie_clean_architecture/features/movie/data/datasources/movie_remote_data_source.dart';
22
import 'package:flutter_movie_clean_architecture/features/movie/data/models/credit_model.dart';
3+
import 'package:flutter_movie_clean_architecture/features/movie/domain/entities/ArtistDetail.dart';
34
import 'package:flutter_movie_clean_architecture/features/movie/domain/entities/movie.dart';
45
import 'package:flutter_movie_clean_architecture/features/movie/domain/entities/movie_detail.dart';
56
import 'package:flutter_movie_clean_architecture/features/movie/domain/repositories/entities/movie_repository.dart';
@@ -109,12 +110,26 @@ class MovieRepositoryImpl implements MovieRepository {
109110
}
110111

111112
@override
112-
Future<Credit> getMovieCredits(int movieId) async {
113+
Future<CreditModel> getMovieCredits(int movieId) async {
113114
final model = await remoteDataSource.getMovieCredits(movieId);
114-
return Credit(
115+
return CreditModel(
115116
id: model.id,
116117
cast: model.cast,
117118
crew: model.crew,
118119
);
119120
}
121+
122+
@override
123+
Future<Artistdetail> getArtistDetail(int artistId) async {
124+
final model = await remoteDataSource.getArtistDetail(artistId);
125+
return Artistdetail(
126+
id: model.id,
127+
name: model.name,
128+
profilePath: model.profilePath,
129+
biography: model.biography,
130+
knownForDepartment: model.knownForDepartment,
131+
placeOfBirth: model.placeOfBirth ?? '',
132+
birthday: model.birthday ?? '',
133+
);
134+
}
120135
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Artistdetail {
2+
final int id;
3+
final String name;
4+
final String? profilePath;
5+
final String biography;
6+
final String knownForDepartment;
7+
final String placeOfBirth;
8+
final String birthday;
9+
10+
Artistdetail({
11+
required this.id,
12+
required this.name,
13+
required this.profilePath,
14+
required this.biography,
15+
required this.knownForDepartment,
16+
required this.placeOfBirth,
17+
required this.birthday,
18+
});
19+
}

lib/features/movie/domain/repositories/entities/movie_repository.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'package:flutter_movie_clean_architecture/features/movie/data/models/credit_model.dart';
2+
import 'package:flutter_movie_clean_architecture/features/movie/domain/entities/ArtistDetail.dart';
23
import 'package:flutter_movie_clean_architecture/features/movie/domain/entities/movie.dart';
34
import 'package:flutter_movie_clean_architecture/features/movie/domain/entities/movie_detail.dart';
45

@@ -10,5 +11,6 @@ abstract class MovieRepository {
1011
Future<MovieDetail> getMovieDetail(int movieId);
1112
Future<List<Movie>> getMovieSearch(String query);
1213
Future<List<Movie>> getRecommendedMovie(int movieId);
13-
Future<Credit> getMovieCredits(int movieId);
14+
Future<CreditModel> getMovieCredits(int movieId);
15+
Future<Artistdetail> getArtistDetail(int artistId);
1416
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import 'package:flutter_movie_clean_architecture/features/movie/domain/entities/ArtistDetail.dart';
2+
import 'package:flutter_movie_clean_architecture/features/movie/domain/repositories/entities/movie_repository.dart';
3+
4+
class GetArtistDetail {
5+
final MovieRepository repository;
6+
7+
GetArtistDetail(this.repository);
8+
9+
Future<Artistdetail> call(int artistId) =>
10+
repository.getArtistDetail(artistId);
11+
}

lib/features/movie/domain/repositories/usecases/get_movie_credits.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ class GetMovieCredits {
66

77
GetMovieCredits(this.repository);
88

9-
Future<Credit> call(int movieId) => repository.getMovieCredits(movieId);
9+
Future<CreditModel> call(int movieId) => repository.getMovieCredits(movieId);
1010
}

0 commit comments

Comments
 (0)