feat(my_diets): fixed draft, active and personal diets creation, updating

This commit is contained in:
misha
2026-02-09 10:39:51 +03:00
parent 400cc004ef
commit c91e83adaf
12 changed files with 221 additions and 110 deletions

View File

@@ -49,6 +49,12 @@ class CreateDietCubit extends Cubit<CreateDietState> {
type['carb'] = diet.type.carb ?? false;
type['light'] = diet.type.light ?? false;
final appConfig = sl<AppConfig>();
String? imageUrl;
if (diet.image?.startsWith('https') == true) {
imageUrl = diet.image;
} else if (diet.image != null && diet.image?.isNotEmpty == true) {
imageUrl = '${appConfig.baseUrl}/storage/${diet.image}';
}
emit(
state.copyWith.dietData(
dailySchedule: dailySchedule,
@@ -57,8 +63,7 @@ class CreateDietCubit extends Cubit<CreateDietState> {
name: diet.name,
duration: diet.duration,
type: type,
// Avoid network image URLs during tests to prevent HTTP fetch attempts
imageUrl: appConfig.buildType == AppBuildType.tests ? null : '${appConfig.baseUrl}/storage/${diet.image}',
imageUrl: appConfig.buildType == AppBuildType.tests ? null : imageUrl,
),
);
emit(state.copyWith(dietState: diet.state, durationIndex: durationValues.indexOf(diet.duration)));
@@ -196,7 +201,6 @@ class CreateDietCubit extends Cubit<CreateDietState> {
}
Future<Diet?> getDietForPreview() async {
if (!_isFromValid()) return null;
final authorProfile = await profileRepository.getMyProfile();
final imageBytes = (await state.dietData.image?.readAsBytes()) ?? <int>[];
String image = base64.encode(imageBytes);
@@ -305,7 +309,10 @@ class CreateDietCubit extends Cubit<CreateDietState> {
Future<String?> createDiet() async {
emit(state.copyWith(isDietPublishing: true));
if (!_isFromValid()) {
if ([DietState.active, DietState.personal].contains(state.dietState) && !_isFromValid()) {
emit(state.copyWith(isDietPublishing: false));
return 'validation';
} else if (!_isFormValidForDraft()) {
emit(state.copyWith(isDietPublishing: false));
return 'validation';
}
@@ -324,12 +331,12 @@ class CreateDietCubit extends Cubit<CreateDietState> {
name: state.dietData.name ?? '',
duration: state.dietData.duration ?? 7,
state: dietState,
image: image ?? file!,
image: image ?? file,
meatType: state.dietData.type['meat'] == true ? '1' : '0',
carbType: state.dietData.type['carb'] == true ? '1' : '0',
vegType: state.dietData.type['veg'] == true ? '1' : '0',
lightType: state.dietData.type['light'] == true ? '1' : '0',
details: state.dietData.details ?? '',
details: state.dietData.details,
dailySchedule: dailySchedule ?? [],
);
@@ -343,7 +350,12 @@ class CreateDietCubit extends Cubit<CreateDietState> {
}
Future<String?> updateDiet(int dietId) async {
// if (!_isFromValid()) return 'error';
if ([DietState.active, DietState.personal].contains(state.dietState) && !_isFromValid()) {
return 'error';
} else if (!_isFormValidForDraft()) {
return 'error';
}
try {
File? image;
if (state.dietData.image != null) {
@@ -359,7 +371,7 @@ class CreateDietCubit extends Cubit<CreateDietState> {
carbType: state.dietData.type['carb'] == true ? '1' : '0',
vegType: state.dietData.type['veg'] == true ? '1' : '0',
lightType: state.dietData.type['light'] == true ? '1' : '0',
details: state.dietData.details,
details: state.dietData.details?.isEmpty ?? true ? null : state.dietData.details,
dailySchedule: state.dietData.dailySchedule,
);
return null;
@@ -369,6 +381,24 @@ class CreateDietCubit extends Cubit<CreateDietState> {
}
}
bool _isFormValidForDraft() {
bool result = true;
if ((state.dietData.name?.length ?? 0) < 3) {
result = false;
emit(state.copyWith(dietNameError: 'Длинна названия не может быть меньше 3 символов'));
}
if (state.dietData.name == null || state.dietData.name == '') {
result = false;
emit(state.copyWith(dietNameError: 'Поле не заполнено'));
}
if (state.dietData.details?.length != null && (state.dietData.details?.isNotEmpty ?? false) && (state.dietData.details?.length ?? 4) < 3) {
result = false;
emit(state.copyWith(dietDescriptionError: 'Длинна описания не может быть меньше 3 символов'));
}
return result;
}
bool _isFromValid() {
bool result = true;
if ((state.dietData.name?.length ?? 0) < 3) {