diff --git a/.gitignore b/.gitignore
index 530ea713..1cd6d5b0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,4 +20,6 @@ env/.env
.env
android/key.properties
app/upload-keystore.jks
-coverage/
\ No newline at end of file
+coverage/
+.fvm/
+.fvmrc
\ No newline at end of file
diff --git a/android/build/reports/problems/problems-report.html b/android/build/reports/problems/problems-report.html
index 746fadde..379f47c9 100644
--- a/android/build/reports/problems/problems-report.html
+++ b/android/build/reports/problems/problems-report.html
@@ -650,7 +650,7 @@ code + .copy-button {
diff --git a/lib/features/create_recipe/presentation/bloc/create_recipe_cubit/create_recipe_cubit.dart b/lib/features/create_recipe/presentation/bloc/create_recipe_cubit/create_recipe_cubit.dart
index 482d7d56..e7537af7 100644
--- a/lib/features/create_recipe/presentation/bloc/create_recipe_cubit/create_recipe_cubit.dart
+++ b/lib/features/create_recipe/presentation/bloc/create_recipe_cubit/create_recipe_cubit.dart
@@ -186,7 +186,22 @@ class CreateRecipeCubit extends Cubit {
}
bool validateForDraft() {
- return validateAll();
+ final isTitleValid = validateTitle();
+ _clearNonTitleValidationErrors();
+ return isTitleValid;
+ }
+
+ void _clearNonTitleValidationErrors() {
+ emit(state.copyWith(
+ descriptionValidationError: null,
+ cookingTimeValidationError: null,
+ activeTimeValidationError: null,
+ servingsValidationError: null,
+ energyPerServingValidationError: null,
+ imageValidationError: null,
+ stepsValidationError: null,
+ ingredientsValidationError: null,
+ ));
}
Future downloadImageAsFile(String imageUrl) async {
diff --git a/lib/features/create_recipe/reporitories/recipe_repository.dart b/lib/features/create_recipe/reporitories/recipe_repository.dart
index f079d810..34d2599f 100644
--- a/lib/features/create_recipe/reporitories/recipe_repository.dart
+++ b/lib/features/create_recipe/reporitories/recipe_repository.dart
@@ -24,40 +24,42 @@ class RecipeRepository {
}
}
- Future _buildFormData(RecipeModel recipe, {String state = 'active'}) async {
+ Future _buildStepsMap(List? steps) async {
+ final stepsMap = [];
+ for (final Step? step in steps ?? []) {
+ if (step != null) {
+ if ((step.image == null || (step.image?.isEmpty ?? true)) && step.description != null) {
+ stepsMap.add({'description_md': step.description ?? ''});
+ } else if (step.image != null && (step.image?.isNotEmpty ?? false)) {
+ final compressed = await ImageCompressUtility.compressFile(File(step.image ?? ''));
+ final multipartFile = await MultipartFile.fromFile(compressed.path);
+ stepsMap.add({
+ 'description_md': step.description ?? '',
+ 'image': multipartFile,
+ });
+ }
+ }
+ }
+ return stepsMap;
+ }
+
+ Future _buildPublishFormData(RecipeModel recipe) async {
if (recipe.image == null || (recipe.image?.isEmpty ?? true)) {
throw Exception('Recipe image is required');
}
final image = await ImageCompressUtility.compressFile(File(recipe.image ?? ''));
final multiPartFile = await MultipartFile.fromFile(image.path);
- final ingredientsMap = recipe.ingredients?.map((ingredient) {
- if (ingredient != null) {
- return ingredient.toJson();
- }
- }).toList() ??
+ final ingredientsMap = recipe.ingredients
+ ?.map((i) => i?.toJson())
+ .whereType