Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 4604a05

Browse files
adding filter ui
1 parent d77e021 commit 4604a05

20 files changed

+565
-77
lines changed

‎data/lib/di/di.config.dart‎

Lines changed: 24 additions & 20 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import 'package:domain/repository/filter_repository.dart';
2+
import 'package:injectable/injectable.dart';
3+
import 'package:remote/datasource/movies_shows_data_source.dart';
4+
import 'package:remote/model/genres_request.dart';
5+
6+
@Singleton(as: FilterRepository)
7+
class FilterRepositoryImpl extends FilterRepository {
8+
final MoviesShowsDataSource moviesShowsDataSource;
9+
10+
FilterRepositoryImpl(this.moviesShowsDataSource);
11+
12+
@override
13+
Future getGenres(String type) {
14+
return moviesShowsDataSource.getGenres(GenresRequest(type: type));
15+
}
16+
17+
}

‎domain/lib/di/di.config.dart‎

Lines changed: 43 additions & 36 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
class MovieShowGenresRecord {
2+
List<Genres>? genres;
3+
4+
MovieShowGenresRecord({this.genres});
5+
6+
MovieShowGenresRecord.fromJson(Map<String, dynamic> json) {
7+
if (json['genres'] != null) {
8+
genres = <Genres>[];
9+
json['genres'].forEach((v) {
10+
genres?.add(new Genres.fromJson(v));
11+
});
12+
}
13+
}
14+
15+
Map<String, dynamic> toJson() {
16+
final Map<String, dynamic> data = new Map<String, dynamic>();
17+
if (this.genres != null) {
18+
data['genres'] = this.genres!.map((v) => v.toJson()).toList();
19+
}
20+
return data;
21+
}
22+
}
23+
24+
class Genres {
25+
int? id;
26+
String? name;
27+
28+
Genres({this.id, this.name});
29+
30+
Genres.fromJson(Map<String, dynamic> json) {
31+
id = json['id'];
32+
name = json['name'];
33+
}
34+
35+
Map<String, dynamic> toJson() {
36+
final Map<String, dynamic> data = new Map<String, dynamic>();
37+
data['id'] = this.id;
38+
data['name'] = this.name;
39+
return data;
40+
}
41+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
abstract class FilterRepository {
2+
Future<dynamic> getGenres(String type);
3+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import 'package:domain/repository/filter_repository.dart';
2+
import 'package:injectable/injectable.dart';
3+
4+
@injectable
5+
class MovieFilterUseCase {
6+
final FilterRepository repository;
7+
8+
MovieFilterUseCase(this.repository);
9+
10+
Future<dynamic> getMovieGenres({required String type}) {
11+
return repository.getGenres(type);
12+
}
13+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import 'package:domain/repository/filter_repository.dart';
2+
import 'package:injectable/injectable.dart';
3+
4+
@injectable
5+
class ShowFilterUseCase {
6+
final FilterRepository repository;
7+
8+
ShowFilterUseCase(this.repository);
9+
10+
Future<dynamic> getShowGenres({required String type}) {
11+
return repository.getGenres(type);
12+
}
13+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import 'package:domain/model/movie_show_genres_record.dart';
2+
import 'package:domain/usecase/filter/movie_filter_use_case.dart';
3+
import 'package:domain/usecase/filter/show_filter_use_case.dart';
4+
import 'package:flutter/cupertino.dart';
5+
import 'package:flutter_bloc/flutter_bloc.dart';
6+
import 'package:fun_box/bloc/filter/movies_shows_filter_event.dart';
7+
import 'package:fun_box/bloc/filter/movies_shows_filter_state.dart';
8+
import 'package:fun_box/utils/app_constants.dart';
9+
import 'package:injectable/injectable.dart';
10+
11+
@injectable
12+
class MoviesShowsFilterBloc
13+
extends Bloc<MoviesShowsFilterEvent, MoviesShowsFilterState> {
14+
final MovieFilterUseCase movieFilterUseCase;
15+
final ShowFilterUseCase showFilterUseCase;
16+
17+
MoviesShowsFilterBloc(this.movieFilterUseCase, this.showFilterUseCase)
18+
: super(InitialMoviesShowsFilterState());
19+
20+
@override
21+
Stream<MoviesShowsFilterState> mapEventToState(
22+
MoviesShowsFilterEvent event) async* {
23+
switch (event.type) {
24+
case AppConstants.movie:
25+
yield* _fetchMovieFilters(event.type);
26+
break;
27+
case AppConstants.tvShow:
28+
yield* _fetchShowFilters(event.type);
29+
break;
30+
default:
31+
break;
32+
}
33+
}
34+
35+
Stream<MoviesShowsFilterState> _fetchMovieFilters(String type) async* {
36+
try {
37+
var response = await movieFilterUseCase.getMovieGenres(type: type);
38+
yield SuccessMoviesShowsFilterState(
39+
MovieShowGenresRecord.fromJson(response));
40+
} catch (exception) {
41+
debugPrint('Error ${exception.toString()}');
42+
yield ErrorMoviesShowsFilterState();
43+
}
44+
}
45+
46+
Stream<MoviesShowsFilterState> _fetchShowFilters(String type) async* {
47+
try {
48+
var response = await showFilterUseCase.getShowGenres(type: type);
49+
yield SuccessMoviesShowsFilterState(
50+
MovieShowGenresRecord.fromJson(response));
51+
} catch (exception) {
52+
debugPrint('Error ${exception.toString()}');
53+
yield ErrorMoviesShowsFilterState();
54+
}
55+
}
56+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class MoviesShowsFilterEvent {
2+
final String type;
3+
4+
MoviesShowsFilterEvent({required this.type});
5+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import 'package:domain/model/movie_show_genres_record.dart';
2+
3+
abstract class MoviesShowsFilterState {}
4+
5+
class InitialMoviesShowsFilterState extends MoviesShowsFilterState {}
6+
7+
class SuccessMoviesShowsFilterState extends MoviesShowsFilterState {
8+
final MovieShowGenresRecord record;
9+
10+
SuccessMoviesShowsFilterState(this.record);
11+
}
12+
13+
class ErrorMoviesShowsFilterState extends MoviesShowsFilterState {}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /