refactor(diary): Diary cubit

This commit is contained in:
2024-07-03 11:33:10 +03:00
parent beaaecad3c
commit 9b97967d88
6 changed files with 1390 additions and 0 deletions

View File

@@ -0,0 +1,23 @@
import 'package:freezed_annotation/freezed_annotation.dart';
part 'diary_model.freezed.dart';
part 'diary_model.g.dart';
@freezed
class DiaryModel with _$DiaryModel {
const factory DiaryModel({
required int id,
required String state,
String? image,
required String description,
String? author_name,
String? author_avatar_path,
@JsonKey(name: "youtube_url") required String youtubeUrl,
@JsonKey(name: "created_at") required DateTime createdAt,
@JsonKey(name: "updated_at") required DateTime updatedAt,
required String title,
}) = _DiaryModel;
factory DiaryModel.fromJson(Map<String, Object?> json) =>
_$DiaryModelFromJson(json);
}

View File

@@ -0,0 +1,21 @@
import 'package:eatvio_app/core/app_export.dart';
import 'package:eatvio_app/features/diary/presentation/bloc/diary_state.dart';
import 'package:eatvio_app/features/diary/repositories/diary_repository.dart';
class DiaryCubit extends Cubit<DiaryState> {
final DiaryRepository blogPostRepository;
DiaryCubit({required this.blogPostRepository})
: super(const DiaryState.loading());
loadDiary(String blogPostID) async {
emit(const DiaryState.loading());
try {
final blogPost = await blogPostRepository.getDiary(blogPostID);
emit(DiaryState.loaded(blogPost: blogPost));
} catch (e) {
emit(DiaryState.error(errorMessage: e.toString()));
print(e);
}
}
}

View File

@@ -0,0 +1,19 @@
import 'package:eatvio_app/features/diary/models/diary_model.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
part 'diary_state.freezed.dart';
@freezed
abstract class DiaryState with _$DiaryState {
const factory DiaryState() = _DiaryState;
const factory DiaryState.loading() = DiaryStateLoading;
const factory DiaryState.loaded({
required DiaryModel blogPost,
}) = DiaryStateLoaded;
const factory DiaryState.error({
required String errorMessage,
}) = DiaryStateError;
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,16 @@
import 'package:eatvio_app/features/diary/models/diary_model.dart';
import 'package:eatvio_app/features/diary/services/diary_service.dart';
class DiaryRepository {
final DiaryService blogPostService;
DiaryRepository({required this.blogPostService});
Future<DiaryModel> getDiary(String blogPostID) async {
try {
return await blogPostService.getDiary(blogPostID);
} catch (e) {
rethrow;
}
}
}

View File

@@ -0,0 +1,13 @@
import 'package:dio/dio.dart';
import 'package:eatvio_app/features/diary/models/diary_model.dart';
import 'package:retrofit/retrofit.dart';
part 'diary_service.g.dart';
@RestApi()
abstract class DiaryService {
factory DiaryService(Dio dio, {String baseUrl}) = _DiaryService;
@GET('/feed/show/{id}')
Future<DiaryModel> getDiary(@Path() String id);
}