import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; import 'package:gitea_client/cubit/repo_event.dart'; import 'package:gitea_client/model/repository.dart'; import 'package:gitea_client/service/gitea_service.dart'; part 'repo_state.dart'; class RepoCubit extends Cubit { RepoCubit() : super(RepoState()); } class RepoBloc extends Bloc { RepoBloc({required this.giteaService}) : super(const RepoState()) { on(_onRepoFetched); } final GiteaService giteaService; Future _onRepoFetched(RepoFetched event, Emitter emit) async { if (state.hasReachedMax) return; try { if (state.status == RepoStatus.initial) { final repos = await giteaService.getUserRepositories(); return emit(state.copyWith( status: RepoStatus.success, repos: repos, loadedPages: 1, hasReachedMax: false, error_message: null, )); } final repos = await giteaService.getUserRepositories(state.loadedPages+1); emit(repos.isEmpty ? state.copyWith(hasReachedMax: true) : state.copyWith( status: RepoStatus.success, repos: List.of(state.repos)..addAll(repos), loadedPages: state.loadedPages+1, hasReachedMax: false, error_message: null, )); } on Exception catch (e) { emit(state.copyWith(status: RepoStatus.failure,error_message: e.toString())); } } }