GiteaClient/lib/cubit/pulls_bloc.dart
Balazs Toldi a4a2251a2e
All checks were successful
ci/woodpecker/push/flutterBuild Pipeline was successful
ci/woodpecker/pr/flutterBuild Pipeline was successful
Pull request list
2022-05-22 20:27:26 +02:00

55 lines
2 KiB
Dart

import 'dart:async';
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:gitea_client/model/pull.dart';
import 'package:stream_transform/stream_transform.dart';
import '../service/gitea_service.dart';
part 'pulls_event.dart';
part 'pulls_state.dart';
class PullRequestBloc extends Bloc<PullRequestEvent, PullRequestState> {
final GiteaService giteaService;
final String istate;
final String repoFullName;
PullRequestBloc(this.giteaService,this.repoFullName,this.istate) : super(const PullRequestState()) {
on<PullRequestsFetched>(_onIssuesFetched,
transformer: (events, mapper) => events.switchMap(mapper),);
}
Future<void> _onIssuesFetched(PullRequestsFetched event, Emitter<PullRequestState> emit) async {
if (state.hasReachedMax) return;
try {
if (state.status == PullRequestStatus.initial) {
final pulls = await giteaService.getRepoPulls(owner: repoFullName.split('/')[0],repo: repoFullName.split('/')[1],state: istate,page: 1, limit: 10);
return emit(state.copyWith(
status: PullRequestStatus.success,
pulls: pulls,
loadedPages: 1,
hasReachedMax: false,
error_message: null,
));
}
final pulls = await giteaService.getRepoPulls(owner: repoFullName.split('/')[0],repo: repoFullName.split('/')[1],state: istate,page: state.loadedPages+1, limit: 10);
final prList = List.of(state.pulls);
pulls.forEach((element) {
if(prList.where((selement) => selement.id == element.id).isEmpty) {
prList.add(element);
}
});
emit(pulls.isEmpty
? state.copyWith(hasReachedMax: true)
: state.copyWith(
status: PullRequestStatus.success,
pulls: prList,
loadedPages: state.loadedPages+1,
hasReachedMax: false,
error_message: null,
));
} on Exception catch (e) {
emit(state.copyWith(status: PullRequestStatus.failure,error_message: e.toString()));
}
}
}