import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:news/data/models/NewsModel.dart'; import 'package:news/utils/api.dart'; import 'package:news/utils/strings.dart'; abstract class GetUserDraftedNewsState {} class GetUserDraftedNewsInitial extends GetUserDraftedNewsState {} class GetUserDraftedNewsFetchInProgress extends GetUserDraftedNewsState {} class GetUserDraftedNewsFetchSuccess extends GetUserDraftedNewsState { final List GetUserDraftedNews; final int totalGetUserDraftedNewsCount; final bool hasMoreFetchError; final bool hasMore; GetUserDraftedNewsFetchSuccess({required this.GetUserDraftedNews, required this.totalGetUserDraftedNewsCount, required this.hasMoreFetchError, required this.hasMore}); } class GetUserDraftedNewsFetchFailure extends GetUserDraftedNewsState { final String errorMessage; GetUserDraftedNewsFetchFailure(this.errorMessage); } class GetUserDraftedNewsCubit extends Cubit { GetUserDraftedNewsCubit() : super(GetUserDraftedNewsInitial()); void getGetUserDraftedNews({int? userId}) async { try { emit(GetUserDraftedNewsFetchInProgress()); final apiUrl = "${Api.getDraftNewsApi}/${userId}"; final result = await Api.sendApiRequest(body: null, url: apiUrl); (!result[ERROR]) ? emit(GetUserDraftedNewsFetchSuccess( GetUserDraftedNews: (result[DATA][NEWS][DATA] as List).map((e) => NewsModel.fromJson(e)).toList(), totalGetUserDraftedNewsCount: result[DATA][NEWS][TOTAL], hasMoreFetchError: false, hasMore: (result[DATA][NEWS][DATA] as List).length < result[DATA][NEWS][TOTAL])) : emit(GetUserDraftedNewsFetchFailure(result[MESSAGE])); } catch (e) { emit(GetUserDraftedNewsFetchFailure(e.toString())); } } bool hasMoreGetUserDraftedNews() { return (state is GetUserDraftedNewsFetchSuccess) ? (state as GetUserDraftedNewsFetchSuccess).hasMore : false; } void deleteNews(int index) { if (state is GetUserDraftedNewsFetchSuccess) { List newsList = List.from((state as GetUserDraftedNewsFetchSuccess).GetUserDraftedNews)..removeAt(index); emit(GetUserDraftedNewsFetchSuccess( GetUserDraftedNews: newsList, hasMore: (state as GetUserDraftedNewsFetchSuccess).hasMore, hasMoreFetchError: false, totalGetUserDraftedNewsCount: (state as GetUserDraftedNewsFetchSuccess).totalGetUserDraftedNewsCount - 1)); } } void deleteImageId(int index) { if (state is GetUserDraftedNewsFetchSuccess) { List newsList = (state as GetUserDraftedNewsFetchSuccess).GetUserDraftedNews; newsList[index].imageDataList!.removeAt(index); emit(GetUserDraftedNewsFetchSuccess( GetUserDraftedNews: newsList, hasMore: (state as GetUserDraftedNewsFetchSuccess).hasMore, hasMoreFetchError: false, totalGetUserDraftedNewsCount: (state as GetUserDraftedNewsFetchSuccess).totalGetUserDraftedNewsCount)); } } }