2024-12-03 23:24:47 +04:00
|
|
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
|
|
|
import 'package:pmu/data/repositories/cats_repository.dart';
|
|
|
|
import 'package:pmu/presentation/home_page/bloc/events.dart';
|
|
|
|
import 'package:pmu/presentation/home_page/bloc/state.dart';
|
2024-12-09 03:31:50 +04:00
|
|
|
import '../../../domain/models/home.dart';
|
2024-12-03 23:24:47 +04:00
|
|
|
|
|
|
|
class HomeBloc extends Bloc<HomeEvent, HomeState> {
|
|
|
|
final CatsRepository repo;
|
|
|
|
|
|
|
|
HomeBloc(this.repo) : super(const HomeState()) {
|
|
|
|
on<HomeLoadDataEvent>(_onLoadData);
|
|
|
|
}
|
|
|
|
|
|
|
|
Future<void> _onLoadData(HomeLoadDataEvent event, Emitter<HomeState> emit) async {
|
2024-12-09 03:31:50 +04:00
|
|
|
if (event.nextPage == 0) {
|
2024-12-03 23:24:47 +04:00
|
|
|
emit(state.copyWith(isLoading: true));
|
|
|
|
} else {
|
|
|
|
emit(state.copyWith(isPaginationLoading: true));
|
|
|
|
}
|
|
|
|
|
|
|
|
String? error;
|
|
|
|
|
|
|
|
final data = await repo.loadData(
|
|
|
|
q: event.search,
|
2024-12-09 03:31:50 +04:00
|
|
|
offset: event.nextPage ?? 0,
|
2024-12-03 23:24:47 +04:00
|
|
|
onError: (e) => error = e,
|
|
|
|
);
|
|
|
|
|
2024-12-09 03:31:50 +04:00
|
|
|
final updatedData = event.nextPage != null && data != null
|
|
|
|
? HomeData(
|
|
|
|
data: [...state.data?.data ?? [], ...data.data!],
|
|
|
|
nextPage: (event.nextPage! + 1),
|
|
|
|
)
|
|
|
|
: data;
|
2024-12-03 23:24:47 +04:00
|
|
|
|
2024-12-09 03:31:50 +04:00
|
|
|
emit(state.copyWith(
|
|
|
|
isLoading: false,
|
|
|
|
isPaginationLoading: false,
|
|
|
|
data: updatedData,
|
|
|
|
error: error,
|
|
|
|
));
|
2024-12-03 23:24:47 +04:00
|
|
|
}
|
2024-12-09 03:31:50 +04:00
|
|
|
}
|