32 lines
1.1 KiB
Dart
32 lines
1.1 KiB
Dart
import 'package:flutter_bloc/flutter_bloc.dart';
|
||
import 'package:mobiles_labs_5th_semester/data/repositories/games_repository.dart';
|
||
import 'events.dart';
|
||
import 'state.dart';
|
||
|
||
class HomeBloc extends Bloc<HomeEvent, HomeState> {
|
||
final GamesRepository repo;
|
||
|
||
//связывание метода _onLoadData с конкретным событием в конструкторе
|
||
HomeBloc(this.repo) : super(const HomeState()) {
|
||
on<HomeLoadDataEvent>(_onLoadData);
|
||
}
|
||
|
||
//Emitter - генератор событий
|
||
Future<void> _onLoadData(HomeLoadDataEvent event, Emitter<HomeState> emit) async {
|
||
if (event.nextPage == null) {
|
||
emit(state.copyWith(isLoading: true));
|
||
} else {
|
||
emit(state.copyWith(isPaginationLoading: true));
|
||
}
|
||
|
||
String? error;
|
||
|
||
final data = await repo.loadData(q: event.search, page: event.nextPage ?? 1, onError: (e) => error = e);
|
||
if (event.nextPage != null) {
|
||
data?.data?.insertAll(0, state.data?.data ?? []);
|
||
}
|
||
|
||
emit(state.copyWith(data: data, isLoading: false, isPaginationLoading: false, error: error));
|
||
}
|
||
}
|