diff --git a/lib/Components/screens/hero_detail_screen.dart b/lib/Components/screens/hero_detail_screen.dart index 6715d29..3b46e7d 100644 --- a/lib/Components/screens/hero_detail_screen.dart +++ b/lib/Components/screens/hero_detail_screen.dart @@ -1,7 +1,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import '../../presentation/home_page/bloc/hero_detail_bloc.dart'; +import '../../presentation/heroDetail/hero_detail_block.dart'; import '../../data/repositories/hero_repository.dart'; +import '../../presentation/heroDetail/hero_detail_state.dart'; +import '../../presentation/heroDetail/hero_detail_events.dart'; class HeroDetailScreen extends StatelessWidget { final int heroId; diff --git a/lib/Components/screens/hero_list_screen.dart b/lib/Components/screens/hero_list_screen.dart index 50a4eaf..4388fd7 100644 --- a/lib/Components/screens/hero_list_screen.dart +++ b/lib/Components/screens/hero_list_screen.dart @@ -3,9 +3,13 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:provider/provider.dart'; import '../../Components/locale/l10n/app_locale.dart'; import '../../main.dart'; -import '../../presentation/home_page/bloc/hero_list_bloc.dart'; import '../../widgets/hero_card.dart'; -import '../../presentation/home_page/bloc/hero_search_bloc.dart'; +import '../../presentation/heroSearch/hero_search_block.dart'; +import '../../presentation/heroSearch/hero_search_state.dart'; +import '../../presentation/heroSearch/hero_search_event.dart'; +import '../../presentation/home_page/bloc/block.dart'; +import '../../presentation/home_page/bloc/events.dart'; +import '../../presentation/home_page/bloc/state.dart'; class HeroListScreen extends StatelessWidget { const HeroListScreen({Key? key}) : super(key: key); diff --git a/lib/main.dart b/lib/main.dart index 7aca35a..c963cbd 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -3,10 +3,13 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:provider/provider.dart'; import 'data/repositories/hero_repository.dart'; import 'services/api_service.dart'; -import 'presentation/home_page/bloc/hero_list_bloc.dart'; -import 'presentation/home_page/bloc/hero_search_bloc.dart'; import 'components/screens/hero_list_screen.dart'; import 'Components/locale/l10n/app_locale.dart'; +import 'presentation/home_page/bloc/block.dart'; +import 'presentation/home_page/bloc/events.dart'; +import 'presentation/home_page/bloc/state.dart'; +import '../../presentation/heroSearch/hero_search_block.dart'; + void main() { final apiService = ApiService(baseUrl: 'https://assets.deadlock-api.com'); diff --git a/lib/presentation/heroDetail/hero_detail_block.dart b/lib/presentation/heroDetail/hero_detail_block.dart new file mode 100644 index 0000000..e188416 --- /dev/null +++ b/lib/presentation/heroDetail/hero_detail_block.dart @@ -0,0 +1,23 @@ +import 'package:bloc/bloc.dart'; +import 'package:equatable/equatable.dart'; +import '../../data/dtos/hero_dto.dart'; +import '../../data/repositories/hero_repository.dart'; +import 'hero_detail_state.dart'; +import 'hero_detail_events.dart'; + +// BLoC +class HeroDetailBloc extends Bloc { + final HeroRepository heroRepository; + + HeroDetailBloc(this.heroRepository) : super(HeroDetailInitial()) { + on((event, emit) async { + emit(HeroDetailLoading()); + try { + final hero = await heroRepository.getHeroDetails(event.heroId); + emit(HeroDetailLoaded(hero)); + } catch (e) { + emit(HeroDetailError(e.toString())); + } + }); + } +} diff --git a/lib/presentation/heroDetail/hero_detail_events.dart b/lib/presentation/heroDetail/hero_detail_events.dart new file mode 100644 index 0000000..4daa422 --- /dev/null +++ b/lib/presentation/heroDetail/hero_detail_events.dart @@ -0,0 +1,21 @@ +import 'package:bloc/bloc.dart'; +import 'package:equatable/equatable.dart'; +import '../../data/dtos/hero_dto.dart'; +import '../../data/repositories/hero_repository.dart'; + +// Events +abstract class HeroDetailEvent extends Equatable { + @override + List get props => []; +} + +class FetchHeroDetails extends HeroDetailEvent { + final int heroId; + + FetchHeroDetails(this.heroId); + + @override + List get props => [heroId]; +} + + diff --git a/lib/presentation/heroDetail/hero_detail_state.dart b/lib/presentation/heroDetail/hero_detail_state.dart new file mode 100644 index 0000000..9c1dfa9 --- /dev/null +++ b/lib/presentation/heroDetail/hero_detail_state.dart @@ -0,0 +1,31 @@ +import 'package:bloc/bloc.dart'; +import 'package:equatable/equatable.dart'; +import '../../data/dtos/hero_dto.dart'; +import '../../data/repositories/hero_repository.dart'; + +abstract class HeroDetailState extends Equatable { + @override + List get props => []; +} + +class HeroDetailInitial extends HeroDetailState {} + +class HeroDetailLoading extends HeroDetailState {} + +class HeroDetailLoaded extends HeroDetailState { + final HeroDto hero; + + HeroDetailLoaded(this.hero); + + @override + List get props => [hero]; +} + +class HeroDetailError extends HeroDetailState { + final String message; + + HeroDetailError(this.message); + + @override + List get props => [message]; +} diff --git a/lib/presentation/home_page/bloc/hero_search_bloc.dart b/lib/presentation/heroSearch/hero_search_block.dart similarity index 61% rename from lib/presentation/home_page/bloc/hero_search_bloc.dart rename to lib/presentation/heroSearch/hero_search_block.dart index dcad834..9c27333 100644 --- a/lib/presentation/home_page/bloc/hero_search_bloc.dart +++ b/lib/presentation/heroSearch/hero_search_block.dart @@ -2,49 +2,8 @@ import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; import '../../../data/dtos/hero_dto.dart'; import '../../../data/repositories/hero_repository.dart'; - -// Events -abstract class HeroSearchEvent extends Equatable { - @override - List get props => []; -} - -class SearchHeroes extends HeroSearchEvent { - final String query; - - SearchHeroes(this.query); - - @override - List get props => [query]; -} - -// States -abstract class HeroSearchState extends Equatable { - @override - List get props => []; -} - -class HeroSearchInitial extends HeroSearchState {} - -class HeroSearchLoading extends HeroSearchState {} - -class HeroSearchLoaded extends HeroSearchState { - final List heroes; - - HeroSearchLoaded(this.heroes); - - @override - List get props => [heroes]; -} - -class HeroSearchError extends HeroSearchState { - final String message; - - HeroSearchError(this.message); - - @override - List get props => [message]; -} +import 'hero_search_event.dart'; +import 'hero_search_state.dart'; // BLoC class HeroSearchBloc extends Bloc { diff --git a/lib/presentation/heroSearch/hero_search_event.dart b/lib/presentation/heroSearch/hero_search_event.dart new file mode 100644 index 0000000..43f20c2 --- /dev/null +++ b/lib/presentation/heroSearch/hero_search_event.dart @@ -0,0 +1,18 @@ +import 'package:bloc/bloc.dart'; +import 'package:equatable/equatable.dart'; +import '../../../data/dtos/hero_dto.dart'; +import '../../../data/repositories/hero_repository.dart'; + +abstract class HeroSearchEvent extends Equatable { + @override + List get props => []; +} + +class SearchHeroes extends HeroSearchEvent { + final String query; + + SearchHeroes(this.query); + + @override + List get props => [query]; +} diff --git a/lib/presentation/heroSearch/hero_search_state.dart b/lib/presentation/heroSearch/hero_search_state.dart new file mode 100644 index 0000000..953ed82 --- /dev/null +++ b/lib/presentation/heroSearch/hero_search_state.dart @@ -0,0 +1,32 @@ +import 'package:bloc/bloc.dart'; +import 'package:equatable/equatable.dart'; +import '../../../data/dtos/hero_dto.dart'; +import '../../../data/repositories/hero_repository.dart'; + +// States +abstract class HeroSearchState extends Equatable { + @override + List get props => []; +} + +class HeroSearchInitial extends HeroSearchState {} + +class HeroSearchLoading extends HeroSearchState {} + +class HeroSearchLoaded extends HeroSearchState { + final List heroes; + + HeroSearchLoaded(this.heroes); + + @override + List get props => [heroes]; +} + +class HeroSearchError extends HeroSearchState { + final String message; + + HeroSearchError(this.message); + + @override + List get props => [message]; +} diff --git a/lib/presentation/home_page/bloc/hero_list_bloc.dart b/lib/presentation/home_page/bloc/block.dart similarity index 55% rename from lib/presentation/home_page/bloc/hero_list_bloc.dart rename to lib/presentation/home_page/bloc/block.dart index 21235e5..1a6e880 100644 --- a/lib/presentation/home_page/bloc/hero_list_bloc.dart +++ b/lib/presentation/home_page/bloc/block.dart @@ -2,42 +2,8 @@ import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; import '../../../data/dtos/hero_dto.dart'; import '../../../data/repositories/hero_repository.dart'; - -// Events -abstract class HeroListEvent extends Equatable { - @override - List get props => []; -} - -class FetchHeroes extends HeroListEvent {} - -// States -abstract class HeroListState extends Equatable { - @override - List get props => []; -} - -class HeroListInitial extends HeroListState {} - -class HeroListLoading extends HeroListState {} - -class HeroListLoaded extends HeroListState { - final List heroes; - - HeroListLoaded(this.heroes); - - @override - List get props => [heroes]; -} - -class HeroListError extends HeroListState { - final String message; - - HeroListError(this.message); - - @override - List get props => [message]; -} +import 'events.dart'; +import 'state.dart'; // BLoC class HeroListBloc extends Bloc { diff --git a/lib/presentation/home_page/bloc/events.dart b/lib/presentation/home_page/bloc/events.dart new file mode 100644 index 0000000..b755f37 --- /dev/null +++ b/lib/presentation/home_page/bloc/events.dart @@ -0,0 +1,14 @@ +import 'package:bloc/bloc.dart'; +import 'package:equatable/equatable.dart'; +import '../../../data/dtos/hero_dto.dart'; +import '../../../data/repositories/hero_repository.dart'; + +// Events +abstract class HeroListEvent extends Equatable { + @override + List get props => []; +} + +class FetchHeroes extends HeroListEvent {} + + diff --git a/lib/presentation/home_page/bloc/hero_detail_bloc.dart b/lib/presentation/home_page/bloc/hero_detail_bloc.dart deleted file mode 100644 index 8e46b7e..0000000 --- a/lib/presentation/home_page/bloc/hero_detail_bloc.dart +++ /dev/null @@ -1,64 +0,0 @@ -import 'package:bloc/bloc.dart'; -import 'package:equatable/equatable.dart'; -import '../../../data/dtos/hero_dto.dart'; -import '../../../data/repositories/hero_repository.dart'; - -// Events -abstract class HeroDetailEvent extends Equatable { - @override - List get props => []; -} - -class FetchHeroDetails extends HeroDetailEvent { - final int heroId; - - FetchHeroDetails(this.heroId); - - @override - List get props => [heroId]; -} - -// States -abstract class HeroDetailState extends Equatable { - @override - List get props => []; -} - -class HeroDetailInitial extends HeroDetailState {} - -class HeroDetailLoading extends HeroDetailState {} - -class HeroDetailLoaded extends HeroDetailState { - final HeroDto hero; - - HeroDetailLoaded(this.hero); - - @override - List get props => [hero]; -} - -class HeroDetailError extends HeroDetailState { - final String message; - - HeroDetailError(this.message); - - @override - List get props => [message]; -} - -// BLoC -class HeroDetailBloc extends Bloc { - final HeroRepository heroRepository; - - HeroDetailBloc(this.heroRepository) : super(HeroDetailInitial()) { - on((event, emit) async { - emit(HeroDetailLoading()); - try { - final hero = await heroRepository.getHeroDetails(event.heroId); - emit(HeroDetailLoaded(hero)); - } catch (e) { - emit(HeroDetailError(e.toString())); - } - }); - } -} diff --git a/lib/presentation/home_page/bloc/state.dart b/lib/presentation/home_page/bloc/state.dart new file mode 100644 index 0000000..a1549fc --- /dev/null +++ b/lib/presentation/home_page/bloc/state.dart @@ -0,0 +1,35 @@ +import 'package:bloc/bloc.dart'; +import 'package:equatable/equatable.dart'; +import '../../../data/dtos/hero_dto.dart'; +import '../../../data/repositories/hero_repository.dart'; + + +// States +abstract class HeroListState extends Equatable { + @override + List get props => []; +} + +class HeroListInitial extends HeroListState {} + +class HeroListLoading extends HeroListState {} + +class HeroListLoaded extends HeroListState { + final List heroes; + + HeroListLoaded(this.heroes); + + @override + List get props => [heroes]; +} + +class HeroListError extends HeroListState { + final String message; + + HeroListError(this.message); + + @override + List get props => [message]; +} + +