diff --git a/android/app/.cxx/Debug/5y6c3x6h/arm64-v8a/configure_fingerprint.bin b/android/app/.cxx/Debug/5y6c3x6h/arm64-v8a/configure_fingerprint.bin index 781d1c2f..95f79a78 100644 --- a/android/app/.cxx/Debug/5y6c3x6h/arm64-v8a/configure_fingerprint.bin +++ b/android/app/.cxx/Debug/5y6c3x6h/arm64-v8a/configure_fingerprint.bin @@ -2,27 +2,27 @@ C/C++ Structured Logc a _C:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\arm64-v8a\additional_project_files.txtC A -?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  Ó½ùêÑ2  �õ‘×Ñ2` +?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  üåÕ½Ò2  �õ‘×Ñ2` ^ -\C:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\arm64-v8a\android_gradle_build.json  Ó½ùêÑ2¡ “õ‘×Ñ2e +\C:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\arm64-v8a\android_gradle_build.json  üåÕ½Ò2¡ “õ‘×Ñ2e c -aC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\arm64-v8a\android_gradle_build_mini.json  Ó½ùêÑ2€ ¤õ‘×Ñ2R +aC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\arm64-v8a\android_gradle_build_mini.json  üåÕ½Ò2€ ¤õ‘×Ñ2R P -NC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\arm64-v8a\build.ninja  Ó½ùêÑ2¥Ò †ô‘×Ñ2V +NC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\arm64-v8a\build.ninja  üåÕ½Ò2¥Ò †ô‘×Ñ2V T -RC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\arm64-v8a\build.ninja.txt  Ó½ùêÑ2[ +RC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\arm64-v8a\build.ninja.txt  üåÕ½Ò2[ Y -WC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\arm64-v8a\build_file_index.txt  Ó½ùêÑ2 R ¬õ‘×Ñ2\ +WC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\arm64-v8a\build_file_index.txt  üåÕ½Ò2 R ¬õ‘×Ñ2\ Z -XC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\arm64-v8a\compile_commands.json  Ó½ùêÑ2` +XC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\arm64-v8a\compile_commands.json  üåÕ½Ò2` ^ -\C:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\arm64-v8a\compile_commands.json.bin  Ó½ùêÑ2 f +\C:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\arm64-v8a\compile_commands.json.bin  üåÕ½Ò2 f d -bC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\arm64-v8a\metadata_generation_command.txt  Ó½ùêÑ2 +bC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\arm64-v8a\metadata_generation_command.txt  üåÕ½Ò2 « ¨õ‘×Ñ2Y W -UC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\arm64-v8a\prefab_config.json  Ó½ùêÑ2  ( ©õ‘×Ñ2^ +UC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\arm64-v8a\prefab_config.json  üåÕ½Ò2  ( ©õ‘×Ñ2^ \ -ZC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\arm64-v8a\symbol_folder_index.txt  Ó½ùêÑ2  Q «õ‘×Ñ2V +ZC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\arm64-v8a\symbol_folder_index.txt  üåÕ½Ò2  Q «õ‘×Ñ2V T -RC:\Users\Alex\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txt  Ó½ùêÑ2 § �¶ðÖÑ2 \ No newline at end of file +RC:\Users\Alex\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txt  üåÕ½Ò2 § �¶ðÖÑ2 \ No newline at end of file diff --git a/android/app/.cxx/Debug/5y6c3x6h/armeabi-v7a/configure_fingerprint.bin b/android/app/.cxx/Debug/5y6c3x6h/armeabi-v7a/configure_fingerprint.bin index 10948e63..53204e1b 100644 --- a/android/app/.cxx/Debug/5y6c3x6h/armeabi-v7a/configure_fingerprint.bin +++ b/android/app/.cxx/Debug/5y6c3x6h/armeabi-v7a/configure_fingerprint.bin @@ -2,27 +2,27 @@ C/C++ Structured Loge c aC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\armeabi-v7a\additional_project_files.txtC A -?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ¥¾ùêÑ2  ·É“×Ñ2b +?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ¶æÕ½Ò2  ·É“×Ñ2b ` -^C:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\armeabi-v7a\android_gradle_build.json  ¦¾ùêÑ2¥ ¿É“×Ñ2g +^C:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\armeabi-v7a\android_gradle_build.json  ¶æÕ½Ò2¥ ¿É“×Ñ2g e -cC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\armeabi-v7a\android_gradle_build_mini.json  ¦¾ùêÑ2„ ÆÉ“×Ñ2T +cC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\armeabi-v7a\android_gradle_build_mini.json  ¶æÕ½Ò2„ ÆÉ“×Ñ2T R -PC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\armeabi-v7a\build.ninja  ¦¾ùêÑ2¯Ò ´È“×Ñ2X +PC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\armeabi-v7a\build.ninja  ¶æÕ½Ò2¯Ò ´È“×Ñ2X V -TC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\armeabi-v7a\build.ninja.txt  ¦¾ùêÑ2] +TC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\armeabi-v7a\build.ninja.txt  ¶æÕ½Ò2] [ -YC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\armeabi-v7a\build_file_index.txt  ¦¾ùêÑ2 R ÊÉ“×Ñ2^ +YC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\armeabi-v7a\build_file_index.txt  ¶æÕ½Ò2 R ÊÉ“×Ñ2^ \ -ZC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\armeabi-v7a\compile_commands.json  §¾ùêÑ2b +ZC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\armeabi-v7a\compile_commands.json  ¶æÕ½Ò2b ` -^C:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\armeabi-v7a\compile_commands.json.bin  §¾ùêÑ2 h +^C:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\armeabi-v7a\compile_commands.json.bin  ¶æÕ½Ò2 h f -dC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\armeabi-v7a\metadata_generation_command.txt  §¾ùêÑ2 +dC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\armeabi-v7a\metadata_generation_command.txt  ¶æÕ½Ò2 µ ÇÉ“×Ñ2[ Y -WC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\armeabi-v7a\prefab_config.json  §¾ùêÑ2  ( ÈÉ“×Ñ2` +WC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\armeabi-v7a\prefab_config.json  ¶æÕ½Ò2  ( ÈÉ“×Ñ2` ^ -\C:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\armeabi-v7a\symbol_folder_index.txt  §¾ùêÑ2  S ÉÉ“×Ñ2V +\C:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\armeabi-v7a\symbol_folder_index.txt  ¶æÕ½Ò2  S ÉÉ“×Ñ2V T -RC:\Users\Alex\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txt  ©¾ùêÑ2 § �¶ðÖÑ2 \ No newline at end of file +RC:\Users\Alex\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txt  ¶æÕ½Ò2 § �¶ðÖÑ2 \ No newline at end of file diff --git a/android/app/.cxx/Debug/5y6c3x6h/x86/configure_fingerprint.bin b/android/app/.cxx/Debug/5y6c3x6h/x86/configure_fingerprint.bin index a5f9e007..87742c49 100644 --- a/android/app/.cxx/Debug/5y6c3x6h/x86/configure_fingerprint.bin +++ b/android/app/.cxx/Debug/5y6c3x6h/x86/configure_fingerprint.bin @@ -2,27 +2,27 @@ C/C++ Structured Log] [ YC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86\additional_project_files.txtC A -?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  â¾ùêÑ2  “‚”×Ñ2Z +?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  êæÕ½Ò2  “‚”×Ñ2Z X -VC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86\android_gradle_build.json  â¾ùêÑ2• ™‚”×Ñ2_ +VC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86\android_gradle_build.json  êæÕ½Ò2• ™‚”×Ñ2_ ] -[C:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86\android_gradle_build_mini.json  â¾ùêÑ2ô Ÿ‚”×Ñ2L +[C:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86\android_gradle_build_mini.json  êæÕ½Ò2ô Ÿ‚”×Ñ2L J -HC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86\build.ninja  â¾ùêÑ2‡Ò ¾�”×Ñ2P +HC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86\build.ninja  ëæÕ½Ò2‡Ò ¾�”×Ñ2P N -LC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86\build.ninja.txt  â¾ùêÑ2U +LC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86\build.ninja.txt  ìæÕ½Ò2U S -QC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86\build_file_index.txt  â¾ùêÑ2 R §‚”×Ñ2V +QC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86\build_file_index.txt  ìæÕ½Ò2 R §‚”×Ñ2V T -RC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86\compile_commands.json  â¾ùêÑ2Z +RC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86\compile_commands.json  ìæÕ½Ò2Z X -VC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86\compile_commands.json.bin  â¾ùêÑ2 ` +VC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86\compile_commands.json.bin  ìæÕ½Ò2 ` ^ -\C:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86\metadata_generation_command.txt  â¾ùêÑ2 +\C:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86\metadata_generation_command.txt  ìæÕ½Ò2 �  ‚”×Ñ2S Q -OC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86\prefab_config.json  â¾ùêÑ2  ( £‚”×Ñ2X +OC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86\prefab_config.json  ìæÕ½Ò2  ( £‚”×Ñ2X V -TC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86\symbol_folder_index.txt  â¾ùêÑ2  K ¥‚”×Ñ2V +TC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86\symbol_folder_index.txt  ìæÕ½Ò2  K ¥‚”×Ñ2V T -RC:\Users\Alex\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txt  â¾ùêÑ2 § �¶ðÖÑ2 \ No newline at end of file +RC:\Users\Alex\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txt  ìæÕ½Ò2 § �¶ðÖÑ2 \ No newline at end of file diff --git a/android/app/.cxx/Debug/5y6c3x6h/x86_64/configure_fingerprint.bin b/android/app/.cxx/Debug/5y6c3x6h/x86_64/configure_fingerprint.bin index d1302ace..2b1ee525 100644 --- a/android/app/.cxx/Debug/5y6c3x6h/x86_64/configure_fingerprint.bin +++ b/android/app/.cxx/Debug/5y6c3x6h/x86_64/configure_fingerprint.bin @@ -2,27 +2,27 @@ C/C++ Structured Log` ^ \C:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86_64\additional_project_files.txtC A -?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ˜¿ùêÑ2   �”×Ñ2] +?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ŸçÕ½Ò2   �”×Ñ2] [ -YC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86_64\android_gradle_build.json  ˜¿ùêÑ2› ¥�”×Ñ2b +YC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86_64\android_gradle_build.json  ŸçÕ½Ò2› ¥�”×Ñ2b ` -^C:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86_64\android_gradle_build_mini.json  ˜¿ùêÑ2ú ¬�”×Ñ2O +^C:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86_64\android_gradle_build_mini.json  ŸçÕ½Ò2ú ¬�”×Ñ2O M -KC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86_64\build.ninja  ˜¿ùêÑ2–Ò ÈŒ”×Ñ2S +KC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86_64\build.ninja  ŸçÕ½Ò2–Ò ÈŒ”×Ñ2S Q -OC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86_64\build.ninja.txt  ˜¿ùêÑ2X +OC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86_64\build.ninja.txt  ŸçÕ½Ò2X V -TC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86_64\build_file_index.txt  ˜¿ùêÑ2 R ¹�”×Ñ2Y +TC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86_64\build_file_index.txt  ŸçÕ½Ò2 R ¹�”×Ñ2Y W -UC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86_64\compile_commands.json  ˜¿ùêÑ2] +UC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86_64\compile_commands.json  ŸçÕ½Ò2] [ -YC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86_64\compile_commands.json.bin  ˜¿ùêÑ2 c +YC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86_64\compile_commands.json.bin  ŸçÕ½Ò2 c a -_C:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86_64\metadata_generation_command.txt  ˜¿ùêÑ2 +_C:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86_64\metadata_generation_command.txt  ŸçÕ½Ò2 œ ®�”×Ñ2V T -RC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86_64\prefab_config.json  ˜¿ùêÑ2  ( °�”×Ñ2[ +RC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86_64\prefab_config.json  ŸçÕ½Ò2  ( °�”×Ñ2[ Y -WC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86_64\symbol_folder_index.txt  ˜¿ùêÑ2  N ·�”×Ñ2V +WC:\Users\Alex\eatvio_app\android\app\.cxx\Debug\5y6c3x6h\x86_64\symbol_folder_index.txt  ŸçÕ½Ò2  N ·�”×Ñ2V T -RC:\Users\Alex\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txt  ˜¿ùêÑ2 § �¶ðÖÑ2 \ No newline at end of file +RC:\Users\Alex\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txt  ŸçÕ½Ò2 § �¶ðÖÑ2 \ No newline at end of file diff --git a/lib/core/app_router.dart b/lib/core/app_router.dart index 94450f4f..e48b047c 100644 --- a/lib/core/app_router.dart +++ b/lib/core/app_router.dart @@ -28,6 +28,8 @@ import 'package:eatvio_app/features/feed/presentation/pages/feed_screen.dart'; import 'package:eatvio_app/features/glossary/presentation/pages/glossary_screen.dart'; import 'package:eatvio_app/features/menu/presentation/pages/menu_screen.dart'; import 'package:eatvio_app/features/my_diets/presentation/my_diets_screen.dart'; +import 'package:eatvio_app/features/my_finance/presentation/pages/consultant_finance_screen.dart'; +import 'package:eatvio_app/features/my_finance/presentation/pages/user_finance_screen.dart'; import 'package:eatvio_app/features/my_plans/presentation/my_plans_screen.dart'; import 'package:eatvio_app/features/notifications/presentation/pages/notifications_screen.dart'; import 'package:eatvio_app/features/feed/models/plan_pagination_model.dart'; @@ -135,10 +137,29 @@ class AppRouter { GoRoute( path: '/menu-screen', name: 'menuScreen', - pageBuilder: (context, state) => NoTransitionPage(child: MenuScreen()), + pageBuilder: (context, state) => NoTransitionPage( + child: BlocBuilder( + builder: (BuildContext context, ProfileAvatarState state) { + if (state is ProfileAvatarStateLoaded) { + return MenuScreen(profileModel: state.profile); + } + return SizedBox.shrink(); + }, + ), + ), ), ], ), + GoRoute( + path: '/consultant-finance-screen', + name: 'consultantFinanceScreen', + builder: (context, state) => ConsultantFinanceScreen(), + ), + GoRoute( + path: '/user-finance-screen', + name: 'userFinanceScreen', + builder: (context, state) => UserFinanceScreen(), + ), GoRoute( path: '/about-plan-screen', name: 'aboutPlanScreen', @@ -153,7 +174,7 @@ class AppRouter { ), GoRoute( path: '/glossary-screen', - name: '/glossaryScreen', + name: 'glossaryScreen', builder: (context, state) => GlossaryScreen(), ), GoRoute( diff --git a/lib/features/consultations/presentation/pages/consultations_screen.dart b/lib/features/consultations/presentation/pages/consultations_screen.dart index 5fd3086b..b64bf260 100644 --- a/lib/features/consultations/presentation/pages/consultations_screen.dart +++ b/lib/features/consultations/presentation/pages/consultations_screen.dart @@ -12,6 +12,11 @@ class ConsultationsScreen extends StatelessWidget { appBar: AppBar( title: Text('КонÑ�ультации'), centerTitle: true, + shape: RoundedRectangleBorder( + borderRadius: BorderRadiusDirectional.vertical( + bottom: Radius.circular(12), + ), + ), ), body: ListView.separated( padding: EdgeInsets.symmetric(vertical: 12), diff --git a/lib/features/menu/presentation/pages/menu_screen.dart b/lib/features/menu/presentation/pages/menu_screen.dart index cfc2e8a1..07628b0e 100644 --- a/lib/features/menu/presentation/pages/menu_screen.dart +++ b/lib/features/menu/presentation/pages/menu_screen.dart @@ -7,12 +7,18 @@ import 'package:eatvio_app/core/theme/theme_helper.dart'; import 'package:eatvio_app/features/dev_tools/presentation/dev_tools_screen.dart'; import 'package:eatvio_app/features/my_diets/presentation/my_diets_screen.dart'; import 'package:eatvio_app/features/my_plans/presentation/my_plans_screen.dart'; +import 'package:eatvio_app/features/profile/models/profile_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:go_router/go_router.dart'; class MenuScreen extends StatelessWidget { - MenuScreen({super.key}); + final ProfileModel profileModel; + + const MenuScreen({ + super.key, + required this.profileModel, + }); @override Widget build(BuildContext context) { @@ -29,24 +35,40 @@ class MenuScreen extends StatelessWidget { leading: ImageConstant.icnProfileSettings, onTap: () => GoRouter.of(context).push('/settings-screen'), ), + if (profileModel.roles.contains('consultant')) _divider(context), + if (profileModel.roles.contains('consultant')) + _tile( + leading: ImageConstant.icnRecipes, + title: 'Мои рецепты', + onTap: () => GoRouter.of(context).push('/recipe-select-screen'), + ), + if (profileModel.roles.contains('consultant')) _divider(context), + if (profileModel.roles.contains('consultant')) + _tile( + leading: 'assets/icons/diets.svg', + title: 'Мои диеты', + onTap: () => GoRouter.of(context).push(MyDietsScreen.path), + ), + if (profileModel.roles.contains('consultant')) _divider(context), + if (profileModel.roles.contains('consultant')) + _tile( + leading: ImageConstant.icnPlans, + title: 'Мои планы', + onTap: () => GoRouter.of(context).push(MyPlansScreen.path), + ), _divider(context), - _tile( - leading: ImageConstant.icnRecipes, - title: 'Мои рецепты', - onTap: () => GoRouter.of(context).push('/recipe-select-screen'), - ), - _divider(context), - _tile( - leading: 'assets/icons/diets.svg', - title: 'Мои диеты', - onTap: () => GoRouter.of(context).push(MyDietsScreen.path), - ), - _divider(context), - _tile( - leading: ImageConstant.icnPlans, - title: 'Мои планы', - onTap: () => GoRouter.of(context).push(MyPlansScreen.path), - ), + if (profileModel.roles.contains('consultant')) + _tile( + leading: 'assets/icons/finance.svg', + title: 'Мои финанÑ�Ñ‹', + onTap: () => GoRouter.of(context).pushNamed('consultantFinanceScreen'), + ) + else + _tile( + leading: 'assets/icons/finance.svg', + title: 'Мои финанÑ�Ñ‹', + onTap: () => GoRouter.of(context).pushNamed('userFinanceScreen'), + ), _divider(context), _tile( leading: 'assets/icons/calendar.svg', diff --git a/lib/features/my_finance/entities/consultant_finance_entity.dart b/lib/features/my_finance/entities/consultant_finance_entity.dart new file mode 100644 index 00000000..48f0eceb --- /dev/null +++ b/lib/features/my_finance/entities/consultant_finance_entity.dart @@ -0,0 +1,80 @@ +enum ConsultationStatus { + Completed, + Canceled, + CanceledByInitiator, +} + +class ConsultantFinanceEntity { + final int totalConsultationsCount; + final int completedCount; + final int canceledCount; + final int canceledByInitiatorCount; + final List consultationsList; + + ConsultantFinanceEntity({ + required this.totalConsultationsCount, + required this.completedCount, + required this.canceledCount, + required this.canceledByInitiatorCount, + required this.consultationsList, + }); +} + +class ConsultationFinanceCardEntity { + final String id; + final DateTime date; + final String title; + final String clientName; + final int planDuration; + final int price; + final ConsultationStatus status; + + ConsultationFinanceCardEntity({ + required this.id, + required this.date, + required this.title, + required this.clientName, + required this.planDuration, + required this.price, + required this.status, + }); +} + +// Test data +final testConsultations = [ + ConsultationFinanceCardEntity( + id: '1', + date: DateTime.now(), + title: 'Consultation A', + clientName: 'Alice', + planDuration: 30, + price: 100, + status: ConsultationStatus.Completed, + ), + ConsultationFinanceCardEntity( + id: '2', + date: DateTime.now().subtract(Duration(days: 1)), + title: 'Consultation B', + clientName: 'Bob', + planDuration: 45, + price: 150, + status: ConsultationStatus.Canceled, + ), + ConsultationFinanceCardEntity( + id: '3', + date: DateTime.now().subtract(Duration(days: 2)), + title: 'Consultation C', + clientName: 'Charlie', + planDuration: 60, + price: 200, + status: ConsultationStatus.CanceledByInitiator, + ), +]; + +final testFinanceEntity = ConsultantFinanceEntity( + totalConsultationsCount: testConsultations.length, + completedCount: testConsultations.where((c) => c.status == ConsultationStatus.Completed).length, + canceledCount: testConsultations.where((c) => c.status == ConsultationStatus.Canceled).length, + canceledByInitiatorCount: testConsultations.where((c) => c.status == ConsultationStatus.CanceledByInitiator).length, + consultationsList: testConsultations, +); diff --git a/lib/features/my_finance/presentation/pages/consultant_finance_screen.dart b/lib/features/my_finance/presentation/pages/consultant_finance_screen.dart new file mode 100644 index 00000000..ac0d32f8 --- /dev/null +++ b/lib/features/my_finance/presentation/pages/consultant_finance_screen.dart @@ -0,0 +1,239 @@ +import 'package:eatvio_app/core/theme/theme_helper.dart'; +import 'package:eatvio_app/core/utils/date_time_utils.dart'; +import 'package:eatvio_app/core/widgets/custom_drop_down_button.dart'; +import 'package:eatvio_app/features/my_finance/entities/consultant_finance_entity.dart'; +import 'package:flutter/material.dart'; + +class ConsultantFinanceScreen extends StatelessWidget { + const ConsultantFinanceScreen({super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Color(0xFFF0F2F5), + appBar: AppBar( + shape: RoundedRectangleBorder( + borderRadius: BorderRadiusDirectional.vertical( + bottom: Radius.circular(12), + ), + ), + title: Text('Ð�рхив конÑ�ультаций'), + centerTitle: true, + ), + body: SingleChildScrollView( + padding: const EdgeInsets.symmetric(vertical: 8), + child: Column( + children: [ + Material( + color: Colors.white, + borderRadius: BorderRadius.circular(12), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const SizedBox(height: 16), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16), + child: Text( + 'Ð’Ñ�его конÑ�ультаций: ${testFinanceEntity.totalConsultationsCount}', + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w500, + color: Color(0xFF6D6F71), + height: 1, + ), + ), + ), + const SizedBox(height: 12), + SingleChildScrollView( + scrollDirection: Axis.horizontal, + padding: const EdgeInsets.symmetric(horizontal: 16), + child: Row( + children: [ + Material( + color: Color(0xFF0BB450).withAlpha(11), + borderRadius: BorderRadius.circular(8), + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 4), + child: Text( + 'Завершено: ${testFinanceEntity.completedCount}', + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w400, + color: Color(0xFF0BB450), + height: 1, + ), + ), + ), + ), + const SizedBox(width: 8), + Material( + color: Color(0xFFD01717).withAlpha(11), + borderRadius: BorderRadius.circular(8), + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 4), + child: Text( + 'Отменено: ${testFinanceEntity.canceledCount}', + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w400, + color: Color(0xFFD01717), + height: 1, + ), + ), + ), + ), + const SizedBox(width: 8), + Material( + color: Color(0xFFD07317).withAlpha(11), + borderRadius: BorderRadius.circular(8), + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 4), + child: Text( + 'Отменено инициатором: ${testFinanceEntity.canceledByInitiatorCount}', + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w400, + color: Color(0xFFD07317), + height: 1, + ), + ), + ), + ), + ], + ), + ), + const SizedBox(height: 16), + ], + ), + ), + const SizedBox(height: 8), + Material( + color: Colors.white, + borderRadius: BorderRadius.circular(12), + child: Padding( + padding: const EdgeInsets.only(left: 16, right: 16, top: 16), + child: SingleChildScrollView( + physics: const NeverScrollableScrollPhysics(), + child: Column( + children: [ + CustomDropDownButton( + items: [], + onChanged: (value) {}, + ), + const SizedBox(height: 12), + CustomDropDownButton( + items: [], + onChanged: (value) {}, + ), + const SizedBox(height: 12), + ListView.separated( + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + itemBuilder: (context, index) => Material( + color: Color(0xFFF6F6F6), + borderRadius: BorderRadius.circular(20), + child: Padding( + padding: const EdgeInsets.all(12), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + testFinanceEntity.consultationsList[index].id, + style: TextStyle( + color: Color(0xFF323F4B), + height: 1, + fontWeight: FontWeight.w500, + ), + ), + Text( + testFinanceEntity.consultationsList[index].date.format('dd.MM.yyy', 'RU'), + style: TextStyle( + color: Color(0xFF6D6F71), + height: 1, + fontWeight: FontWeight.w500, + ), + ), + ], + ), + const SizedBox(height: 8), + Text( + testFinanceEntity.consultationsList[index].title, + style: TextStyle( + color: appTheme.blueA400, + height: 1, + fontSize: 18, + fontWeight: FontWeight.w600, + ), + ), + const SizedBox(height: 8), + Text( + 'Покупатель: ' + testFinanceEntity.consultationsList[index].clientName, + style: TextStyle( + color: Color(0xFF323F4B), + height: 1, + fontSize: 14, + fontWeight: FontWeight.w500, + ), + ), + const SizedBox(height: 8), + Text( + testFinanceEntity.consultationsList[index].planDuration.toString() + ' дней', + style: TextStyle( + color: Color(0xFF323F4B), + height: 1, + fontSize: 14, + fontWeight: FontWeight.w500, + ), + ), + const SizedBox(height: 8), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + testFinanceEntity.consultationsList[index].price.toString() + ' ₽', + style: TextStyle( + color: Color(0xFF323F4B), + height: 1, + fontSize: 18, + fontWeight: FontWeight.w600, + ), + ), + Material( + color: Color(0xFF0BB450).withAlpha(11), + borderRadius: BorderRadius.circular(8), + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 4), + child: Text( + testFinanceEntity.consultationsList[index].status.name, + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w400, + color: Color(0xFF0BB450), + height: 1, + ), + ), + ), + ), + ], + ), + ], + ), + ), + ), + separatorBuilder: (context, index) => const SizedBox(height: 12), + itemCount: testFinanceEntity.consultationsList.length, + ), + ], + ), + ), + ), + ), + ], + ), + ), + ); + } +} diff --git a/lib/features/my_finance/presentation/pages/user_finance_screen.dart b/lib/features/my_finance/presentation/pages/user_finance_screen.dart new file mode 100644 index 00000000..ae46ebab --- /dev/null +++ b/lib/features/my_finance/presentation/pages/user_finance_screen.dart @@ -0,0 +1,10 @@ +import 'package:flutter/material.dart'; + +class UserFinanceScreen extends StatelessWidget { + const UserFinanceScreen({super.key}); + + @override + Widget build(BuildContext context) { + return const Placeholder(); + } +}