Houshan-Basa/lib/ui/screens/assistant/cubit/assistant_comments_cubit.dart

89 lines
2.8 KiB
Dart

import 'package:bloc/bloc.dart';
import 'package:dio/dio.dart';
import 'package:equatable/equatable.dart';
import 'package:flutter/foundation.dart';
import 'package:hoshan/data/model/assistant_comments_model.dart';
import 'package:hoshan/data/repository/bot_repository.dart';
part 'assistant_comments_state.dart';
class AssistantCommentsCubit extends Cubit<AssistantCommentsState> {
AssistantCommentsCubit() : super(AssistantCommentsInitial());
static final List<AssistantComments> comments = [];
void loadComments({required final int id}) async {
int page = state.page;
if (page == 1) {
comments.clear();
}
int? lastPage = state.lastPage;
if (lastPage != null && page > lastPage) {
return;
} else if (page != 1) {
emit(AssistantCommentsLoading(
comments: comments, lastPage: lastPage, page: page));
}
try {
final cModel = await BotRepository.getAssistantComments(id, page);
page++;
lastPage = cModel.lastPage;
comments.addAll(cModel.comments!);
emit(AssistantCommentsSuccess(
comments: comments, lastPage: lastPage, page: page));
} on DioException catch (e) {
emit(AssistantCommentsFail(
comments: comments, lastPage: lastPage, page: page));
if (kDebugMode) {
print("Dio Error is : $e");
}
}
}
void addComment({required final AssistantComments comment}) {
emit(AssistantCommentsLoading(
comments: comments, lastPage: state.lastPage, page: state.page));
comments.insert(0, comment);
emit(AssistantCommentsSuccess(
comments: comments, lastPage: state.lastPage, page: state.page));
}
void removeComment({required final String username}) {
emit(AssistantCommentsLoading(
comments: comments, lastPage: state.lastPage, page: state.page));
comments.removeWhere(
(element) => element.user!.username == username,
);
emit(AssistantCommentsSuccess(
comments: comments, lastPage: state.lastPage, page: state.page));
}
// void changeComment({
// required final Comment newComment,
// }) {
// emit(CommentsLoading(comments: comments));
// final index = comments.indexWhere(
// (element) => element.id == newComment.id,
// );
// comments[index] = newComment;
// emit(CommentsSuccess(comments: comments));
// }
// void addReplies({required final int commentId}) {
// emit(CommentsLoading(comments: comments));
// final comment = comments.firstWhere(
// (element) => element.id == commentId,
// );
// final index = comments.indexOf(comment);
// if (comment.replies == null) {
// comment.replies = 1;
// } else {
// comment.replies = comment.replies! + 1;
// }
// comments[index] = comment;
// emit(CommentsSuccess(comments: comments));
// }
}