forked from eatvio/eatvio_app
refactor(diary): Diary cubit
This commit is contained in:
23
lib/features/diary/models/diary_model.dart
Normal file
23
lib/features/diary/models/diary_model.dart
Normal 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);
|
||||
}
|
||||
21
lib/features/diary/presentation/bloc/diary_cubit.dart
Normal file
21
lib/features/diary/presentation/bloc/diary_cubit.dart
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
19
lib/features/diary/presentation/bloc/diary_state.dart
Normal file
19
lib/features/diary/presentation/bloc/diary_state.dart
Normal 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;
|
||||
}
|
||||
1298
lib/features/diary/presentation/pages/diary_screen.dart
Normal file
1298
lib/features/diary/presentation/pages/diary_screen.dart
Normal file
File diff suppressed because it is too large
Load Diff
16
lib/features/diary/repositories/diary_repository.dart
Normal file
16
lib/features/diary/repositories/diary_repository.dart
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
13
lib/features/diary/services/diary_service.dart
Normal file
13
lib/features/diary/services/diary_service.dart
Normal 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);
|
||||
}
|
||||
Reference in New Issue
Block a user