diff --git a/assets/icons/diet.png b/assets/icons/diet.png
new file mode 100644
index 00000000..81ebb78e
Binary files /dev/null and b/assets/icons/diet.png differ
diff --git a/assets/icons/eatvio_logo.svg b/assets/icons/eatvio_logo.svg
new file mode 100644
index 00000000..e6ed7018
--- /dev/null
+++ b/assets/icons/eatvio_logo.svg
@@ -0,0 +1,4 @@
+
diff --git a/assets/icons/fitness.png b/assets/icons/fitness.png
new file mode 100644
index 00000000..ef127b81
Binary files /dev/null and b/assets/icons/fitness.png differ
diff --git a/assets/icons/paste2.svg b/assets/icons/paste2.svg
new file mode 100644
index 00000000..e4e5ac12
--- /dev/null
+++ b/assets/icons/paste2.svg
@@ -0,0 +1,12 @@
+
diff --git a/assets/icons/slim.png b/assets/icons/slim.png
new file mode 100644
index 00000000..e428ede8
Binary files /dev/null and b/assets/icons/slim.png differ
diff --git a/assets/icons/yoga-pose.png b/assets/icons/yoga-pose.png
new file mode 100644
index 00000000..57b9e680
Binary files /dev/null and b/assets/icons/yoga-pose.png differ
diff --git a/lib/core/app_router.dart b/lib/core/app_router.dart
index eaae83ab..1cb3b901 100644
--- a/lib/core/app_router.dart
+++ b/lib/core/app_router.dart
@@ -12,6 +12,8 @@ import 'package:eatvio_app/features/complaining/presentation/complaining_screen.
import 'package:eatvio_app/features/consultant/become_consultant/presentation/pages/become_consultant_screen.dart';
import 'package:eatvio_app/features/consultant/become_consultant/presentation/pages/stepper_become_consultant_screen.dart';
import 'package:eatvio_app/features/create_diet/presentation/create_diet_screen.dart';
+import 'package:eatvio_app/features/create_diet/presentation/diet_preview_screen.dart';
+import 'package:eatvio_app/features/create_plan/presentation/create_plan_screen.dart';
import 'package:eatvio_app/features/diary/presentation/pages/diary_screen.dart';
import 'package:eatvio_app/features/diets/presentation/pages/about_diet_screen.dart';
import 'package:eatvio_app/features/feed/models/diets_pagination_model.dart';
@@ -267,6 +269,21 @@ class AppRouter {
name: CreateDietScreen.name,
builder: (context, state) => CreateDietScreen(),
),
+ GoRoute(
+ path: DietPreviewScreen.path,
+ name: DietPreviewScreen.name,
+ builder: (context, state) {
+ final data = state.extra as Diet;
+ return DietPreviewScreen(
+ diet: data,
+ );
+ },
+ ),
+ GoRoute(
+ path: CreatePlanScreen.path,
+ name: CreatePlanScreen.name,
+ builder: (context, state) => CreatePlanScreen(),
+ ),
],
);
}
diff --git a/lib/core/const.dart b/lib/core/const.dart
index 396c2dce..f7dba8dd 100644
--- a/lib/core/const.dart
+++ b/lib/core/const.dart
@@ -1 +1,5 @@
const String baseUrl = 'https://dev2.eatvio.com';
+
+const List durationValues = [7, 14, 21];
+
+const List typeValues = ['veg', 'light', 'carb', 'meat'];
diff --git a/lib/core/locator_service.dart b/lib/core/locator_service.dart
index 96b60fd3..8d6994f5 100644
--- a/lib/core/locator_service.dart
+++ b/lib/core/locator_service.dart
@@ -1,5 +1,9 @@
import 'package:dio/dio.dart';
import 'package:eatvio_app/core/const.dart';
+import 'package:eatvio_app/features/create_diet/presentation/cubit/create_diet_cubit.dart';
+import 'package:eatvio_app/features/create_diet/repositories/create_diet_repository.dart';
+import 'package:eatvio_app/features/create_diet/services/create_diet_service.dart';
+import 'package:eatvio_app/features/create_plan/presentation/cubit/create_plan_cubit.dart';
import 'package:eatvio_app/features/diets/repositories/diet_repository.dart';
import 'package:eatvio_app/features/diets/services/diet_service.dart';
import 'package:eatvio_app/core/initialization_cubit/initialization_cubit.dart';
@@ -76,6 +80,9 @@ Future init() async {
sl.registerFactory(() => AboutDietCubit(dietsRepository: sl()));
sl.registerFactory(() => BlogPostCreateCubit(blogPostRepository: sl()));
sl.registerFactory(() => SubCubit(profileRepository: sl()));
+ sl.registerFactory(() => CreateDietCubit( profileRepository: sl(),createDietRepository: sl(), glossaryRepository: sl()));
+ sl.registerFactory(() => CreatePlanCubit());
+
// Repository
sl.registerLazySingleton(() => ChatRepository(chatService: sl()));
@@ -91,6 +98,7 @@ Future init() async {
sl.registerLazySingleton(() => GlossaryRepository(glossaryService: sl()));
sl.registerLazySingleton(() => DietRepository(dietsService: sl()));
sl.registerLazySingleton(() => BlogPostRepository(blogPostService: sl()));
+ sl.registerLazySingleton(() => CreateDietRepository(createDietService: sl()));
// Services
sl.registerLazySingleton(() => ChatService(sl()));
@@ -106,6 +114,7 @@ Future init() async {
sl.registerLazySingleton(() => GlossaryService(sl()));
sl.registerLazySingleton(() => DietService(sl()));
sl.registerLazySingleton(() => BlogPostService(sl()));
+ sl.registerLazySingleton(() => CreateDietService(sl()));
// External
sl.registerLazySingleton(
diff --git a/lib/core/theme/custom_text_style.dart b/lib/core/theme/custom_text_style.dart
index 91ddffa2..7f00ad9b 100644
--- a/lib/core/theme/custom_text_style.dart
+++ b/lib/core/theme/custom_text_style.dart
@@ -225,4 +225,10 @@ abstract class TextStyles {
fontWeight: FontWeight.w500,
height: 1.255,
);
+
+ static const textFS10FW500 = TextStyle(
+ fontSize: 12,
+ fontWeight: FontWeight.w500,
+ height: 1.255,
+ );
}
diff --git a/lib/core/theme/theme_helper.dart b/lib/core/theme/theme_helper.dart
index 63675d02..77f7595e 100644
--- a/lib/core/theme/theme_helper.dart
+++ b/lib/core/theme/theme_helper.dart
@@ -178,6 +178,10 @@ class PrimaryColors {
Color get transparentBlue => Color(0xFF2F80ED).withOpacity(0.1);
Color get lightGray0 => Color(0xFFF6F6F6);
+
+ Color get lightGray00 => Color(0xFFE9E9EA);
+
+ Color get dottedBorder => Color(0xFFE6E6E6);
}
PrimaryColors get appTheme => ThemeHelper().themeColor();
diff --git a/lib/core/utils/toasts.dart b/lib/core/utils/toasts.dart
index 2f86daa9..2730d6ce 100644
--- a/lib/core/utils/toasts.dart
+++ b/lib/core/utils/toasts.dart
@@ -5,11 +5,24 @@ const int _toastDuration = 2;
void showInfoToast(String message) {
Fluttertoast.showToast(
- msg: message,
- toastLength: Toast.LENGTH_SHORT,
- gravity: ToastGravity.TOP,
- timeInSecForIosWeb: _toastDuration,
- backgroundColor: appTheme.blueA400,
- textColor: appTheme.whiteA700,
- fontSize: 16.0,);
+ msg: message,
+ toastLength: Toast.LENGTH_SHORT,
+ gravity: ToastGravity.TOP,
+ timeInSecForIosWeb: _toastDuration,
+ backgroundColor: appTheme.blueA400,
+ textColor: appTheme.whiteA700,
+ fontSize: 16.0,
+ );
+}
+
+void showErrorToast(String message) {
+ Fluttertoast.showToast(
+ msg: message,
+ toastLength: Toast.LENGTH_LONG,
+ gravity: ToastGravity.TOP,
+ timeInSecForIosWeb: _toastDuration,
+ backgroundColor: appTheme.whiteA700,
+ textColor: appTheme.gray,
+ fontSize: 16.0,
+ );
}
diff --git a/lib/features/diets/presentation/widgets/cpfc_container.dart b/lib/core/widgets/cpfc_container.dart
similarity index 82%
rename from lib/features/diets/presentation/widgets/cpfc_container.dart
rename to lib/core/widgets/cpfc_container.dart
index d4663910..d7e53361 100644
--- a/lib/features/diets/presentation/widgets/cpfc_container.dart
+++ b/lib/core/widgets/cpfc_container.dart
@@ -4,10 +4,10 @@ import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:flutter/material.dart';
class CpfcContainer extends StatelessWidget {
- const CpfcContainer({super.key, required this.calories, required this.protein, required this.fat, required this.carbohydrates});
+ const CpfcContainer({super.key, required this.calories, required this.proteins, required this.fats, required this.carbohydrates});
final double calories;
- final double protein;
- final double fat;
+ final double proteins;
+ final double fats;
final double carbohydrates;
final int roundDigit = 1;
@override
@@ -27,13 +27,13 @@ class CpfcContainer extends StatelessWidget {
),
Column(
children: [
- Text('${protein.toStringAsFixed(roundDigit)}', style: TextStyles.textMSemibold.copyWith(color: appTheme.black)),
+ Text('${proteins.toStringAsFixed(roundDigit)}', style: TextStyles.textMSemibold.copyWith(color: appTheme.black)),
Text(s.proteins, style: TextStyles.textXSSemibold.copyWith(color: appTheme.black)),
],
),
Column(
children: [
- Text('${fat.toStringAsFixed(roundDigit)}', style: TextStyles.textMSemibold.copyWith(color: appTheme.black)),
+ Text('${fats.toStringAsFixed(roundDigit)}', style: TextStyles.textMSemibold.copyWith(color: appTheme.black)),
Text(s.fats, style: TextStyles.textXSSemibold.copyWith(color: appTheme.black)),
],
),
diff --git a/lib/core/widgets/custom_drop_down_button.dart b/lib/core/widgets/custom_drop_down_button.dart
new file mode 100644
index 00000000..843d6730
--- /dev/null
+++ b/lib/core/widgets/custom_drop_down_button.dart
@@ -0,0 +1,41 @@
+import 'package:eatvio_app/core/theme/theme_helper.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_svg/svg.dart';
+
+class CustomDropDownButton extends StatelessWidget {
+ const CustomDropDownButton({
+ super.key,
+ required this.items,
+ required this.onChanged,
+ this.value,
+ this.hint,
+ });
+ final T? value;
+ final List> items;
+ final void Function(T?)? onChanged;
+ final Widget? hint;
+ @override
+ Widget build(BuildContext context) {
+ return DropdownButtonFormField(
+ hint: hint,
+ icon: SvgPicture.asset(
+ 'assets/icons/arrow_down2.svg',
+ width: 12,
+ height: 8,
+ ),
+ borderRadius: BorderRadius.circular(20),
+ dropdownColor: appTheme.lightGray0,
+ decoration: InputDecoration(
+ border: OutlineInputBorder(
+ borderRadius: const BorderRadius.all(Radius.circular(20)),
+ borderSide: BorderSide.none,
+ ),
+ fillColor: appTheme.lightGray0,
+ filled: true,
+ ),
+ value: value,
+ items: items,
+ onChanged: onChanged,
+ );
+ }
+}
diff --git a/lib/core/widgets/custom_text_form_field.dart b/lib/core/widgets/custom_text_form_field.dart
index 2ce5a525..77e7086a 100644
--- a/lib/core/widgets/custom_text_form_field.dart
+++ b/lib/core/widgets/custom_text_form_field.dart
@@ -13,7 +13,7 @@ class CustomTextFormField extends StatelessWidget {
this.obscureText = false,
this.textInputAction,
this.textInputType,
- this.maxLines,
+ this.maxLines = 1,
this.hintText,
this.hintStyle,
this.prefix,
@@ -35,9 +35,12 @@ class CustomTextFormField extends StatelessWidget {
this.onEditingComplete,
this.minLines = 1,
this.maxLength,
+ this.expands = false,
+ this.textAlignVertical,
+ this.counter = const SizedBox.shrink(),
super.key,
});
-
+ final Widget? counter;
final Alignment? alignment;
final double? width;
final TextEditingController? controller;
@@ -49,7 +52,7 @@ class CustomTextFormField extends StatelessWidget {
final TextInputAction? textInputAction;
final TextInputType? textInputType;
final int? maxLines;
- final int minLines;
+ final int? minLines;
final String? hintText;
final TextStyle? hintStyle;
final Widget? prefix;
@@ -69,12 +72,15 @@ class CustomTextFormField extends StatelessWidget {
final void Function(String?)? onSaved;
final void Function(String)? onChanged;
final int? maxLength;
-
+ final bool expands;
+ final TextAlignVertical? textAlignVertical;
@override
Widget build(BuildContext context) {
return Align(
alignment: alignment ?? Alignment.center,
- child: TextFormField(
+ child: TextFormField(
+ textAlignVertical: textAlignVertical,
+ expands: expands,
minLines: minLines,
maxLength: maxLength,
onChanged: onChanged,
@@ -88,10 +94,11 @@ class CustomTextFormField extends StatelessWidget {
),
obscureText: obscureText!,
textInputAction: textInputAction,
- maxLines: maxLines ?? 1,
+ maxLines: maxLines,
initialValue: initialValue,
cursorColor: appTheme.blueA400,
decoration: InputDecoration(
+ counter: counter,
suffixText: suffixText,
hintText: hintText ?? "",
hintStyle: TextStyle(
diff --git a/lib/features/diets/presentation/widgets/main_background_bouble.dart b/lib/core/widgets/main_background_bouble.dart
similarity index 100%
rename from lib/features/diets/presentation/widgets/main_background_bouble.dart
rename to lib/core/widgets/main_background_bouble.dart
diff --git a/lib/features/create_diet/models/create_diet_model.dart b/lib/features/create_diet/models/create_diet_model.dart
index 6517e784..5a53754b 100644
--- a/lib/features/create_diet/models/create_diet_model.dart
+++ b/lib/features/create_diet/models/create_diet_model.dart
@@ -1,13 +1,15 @@
import 'dart:io';
+import 'package:dio/dio.dart';
import 'package:eatvio_app/core/image_compressing/image_compress_utility.dart';
import 'package:eatvio_app/features/feed/models/diets_pagination_model.dart';
+import 'package:flutter_image_compress/flutter_image_compress.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
part 'create_diet_model.freezed.dart';
@freezed
-class CreateDietModel with _$CreateDietModel{
+class CreateDietModel with _$CreateDietModel {
const CreateDietModel._();
const factory CreateDietModel({
@@ -15,21 +17,21 @@ class CreateDietModel with _$CreateDietModel{
String? details,
String? state,
int? duration,
- List? type,
- File? image,
+ required List type,
+ XFile? image,
List>>? dailySchedule,
}) = _CreateDietModel;
Future