diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml
index acedcf72..cd6a3eae 100644
--- a/.gitea/workflows/build.yml
+++ b/.gitea/workflows/build.yml
@@ -68,13 +68,13 @@ jobs:
- name: Build apk
run: |
- flutter build apk
+ flutter build apk --profile
- name: Rename and move apk
run: |
TIMESTAMP=$(date +'%Y-%m-%d-%H-%M')
APK_NAME="eatvio_app_${TIMESTAMP}.apk"
- mv build/app/outputs/flutter-apk/app-release.apk $APK_NAME
+ mv build/app/outputs/flutter-apk/app-profile.apk $APK_NAME
echo "APK build finished $APK_NAME"
echo "APK_NAME=$APK_NAME" >> $GITHUB_ENV
diff --git a/.gitea/workflows/test.yml b/.gitea/workflows/test.yml
index eac84bf6..b7b386f9 100644
--- a/.gitea/workflows/test.yml
+++ b/.gitea/workflows/test.yml
@@ -100,13 +100,13 @@ jobs:
run: flutter test
- name: Build apk
- run: flutter build apk --release
+ run: flutter build apk --profile
- name: Rename and move apk
run: |
TIMESTAMP=$(TZ=Europe/Moscow date +'%Y-%m-%d-%H-%M')
APK_NAME="eatvio_app_${TIMESTAMP}.apk"
- mv build/app/outputs/flutter-apk/app-release.apk $APK_NAME
+ mv build/app/outputs/flutter-apk/app-profile.apk $APK_NAME
echo "APK build finished $APK_NAME"
echo "APK_NAME=$APK_NAME" >> $GITHUB_ENV
diff --git a/android/.idea/caches/deviceStreaming.xml b/android/.idea/caches/deviceStreaming.xml
index 5a2f8669..b35232ec 100644
--- a/android/.idea/caches/deviceStreaming.xml
+++ b/android/.idea/caches/deviceStreaming.xml
@@ -8,17 +8,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -29,7 +43,9 @@
+
+
@@ -41,6 +57,7 @@
+
@@ -52,6 +69,7 @@
+
@@ -63,6 +81,7 @@
+
@@ -74,6 +93,7 @@
+
@@ -85,6 +105,7 @@
+
@@ -95,7 +116,9 @@
+
+
@@ -107,6 +130,7 @@
+
@@ -118,6 +142,7 @@
+
@@ -128,7 +153,9 @@
+
+
@@ -140,6 +167,7 @@
+
@@ -151,6 +179,7 @@
+
@@ -162,6 +191,7 @@
+
@@ -172,7 +202,9 @@
+
+
@@ -184,6 +216,7 @@
+
@@ -195,6 +228,7 @@
+
@@ -206,6 +240,7 @@
+
@@ -217,6 +252,7 @@
+
@@ -228,6 +264,7 @@
+
@@ -239,6 +276,7 @@
+
@@ -250,6 +288,7 @@
+
@@ -261,8 +300,9 @@
+
-
+
@@ -271,7 +311,9 @@
+
+
@@ -284,6 +326,7 @@
+
@@ -295,6 +338,7 @@
+
@@ -305,7 +349,9 @@
+
+
@@ -316,7 +362,9 @@
+
+
diff --git a/android/.idea/compiler.xml b/android/.idea/compiler.xml
new file mode 100644
index 00000000..b86273d9
--- /dev/null
+++ b/android/.idea/compiler.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/deploymentTargetSelector.xml b/android/.idea/deploymentTargetSelector.xml
new file mode 100644
index 00000000..b268ef36
--- /dev/null
+++ b/android/.idea/deploymentTargetSelector.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/gradle.xml b/android/.idea/gradle.xml
index a2dc4cb6..4af25b18 100644
--- a/android/.idea/gradle.xml
+++ b/android/.idea/gradle.xml
@@ -4,9 +4,42 @@
diff --git a/android/.idea/kotlinc.xml b/android/.idea/kotlinc.xml
new file mode 100644
index 00000000..fe63bb67
--- /dev/null
+++ b/android/.idea/kotlinc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__C.xml b/android/.idea/libraries/Gradle__C.xml
new file mode 100644
index 00000000..a79597a6
--- /dev/null
+++ b/android/.idea/libraries/Gradle__C.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_activity_activity_1_8_1_aar.xml b/android/.idea/libraries/Gradle__androidx_activity_activity_1_8_1_aar.xml
new file mode 100644
index 00000000..3a4cf028
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_activity_activity_1_8_1_aar.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_activity_activity_1_9_3_aar.xml b/android/.idea/libraries/Gradle__androidx_activity_activity_1_9_3_aar.xml
new file mode 100644
index 00000000..2f747bc2
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_activity_activity_1_9_3_aar.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_annotation_annotation_experimental_1_4_0_aar.xml b/android/.idea/libraries/Gradle__androidx_annotation_annotation_experimental_1_4_0_aar.xml
new file mode 100644
index 00000000..e2f29670
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_annotation_annotation_experimental_1_4_0_aar.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_annotation_annotation_jvm_1_8_0.xml b/android/.idea/libraries/Gradle__androidx_annotation_annotation_jvm_1_8_0.xml
new file mode 100644
index 00000000..b07bf2f9
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_annotation_annotation_jvm_1_8_0.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_annotation_annotation_jvm_1_8_2.xml b/android/.idea/libraries/Gradle__androidx_annotation_annotation_jvm_1_8_2.xml
new file mode 100644
index 00000000..3c6db580
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_annotation_annotation_jvm_1_8_2.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_annotation_annotation_jvm_1_9_1.xml b/android/.idea/libraries/Gradle__androidx_annotation_annotation_jvm_1_9_1.xml
new file mode 100644
index 00000000..b533a070
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_annotation_annotation_jvm_1_9_1.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_arch_core_core_common_2_2_0.xml b/android/.idea/libraries/Gradle__androidx_arch_core_core_common_2_2_0.xml
new file mode 100644
index 00000000..98c1dea8
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_arch_core_core_common_2_2_0.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_2_0_aar.xml b/android/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_2_0_aar.xml
new file mode 100644
index 00000000..bed8d9c8
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_2_0_aar.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_browser_browser_1_8_0_aar.xml b/android/.idea/libraries/Gradle__androidx_browser_browser_1_8_0_aar.xml
new file mode 100644
index 00000000..ed2b2441
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_browser_browser_1_8_0_aar.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_collection_collection_1_1_0.xml b/android/.idea/libraries/Gradle__androidx_collection_collection_1_1_0.xml
new file mode 100644
index 00000000..de055d69
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_collection_collection_1_1_0.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_core_core_1_13_1_aar.xml b/android/.idea/libraries/Gradle__androidx_core_core_1_13_1_aar.xml
new file mode 100644
index 00000000..e2209d4f
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_core_core_1_13_1_aar.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_core_core_ktx_1_13_1_aar.xml b/android/.idea/libraries/Gradle__androidx_core_core_ktx_1_13_1_aar.xml
new file mode 100644
index 00000000..e7b3447b
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_core_core_ktx_1_13_1_aar.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_core_core_ktx_1_2_0_aar.xml b/android/.idea/libraries/Gradle__androidx_core_core_ktx_1_2_0_aar.xml
new file mode 100644
index 00000000..9c69ed7b
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_core_core_ktx_1_2_0_aar.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_customview_customview_1_0_0_aar.xml b/android/.idea/libraries/Gradle__androidx_customview_customview_1_0_0_aar.xml
new file mode 100644
index 00000000..c64f6aeb
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_customview_customview_1_0_0_aar.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_exifinterface_exifinterface_1_3_3_aar.xml b/android/.idea/libraries/Gradle__androidx_exifinterface_exifinterface_1_3_3_aar.xml
new file mode 100644
index 00000000..fad6393b
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_exifinterface_exifinterface_1_3_3_aar.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_exifinterface_exifinterface_1_3_7_aar.xml b/android/.idea/libraries/Gradle__androidx_exifinterface_exifinterface_1_3_7_aar.xml
new file mode 100644
index 00000000..c28eaed9
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_exifinterface_exifinterface_1_3_7_aar.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_fragment_fragment_1_7_1_aar.xml b/android/.idea/libraries/Gradle__androidx_fragment_fragment_1_7_1_aar.xml
new file mode 100644
index 00000000..04581348
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_fragment_fragment_1_7_1_aar.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_heifwriter_heifwriter_1_0_0_aar.xml b/android/.idea/libraries/Gradle__androidx_heifwriter_heifwriter_1_0_0_aar.xml
new file mode 100644
index 00000000..44f2c2a3
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_heifwriter_heifwriter_1_0_0_aar.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_7_0.xml b/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_7_0.xml
new file mode 100644
index 00000000..36eae10a
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_7_0.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_java8_2_7_0.xml b/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_java8_2_7_0.xml
new file mode 100644
index 00000000..d4ed47d2
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_java8_2_7_0.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_7_0_aar.xml b/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_7_0_aar.xml
new file mode 100644
index 00000000..11984234
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_7_0_aar.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_7_0_aar.xml b/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_7_0_aar.xml
new file mode 100644
index 00000000..3cb894b8
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_7_0_aar.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_ktx_2_7_0_aar.xml b/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_ktx_2_7_0_aar.xml
new file mode 100644
index 00000000..1cc26378
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_ktx_2_7_0_aar.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_process_2_7_0_aar.xml b/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_process_2_7_0_aar.xml
new file mode 100644
index 00000000..c23ac62d
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_process_2_7_0_aar.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_7_0_aar.xml b/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_7_0_aar.xml
new file mode 100644
index 00000000..0a6e63f6
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_7_0_aar.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_7_0_aar.xml b/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_7_0_aar.xml
new file mode 100644
index 00000000..d012cc19
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_7_0_aar.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_savedstate_2_7_0_aar.xml b/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_savedstate_2_7_0_aar.xml
new file mode 100644
index 00000000..a6b8498b
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_savedstate_2_7_0_aar.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml b/android/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml
new file mode 100644
index 00000000..0bcee8a0
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_savedstate_savedstate_1_2_1_aar.xml b/android/.idea/libraries/Gradle__androidx_savedstate_savedstate_1_2_1_aar.xml
new file mode 100644
index 00000000..07ad5cc5
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_savedstate_savedstate_1_2_1_aar.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_security_security_crypto_1_1_0_alpha06_aar.xml b/android/.idea/libraries/Gradle__androidx_security_security_crypto_1_1_0_alpha06_aar.xml
new file mode 100644
index 00000000..c2003f87
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_security_security_crypto_1_1_0_alpha06_aar.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_startup_startup_runtime_1_1_1_aar.xml b/android/.idea/libraries/Gradle__androidx_startup_startup_runtime_1_1_1_aar.xml
new file mode 100644
index 00000000..a15bedf7
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_startup_startup_runtime_1_1_1_aar.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_test_annotation_1_0_1_aar.xml b/android/.idea/libraries/Gradle__androidx_test_annotation_1_0_1_aar.xml
new file mode 100644
index 00000000..d1f28d69
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_test_annotation_1_0_1_aar.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_test_core_1_0_0_aar.xml b/android/.idea/libraries/Gradle__androidx_test_core_1_0_0_aar.xml
new file mode 100644
index 00000000..70c4d5f5
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_test_core_1_0_0_aar.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_test_core_1_4_0_aar.xml b/android/.idea/libraries/Gradle__androidx_test_core_1_4_0_aar.xml
new file mode 100644
index 00000000..6c2e9206
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_test_core_1_4_0_aar.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_test_monitor_1_6_1_aar.xml b/android/.idea/libraries/Gradle__androidx_test_monitor_1_6_1_aar.xml
new file mode 100644
index 00000000..17783639
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_test_monitor_1_6_1_aar.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_tracing_tracing_1_2_0_aar.xml b/android/.idea/libraries/Gradle__androidx_tracing_tracing_1_2_0_aar.xml
new file mode 100644
index 00000000..aa924d02
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_tracing_tracing_1_2_0_aar.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_1_aar.xml b/android/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_1_aar.xml
new file mode 100644
index 00000000..b96052fe
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_1_aar.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml b/android/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml
new file mode 100644
index 00000000..c0974026
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_window_window_1_2_0_aar.xml b/android/.idea/libraries/Gradle__androidx_window_window_1_2_0_aar.xml
new file mode 100644
index 00000000..b3f4f98c
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_window_window_1_2_0_aar.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__androidx_window_window_java_1_2_0_aar.xml b/android/.idea/libraries/Gradle__androidx_window_window_java_1_2_0_aar.xml
new file mode 100644
index 00000000..07c02417
--- /dev/null
+++ b/android/.idea/libraries/Gradle__androidx_window_window_java_1_2_0_aar.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__com_almworks_sqlite4java_sqlite4java_1_0_392.xml b/android/.idea/libraries/Gradle__com_almworks_sqlite4java_sqlite4java_1_0_392.xml
new file mode 100644
index 00000000..8b9e9f88
--- /dev/null
+++ b/android/.idea/libraries/Gradle__com_almworks_sqlite4java_sqlite4java_1_0_392.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__com_android_tools_build_apksig_7_3_0.xml b/android/.idea/libraries/Gradle__com_android_tools_build_apksig_7_3_0.xml
new file mode 100644
index 00000000..be9756c1
--- /dev/null
+++ b/android/.idea/libraries/Gradle__com_android_tools_build_apksig_7_3_0.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__com_android_tools_build_apkzlib_7_3_0.xml b/android/.idea/libraries/Gradle__com_android_tools_build_apkzlib_7_3_0.xml
new file mode 100644
index 00000000..fe586f24
--- /dev/null
+++ b/android/.idea/libraries/Gradle__com_android_tools_build_apkzlib_7_3_0.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__com_android_tools_build_builder_7_3_0.xml b/android/.idea/libraries/Gradle__com_android_tools_build_builder_7_3_0.xml
new file mode 100644
index 00000000..5c7fd67a
--- /dev/null
+++ b/android/.idea/libraries/Gradle__com_android_tools_build_builder_7_3_0.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__com_android_tools_build_builder_model_7_3_0.xml b/android/.idea/libraries/Gradle__com_android_tools_build_builder_model_7_3_0.xml
new file mode 100644
index 00000000..c57840bb
--- /dev/null
+++ b/android/.idea/libraries/Gradle__com_android_tools_build_builder_model_7_3_0.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__com_android_tools_build_gradle_7_3_0.xml b/android/.idea/libraries/Gradle__com_android_tools_build_gradle_7_3_0.xml
new file mode 100644
index 00000000..f194f69f
--- /dev/null
+++ b/android/.idea/libraries/Gradle__com_android_tools_build_gradle_7_3_0.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__com_android_tools_build_gradle_api_7_3_0.xml b/android/.idea/libraries/Gradle__com_android_tools_build_gradle_api_7_3_0.xml
new file mode 100644
index 00000000..db9295ee
--- /dev/null
+++ b/android/.idea/libraries/Gradle__com_android_tools_build_gradle_api_7_3_0.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__com_android_tools_build_manifest_merger_30_3_0.xml b/android/.idea/libraries/Gradle__com_android_tools_build_manifest_merger_30_3_0.xml
new file mode 100644
index 00000000..f51c83e2
--- /dev/null
+++ b/android/.idea/libraries/Gradle__com_android_tools_build_manifest_merger_30_3_0.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__com_android_zipflinger_7_3_0.xml b/android/.idea/libraries/Gradle__com_android_zipflinger_7_3_0.xml
new file mode 100644
index 00000000..70051674
--- /dev/null
+++ b/android/.idea/libraries/Gradle__com_android_zipflinger_7_3_0.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__com_getkeepsafe_relinker_relinker_1_4_5_aar.xml b/android/.idea/libraries/Gradle__com_getkeepsafe_relinker_relinker_1_4_5_aar.xml
new file mode 100644
index 00000000..c6fff2ef
--- /dev/null
+++ b/android/.idea/libraries/Gradle__com_getkeepsafe_relinker_relinker_1_4_5_aar.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__com_google_android_gms_play_services_base_18_3_0_aar.xml b/android/.idea/libraries/Gradle__com_google_android_gms_play_services_base_18_3_0_aar.xml
new file mode 100644
index 00000000..5206fb64
--- /dev/null
+++ b/android/.idea/libraries/Gradle__com_google_android_gms_play_services_base_18_3_0_aar.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__com_google_android_gms_play_services_basement_18_3_0_aar.xml b/android/.idea/libraries/Gradle__com_google_android_gms_play_services_basement_18_3_0_aar.xml
new file mode 100644
index 00000000..7610660d
--- /dev/null
+++ b/android/.idea/libraries/Gradle__com_google_android_gms_play_services_basement_18_3_0_aar.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__com_google_android_gms_play_services_location_21_2_0_aar.xml b/android/.idea/libraries/Gradle__com_google_android_gms_play_services_location_21_2_0_aar.xml
new file mode 100644
index 00000000..bbd5d3dc
--- /dev/null
+++ b/android/.idea/libraries/Gradle__com_google_android_gms_play_services_location_21_2_0_aar.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__com_google_android_gms_play_services_tasks_18_1_0_aar.xml b/android/.idea/libraries/Gradle__com_google_android_gms_play_services_tasks_18_1_0_aar.xml
new file mode 100644
index 00000000..3298bcf9
--- /dev/null
+++ b/android/.idea/libraries/Gradle__com_google_android_gms_play_services_tasks_18_1_0_aar.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__com_google_auto_value_auto_value_annotations_1_10_1.xml b/android/.idea/libraries/Gradle__com_google_auto_value_auto_value_annotations_1_10_1.xml
new file mode 100644
index 00000000..d472ab79
--- /dev/null
+++ b/android/.idea/libraries/Gradle__com_google_auto_value_auto_value_annotations_1_10_1.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__com_google_code_findbugs_jsr305_3_0_2.xml b/android/.idea/libraries/Gradle__com_google_code_findbugs_jsr305_3_0_2.xml
new file mode 100644
index 00000000..9b670645
--- /dev/null
+++ b/android/.idea/libraries/Gradle__com_google_code_findbugs_jsr305_3_0_2.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__com_google_errorprone_error_prone_annotations_2_18_0.xml b/android/.idea/libraries/Gradle__com_google_errorprone_error_prone_annotations_2_18_0.xml
new file mode 100644
index 00000000..2c1c3503
--- /dev/null
+++ b/android/.idea/libraries/Gradle__com_google_errorprone_error_prone_annotations_2_18_0.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__com_google_guava_failureaccess_1_0_1.xml b/android/.idea/libraries/Gradle__com_google_guava_failureaccess_1_0_1.xml
new file mode 100644
index 00000000..f6480530
--- /dev/null
+++ b/android/.idea/libraries/Gradle__com_google_guava_failureaccess_1_0_1.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__com_google_guava_guava_31_1_jre.xml b/android/.idea/libraries/Gradle__com_google_guava_guava_31_1_jre.xml
new file mode 100644
index 00000000..950102a3
--- /dev/null
+++ b/android/.idea/libraries/Gradle__com_google_guava_guava_31_1_jre.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__com_google_guava_listenablefuture_1_0.xml b/android/.idea/libraries/Gradle__com_google_guava_listenablefuture_1_0.xml
new file mode 100644
index 00000000..e33a2163
--- /dev/null
+++ b/android/.idea/libraries/Gradle__com_google_guava_listenablefuture_1_0.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__com_google_guava_listenablefuture_9999_0_empty_to_avoid_conflict_with_guava.xml b/android/.idea/libraries/Gradle__com_google_guava_listenablefuture_9999_0_empty_to_avoid_conflict_with_guava.xml
new file mode 100644
index 00000000..14a6ed81
--- /dev/null
+++ b/android/.idea/libraries/Gradle__com_google_guava_listenablefuture_9999_0_empty_to_avoid_conflict_with_guava.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__com_google_j2objc_j2objc_annotations_1_3.xml b/android/.idea/libraries/Gradle__com_google_j2objc_j2objc_annotations_1_3.xml
new file mode 100644
index 00000000..233447e6
--- /dev/null
+++ b/android/.idea/libraries/Gradle__com_google_j2objc_j2objc_annotations_1_3.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__com_ibm_icu_icu4j_72_1.xml b/android/.idea/libraries/Gradle__com_ibm_icu_icu4j_72_1.xml
new file mode 100644
index 00000000..3e27ade5
--- /dev/null
+++ b/android/.idea/libraries/Gradle__com_ibm_icu_icu4j_72_1.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__com_squareup_javawriter_2_5_0.xml b/android/.idea/libraries/Gradle__com_squareup_javawriter_2_5_0.xml
new file mode 100644
index 00000000..1a3f1d9d
--- /dev/null
+++ b/android/.idea/libraries/Gradle__com_squareup_javawriter_2_5_0.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__commons_io_commons_io_2_6.xml b/android/.idea/libraries/Gradle__commons_io_commons_io_2_6.xml
new file mode 100644
index 00000000..976c652c
--- /dev/null
+++ b/android/.idea/libraries/Gradle__commons_io_commons_io_2_6.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__io_flutter_arm64_v8a_debug_1_0_0_cb4b5fff73850b2e42bd4de7cb9a4310a78ac40d.xml b/android/.idea/libraries/Gradle__io_flutter_arm64_v8a_debug_1_0_0_cb4b5fff73850b2e42bd4de7cb9a4310a78ac40d.xml
new file mode 100644
index 00000000..c4706299
--- /dev/null
+++ b/android/.idea/libraries/Gradle__io_flutter_arm64_v8a_debug_1_0_0_cb4b5fff73850b2e42bd4de7cb9a4310a78ac40d.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__io_flutter_armeabi_v7a_debug_1_0_0_cb4b5fff73850b2e42bd4de7cb9a4310a78ac40d.xml b/android/.idea/libraries/Gradle__io_flutter_armeabi_v7a_debug_1_0_0_cb4b5fff73850b2e42bd4de7cb9a4310a78ac40d.xml
new file mode 100644
index 00000000..832f4126
--- /dev/null
+++ b/android/.idea/libraries/Gradle__io_flutter_armeabi_v7a_debug_1_0_0_cb4b5fff73850b2e42bd4de7cb9a4310a78ac40d.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__io_flutter_flutter_embedding_debug_1_0_0_cb4b5fff73850b2e42bd4de7cb9a4310a78ac40d.xml b/android/.idea/libraries/Gradle__io_flutter_flutter_embedding_debug_1_0_0_cb4b5fff73850b2e42bd4de7cb9a4310a78ac40d.xml
new file mode 100644
index 00000000..b56ad33c
--- /dev/null
+++ b/android/.idea/libraries/Gradle__io_flutter_flutter_embedding_debug_1_0_0_cb4b5fff73850b2e42bd4de7cb9a4310a78ac40d.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__io_flutter_x86_64_debug_1_0_0_cb4b5fff73850b2e42bd4de7cb9a4310a78ac40d.xml b/android/.idea/libraries/Gradle__io_flutter_x86_64_debug_1_0_0_cb4b5fff73850b2e42bd4de7cb9a4310a78ac40d.xml
new file mode 100644
index 00000000..e8200527
--- /dev/null
+++ b/android/.idea/libraries/Gradle__io_flutter_x86_64_debug_1_0_0_cb4b5fff73850b2e42bd4de7cb9a4310a78ac40d.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__javax_annotation_javax_annotation_api_1_3_2.xml b/android/.idea/libraries/Gradle__javax_annotation_javax_annotation_api_1_3_2.xml
new file mode 100644
index 00000000..70cdeb6d
--- /dev/null
+++ b/android/.idea/libraries/Gradle__javax_annotation_javax_annotation_api_1_3_2.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__javax_inject_javax_inject_1.xml b/android/.idea/libraries/Gradle__javax_inject_javax_inject_1.xml
new file mode 100644
index 00000000..4578a9e7
--- /dev/null
+++ b/android/.idea/libraries/Gradle__javax_inject_javax_inject_1.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__junit_junit_4_13_2.xml b/android/.idea/libraries/Gradle__junit_junit_4_13_2.xml
new file mode 100644
index 00000000..bc47afd3
--- /dev/null
+++ b/android/.idea/libraries/Gradle__junit_junit_4_13_2.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__net_bytebuddy_byte_buddy_1_12_10.xml b/android/.idea/libraries/Gradle__net_bytebuddy_byte_buddy_1_12_10.xml
new file mode 100644
index 00000000..037a745d
--- /dev/null
+++ b/android/.idea/libraries/Gradle__net_bytebuddy_byte_buddy_1_12_10.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__net_bytebuddy_byte_buddy_1_12_22.xml b/android/.idea/libraries/Gradle__net_bytebuddy_byte_buddy_1_12_22.xml
new file mode 100644
index 00000000..42014917
--- /dev/null
+++ b/android/.idea/libraries/Gradle__net_bytebuddy_byte_buddy_1_12_22.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__net_bytebuddy_byte_buddy_agent_1_12_22.xml b/android/.idea/libraries/Gradle__net_bytebuddy_byte_buddy_agent_1_12_22.xml
new file mode 100644
index 00000000..0d148ce0
--- /dev/null
+++ b/android/.idea/libraries/Gradle__net_bytebuddy_byte_buddy_agent_1_12_22.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_apiguardian_apiguardian_api_1_1_2.xml b/android/.idea/libraries/Gradle__org_apiguardian_apiguardian_api_1_1_2.xml
new file mode 100644
index 00000000..de7fb8d1
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_apiguardian_apiguardian_api_1_1_2.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_assertj_assertj_core_3_23_1.xml b/android/.idea/libraries/Gradle__org_assertj_assertj_core_3_23_1.xml
new file mode 100644
index 00000000..4af4ba51
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_assertj_assertj_core_3_23_1.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_bouncycastle_bcprov_jdk18on_1_72.xml b/android/.idea/libraries/Gradle__org_bouncycastle_bcprov_jdk18on_1_72.xml
new file mode 100644
index 00000000..768d10ca
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_bouncycastle_bcprov_jdk18on_1_72.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_checkerframework_checker_qual_3_12_0.xml b/android/.idea/libraries/Gradle__org_checkerframework_checker_qual_3_12_0.xml
new file mode 100644
index 00000000..ff5b1b8b
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_checkerframework_checker_qual_3_12_0.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_hamcrest_hamcrest_core_1_3.xml b/android/.idea/libraries/Gradle__org_hamcrest_hamcrest_core_1_3.xml
new file mode 100644
index 00000000..1e4cd459
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_hamcrest_hamcrest_core_1_3.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_jetbrains_annotations_23_0_0.xml b/android/.idea/libraries/Gradle__org_jetbrains_annotations_23_0_0.xml
new file mode 100644
index 00000000..850b22d4
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_jetbrains_annotations_23_0_0.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_8_22.xml b/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_8_22.xml
new file mode 100644
index 00000000..ba0c2a2e
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_8_22.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_9_24.xml b/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_9_24.xml
new file mode 100644
index 00000000..9734c338
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_9_24.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_2_0_21.xml b/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_2_0_21.xml
new file mode 100644
index 00000000..2ba2ad52
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_2_0_21.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_8_22.xml b/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_8_22.xml
new file mode 100644
index 00000000..7aa99590
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_8_22.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_8_20.xml b/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_8_20.xml
new file mode 100644
index 00000000..b50d50ac
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_8_20.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_8_20.xml b/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_8_20.xml
new file mode 100644
index 00000000..1cf77d8d
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_8_20.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_android_1_7_1.xml b/android/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_android_1_7_1.xml
new file mode 100644
index 00000000..b67bfd21
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_android_1_7_1.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_android_1_7_3.xml b/android/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_android_1_7_3.xml
new file mode 100644
index 00000000..141ac9d7
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_android_1_7_3.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm_1_7_1.xml b/android/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm_1_7_1.xml
new file mode 100644
index 00000000..e2b96e3f
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm_1_7_1.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm_1_7_3.xml b/android/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm_1_7_3.xml
new file mode 100644
index 00000000..cd63bcec
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm_1_7_3.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_junit_jupiter_junit_jupiter_5_9_0.xml b/android/.idea/libraries/Gradle__org_junit_jupiter_junit_jupiter_5_9_0.xml
new file mode 100644
index 00000000..9f055ca2
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_junit_jupiter_junit_jupiter_5_9_0.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_junit_jupiter_junit_jupiter_api_5_9_0.xml b/android/.idea/libraries/Gradle__org_junit_jupiter_junit_jupiter_api_5_9_0.xml
new file mode 100644
index 00000000..fb1f74fa
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_junit_jupiter_junit_jupiter_api_5_9_0.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_junit_jupiter_junit_jupiter_params_5_9_0.xml b/android/.idea/libraries/Gradle__org_junit_jupiter_junit_jupiter_params_5_9_0.xml
new file mode 100644
index 00000000..e1bc59d4
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_junit_jupiter_junit_jupiter_params_5_9_0.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_junit_platform_junit_platform_commons_1_9_0.xml b/android/.idea/libraries/Gradle__org_junit_platform_junit_platform_commons_1_9_0.xml
new file mode 100644
index 00000000..877cc05f
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_junit_platform_junit_platform_commons_1_9_0.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_mockito_mockito_core_5_1_1.xml b/android/.idea/libraries/Gradle__org_mockito_mockito_core_5_1_1.xml
new file mode 100644
index 00000000..76e8274f
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_mockito_mockito_core_5_1_1.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_opentest4j_opentest4j_1_2_0.xml b/android/.idea/libraries/Gradle__org_opentest4j_opentest4j_1_2_0.xml
new file mode 100644
index 00000000..1db828c7
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_opentest4j_opentest4j_1_2_0.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_ow2_asm_asm_9_1.xml b/android/.idea/libraries/Gradle__org_ow2_asm_asm_9_1.xml
new file mode 100644
index 00000000..05e6979c
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_ow2_asm_asm_9_1.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_ow2_asm_asm_9_5.xml b/android/.idea/libraries/Gradle__org_ow2_asm_asm_9_5.xml
new file mode 100644
index 00000000..6180bb64
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_ow2_asm_asm_9_5.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_ow2_asm_asm_analysis_9_5.xml b/android/.idea/libraries/Gradle__org_ow2_asm_asm_analysis_9_5.xml
new file mode 100644
index 00000000..219de7db
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_ow2_asm_asm_analysis_9_5.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_ow2_asm_asm_commons_9_5.xml b/android/.idea/libraries/Gradle__org_ow2_asm_asm_commons_9_5.xml
new file mode 100644
index 00000000..26d2ee47
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_ow2_asm_asm_commons_9_5.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_ow2_asm_asm_tree_9_5.xml b/android/.idea/libraries/Gradle__org_ow2_asm_asm_tree_9_5.xml
new file mode 100644
index 00000000..6266deb5
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_ow2_asm_asm_tree_9_5.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_ow2_asm_asm_util_9_5.xml b/android/.idea/libraries/Gradle__org_ow2_asm_asm_util_9_5.xml
new file mode 100644
index 00000000..ff8448ae
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_ow2_asm_asm_util_9_5.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_robolectric_annotations_4_10_3.xml b/android/.idea/libraries/Gradle__org_robolectric_annotations_4_10_3.xml
new file mode 100644
index 00000000..d4e4a383
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_robolectric_annotations_4_10_3.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_robolectric_junit_4_10_3.xml b/android/.idea/libraries/Gradle__org_robolectric_junit_4_10_3.xml
new file mode 100644
index 00000000..18ab577a
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_robolectric_junit_4_10_3.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_robolectric_nativeruntime_4_10_3.xml b/android/.idea/libraries/Gradle__org_robolectric_nativeruntime_4_10_3.xml
new file mode 100644
index 00000000..a4a821da
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_robolectric_nativeruntime_4_10_3.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_robolectric_pluginapi_4_10_3.xml b/android/.idea/libraries/Gradle__org_robolectric_pluginapi_4_10_3.xml
new file mode 100644
index 00000000..739cf2a2
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_robolectric_pluginapi_4_10_3.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_robolectric_plugins_maven_dependency_resolver_4_10_3.xml b/android/.idea/libraries/Gradle__org_robolectric_plugins_maven_dependency_resolver_4_10_3.xml
new file mode 100644
index 00000000..d9a3df47
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_robolectric_plugins_maven_dependency_resolver_4_10_3.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_robolectric_resources_4_10_3.xml b/android/.idea/libraries/Gradle__org_robolectric_resources_4_10_3.xml
new file mode 100644
index 00000000..94be6b42
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_robolectric_resources_4_10_3.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_robolectric_robolectric_4_10_3.xml b/android/.idea/libraries/Gradle__org_robolectric_robolectric_4_10_3.xml
new file mode 100644
index 00000000..0cf65c71
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_robolectric_robolectric_4_10_3.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_robolectric_sandbox_4_10_3.xml b/android/.idea/libraries/Gradle__org_robolectric_sandbox_4_10_3.xml
new file mode 100644
index 00000000..e87540ab
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_robolectric_sandbox_4_10_3.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_robolectric_shadowapi_4_10_3.xml b/android/.idea/libraries/Gradle__org_robolectric_shadowapi_4_10_3.xml
new file mode 100644
index 00000000..0fd5c2cd
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_robolectric_shadowapi_4_10_3.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_robolectric_shadows_framework_4_10_3.xml b/android/.idea/libraries/Gradle__org_robolectric_shadows_framework_4_10_3.xml
new file mode 100644
index 00000000..06922166
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_robolectric_shadows_framework_4_10_3.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_robolectric_utils_4_10_3.xml b/android/.idea/libraries/Gradle__org_robolectric_utils_4_10_3.xml
new file mode 100644
index 00000000..ccac01e9
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_robolectric_utils_4_10_3.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/libraries/Gradle__org_robolectric_utils_reflector_4_10_3.xml b/android/.idea/libraries/Gradle__org_robolectric_utils_reflector_4_10_3.xml
new file mode 100644
index 00000000..89f4e2f6
--- /dev/null
+++ b/android/.idea/libraries/Gradle__org_robolectric_utils_reflector_4_10_3.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/misc.xml b/android/.idea/misc.xml
index 48725873..f9887857 100644
--- a/android/.idea/misc.xml
+++ b/android/.idea/misc.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/android/.idea/modules.xml b/android/.idea/modules.xml
index bf609e00..5d625ebb 100644
--- a/android/.idea/modules.xml
+++ b/android/.idea/modules.xml
@@ -3,6 +3,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/modules/-1028615399/android.sqflite_android.androidTest.iml b/android/.idea/modules/-1028615399/android.sqflite_android.androidTest.iml
new file mode 100644
index 00000000..06b12763
--- /dev/null
+++ b/android/.idea/modules/-1028615399/android.sqflite_android.androidTest.iml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/modules/-1028615399/android.sqflite_android.main.iml b/android/.idea/modules/-1028615399/android.sqflite_android.main.iml
new file mode 100644
index 00000000..73089ace
--- /dev/null
+++ b/android/.idea/modules/-1028615399/android.sqflite_android.main.iml
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/modules/-1028615399/android.sqflite_android.unitTest.iml b/android/.idea/modules/-1028615399/android.sqflite_android.unitTest.iml
new file mode 100644
index 00000000..c9916528
--- /dev/null
+++ b/android/.idea/modules/-1028615399/android.sqflite_android.unitTest.iml
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/modules/-1289971027/android.image_picker_android.androidTest.iml b/android/.idea/modules/-1289971027/android.image_picker_android.androidTest.iml
new file mode 100644
index 00000000..97f7ba3f
--- /dev/null
+++ b/android/.idea/modules/-1289971027/android.image_picker_android.androidTest.iml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/modules/-1289971027/android.image_picker_android.main.iml b/android/.idea/modules/-1289971027/android.image_picker_android.main.iml
new file mode 100644
index 00000000..cdcabd6c
--- /dev/null
+++ b/android/.idea/modules/-1289971027/android.image_picker_android.main.iml
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/modules/-1289971027/android.image_picker_android.unitTest.iml b/android/.idea/modules/-1289971027/android.image_picker_android.unitTest.iml
new file mode 100644
index 00000000..08fa1826
--- /dev/null
+++ b/android/.idea/modules/-1289971027/android.image_picker_android.unitTest.iml
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/modules/-145137885/android.flutter_native_splash.androidTest.iml b/android/.idea/modules/-145137885/android.flutter_native_splash.androidTest.iml
new file mode 100644
index 00000000..5e7ed1f8
--- /dev/null
+++ b/android/.idea/modules/-145137885/android.flutter_native_splash.androidTest.iml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/modules/-145137885/android.flutter_native_splash.main.iml b/android/.idea/modules/-145137885/android.flutter_native_splash.main.iml
new file mode 100644
index 00000000..356f619a
--- /dev/null
+++ b/android/.idea/modules/-145137885/android.flutter_native_splash.main.iml
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/modules/-145137885/android.flutter_native_splash.unitTest.iml b/android/.idea/modules/-145137885/android.flutter_native_splash.unitTest.iml
new file mode 100644
index 00000000..211d01a0
--- /dev/null
+++ b/android/.idea/modules/-145137885/android.flutter_native_splash.unitTest.iml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/modules/-178191810/android.flutter_plugin_android_lifecycle.androidTest.iml b/android/.idea/modules/-178191810/android.flutter_plugin_android_lifecycle.androidTest.iml
new file mode 100644
index 00000000..6464291b
--- /dev/null
+++ b/android/.idea/modules/-178191810/android.flutter_plugin_android_lifecycle.androidTest.iml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/modules/-178191810/android.flutter_plugin_android_lifecycle.main.iml b/android/.idea/modules/-178191810/android.flutter_plugin_android_lifecycle.main.iml
new file mode 100644
index 00000000..4f85edbe
--- /dev/null
+++ b/android/.idea/modules/-178191810/android.flutter_plugin_android_lifecycle.main.iml
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/modules/-178191810/android.flutter_plugin_android_lifecycle.unitTest.iml b/android/.idea/modules/-178191810/android.flutter_plugin_android_lifecycle.unitTest.iml
new file mode 100644
index 00000000..a74aefb0
--- /dev/null
+++ b/android/.idea/modules/-178191810/android.flutter_plugin_android_lifecycle.unitTest.iml
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/modules/-1870582405/gradle.iml b/android/.idea/modules/-1870582405/gradle.iml
new file mode 100644
index 00000000..bcab7b42
--- /dev/null
+++ b/android/.idea/modules/-1870582405/gradle.iml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/modules/-1870582405/gradle.main.iml b/android/.idea/modules/-1870582405/gradle.main.iml
new file mode 100644
index 00000000..de182ebb
--- /dev/null
+++ b/android/.idea/modules/-1870582405/gradle.main.iml
@@ -0,0 +1,184 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/modules/-1870582405/gradle.test.iml b/android/.idea/modules/-1870582405/gradle.test.iml
new file mode 100644
index 00000000..12f94141
--- /dev/null
+++ b/android/.idea/modules/-1870582405/gradle.test.iml
@@ -0,0 +1,192 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/modules/-1990442203/android.flutter_secure_storage.androidTest.iml b/android/.idea/modules/-1990442203/android.flutter_secure_storage.androidTest.iml
new file mode 100644
index 00000000..d6d74693
--- /dev/null
+++ b/android/.idea/modules/-1990442203/android.flutter_secure_storage.androidTest.iml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/modules/-1990442203/android.flutter_secure_storage.main.iml b/android/.idea/modules/-1990442203/android.flutter_secure_storage.main.iml
new file mode 100644
index 00000000..43218e90
--- /dev/null
+++ b/android/.idea/modules/-1990442203/android.flutter_secure_storage.main.iml
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/modules/-1990442203/android.flutter_secure_storage.unitTest.iml b/android/.idea/modules/-1990442203/android.flutter_secure_storage.unitTest.iml
new file mode 100644
index 00000000..dab7d0a6
--- /dev/null
+++ b/android/.idea/modules/-1990442203/android.flutter_secure_storage.unitTest.iml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/modules/1247090554/android.flutter_keyboard_visibility.androidTest.iml b/android/.idea/modules/1247090554/android.flutter_keyboard_visibility.androidTest.iml
new file mode 100644
index 00000000..d6430424
--- /dev/null
+++ b/android/.idea/modules/1247090554/android.flutter_keyboard_visibility.androidTest.iml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/modules/1247090554/android.flutter_keyboard_visibility.main.iml b/android/.idea/modules/1247090554/android.flutter_keyboard_visibility.main.iml
new file mode 100644
index 00000000..15297f82
--- /dev/null
+++ b/android/.idea/modules/1247090554/android.flutter_keyboard_visibility.main.iml
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/modules/1247090554/android.flutter_keyboard_visibility.unitTest.iml b/android/.idea/modules/1247090554/android.flutter_keyboard_visibility.unitTest.iml
new file mode 100644
index 00000000..c06a21a9
--- /dev/null
+++ b/android/.idea/modules/1247090554/android.flutter_keyboard_visibility.unitTest.iml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/modules/436793737/android.url_launcher_android.androidTest.iml b/android/.idea/modules/436793737/android.url_launcher_android.androidTest.iml
new file mode 100644
index 00000000..39c87895
--- /dev/null
+++ b/android/.idea/modules/436793737/android.url_launcher_android.androidTest.iml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/modules/436793737/android.url_launcher_android.main.iml b/android/.idea/modules/436793737/android.url_launcher_android.main.iml
new file mode 100644
index 00000000..3bf20cd3
--- /dev/null
+++ b/android/.idea/modules/436793737/android.url_launcher_android.main.iml
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/modules/436793737/android.url_launcher_android.unitTest.iml b/android/.idea/modules/436793737/android.url_launcher_android.unitTest.iml
new file mode 100644
index 00000000..4dab71b5
--- /dev/null
+++ b/android/.idea/modules/436793737/android.url_launcher_android.unitTest.iml
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/modules/802492136/android.path_provider_android.androidTest.iml b/android/.idea/modules/802492136/android.path_provider_android.androidTest.iml
new file mode 100644
index 00000000..0a2126b4
--- /dev/null
+++ b/android/.idea/modules/802492136/android.path_provider_android.androidTest.iml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/modules/802492136/android.path_provider_android.main.iml b/android/.idea/modules/802492136/android.path_provider_android.main.iml
new file mode 100644
index 00000000..a1c6a41b
--- /dev/null
+++ b/android/.idea/modules/802492136/android.path_provider_android.main.iml
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/modules/802492136/android.path_provider_android.unitTest.iml b/android/.idea/modules/802492136/android.path_provider_android.unitTest.iml
new file mode 100644
index 00000000..df6e0fc7
--- /dev/null
+++ b/android/.idea/modules/802492136/android.path_provider_android.unitTest.iml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/modules/853932462/android.file_picker.androidTest.iml b/android/.idea/modules/853932462/android.file_picker.androidTest.iml
new file mode 100644
index 00000000..7edb40bb
--- /dev/null
+++ b/android/.idea/modules/853932462/android.file_picker.androidTest.iml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/modules/853932462/android.file_picker.main.iml b/android/.idea/modules/853932462/android.file_picker.main.iml
new file mode 100644
index 00000000..cbd16953
--- /dev/null
+++ b/android/.idea/modules/853932462/android.file_picker.main.iml
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/modules/853932462/android.file_picker.unitTest.iml b/android/.idea/modules/853932462/android.file_picker.unitTest.iml
new file mode 100644
index 00000000..e993449a
--- /dev/null
+++ b/android/.idea/modules/853932462/android.file_picker.unitTest.iml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/modules/android.iml b/android/.idea/modules/android.iml
index 2af55b99..d94fa880 100644
--- a/android/.idea/modules/android.iml
+++ b/android/.idea/modules/android.iml
@@ -1,8 +1,10 @@
-
+
-
+
+
+
diff --git a/android/.idea/vcs.xml b/android/.idea/vcs.xml
index 6c0b8635..6cb5a8fc 100644
--- a/android/.idea/vcs.xml
+++ b/android/.idea/vcs.xml
@@ -2,5 +2,6 @@
+
\ No newline at end of file
diff --git a/android/.idea/workspace.xml b/android/.idea/workspace.xml
index 0016da8f..c245c538 100644
--- a/android/.idea/workspace.xml
+++ b/android/.idea/workspace.xml
@@ -5,9 +5,161 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
@@ -17,6 +169,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -28,30 +191,111 @@
- {
- "keyToString": {
- "RunOnceActivity.ShowReadmeOnStart": "true",
- "RunOnceActivity.cidr.known.project.marker": "true",
- "RunOnceActivity.readMode.enableVisualFormatting": "true",
- "android.gradle.sync.needed": "true",
- "cf.first.check.clang-format": "false",
- "cidr.known.project.marker": "true",
- "dart.analysis.tool.window.visible": "false",
- "git-widget-placeholder": "main",
- "kotlin-language-version-configured": "true",
- "last_opened_file_path": "C:/Users/mso7nueh/eatvio_app/android",
- "project.structure.last.edited": "Suggestions",
- "project.structure.proportion": "0.17",
- "project.structure.side.proportion": "0.2",
- "settings.editor.selected.configurable": "reference.settingsdialog.project.gradle",
- "show.migrate.to.gradle.popup": "false"
+
+}]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/.kotlin/errors/errors-1737375866289.log b/android/.kotlin/errors/errors-1737375866289.log
new file mode 100644
index 00000000..0a315fa2
--- /dev/null
+++ b/android/.kotlin/errors/errors-1737375866289.log
@@ -0,0 +1,82 @@
+kotlin version: 2.0.21
+error message: Daemon compilation failed: null
+java.lang.Exception
+ at org.jetbrains.kotlin.daemon.common.CompileService$CallResult$Error.get(CompileService.kt:69)
+ at org.jetbrains.kotlin.daemon.common.CompileService$CallResult$Error.get(CompileService.kt:65)
+ at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:240)
+ at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159)
+ at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111)
+ at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:76)
+ at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63)
+ at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:66)
+ at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:62)
+ at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:100)
+ at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:62)
+ at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
+ at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
+ at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
+ at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
+ at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
+ at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
+ at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
+ at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
+ at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
+ at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
+ at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:59)
+ at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:174)
+ at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
+ at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
+ at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
+ at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
+ at org.gradle.internal.Factories$1.create(Factories.java:31)
+ at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:263)
+ at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
+ at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
+ at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
+ at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
+ at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
+ at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
+ at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
+ at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:48)
+ at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
+ at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
+ at java.base/java.lang.Thread.run(Unknown Source)
+Caused by: java.nio.file.DirectoryNotEmptyException: C:\Users\Alex\AppData\Local\Temp\kotlin-backups16986209765282043117
+ at java.base/sun.nio.fs.WindowsFileSystemProvider.implDelete(Unknown Source)
+ at java.base/sun.nio.fs.AbstractFileSystemProvider.delete(Unknown Source)
+ at java.base/java.nio.file.Files.delete(Unknown Source)
+ at org.jetbrains.kotlin.incremental.RecoverableCompilationTransaction$cleanupStash$2$1$1.invoke(CompilationTransaction.kt:244)
+ at org.jetbrains.kotlin.incremental.RecoverableCompilationTransaction$cleanupStash$2$1$1.invoke(CompilationTransaction.kt:244)
+ at org.jetbrains.kotlin.incremental.RecoverableCompilationTransaction.cleanupStash$lambda$11$lambda$10$lambda$9(CompilationTransaction.kt:244)
+ at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
+ at java.base/java.util.ArrayList.forEach(Unknown Source)
+ at java.base/java.util.stream.SortedOps$RefSortingSink.end(Unknown Source)
+ at java.base/java.util.stream.Sink$ChainedReference.end(Unknown Source)
+ at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
+ at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
+ at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
+ at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
+ at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
+ at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
+ at org.jetbrains.kotlin.incremental.RecoverableCompilationTransaction.cleanupStash(CompilationTransaction.kt:244)
+ at org.jetbrains.kotlin.incremental.RecoverableCompilationTransaction.close(CompilationTransaction.kt:254)
+ at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.tryCompileIncrementally(IncrementalCompilerRunner.kt:747)
+ at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:120)
+ at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:675)
+ at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:92)
+ at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1660)
+ at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
+ at java.base/java.lang.reflect.Method.invoke(Unknown Source)
+ at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
+ at java.rmi/sun.rmi.transport.Transport$1.run(Unknown Source)
+ at java.rmi/sun.rmi.transport.Transport$1.run(Unknown Source)
+ at java.base/java.security.AccessController.doPrivileged(Unknown Source)
+ at java.rmi/sun.rmi.transport.Transport.serviceCall(Unknown Source)
+ at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
+ at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source)
+ at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(Unknown Source)
+ at java.base/java.security.AccessController.doPrivileged(Unknown Source)
+ at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
+ ... 3 more
+
+
diff --git a/android/app/build.gradle b/android/app/build.gradle
index ffffdd77..8719993b 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -2,6 +2,14 @@ plugins {
id "com.android.application"
id "kotlin-android"
id "dev.flutter.flutter-gradle-plugin"
+
+
+}
+
+def keystoreProperties = new Properties()
+def keystorePropertiesFile = rootProject.file('key.properties')
+if (keystorePropertiesFile.exists()) {
+ keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
android {
@@ -26,9 +34,24 @@ android {
versionName = flutter.versionName
}
+ signingConfigs {
+ release {
+ keyAlias = keystoreProperties['keyAlias']
+ keyPassword = keystoreProperties['keyPassword']
+ storeFile = keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
+ storePassword = keystoreProperties['storePassword']
+ }
+ }
+
buildTypes {
release {
- signingConfig = signingConfigs.debug
+ signingConfig signingConfigs.release
+ }
+ debug {
+ signingConfig signingConfigs.debug
+ }
+ profile {
+ signingConfig signingConfigs.debug
}
}
}
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 516dace6..c7878e41 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -1,21 +1,21 @@
-
+
-
+ android:windowSoftInputMode="adjustResize">
@@ -40,4 +35,15 @@
android:name="flutterEmbedding"
android:value="2" />
+
+
+
+
+
+
+
diff --git a/android/app/src/main/res/drawable-night-v21/launch_background.xml b/android/app/src/main/res/drawable-night-v21/launch_background.xml
new file mode 100644
index 00000000..f88598cf
--- /dev/null
+++ b/android/app/src/main/res/drawable-night-v21/launch_background.xml
@@ -0,0 +1,6 @@
+
+
+ -
+
+
+
diff --git a/android/app/src/main/res/drawable-night/launch_background.xml b/android/app/src/main/res/drawable-night/launch_background.xml
new file mode 100644
index 00000000..f88598cf
--- /dev/null
+++ b/android/app/src/main/res/drawable-night/launch_background.xml
@@ -0,0 +1,6 @@
+
+
+ -
+
+
+
diff --git a/assets/icons/go_to_arrow.svg b/assets/icons/go_to_arrow.svg
new file mode 100644
index 00000000..111ec2c5
--- /dev/null
+++ b/assets/icons/go_to_arrow.svg
@@ -0,0 +1,3 @@
+
diff --git a/lib/core/app_router.dart b/lib/core/app_router.dart
index 052e1757..ff26e3bb 100644
--- a/lib/core/app_router.dart
+++ b/lib/core/app_router.dart
@@ -42,6 +42,7 @@ import 'package:eatvio_app/features/settings/presentation/pages/physical_activit
import 'package:eatvio_app/features/settings/presentation/pages/physical_form_screen.dart';
import 'package:eatvio_app/features/settings/presentation/pages/pressure_screen.dart';
import 'package:eatvio_app/features/settings/presentation/pages/settings_screen.dart';
+import 'package:eatvio_app/features/support/presentation/pages/support_screen.dart';
import 'package:eatvio_app/features/user_details/presentation/user_details_screen.dart';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
@@ -253,6 +254,11 @@ class AppRouter {
name: 'calendarScreen',
builder: (context, state) => CalendarScreen(),
),
+ GoRoute(
+ path: '/support-screen',
+ name: 'supportScreen',
+ builder: (context, state) => SupportScreen(),
+ ),
GoRoute(
path: '/photo-view-screen/:index',
name: 'photoViewScreen',
diff --git a/lib/core/const.dart b/lib/core/const.dart
index cd822713..4e8b3650 100644
--- a/lib/core/const.dart
+++ b/lib/core/const.dart
@@ -1,3 +1,4 @@
+// String baseUrl = 'https://eatvio.ru';
String baseUrl = 'https://dev2.eatvio.com';
const List durationValues = [7, 14, 21];
diff --git a/lib/core/initialization_cubit/ws_manager.dart b/lib/core/initialization_cubit/ws_manager.dart
index e7676868..3a72512e 100644
--- a/lib/core/initialization_cubit/ws_manager.dart
+++ b/lib/core/initialization_cubit/ws_manager.dart
@@ -71,7 +71,7 @@ class WsManager {
}
});
client?.eventStream.listen((event) {
- // log(event.rootObject.toString());
+ log(event.rootObject.toString());
});
_subscribe();
} catch (e, st) {
diff --git a/lib/core/locator_service.dart b/lib/core/locator_service.dart
index 68f93112..6c62f438 100644
--- a/lib/core/locator_service.dart
+++ b/lib/core/locator_service.dart
@@ -29,6 +29,7 @@ import 'package:eatvio_app/features/diary/repositories/diary_repository.dart';
import 'package:eatvio_app/features/diary/services/diary_service.dart';
import 'package:eatvio_app/features/diets/presentation/cubit/about_diet_cubit.dart';
import 'package:eatvio_app/features/feed/presentation/bloc/comments_cubit/comments_cubit.dart';
+import 'package:eatvio_app/features/feed/presentation/bloc/consultants_cubit/consultants_cubit.dart';
import 'package:eatvio_app/features/feed/presentation/bloc/diets_cubit/diets_cubit.dart';
import 'package:eatvio_app/features/feed/presentation/bloc/feed_cubit/feed_cubit.dart';
import 'package:eatvio_app/features/feed/presentation/bloc/profile_cubit/profile_cubit.dart';
@@ -101,6 +102,7 @@ Future init() async {
sl.registerFactory(() => MyDietsCubit(myDietsRepository: sl()));
sl.registerFactory(() => MyPlansCubit(myPlansRepository: sl()));
sl.registerFactory(() => UserDetailsCubit(profileRepository: sl()));
+ sl.registerFactory(() => ConsultantsCubit(feedRepository: sl()));
// Repository
sl.registerLazySingleton(() => ChatRepository(chatService: sl()));
diff --git a/lib/core/token_storage.dart b/lib/core/token_storage.dart
index bc795829..4a8bb21d 100644
--- a/lib/core/token_storage.dart
+++ b/lib/core/token_storage.dart
@@ -8,11 +8,15 @@ abstract class TokenStorage {
}
static haveTokenInStorage() async {
- if (await FlutterSecureStorage().read(key: 'token') == null) {
+ try {
+ if (await FlutterSecureStorage().read(key: 'token') == null) {
+ return false;
+ } else {
+ _addTokenToDioHeader((await FlutterSecureStorage().read(key: 'token'))!);
+ return true;
+ }
+ } catch (e) {
return false;
- } else {
- _addTokenToDioHeader((await FlutterSecureStorage().read(key: 'token'))!);
- return true;
}
}
diff --git a/lib/features/auth/auth_screen/auth_screen.dart b/lib/features/auth/auth_screen/auth_screen.dart
index 78cfdfc1..7e42bbed 100644
--- a/lib/features/auth/auth_screen/auth_screen.dart
+++ b/lib/features/auth/auth_screen/auth_screen.dart
@@ -11,6 +11,7 @@ import 'package:eatvio_app/generated/l10n.dart';
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:flutter_native_splash/flutter_native_splash.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:go_router/go_router.dart';
import 'package:http/http.dart' as http;
@@ -19,7 +20,6 @@ import 'package:validators/validators.dart';
import 'bloc/auth_bloc.dart';
import 'models/auth_model.dart';
-import 'package:flutter_native_splash/flutter_native_splash.dart';
class AuthScreen extends StatefulWidget {
static Widget builder(BuildContext context) {
diff --git a/lib/features/blog_post/presentation/pages/blog_post_screen.dart b/lib/features/blog_post/presentation/pages/blog_post_screen.dart
index ddb4ddc5..1696928a 100644
--- a/lib/features/blog_post/presentation/pages/blog_post_screen.dart
+++ b/lib/features/blog_post/presentation/pages/blog_post_screen.dart
@@ -310,11 +310,15 @@ class _BlogPostScreenState extends State {
SizedBox(width: 8),
_iconButton(
icon: Icons.reply_rounded,
- onTap: () => Share.shareUri(
- Uri.parse(
- baseUrl + '/ru/blog_post/' + widget.blogPost.id.toString(),
- ),
- ),
+ onTap: () {
+ final box = context.findRenderObject() as RenderBox?;
+ Share.shareUri(
+ Uri.parse(
+ baseUrl + '/ru/blog_post/' + widget.blogPost.id.toString(),
+ ),
+ sharePositionOrigin: box!.localToGlobal(Offset.zero) & box.size,
+ );
+ },
),
Spacer(),
Icon(
diff --git a/lib/features/dev_tools/presentation/dev_tools_screen.dart b/lib/features/dev_tools/presentation/dev_tools_screen.dart
index 34d7f4f9..9b18107a 100644
--- a/lib/features/dev_tools/presentation/dev_tools_screen.dart
+++ b/lib/features/dev_tools/presentation/dev_tools_screen.dart
@@ -76,7 +76,7 @@ class _DevToolsScreenContentState extends State {
SizedBox(
height: 10,
),
- if (baseUrlForTest != 'https://eatvio.com')
+ if (baseUrlForTest != 'https://eatvio.ru')
ListView.builder(
shrinkWrap: true,
itemCount: testCases.length,
diff --git a/lib/features/diary/presentation/bloc/diary_cubit.dart b/lib/features/diary/presentation/bloc/diary_cubit.dart
index 542240e2..b5b00adf 100644
--- a/lib/features/diary/presentation/bloc/diary_cubit.dart
+++ b/lib/features/diary/presentation/bloc/diary_cubit.dart
@@ -105,12 +105,6 @@ class DiaryCubit extends Cubit {
required PortionState portionState,
}) async {
if (portionState == PortionState.filled_diet || portionState == PortionState.eaten_from_diet) {
- // await diaryRepository.deleteProductFromMeal(
- // diaryId: diaryId,
- // mealId: mealId,
- // portionId: portionId,
- // );
- // todo delete product from diet
await diaryRepository.addPortionToMeal(
diaryId: diaryId,
mealId: mealId,
diff --git a/lib/features/diets/presentation/widgets/more_options.dart b/lib/features/diets/presentation/widgets/more_options.dart
index 8a948a7c..01da9a87 100644
--- a/lib/features/diets/presentation/widgets/more_options.dart
+++ b/lib/features/diets/presentation/widgets/more_options.dart
@@ -13,8 +13,10 @@ import 'package:share_plus/share_plus.dart';
class MoreOptions extends StatelessWidget {
const MoreOptions({super.key, this.disableActions, required this.path});
+
final String path;
final bool? disableActions;
+
@override
Widget build(BuildContext context) {
final s = S.of(context);
@@ -52,11 +54,15 @@ class MoreOptions extends StatelessWidget {
GestureDetector(
onTap: disableActions == true
? null
- : () => Share.shareUri(
+ : () {
+ final box = context.findRenderObject() as RenderBox?;
+ Share.shareUri(
Uri.parse(
'$baseUrl/ru/$path',
),
- ),
+ sharePositionOrigin: box!.localToGlobal(Offset.zero) & box.size,
+ );
+ },
child: Row(
children: [
Text(
diff --git a/lib/features/feed/models/feed_consultant_model.dart b/lib/features/feed/models/feed_consultant_model.dart
new file mode 100644
index 00000000..ac236454
--- /dev/null
+++ b/lib/features/feed/models/feed_consultant_model.dart
@@ -0,0 +1,30 @@
+import 'package:eatvio_app/core/models/pagination_model.dart';
+import 'package:eatvio_app/features/profile/models/badge_model.dart';
+import 'package:freezed_annotation/freezed_annotation.dart';
+
+part 'feed_consultant_model.freezed.dart';
+part 'feed_consultant_model.g.dart';
+
+@freezed
+class FeedConsultantPaginationModel with _$FeedConsultantPaginationModel {
+ const factory FeedConsultantPaginationModel({
+ required List data,
+ required Links links,
+ required Meta meta,
+ }) = _FeedConsultantPaginationModel;
+
+ factory FeedConsultantPaginationModel.fromJson(Map json) => _$FeedConsultantPaginationModelFromJson(json);
+}
+
+@freezed
+class FeedConsultantModel with _$FeedConsultantModel {
+ const factory FeedConsultantModel({
+ required String slug,
+ required String name,
+ @JsonKey(name: 'rating_place') required int ratingPlace,
+ @JsonKey(name: 'profile_photo_url') required String photo,
+ required List badges,
+ }) = _FeedConsultantModel;
+
+ factory FeedConsultantModel.fromJson(Map json) => _$FeedConsultantModelFromJson(json);
+}
diff --git a/lib/features/feed/models/feed_consultant_model.freezed.dart b/lib/features/feed/models/feed_consultant_model.freezed.dart
new file mode 100644
index 00000000..75b07ec9
--- /dev/null
+++ b/lib/features/feed/models/feed_consultant_model.freezed.dart
@@ -0,0 +1,499 @@
+// coverage:ignore-file
+// GENERATED CODE - DO NOT MODIFY BY HAND
+// ignore_for_file: type=lint
+// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
+
+part of 'feed_consultant_model.dart';
+
+// **************************************************************************
+// FreezedGenerator
+// **************************************************************************
+
+T _$identity(T value) => value;
+
+final _privateConstructorUsedError = UnsupportedError(
+ 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models');
+
+FeedConsultantPaginationModel _$FeedConsultantPaginationModelFromJson(
+ Map json) {
+ return _FeedConsultantPaginationModel.fromJson(json);
+}
+
+/// @nodoc
+mixin _$FeedConsultantPaginationModel {
+ List get data => throw _privateConstructorUsedError;
+ Links get links => throw _privateConstructorUsedError;
+ Meta get meta => throw _privateConstructorUsedError;
+
+ /// Serializes this FeedConsultantPaginationModel to a JSON map.
+ Map toJson() => throw _privateConstructorUsedError;
+
+ /// Create a copy of FeedConsultantPaginationModel
+ /// with the given fields replaced by the non-null parameter values.
+ @JsonKey(includeFromJson: false, includeToJson: false)
+ $FeedConsultantPaginationModelCopyWith
+ get copyWith => throw _privateConstructorUsedError;
+}
+
+/// @nodoc
+abstract class $FeedConsultantPaginationModelCopyWith<$Res> {
+ factory $FeedConsultantPaginationModelCopyWith(
+ FeedConsultantPaginationModel value,
+ $Res Function(FeedConsultantPaginationModel) then) =
+ _$FeedConsultantPaginationModelCopyWithImpl<$Res,
+ FeedConsultantPaginationModel>;
+ @useResult
+ $Res call({List data, Links links, Meta meta});
+
+ $LinksCopyWith<$Res> get links;
+ $MetaCopyWith<$Res> get meta;
+}
+
+/// @nodoc
+class _$FeedConsultantPaginationModelCopyWithImpl<$Res,
+ $Val extends FeedConsultantPaginationModel>
+ implements $FeedConsultantPaginationModelCopyWith<$Res> {
+ _$FeedConsultantPaginationModelCopyWithImpl(this._value, this._then);
+
+ // ignore: unused_field
+ final $Val _value;
+ // ignore: unused_field
+ final $Res Function($Val) _then;
+
+ /// Create a copy of FeedConsultantPaginationModel
+ /// with the given fields replaced by the non-null parameter values.
+ @pragma('vm:prefer-inline')
+ @override
+ $Res call({
+ Object? data = null,
+ Object? links = null,
+ Object? meta = null,
+ }) {
+ return _then(_value.copyWith(
+ data: null == data
+ ? _value.data
+ : data // ignore: cast_nullable_to_non_nullable
+ as List,
+ links: null == links
+ ? _value.links
+ : links // ignore: cast_nullable_to_non_nullable
+ as Links,
+ meta: null == meta
+ ? _value.meta
+ : meta // ignore: cast_nullable_to_non_nullable
+ as Meta,
+ ) as $Val);
+ }
+
+ /// Create a copy of FeedConsultantPaginationModel
+ /// with the given fields replaced by the non-null parameter values.
+ @override
+ @pragma('vm:prefer-inline')
+ $LinksCopyWith<$Res> get links {
+ return $LinksCopyWith<$Res>(_value.links, (value) {
+ return _then(_value.copyWith(links: value) as $Val);
+ });
+ }
+
+ /// Create a copy of FeedConsultantPaginationModel
+ /// with the given fields replaced by the non-null parameter values.
+ @override
+ @pragma('vm:prefer-inline')
+ $MetaCopyWith<$Res> get meta {
+ return $MetaCopyWith<$Res>(_value.meta, (value) {
+ return _then(_value.copyWith(meta: value) as $Val);
+ });
+ }
+}
+
+/// @nodoc
+abstract class _$$FeedConsultantPaginationModelImplCopyWith<$Res>
+ implements $FeedConsultantPaginationModelCopyWith<$Res> {
+ factory _$$FeedConsultantPaginationModelImplCopyWith(
+ _$FeedConsultantPaginationModelImpl value,
+ $Res Function(_$FeedConsultantPaginationModelImpl) then) =
+ __$$FeedConsultantPaginationModelImplCopyWithImpl<$Res>;
+ @override
+ @useResult
+ $Res call({List data, Links links, Meta meta});
+
+ @override
+ $LinksCopyWith<$Res> get links;
+ @override
+ $MetaCopyWith<$Res> get meta;
+}
+
+/// @nodoc
+class __$$FeedConsultantPaginationModelImplCopyWithImpl<$Res>
+ extends _$FeedConsultantPaginationModelCopyWithImpl<$Res,
+ _$FeedConsultantPaginationModelImpl>
+ implements _$$FeedConsultantPaginationModelImplCopyWith<$Res> {
+ __$$FeedConsultantPaginationModelImplCopyWithImpl(
+ _$FeedConsultantPaginationModelImpl _value,
+ $Res Function(_$FeedConsultantPaginationModelImpl) _then)
+ : super(_value, _then);
+
+ /// Create a copy of FeedConsultantPaginationModel
+ /// with the given fields replaced by the non-null parameter values.
+ @pragma('vm:prefer-inline')
+ @override
+ $Res call({
+ Object? data = null,
+ Object? links = null,
+ Object? meta = null,
+ }) {
+ return _then(_$FeedConsultantPaginationModelImpl(
+ data: null == data
+ ? _value._data
+ : data // ignore: cast_nullable_to_non_nullable
+ as List,
+ links: null == links
+ ? _value.links
+ : links // ignore: cast_nullable_to_non_nullable
+ as Links,
+ meta: null == meta
+ ? _value.meta
+ : meta // ignore: cast_nullable_to_non_nullable
+ as Meta,
+ ));
+ }
+}
+
+/// @nodoc
+@JsonSerializable()
+class _$FeedConsultantPaginationModelImpl
+ implements _FeedConsultantPaginationModel {
+ const _$FeedConsultantPaginationModelImpl(
+ {required final List data,
+ required this.links,
+ required this.meta})
+ : _data = data;
+
+ factory _$FeedConsultantPaginationModelImpl.fromJson(
+ Map json) =>
+ _$$FeedConsultantPaginationModelImplFromJson(json);
+
+ final List _data;
+ @override
+ List get data {
+ if (_data is EqualUnmodifiableListView) return _data;
+ // ignore: implicit_dynamic_type
+ return EqualUnmodifiableListView(_data);
+ }
+
+ @override
+ final Links links;
+ @override
+ final Meta meta;
+
+ @override
+ String toString() {
+ return 'FeedConsultantPaginationModel(data: $data, links: $links, meta: $meta)';
+ }
+
+ @override
+ bool operator ==(Object other) {
+ return identical(this, other) ||
+ (other.runtimeType == runtimeType &&
+ other is _$FeedConsultantPaginationModelImpl &&
+ const DeepCollectionEquality().equals(other._data, _data) &&
+ (identical(other.links, links) || other.links == links) &&
+ (identical(other.meta, meta) || other.meta == meta));
+ }
+
+ @JsonKey(includeFromJson: false, includeToJson: false)
+ @override
+ int get hashCode => Object.hash(
+ runtimeType, const DeepCollectionEquality().hash(_data), links, meta);
+
+ /// Create a copy of FeedConsultantPaginationModel
+ /// with the given fields replaced by the non-null parameter values.
+ @JsonKey(includeFromJson: false, includeToJson: false)
+ @override
+ @pragma('vm:prefer-inline')
+ _$$FeedConsultantPaginationModelImplCopyWith<
+ _$FeedConsultantPaginationModelImpl>
+ get copyWith => __$$FeedConsultantPaginationModelImplCopyWithImpl<
+ _$FeedConsultantPaginationModelImpl>(this, _$identity);
+
+ @override
+ Map toJson() {
+ return _$$FeedConsultantPaginationModelImplToJson(
+ this,
+ );
+ }
+}
+
+abstract class _FeedConsultantPaginationModel
+ implements FeedConsultantPaginationModel {
+ const factory _FeedConsultantPaginationModel(
+ {required final List data,
+ required final Links links,
+ required final Meta meta}) = _$FeedConsultantPaginationModelImpl;
+
+ factory _FeedConsultantPaginationModel.fromJson(Map json) =
+ _$FeedConsultantPaginationModelImpl.fromJson;
+
+ @override
+ List get data;
+ @override
+ Links get links;
+ @override
+ Meta get meta;
+
+ /// Create a copy of FeedConsultantPaginationModel
+ /// with the given fields replaced by the non-null parameter values.
+ @override
+ @JsonKey(includeFromJson: false, includeToJson: false)
+ _$$FeedConsultantPaginationModelImplCopyWith<
+ _$FeedConsultantPaginationModelImpl>
+ get copyWith => throw _privateConstructorUsedError;
+}
+
+FeedConsultantModel _$FeedConsultantModelFromJson(Map json) {
+ return _FeedConsultantModel.fromJson(json);
+}
+
+/// @nodoc
+mixin _$FeedConsultantModel {
+ String get slug => throw _privateConstructorUsedError;
+ String get name => throw _privateConstructorUsedError;
+ @JsonKey(name: 'rating_place')
+ int get ratingPlace => throw _privateConstructorUsedError;
+ @JsonKey(name: 'profile_photo_url')
+ String get photo => throw _privateConstructorUsedError;
+ List get badges => throw _privateConstructorUsedError;
+
+ /// Serializes this FeedConsultantModel to a JSON map.
+ Map toJson() => throw _privateConstructorUsedError;
+
+ /// Create a copy of FeedConsultantModel
+ /// with the given fields replaced by the non-null parameter values.
+ @JsonKey(includeFromJson: false, includeToJson: false)
+ $FeedConsultantModelCopyWith get copyWith =>
+ throw _privateConstructorUsedError;
+}
+
+/// @nodoc
+abstract class $FeedConsultantModelCopyWith<$Res> {
+ factory $FeedConsultantModelCopyWith(
+ FeedConsultantModel value, $Res Function(FeedConsultantModel) then) =
+ _$FeedConsultantModelCopyWithImpl<$Res, FeedConsultantModel>;
+ @useResult
+ $Res call(
+ {String slug,
+ String name,
+ @JsonKey(name: 'rating_place') int ratingPlace,
+ @JsonKey(name: 'profile_photo_url') String photo,
+ List badges});
+}
+
+/// @nodoc
+class _$FeedConsultantModelCopyWithImpl<$Res, $Val extends FeedConsultantModel>
+ implements $FeedConsultantModelCopyWith<$Res> {
+ _$FeedConsultantModelCopyWithImpl(this._value, this._then);
+
+ // ignore: unused_field
+ final $Val _value;
+ // ignore: unused_field
+ final $Res Function($Val) _then;
+
+ /// Create a copy of FeedConsultantModel
+ /// with the given fields replaced by the non-null parameter values.
+ @pragma('vm:prefer-inline')
+ @override
+ $Res call({
+ Object? slug = null,
+ Object? name = null,
+ Object? ratingPlace = null,
+ Object? photo = null,
+ Object? badges = null,
+ }) {
+ return _then(_value.copyWith(
+ slug: null == slug
+ ? _value.slug
+ : slug // ignore: cast_nullable_to_non_nullable
+ as String,
+ name: null == name
+ ? _value.name
+ : name // ignore: cast_nullable_to_non_nullable
+ as String,
+ ratingPlace: null == ratingPlace
+ ? _value.ratingPlace
+ : ratingPlace // ignore: cast_nullable_to_non_nullable
+ as int,
+ photo: null == photo
+ ? _value.photo
+ : photo // ignore: cast_nullable_to_non_nullable
+ as String,
+ badges: null == badges
+ ? _value.badges
+ : badges // ignore: cast_nullable_to_non_nullable
+ as List,
+ ) as $Val);
+ }
+}
+
+/// @nodoc
+abstract class _$$FeedConsultantModelImplCopyWith<$Res>
+ implements $FeedConsultantModelCopyWith<$Res> {
+ factory _$$FeedConsultantModelImplCopyWith(_$FeedConsultantModelImpl value,
+ $Res Function(_$FeedConsultantModelImpl) then) =
+ __$$FeedConsultantModelImplCopyWithImpl<$Res>;
+ @override
+ @useResult
+ $Res call(
+ {String slug,
+ String name,
+ @JsonKey(name: 'rating_place') int ratingPlace,
+ @JsonKey(name: 'profile_photo_url') String photo,
+ List badges});
+}
+
+/// @nodoc
+class __$$FeedConsultantModelImplCopyWithImpl<$Res>
+ extends _$FeedConsultantModelCopyWithImpl<$Res, _$FeedConsultantModelImpl>
+ implements _$$FeedConsultantModelImplCopyWith<$Res> {
+ __$$FeedConsultantModelImplCopyWithImpl(_$FeedConsultantModelImpl _value,
+ $Res Function(_$FeedConsultantModelImpl) _then)
+ : super(_value, _then);
+
+ /// Create a copy of FeedConsultantModel
+ /// with the given fields replaced by the non-null parameter values.
+ @pragma('vm:prefer-inline')
+ @override
+ $Res call({
+ Object? slug = null,
+ Object? name = null,
+ Object? ratingPlace = null,
+ Object? photo = null,
+ Object? badges = null,
+ }) {
+ return _then(_$FeedConsultantModelImpl(
+ slug: null == slug
+ ? _value.slug
+ : slug // ignore: cast_nullable_to_non_nullable
+ as String,
+ name: null == name
+ ? _value.name
+ : name // ignore: cast_nullable_to_non_nullable
+ as String,
+ ratingPlace: null == ratingPlace
+ ? _value.ratingPlace
+ : ratingPlace // ignore: cast_nullable_to_non_nullable
+ as int,
+ photo: null == photo
+ ? _value.photo
+ : photo // ignore: cast_nullable_to_non_nullable
+ as String,
+ badges: null == badges
+ ? _value._badges
+ : badges // ignore: cast_nullable_to_non_nullable
+ as List,
+ ));
+ }
+}
+
+/// @nodoc
+@JsonSerializable()
+class _$FeedConsultantModelImpl implements _FeedConsultantModel {
+ const _$FeedConsultantModelImpl(
+ {required this.slug,
+ required this.name,
+ @JsonKey(name: 'rating_place') required this.ratingPlace,
+ @JsonKey(name: 'profile_photo_url') required this.photo,
+ required final List badges})
+ : _badges = badges;
+
+ factory _$FeedConsultantModelImpl.fromJson(Map json) =>
+ _$$FeedConsultantModelImplFromJson(json);
+
+ @override
+ final String slug;
+ @override
+ final String name;
+ @override
+ @JsonKey(name: 'rating_place')
+ final int ratingPlace;
+ @override
+ @JsonKey(name: 'profile_photo_url')
+ final String photo;
+ final List _badges;
+ @override
+ List get badges {
+ if (_badges is EqualUnmodifiableListView) return _badges;
+ // ignore: implicit_dynamic_type
+ return EqualUnmodifiableListView(_badges);
+ }
+
+ @override
+ String toString() {
+ return 'FeedConsultantModel(slug: $slug, name: $name, ratingPlace: $ratingPlace, photo: $photo, badges: $badges)';
+ }
+
+ @override
+ bool operator ==(Object other) {
+ return identical(this, other) ||
+ (other.runtimeType == runtimeType &&
+ other is _$FeedConsultantModelImpl &&
+ (identical(other.slug, slug) || other.slug == slug) &&
+ (identical(other.name, name) || other.name == name) &&
+ (identical(other.ratingPlace, ratingPlace) ||
+ other.ratingPlace == ratingPlace) &&
+ (identical(other.photo, photo) || other.photo == photo) &&
+ const DeepCollectionEquality().equals(other._badges, _badges));
+ }
+
+ @JsonKey(includeFromJson: false, includeToJson: false)
+ @override
+ int get hashCode => Object.hash(runtimeType, slug, name, ratingPlace, photo,
+ const DeepCollectionEquality().hash(_badges));
+
+ /// Create a copy of FeedConsultantModel
+ /// with the given fields replaced by the non-null parameter values.
+ @JsonKey(includeFromJson: false, includeToJson: false)
+ @override
+ @pragma('vm:prefer-inline')
+ _$$FeedConsultantModelImplCopyWith<_$FeedConsultantModelImpl> get copyWith =>
+ __$$FeedConsultantModelImplCopyWithImpl<_$FeedConsultantModelImpl>(
+ this, _$identity);
+
+ @override
+ Map toJson() {
+ return _$$FeedConsultantModelImplToJson(
+ this,
+ );
+ }
+}
+
+abstract class _FeedConsultantModel implements FeedConsultantModel {
+ const factory _FeedConsultantModel(
+ {required final String slug,
+ required final String name,
+ @JsonKey(name: 'rating_place') required final int ratingPlace,
+ @JsonKey(name: 'profile_photo_url') required final String photo,
+ required final List badges}) = _$FeedConsultantModelImpl;
+
+ factory _FeedConsultantModel.fromJson(Map json) =
+ _$FeedConsultantModelImpl.fromJson;
+
+ @override
+ String get slug;
+ @override
+ String get name;
+ @override
+ @JsonKey(name: 'rating_place')
+ int get ratingPlace;
+ @override
+ @JsonKey(name: 'profile_photo_url')
+ String get photo;
+ @override
+ List get badges;
+
+ /// Create a copy of FeedConsultantModel
+ /// with the given fields replaced by the non-null parameter values.
+ @override
+ @JsonKey(includeFromJson: false, includeToJson: false)
+ _$$FeedConsultantModelImplCopyWith<_$FeedConsultantModelImpl> get copyWith =>
+ throw _privateConstructorUsedError;
+}
diff --git a/lib/features/feed/models/feed_consultant_model.g.dart b/lib/features/feed/models/feed_consultant_model.g.dart
new file mode 100644
index 00000000..67bd27da
--- /dev/null
+++ b/lib/features/feed/models/feed_consultant_model.g.dart
@@ -0,0 +1,48 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of 'feed_consultant_model.dart';
+
+// **************************************************************************
+// JsonSerializableGenerator
+// **************************************************************************
+
+_$FeedConsultantPaginationModelImpl
+ _$$FeedConsultantPaginationModelImplFromJson(Map json) =>
+ _$FeedConsultantPaginationModelImpl(
+ data: (json['data'] as List)
+ .map((e) =>
+ FeedConsultantModel.fromJson(e as Map))
+ .toList(),
+ links: Links.fromJson(json['links'] as Map),
+ meta: Meta.fromJson(json['meta'] as Map),
+ );
+
+Map _$$FeedConsultantPaginationModelImplToJson(
+ _$FeedConsultantPaginationModelImpl instance) =>
+ {
+ 'data': instance.data,
+ 'links': instance.links,
+ 'meta': instance.meta,
+ };
+
+_$FeedConsultantModelImpl _$$FeedConsultantModelImplFromJson(
+ Map json) =>
+ _$FeedConsultantModelImpl(
+ slug: json['slug'] as String,
+ name: json['name'] as String,
+ ratingPlace: (json['rating_place'] as num).toInt(),
+ photo: json['profile_photo_url'] as String,
+ badges: (json['badges'] as List)
+ .map((e) => BadgeModel.fromJson(e as Map))
+ .toList(),
+ );
+
+Map _$$FeedConsultantModelImplToJson(
+ _$FeedConsultantModelImpl instance) =>
+ {
+ 'slug': instance.slug,
+ 'name': instance.name,
+ 'rating_place': instance.ratingPlace,
+ 'profile_photo_url': instance.photo,
+ 'badges': instance.badges,
+ };
diff --git a/lib/features/feed/models/recipes_model.dart b/lib/features/feed/models/recipes_model.dart
index ad61afd1..8f0db8ad 100644
--- a/lib/features/feed/models/recipes_model.dart
+++ b/lib/features/feed/models/recipes_model.dart
@@ -21,6 +21,8 @@ class Recipes with _$Recipes {
required String type,
required String slug,
@JsonKey(name: 'total_comments') required int commentsCount,
+ @JsonKey(name: 'was_liked_by_me') required bool wasLikedByMe,
+ @JsonKey(name: 'energy_per_serving') required double calories,
@JsonKey(name: 'total_likes') required int likesCount,
@JsonKey(name: 'total_views') required int viewsCount,
required Author author,
diff --git a/lib/features/feed/models/recipes_model.freezed.dart b/lib/features/feed/models/recipes_model.freezed.dart
index 9dd4f54e..34d1c39a 100644
--- a/lib/features/feed/models/recipes_model.freezed.dart
+++ b/lib/features/feed/models/recipes_model.freezed.dart
@@ -39,6 +39,10 @@ mixin _$Recipes {
String get slug => throw _privateConstructorUsedError;
@JsonKey(name: 'total_comments')
int get commentsCount => throw _privateConstructorUsedError;
+ @JsonKey(name: 'was_liked_by_me')
+ bool get wasLikedByMe => throw _privateConstructorUsedError;
+ @JsonKey(name: 'energy_per_serving')
+ double get calories => throw _privateConstructorUsedError;
@JsonKey(name: 'total_likes')
int get likesCount => throw _privateConstructorUsedError;
@JsonKey(name: 'total_views')
@@ -74,6 +78,8 @@ abstract class $RecipesCopyWith<$Res> {
String type,
String slug,
@JsonKey(name: 'total_comments') int commentsCount,
+ @JsonKey(name: 'was_liked_by_me') bool wasLikedByMe,
+ @JsonKey(name: 'energy_per_serving') double calories,
@JsonKey(name: 'total_likes') int likesCount,
@JsonKey(name: 'total_views') int viewsCount,
Author author});
@@ -110,6 +116,8 @@ class _$RecipesCopyWithImpl<$Res, $Val extends Recipes>
Object? type = null,
Object? slug = null,
Object? commentsCount = null,
+ Object? wasLikedByMe = null,
+ Object? calories = null,
Object? likesCount = null,
Object? viewsCount = null,
Object? author = null,
@@ -171,6 +179,14 @@ class _$RecipesCopyWithImpl<$Res, $Val extends Recipes>
? _value.commentsCount
: commentsCount // ignore: cast_nullable_to_non_nullable
as int,
+ wasLikedByMe: null == wasLikedByMe
+ ? _value.wasLikedByMe
+ : wasLikedByMe // ignore: cast_nullable_to_non_nullable
+ as bool,
+ calories: null == calories
+ ? _value.calories
+ : calories // ignore: cast_nullable_to_non_nullable
+ as double,
likesCount: null == likesCount
? _value.likesCount
: likesCount // ignore: cast_nullable_to_non_nullable
@@ -219,6 +235,8 @@ abstract class _$$RecipesImplCopyWith<$Res> implements $RecipesCopyWith<$Res> {
String type,
String slug,
@JsonKey(name: 'total_comments') int commentsCount,
+ @JsonKey(name: 'was_liked_by_me') bool wasLikedByMe,
+ @JsonKey(name: 'energy_per_serving') double calories,
@JsonKey(name: 'total_likes') int likesCount,
@JsonKey(name: 'total_views') int viewsCount,
Author author});
@@ -254,6 +272,8 @@ class __$$RecipesImplCopyWithImpl<$Res>
Object? type = null,
Object? slug = null,
Object? commentsCount = null,
+ Object? wasLikedByMe = null,
+ Object? calories = null,
Object? likesCount = null,
Object? viewsCount = null,
Object? author = null,
@@ -315,6 +335,14 @@ class __$$RecipesImplCopyWithImpl<$Res>
? _value.commentsCount
: commentsCount // ignore: cast_nullable_to_non_nullable
as int,
+ wasLikedByMe: null == wasLikedByMe
+ ? _value.wasLikedByMe
+ : wasLikedByMe // ignore: cast_nullable_to_non_nullable
+ as bool,
+ calories: null == calories
+ ? _value.calories
+ : calories // ignore: cast_nullable_to_non_nullable
+ as double,
likesCount: null == likesCount
? _value.likesCount
: likesCount // ignore: cast_nullable_to_non_nullable
@@ -349,6 +377,8 @@ class _$RecipesImpl implements _Recipes {
required this.type,
required this.slug,
@JsonKey(name: 'total_comments') required this.commentsCount,
+ @JsonKey(name: 'was_liked_by_me') required this.wasLikedByMe,
+ @JsonKey(name: 'energy_per_serving') required this.calories,
@JsonKey(name: 'total_likes') required this.likesCount,
@JsonKey(name: 'total_views') required this.viewsCount,
required this.author})
@@ -404,6 +434,12 @@ class _$RecipesImpl implements _Recipes {
@JsonKey(name: 'total_comments')
final int commentsCount;
@override
+ @JsonKey(name: 'was_liked_by_me')
+ final bool wasLikedByMe;
+ @override
+ @JsonKey(name: 'energy_per_serving')
+ final double calories;
+ @override
@JsonKey(name: 'total_likes')
final int likesCount;
@override
@@ -414,7 +450,7 @@ class _$RecipesImpl implements _Recipes {
@override
String toString() {
- return 'Recipes(id: $id, image: $image, state: $state, cookingTime: $cookingTime, ingredients: $ingredients, description: $description, steps: $steps, videoUrl: $videoUrl, createdAt: $createdAt, updatedAt: $updatedAt, title: $title, type: $type, slug: $slug, commentsCount: $commentsCount, likesCount: $likesCount, viewsCount: $viewsCount, author: $author)';
+ return 'Recipes(id: $id, image: $image, state: $state, cookingTime: $cookingTime, ingredients: $ingredients, description: $description, steps: $steps, videoUrl: $videoUrl, createdAt: $createdAt, updatedAt: $updatedAt, title: $title, type: $type, slug: $slug, commentsCount: $commentsCount, wasLikedByMe: $wasLikedByMe, calories: $calories, likesCount: $likesCount, viewsCount: $viewsCount, author: $author)';
}
@override
@@ -443,6 +479,10 @@ class _$RecipesImpl implements _Recipes {
(identical(other.slug, slug) || other.slug == slug) &&
(identical(other.commentsCount, commentsCount) ||
other.commentsCount == commentsCount) &&
+ (identical(other.wasLikedByMe, wasLikedByMe) ||
+ other.wasLikedByMe == wasLikedByMe) &&
+ (identical(other.calories, calories) ||
+ other.calories == calories) &&
(identical(other.likesCount, likesCount) ||
other.likesCount == likesCount) &&
(identical(other.viewsCount, viewsCount) ||
@@ -452,25 +492,28 @@ class _$RecipesImpl implements _Recipes {
@JsonKey(includeFromJson: false, includeToJson: false)
@override
- int get hashCode => Object.hash(
- runtimeType,
- id,
- image,
- state,
- cookingTime,
- const DeepCollectionEquality().hash(_ingredients),
- description,
- const DeepCollectionEquality().hash(_steps),
- videoUrl,
- createdAt,
- updatedAt,
- title,
- type,
- slug,
- commentsCount,
- likesCount,
- viewsCount,
- author);
+ int get hashCode => Object.hashAll([
+ runtimeType,
+ id,
+ image,
+ state,
+ cookingTime,
+ const DeepCollectionEquality().hash(_ingredients),
+ description,
+ const DeepCollectionEquality().hash(_steps),
+ videoUrl,
+ createdAt,
+ updatedAt,
+ title,
+ type,
+ slug,
+ commentsCount,
+ wasLikedByMe,
+ calories,
+ likesCount,
+ viewsCount,
+ author
+ ]);
/// Create a copy of Recipes
/// with the given fields replaced by the non-null parameter values.
@@ -504,6 +547,8 @@ abstract class _Recipes implements Recipes {
required final String type,
required final String slug,
@JsonKey(name: 'total_comments') required final int commentsCount,
+ @JsonKey(name: 'was_liked_by_me') required final bool wasLikedByMe,
+ @JsonKey(name: 'energy_per_serving') required final double calories,
@JsonKey(name: 'total_likes') required final int likesCount,
@JsonKey(name: 'total_views') required final int viewsCount,
required final Author author}) = _$RecipesImpl;
@@ -544,6 +589,12 @@ abstract class _Recipes implements Recipes {
@JsonKey(name: 'total_comments')
int get commentsCount;
@override
+ @JsonKey(name: 'was_liked_by_me')
+ bool get wasLikedByMe;
+ @override
+ @JsonKey(name: 'energy_per_serving')
+ double get calories;
+ @override
@JsonKey(name: 'total_likes')
int get likesCount;
@override
diff --git a/lib/features/feed/models/recipes_model.g.dart b/lib/features/feed/models/recipes_model.g.dart
index 7f8c0142..cc96df42 100644
--- a/lib/features/feed/models/recipes_model.g.dart
+++ b/lib/features/feed/models/recipes_model.g.dart
@@ -26,6 +26,8 @@ _$RecipesImpl _$$RecipesImplFromJson(Map json) =>
type: json['type'] as String,
slug: json['slug'] as String,
commentsCount: (json['total_comments'] as num).toInt(),
+ wasLikedByMe: json['was_liked_by_me'] as bool,
+ calories: (json['energy_per_serving'] as num).toDouble(),
likesCount: (json['total_likes'] as num).toInt(),
viewsCount: (json['total_views'] as num).toInt(),
author: Author.fromJson(json['author'] as Map),
@@ -47,6 +49,8 @@ Map _$$RecipesImplToJson(_$RecipesImpl instance) =>
'type': instance.type,
'slug': instance.slug,
'total_comments': instance.commentsCount,
+ 'was_liked_by_me': instance.wasLikedByMe,
+ 'energy_per_serving': instance.calories,
'total_likes': instance.likesCount,
'total_views': instance.viewsCount,
'author': instance.author,
diff --git a/lib/features/feed/presentation/bloc/consultants_cubit/consultants_cubit.dart b/lib/features/feed/presentation/bloc/consultants_cubit/consultants_cubit.dart
new file mode 100644
index 00000000..9b30f4cc
--- /dev/null
+++ b/lib/features/feed/presentation/bloc/consultants_cubit/consultants_cubit.dart
@@ -0,0 +1,25 @@
+import 'package:eatvio_app/features/feed/presentation/bloc/consultants_cubit/consultants_state.dart';
+import 'package:eatvio_app/features/feed/repositories/feed_repository.dart';
+import 'package:flutter_bloc/flutter_bloc.dart';
+
+class ConsultantsCubit extends Cubit {
+ final FeedRepository feedRepository;
+
+ ConsultantsCubit({
+ required this.feedRepository,
+ }) : super(ConsultantsState());
+
+ getConsultants() async {
+ emit(ConsultantsState.loading());
+ try {
+ emit(
+ ConsultantsState.loaded(
+ consultantsList: await feedRepository.getConsultants(),
+ isLoading: false,
+ ),
+ );
+ } catch (e) {
+ emit(ConsultantsState.error(errorMessage: e.toString()));
+ }
+ }
+}
diff --git a/lib/features/feed/presentation/bloc/consultants_cubit/consultants_state.dart b/lib/features/feed/presentation/bloc/consultants_cubit/consultants_state.dart
new file mode 100644
index 00000000..a0b71763
--- /dev/null
+++ b/lib/features/feed/presentation/bloc/consultants_cubit/consultants_state.dart
@@ -0,0 +1,20 @@
+import 'package:eatvio_app/features/feed/models/feed_consultant_model.dart';
+import 'package:freezed_annotation/freezed_annotation.dart';
+
+part 'consultants_state.freezed.dart';
+
+@freezed
+abstract class ConsultantsState with _$ConsultantsState {
+ const factory ConsultantsState() = _ConsultantsState;
+
+ const factory ConsultantsState.loading() = ConsultantsStateLoading;
+
+ const factory ConsultantsState.loaded({
+ required List consultantsList,
+ required bool isLoading,
+ }) = ConsultantsStateLoaded;
+
+ const factory ConsultantsState.error({
+ required String errorMessage,
+ }) = ConsultantsStateError;
+}
diff --git a/lib/features/feed/presentation/bloc/consultants_cubit/consultants_state.freezed.dart b/lib/features/feed/presentation/bloc/consultants_cubit/consultants_state.freezed.dart
new file mode 100644
index 00000000..5dd8aa15
--- /dev/null
+++ b/lib/features/feed/presentation/bloc/consultants_cubit/consultants_state.freezed.dart
@@ -0,0 +1,686 @@
+// coverage:ignore-file
+// GENERATED CODE - DO NOT MODIFY BY HAND
+// ignore_for_file: type=lint
+// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
+
+part of 'consultants_state.dart';
+
+// **************************************************************************
+// FreezedGenerator
+// **************************************************************************
+
+T _$identity(T value) => value;
+
+final _privateConstructorUsedError = UnsupportedError(
+ 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models');
+
+/// @nodoc
+mixin _$ConsultantsState {
+ @optionalTypeArgs
+ TResult when(
+ TResult Function() $default, {
+ required TResult Function() loading,
+ required TResult Function(
+ List consultantsList, bool isLoading)
+ loaded,
+ required TResult Function(String errorMessage) error,
+ }) =>
+ throw _privateConstructorUsedError;
+ @optionalTypeArgs
+ TResult? whenOrNull(
+ TResult? Function()? $default, {
+ TResult? Function()? loading,
+ TResult? Function(
+ List consultantsList, bool isLoading)?
+ loaded,
+ TResult? Function(String errorMessage)? error,
+ }) =>
+ throw _privateConstructorUsedError;
+ @optionalTypeArgs
+ TResult maybeWhen(
+ TResult Function()? $default, {
+ TResult Function()? loading,
+ TResult Function(List consultantsList, bool isLoading)?
+ loaded,
+ TResult Function(String errorMessage)? error,
+ required TResult orElse(),
+ }) =>
+ throw _privateConstructorUsedError;
+ @optionalTypeArgs
+ TResult map(
+ TResult Function(_ConsultantsState value) $default, {
+ required TResult Function(ConsultantsStateLoading value) loading,
+ required TResult Function(ConsultantsStateLoaded value) loaded,
+ required TResult Function(ConsultantsStateError value) error,
+ }) =>
+ throw _privateConstructorUsedError;
+ @optionalTypeArgs
+ TResult? mapOrNull(
+ TResult? Function(_ConsultantsState value)? $default, {
+ TResult? Function(ConsultantsStateLoading value)? loading,
+ TResult? Function(ConsultantsStateLoaded value)? loaded,
+ TResult? Function(ConsultantsStateError value)? error,
+ }) =>
+ throw _privateConstructorUsedError;
+ @optionalTypeArgs
+ TResult maybeMap(
+ TResult Function(_ConsultantsState value)? $default, {
+ TResult Function(ConsultantsStateLoading value)? loading,
+ TResult Function(ConsultantsStateLoaded value)? loaded,
+ TResult Function(ConsultantsStateError value)? error,
+ required TResult orElse(),
+ }) =>
+ throw _privateConstructorUsedError;
+}
+
+/// @nodoc
+abstract class $ConsultantsStateCopyWith<$Res> {
+ factory $ConsultantsStateCopyWith(
+ ConsultantsState value, $Res Function(ConsultantsState) then) =
+ _$ConsultantsStateCopyWithImpl<$Res, ConsultantsState>;
+}
+
+/// @nodoc
+class _$ConsultantsStateCopyWithImpl<$Res, $Val extends ConsultantsState>
+ implements $ConsultantsStateCopyWith<$Res> {
+ _$ConsultantsStateCopyWithImpl(this._value, this._then);
+
+ // ignore: unused_field
+ final $Val _value;
+ // ignore: unused_field
+ final $Res Function($Val) _then;
+
+ /// Create a copy of ConsultantsState
+ /// with the given fields replaced by the non-null parameter values.
+}
+
+/// @nodoc
+abstract class _$$ConsultantsStateImplCopyWith<$Res> {
+ factory _$$ConsultantsStateImplCopyWith(_$ConsultantsStateImpl value,
+ $Res Function(_$ConsultantsStateImpl) then) =
+ __$$ConsultantsStateImplCopyWithImpl<$Res>;
+}
+
+/// @nodoc
+class __$$ConsultantsStateImplCopyWithImpl<$Res>
+ extends _$ConsultantsStateCopyWithImpl<$Res, _$ConsultantsStateImpl>
+ implements _$$ConsultantsStateImplCopyWith<$Res> {
+ __$$ConsultantsStateImplCopyWithImpl(_$ConsultantsStateImpl _value,
+ $Res Function(_$ConsultantsStateImpl) _then)
+ : super(_value, _then);
+
+ /// Create a copy of ConsultantsState
+ /// with the given fields replaced by the non-null parameter values.
+}
+
+/// @nodoc
+
+class _$ConsultantsStateImpl implements _ConsultantsState {
+ const _$ConsultantsStateImpl();
+
+ @override
+ String toString() {
+ return 'ConsultantsState()';
+ }
+
+ @override
+ bool operator ==(Object other) {
+ return identical(this, other) ||
+ (other.runtimeType == runtimeType && other is _$ConsultantsStateImpl);
+ }
+
+ @override
+ int get hashCode => runtimeType.hashCode;
+
+ @override
+ @optionalTypeArgs
+ TResult when(
+ TResult Function() $default, {
+ required TResult Function() loading,
+ required TResult Function(
+ List consultantsList, bool isLoading)
+ loaded,
+ required TResult Function(String errorMessage) error,
+ }) {
+ return $default();
+ }
+
+ @override
+ @optionalTypeArgs
+ TResult? whenOrNull(
+ TResult? Function()? $default, {
+ TResult? Function()? loading,
+ TResult? Function(
+ List consultantsList, bool isLoading)?
+ loaded,
+ TResult? Function(String errorMessage)? error,
+ }) {
+ return $default?.call();
+ }
+
+ @override
+ @optionalTypeArgs
+ TResult maybeWhen(
+ TResult Function()? $default, {
+ TResult Function()? loading,
+ TResult Function(List consultantsList, bool isLoading)?
+ loaded,
+ TResult Function(String errorMessage)? error,
+ required TResult orElse(),
+ }) {
+ if ($default != null) {
+ return $default();
+ }
+ return orElse();
+ }
+
+ @override
+ @optionalTypeArgs
+ TResult map(
+ TResult Function(_ConsultantsState value) $default, {
+ required TResult Function(ConsultantsStateLoading value) loading,
+ required TResult Function(ConsultantsStateLoaded value) loaded,
+ required TResult Function(ConsultantsStateError value) error,
+ }) {
+ return $default(this);
+ }
+
+ @override
+ @optionalTypeArgs
+ TResult? mapOrNull(
+ TResult? Function(_ConsultantsState value)? $default, {
+ TResult? Function(ConsultantsStateLoading value)? loading,
+ TResult? Function(ConsultantsStateLoaded value)? loaded,
+ TResult? Function(ConsultantsStateError value)? error,
+ }) {
+ return $default?.call(this);
+ }
+
+ @override
+ @optionalTypeArgs
+ TResult maybeMap(
+ TResult Function(_ConsultantsState value)? $default, {
+ TResult Function(ConsultantsStateLoading value)? loading,
+ TResult Function(ConsultantsStateLoaded value)? loaded,
+ TResult Function(ConsultantsStateError value)? error,
+ required TResult orElse(),
+ }) {
+ if ($default != null) {
+ return $default(this);
+ }
+ return orElse();
+ }
+}
+
+abstract class _ConsultantsState implements ConsultantsState {
+ const factory _ConsultantsState() = _$ConsultantsStateImpl;
+}
+
+/// @nodoc
+abstract class _$$ConsultantsStateLoadingImplCopyWith<$Res> {
+ factory _$$ConsultantsStateLoadingImplCopyWith(
+ _$ConsultantsStateLoadingImpl value,
+ $Res Function(_$ConsultantsStateLoadingImpl) then) =
+ __$$ConsultantsStateLoadingImplCopyWithImpl<$Res>;
+}
+
+/// @nodoc
+class __$$ConsultantsStateLoadingImplCopyWithImpl<$Res>
+ extends _$ConsultantsStateCopyWithImpl<$Res, _$ConsultantsStateLoadingImpl>
+ implements _$$ConsultantsStateLoadingImplCopyWith<$Res> {
+ __$$ConsultantsStateLoadingImplCopyWithImpl(
+ _$ConsultantsStateLoadingImpl _value,
+ $Res Function(_$ConsultantsStateLoadingImpl) _then)
+ : super(_value, _then);
+
+ /// Create a copy of ConsultantsState
+ /// with the given fields replaced by the non-null parameter values.
+}
+
+/// @nodoc
+
+class _$ConsultantsStateLoadingImpl implements ConsultantsStateLoading {
+ const _$ConsultantsStateLoadingImpl();
+
+ @override
+ String toString() {
+ return 'ConsultantsState.loading()';
+ }
+
+ @override
+ bool operator ==(Object other) {
+ return identical(this, other) ||
+ (other.runtimeType == runtimeType &&
+ other is _$ConsultantsStateLoadingImpl);
+ }
+
+ @override
+ int get hashCode => runtimeType.hashCode;
+
+ @override
+ @optionalTypeArgs
+ TResult when(
+ TResult Function() $default, {
+ required TResult Function() loading,
+ required TResult Function(
+ List consultantsList, bool isLoading)
+ loaded,
+ required TResult Function(String errorMessage) error,
+ }) {
+ return loading();
+ }
+
+ @override
+ @optionalTypeArgs
+ TResult? whenOrNull(
+ TResult? Function()? $default, {
+ TResult? Function()? loading,
+ TResult? Function(
+ List consultantsList, bool isLoading)?
+ loaded,
+ TResult? Function(String errorMessage)? error,
+ }) {
+ return loading?.call();
+ }
+
+ @override
+ @optionalTypeArgs
+ TResult maybeWhen(
+ TResult Function()? $default, {
+ TResult Function()? loading,
+ TResult Function(List consultantsList, bool isLoading)?
+ loaded,
+ TResult Function(String errorMessage)? error,
+ required TResult orElse(),
+ }) {
+ if (loading != null) {
+ return loading();
+ }
+ return orElse();
+ }
+
+ @override
+ @optionalTypeArgs
+ TResult map(
+ TResult Function(_ConsultantsState value) $default, {
+ required TResult Function(ConsultantsStateLoading value) loading,
+ required TResult Function(ConsultantsStateLoaded value) loaded,
+ required TResult Function(ConsultantsStateError value) error,
+ }) {
+ return loading(this);
+ }
+
+ @override
+ @optionalTypeArgs
+ TResult? mapOrNull(
+ TResult? Function(_ConsultantsState value)? $default, {
+ TResult? Function(ConsultantsStateLoading value)? loading,
+ TResult? Function(ConsultantsStateLoaded value)? loaded,
+ TResult? Function(ConsultantsStateError value)? error,
+ }) {
+ return loading?.call(this);
+ }
+
+ @override
+ @optionalTypeArgs
+ TResult maybeMap(
+ TResult Function(_ConsultantsState value)? $default, {
+ TResult Function(ConsultantsStateLoading value)? loading,
+ TResult Function(ConsultantsStateLoaded value)? loaded,
+ TResult Function(ConsultantsStateError value)? error,
+ required TResult orElse(),
+ }) {
+ if (loading != null) {
+ return loading(this);
+ }
+ return orElse();
+ }
+}
+
+abstract class ConsultantsStateLoading implements ConsultantsState {
+ const factory ConsultantsStateLoading() = _$ConsultantsStateLoadingImpl;
+}
+
+/// @nodoc
+abstract class _$$ConsultantsStateLoadedImplCopyWith<$Res> {
+ factory _$$ConsultantsStateLoadedImplCopyWith(
+ _$ConsultantsStateLoadedImpl value,
+ $Res Function(_$ConsultantsStateLoadedImpl) then) =
+ __$$ConsultantsStateLoadedImplCopyWithImpl<$Res>;
+ @useResult
+ $Res call({List consultantsList, bool isLoading});
+}
+
+/// @nodoc
+class __$$ConsultantsStateLoadedImplCopyWithImpl<$Res>
+ extends _$ConsultantsStateCopyWithImpl<$Res, _$ConsultantsStateLoadedImpl>
+ implements _$$ConsultantsStateLoadedImplCopyWith<$Res> {
+ __$$ConsultantsStateLoadedImplCopyWithImpl(
+ _$ConsultantsStateLoadedImpl _value,
+ $Res Function(_$ConsultantsStateLoadedImpl) _then)
+ : super(_value, _then);
+
+ /// Create a copy of ConsultantsState
+ /// with the given fields replaced by the non-null parameter values.
+ @pragma('vm:prefer-inline')
+ @override
+ $Res call({
+ Object? consultantsList = null,
+ Object? isLoading = null,
+ }) {
+ return _then(_$ConsultantsStateLoadedImpl(
+ consultantsList: null == consultantsList
+ ? _value._consultantsList
+ : consultantsList // ignore: cast_nullable_to_non_nullable
+ as List,
+ isLoading: null == isLoading
+ ? _value.isLoading
+ : isLoading // ignore: cast_nullable_to_non_nullable
+ as bool,
+ ));
+ }
+}
+
+/// @nodoc
+
+class _$ConsultantsStateLoadedImpl implements ConsultantsStateLoaded {
+ const _$ConsultantsStateLoadedImpl(
+ {required final List consultantsList,
+ required this.isLoading})
+ : _consultantsList = consultantsList;
+
+ final List _consultantsList;
+ @override
+ List get consultantsList {
+ if (_consultantsList is EqualUnmodifiableListView) return _consultantsList;
+ // ignore: implicit_dynamic_type
+ return EqualUnmodifiableListView(_consultantsList);
+ }
+
+ @override
+ final bool isLoading;
+
+ @override
+ String toString() {
+ return 'ConsultantsState.loaded(consultantsList: $consultantsList, isLoading: $isLoading)';
+ }
+
+ @override
+ bool operator ==(Object other) {
+ return identical(this, other) ||
+ (other.runtimeType == runtimeType &&
+ other is _$ConsultantsStateLoadedImpl &&
+ const DeepCollectionEquality()
+ .equals(other._consultantsList, _consultantsList) &&
+ (identical(other.isLoading, isLoading) ||
+ other.isLoading == isLoading));
+ }
+
+ @override
+ int get hashCode => Object.hash(runtimeType,
+ const DeepCollectionEquality().hash(_consultantsList), isLoading);
+
+ /// Create a copy of ConsultantsState
+ /// with the given fields replaced by the non-null parameter values.
+ @JsonKey(includeFromJson: false, includeToJson: false)
+ @override
+ @pragma('vm:prefer-inline')
+ _$$ConsultantsStateLoadedImplCopyWith<_$ConsultantsStateLoadedImpl>
+ get copyWith => __$$ConsultantsStateLoadedImplCopyWithImpl<
+ _$ConsultantsStateLoadedImpl>(this, _$identity);
+
+ @override
+ @optionalTypeArgs
+ TResult when(
+ TResult Function() $default, {
+ required TResult Function() loading,
+ required TResult Function(
+ List consultantsList, bool isLoading)
+ loaded,
+ required TResult Function(String errorMessage) error,
+ }) {
+ return loaded(consultantsList, isLoading);
+ }
+
+ @override
+ @optionalTypeArgs
+ TResult? whenOrNull(
+ TResult? Function()? $default, {
+ TResult? Function()? loading,
+ TResult? Function(
+ List consultantsList, bool isLoading)?
+ loaded,
+ TResult? Function(String errorMessage)? error,
+ }) {
+ return loaded?.call(consultantsList, isLoading);
+ }
+
+ @override
+ @optionalTypeArgs
+ TResult maybeWhen(
+ TResult Function()? $default, {
+ TResult Function()? loading,
+ TResult Function(List consultantsList, bool isLoading)?
+ loaded,
+ TResult Function(String errorMessage)? error,
+ required TResult orElse(),
+ }) {
+ if (loaded != null) {
+ return loaded(consultantsList, isLoading);
+ }
+ return orElse();
+ }
+
+ @override
+ @optionalTypeArgs
+ TResult map(
+ TResult Function(_ConsultantsState value) $default, {
+ required TResult Function(ConsultantsStateLoading value) loading,
+ required TResult Function(ConsultantsStateLoaded value) loaded,
+ required TResult Function(ConsultantsStateError value) error,
+ }) {
+ return loaded(this);
+ }
+
+ @override
+ @optionalTypeArgs
+ TResult? mapOrNull(
+ TResult? Function(_ConsultantsState value)? $default, {
+ TResult? Function(ConsultantsStateLoading value)? loading,
+ TResult? Function(ConsultantsStateLoaded value)? loaded,
+ TResult? Function(ConsultantsStateError value)? error,
+ }) {
+ return loaded?.call(this);
+ }
+
+ @override
+ @optionalTypeArgs
+ TResult maybeMap(
+ TResult Function(_ConsultantsState value)? $default, {
+ TResult Function(ConsultantsStateLoading value)? loading,
+ TResult Function(ConsultantsStateLoaded value)? loaded,
+ TResult Function(ConsultantsStateError value)? error,
+ required TResult orElse(),
+ }) {
+ if (loaded != null) {
+ return loaded(this);
+ }
+ return orElse();
+ }
+}
+
+abstract class ConsultantsStateLoaded implements ConsultantsState {
+ const factory ConsultantsStateLoaded(
+ {required final List consultantsList,
+ required final bool isLoading}) = _$ConsultantsStateLoadedImpl;
+
+ List get consultantsList;
+ bool get isLoading;
+
+ /// Create a copy of ConsultantsState
+ /// with the given fields replaced by the non-null parameter values.
+ @JsonKey(includeFromJson: false, includeToJson: false)
+ _$$ConsultantsStateLoadedImplCopyWith<_$ConsultantsStateLoadedImpl>
+ get copyWith => throw _privateConstructorUsedError;
+}
+
+/// @nodoc
+abstract class _$$ConsultantsStateErrorImplCopyWith<$Res> {
+ factory _$$ConsultantsStateErrorImplCopyWith(
+ _$ConsultantsStateErrorImpl value,
+ $Res Function(_$ConsultantsStateErrorImpl) then) =
+ __$$ConsultantsStateErrorImplCopyWithImpl<$Res>;
+ @useResult
+ $Res call({String errorMessage});
+}
+
+/// @nodoc
+class __$$ConsultantsStateErrorImplCopyWithImpl<$Res>
+ extends _$ConsultantsStateCopyWithImpl<$Res, _$ConsultantsStateErrorImpl>
+ implements _$$ConsultantsStateErrorImplCopyWith<$Res> {
+ __$$ConsultantsStateErrorImplCopyWithImpl(_$ConsultantsStateErrorImpl _value,
+ $Res Function(_$ConsultantsStateErrorImpl) _then)
+ : super(_value, _then);
+
+ /// Create a copy of ConsultantsState
+ /// with the given fields replaced by the non-null parameter values.
+ @pragma('vm:prefer-inline')
+ @override
+ $Res call({
+ Object? errorMessage = null,
+ }) {
+ return _then(_$ConsultantsStateErrorImpl(
+ errorMessage: null == errorMessage
+ ? _value.errorMessage
+ : errorMessage // ignore: cast_nullable_to_non_nullable
+ as String,
+ ));
+ }
+}
+
+/// @nodoc
+
+class _$ConsultantsStateErrorImpl implements ConsultantsStateError {
+ const _$ConsultantsStateErrorImpl({required this.errorMessage});
+
+ @override
+ final String errorMessage;
+
+ @override
+ String toString() {
+ return 'ConsultantsState.error(errorMessage: $errorMessage)';
+ }
+
+ @override
+ bool operator ==(Object other) {
+ return identical(this, other) ||
+ (other.runtimeType == runtimeType &&
+ other is _$ConsultantsStateErrorImpl &&
+ (identical(other.errorMessage, errorMessage) ||
+ other.errorMessage == errorMessage));
+ }
+
+ @override
+ int get hashCode => Object.hash(runtimeType, errorMessage);
+
+ /// Create a copy of ConsultantsState
+ /// with the given fields replaced by the non-null parameter values.
+ @JsonKey(includeFromJson: false, includeToJson: false)
+ @override
+ @pragma('vm:prefer-inline')
+ _$$ConsultantsStateErrorImplCopyWith<_$ConsultantsStateErrorImpl>
+ get copyWith => __$$ConsultantsStateErrorImplCopyWithImpl<
+ _$ConsultantsStateErrorImpl>(this, _$identity);
+
+ @override
+ @optionalTypeArgs
+ TResult when(
+ TResult Function() $default, {
+ required TResult Function() loading,
+ required TResult Function(
+ List consultantsList, bool isLoading)
+ loaded,
+ required TResult Function(String errorMessage) error,
+ }) {
+ return error(errorMessage);
+ }
+
+ @override
+ @optionalTypeArgs
+ TResult? whenOrNull(
+ TResult? Function()? $default, {
+ TResult? Function()? loading,
+ TResult? Function(
+ List consultantsList, bool isLoading)?
+ loaded,
+ TResult? Function(String errorMessage)? error,
+ }) {
+ return error?.call(errorMessage);
+ }
+
+ @override
+ @optionalTypeArgs
+ TResult maybeWhen(
+ TResult Function()? $default, {
+ TResult Function()? loading,
+ TResult Function(List consultantsList, bool isLoading)?
+ loaded,
+ TResult Function(String errorMessage)? error,
+ required TResult orElse(),
+ }) {
+ if (error != null) {
+ return error(errorMessage);
+ }
+ return orElse();
+ }
+
+ @override
+ @optionalTypeArgs
+ TResult map(
+ TResult Function(_ConsultantsState value) $default, {
+ required TResult Function(ConsultantsStateLoading value) loading,
+ required TResult Function(ConsultantsStateLoaded value) loaded,
+ required TResult Function(ConsultantsStateError value) error,
+ }) {
+ return error(this);
+ }
+
+ @override
+ @optionalTypeArgs
+ TResult? mapOrNull(
+ TResult? Function(_ConsultantsState value)? $default, {
+ TResult? Function(ConsultantsStateLoading value)? loading,
+ TResult? Function(ConsultantsStateLoaded value)? loaded,
+ TResult? Function(ConsultantsStateError value)? error,
+ }) {
+ return error?.call(this);
+ }
+
+ @override
+ @optionalTypeArgs
+ TResult maybeMap(
+ TResult Function(_ConsultantsState value)? $default, {
+ TResult Function(ConsultantsStateLoading value)? loading,
+ TResult Function(ConsultantsStateLoaded value)? loaded,
+ TResult Function(ConsultantsStateError value)? error,
+ required TResult orElse(),
+ }) {
+ if (error != null) {
+ return error(this);
+ }
+ return orElse();
+ }
+}
+
+abstract class ConsultantsStateError implements ConsultantsState {
+ const factory ConsultantsStateError({required final String errorMessage}) =
+ _$ConsultantsStateErrorImpl;
+
+ String get errorMessage;
+
+ /// Create a copy of ConsultantsState
+ /// with the given fields replaced by the non-null parameter values.
+ @JsonKey(includeFromJson: false, includeToJson: false)
+ _$$ConsultantsStateErrorImplCopyWith<_$ConsultantsStateErrorImpl>
+ get copyWith => throw _privateConstructorUsedError;
+}
diff --git a/lib/features/feed/presentation/pages/feed_screen.dart b/lib/features/feed/presentation/pages/feed_screen.dart
index 360dd488..4ff555a1 100644
--- a/lib/features/feed/presentation/pages/feed_screen.dart
+++ b/lib/features/feed/presentation/pages/feed_screen.dart
@@ -3,8 +3,7 @@ import 'package:eatvio_app/core/widgets/add_item_button.dart';
import 'package:eatvio_app/core/widgets/custom_search_bar.dart';
import 'package:eatvio_app/features/create_diet/presentation/create_diet_screen.dart';
import 'package:eatvio_app/features/create_plan/presentation/create_plan_screen.dart';
-import 'package:eatvio_app/features/dev_tools/presentation/dev_tools_screen.dart';
-import 'package:eatvio_app/features/dev_tools/test_cases.dart';
+import 'package:eatvio_app/features/feed/presentation/bloc/consultants_cubit/consultants_cubit.dart';
import 'package:eatvio_app/features/feed/presentation/bloc/diets_cubit/diets_cubit.dart';
import 'package:eatvio_app/features/feed/presentation/bloc/feed_cubit/feed_cubit.dart';
import 'package:eatvio_app/features/feed/presentation/bloc/profile_cubit/profile_cubit.dart';
@@ -12,6 +11,7 @@ import 'package:eatvio_app/features/feed/presentation/bloc/profile_cubit/profile
import 'package:eatvio_app/features/feed/presentation/bloc/recipes_cubit/recipes_cubit.dart';
import 'package:eatvio_app/features/feed/presentation/widgets/blog_posts.dart';
import 'package:eatvio_app/features/feed/presentation/widgets/choice_chip_widget.dart';
+import 'package:eatvio_app/features/feed/presentation/widgets/consultants.dart';
import 'package:eatvio_app/features/feed/presentation/widgets/diets.dart';
import 'package:eatvio_app/features/feed/presentation/widgets/plans.dart';
import 'package:eatvio_app/features/feed/presentation/widgets/tags_modal_widget.dart';
@@ -48,6 +48,9 @@ class FeedScreen extends StatelessWidget {
BlocProvider(
create: (context) => sl()..loadPlans(),
),
+ BlocProvider(
+ create: (context) => sl()..getConsultants(),
+ ),
],
child: const FeedScreenContent(),
);
@@ -66,12 +69,14 @@ class _FeedScreenContentState extends State {
final recipesController = TextEditingController();
final dietsController = TextEditingController();
final plansController = TextEditingController();
+ final consultantsController = TextEditingController();
final List chipsLabelList = ['Все', 'Рецепты', 'Диеты', 'Планы питания', 'Консультанты'];
int _selectedChipIndex = 0;
final blogPostsScrollController = ScrollController();
final recipesScrollController = ScrollController();
final dietsScrollController = ScrollController();
final plansScrollController = ScrollController();
+ final consultantsScrollController = ScrollController();
@override
void initState() {
@@ -79,6 +84,7 @@ class _FeedScreenContentState extends State {
recipesScrollController.addListener(_onScrollRecipes);
dietsScrollController.addListener(_onScrollDiets);
plansScrollController.addListener(_onScrollPlans);
+ consultantsScrollController.addListener(_onScrollConsultants);
super.initState();
}
@@ -106,6 +112,10 @@ class _FeedScreenContentState extends State {
}
}
+ _onScrollConsultants() {
+ if (consultantsScrollController.offset >= consultantsScrollController.position.maxScrollExtent && !consultantsScrollController.position.outOfRange) {}
+ }
+
@override
void dispose() {
blogPostsScrollController.dispose();
@@ -151,6 +161,7 @@ class _FeedScreenContentState extends State {
1 => recipesScrollController,
2 => dietsScrollController,
3 => plansScrollController,
+ 4 => consultantsScrollController,
_ => blogPostsScrollController
},
headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
@@ -176,6 +187,7 @@ class _FeedScreenContentState extends State {
1 => recipesController,
2 => dietsController,
3 => plansController,
+ 4 => consultantsController,
_ => postsController,
},
onChanged: (query) {
@@ -197,6 +209,9 @@ class _FeedScreenContentState extends State {
case 3:
context.read().loadPlans(query: query);
break;
+ case 4:
+ context.read().getConsultants();
+ break;
}
},
);
@@ -218,6 +233,9 @@ class _FeedScreenContentState extends State {
case 3:
context.read().loadPlans();
break;
+ case 4:
+ context.read().getConsultants();
+ break;
}
},
);
@@ -249,6 +267,7 @@ class _FeedScreenContentState extends State {
1 => Recipes(),
2 => Diets(),
3 => Plans(),
+ 4 => Consultants(),
_ => Center(child: Text(chipsLabelList[_selectedChipIndex])),
},
),
diff --git a/lib/features/feed/presentation/widgets/blog_post_widget.dart b/lib/features/feed/presentation/widgets/blog_post_widget.dart
index 4cb5c767..3e066448 100644
--- a/lib/features/feed/presentation/widgets/blog_post_widget.dart
+++ b/lib/features/feed/presentation/widgets/blog_post_widget.dart
@@ -207,11 +207,15 @@ class _BlogPostWidgetState extends State {
'assets/icons/share.svg',
colorFilter: ColorFilter.mode(appTheme.gray600, BlendMode.srcIn),
),
- onTap: () => Share.shareUri(
- Uri.parse(
- baseUrl + '/ru/blog_post/' + state.feedBlogPostList[widget.index].id.toString(),
- ),
- ),
+ onTap: () {
+ final box = context.findRenderObject() as RenderBox?;
+ Share.shareUri(
+ Uri.parse(
+ baseUrl + '/ru/blog_post/' + state.feedBlogPostList[widget.index].id.toString(),
+ ),
+ sharePositionOrigin: box!.localToGlobal(Offset.zero) & box.size,
+ );
+ },
),
Spacer(),
Icon(
diff --git a/lib/features/feed/presentation/widgets/consultant_widget.dart b/lib/features/feed/presentation/widgets/consultant_widget.dart
new file mode 100644
index 00000000..033633c6
--- /dev/null
+++ b/lib/features/feed/presentation/widgets/consultant_widget.dart
@@ -0,0 +1,138 @@
+import 'package:cached_network_image/cached_network_image.dart';
+import 'package:eatvio_app/core/const.dart';
+import 'package:eatvio_app/core/theme/theme_helper.dart';
+import 'package:eatvio_app/features/feed/models/diets_pagination_model.dart';
+import 'package:eatvio_app/features/feed/models/feed_consultant_model.dart';
+import 'package:eatvio_app/features/profile/models/badge_model.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_svg/flutter_svg.dart';
+import 'package:go_router/go_router.dart';
+
+class ConsultantWidget extends StatelessWidget {
+ final FeedConsultantModel consultant;
+
+ const ConsultantWidget({
+ super.key,
+ required this.consultant,
+ });
+
+ @override
+ Widget build(BuildContext context) {
+ return InkWell(
+ onTap: () {
+ GoRouter.of(context).pushNamed(
+ 'profileScreen',
+ extra: Author(
+ authorSlug: consultant.slug,
+ authorName: consultant.name,
+ authorProfileIcon: consultant.photo,
+ authorIsMe: false,
+ ),
+ );
+ },
+ borderRadius: BorderRadius.circular(20),
+ child: Ink(
+ padding: EdgeInsets.all(12),
+ decoration: BoxDecoration(
+ borderRadius: BorderRadius.circular(20),
+ color: Color(0xFFF6F6F6),
+ ),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Row(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Row(
+ children: [
+ Ink(
+ padding: EdgeInsets.symmetric(vertical: 4, horizontal: 8),
+ decoration: BoxDecoration(
+ color: Colors.white,
+ borderRadius: BorderRadius.circular(8),
+ ),
+ child: Text(
+ '${consultant.ratingPlace}',
+ style: TextStyle(
+ fontSize: 20,
+ color: appTheme.blueA400,
+ fontWeight: FontWeight.w600,
+ ),
+ ),
+ ),
+ const SizedBox(width: 8),
+ CircleAvatar(
+ foregroundImage: NetworkImage(consultant.photo),
+ ),
+ const SizedBox(width: 8),
+ Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Text(
+ consultant.name,
+ style: TextStyle(
+ height: 1,
+ fontWeight: FontWeight.w500,
+ fontSize: 15,
+ color: Color(0xFF323F4B),
+ ),
+ ),
+ const SizedBox(height: 4),
+ Text(
+ 'Рейтинг: RATING',
+ style: TextStyle(
+ color: appTheme.blueA400,
+ height: 1,
+ fontWeight: FontWeight.w500,
+ fontSize: 12,
+ ),
+ ),
+ ],
+ ),
+ ],
+ ),
+ Ink(
+ padding: EdgeInsets.all(6),
+ decoration: BoxDecoration(
+ borderRadius: BorderRadius.circular(4),
+ color: Colors.white,
+ ),
+ child: SvgPicture.asset(
+ 'assets/icons/go_to_arrow.svg',
+ ),
+ ),
+ ],
+ ),
+ const SizedBox(height: 8),
+ Text('description'),
+ if (consultant.badges.isNotEmpty) const SizedBox(height: 8),
+ _badges(consultant.badges, context),
+ ],
+ ),
+ ),
+ );
+ }
+
+ _badges(List badges, BuildContext context) {
+ return SingleChildScrollView(
+ scrollDirection: Axis.horizontal,
+ child: Row(
+ children: [
+ for (int i = 0; i < badges.length; i++) ...[
+ badges[i].image.contains('svg')
+ ? SvgPicture.network(
+ baseUrl + '/storage/' + badges[i].image,
+ width: 28,
+ height: 28,
+ )
+ : CachedNetworkImage(
+ imageUrl: baseUrl + '/storage/' + badges[i].image,
+ ),
+ i < badges.length - 1 ? const SizedBox(width: 8) : const SizedBox.shrink(),
+ ],
+ ],
+ ),
+ );
+ }
+}
diff --git a/lib/features/feed/presentation/widgets/consultants.dart b/lib/features/feed/presentation/widgets/consultants.dart
new file mode 100644
index 00000000..01c4e816
--- /dev/null
+++ b/lib/features/feed/presentation/widgets/consultants.dart
@@ -0,0 +1,62 @@
+ import 'package:eatvio_app/core/widgets/loader.dart';
+import 'package:eatvio_app/features/feed/presentation/bloc/consultants_cubit/consultants_cubit.dart';
+import 'package:eatvio_app/features/feed/presentation/bloc/consultants_cubit/consultants_state.dart';
+import 'package:eatvio_app/features/feed/presentation/widgets/consultant_widget.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_bloc/flutter_bloc.dart';
+
+class Consultants extends StatelessWidget {
+ const Consultants({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return RefreshIndicator(
+ onRefresh: () => context.read().getConsultants(),
+ child: BlocBuilder(
+ builder: (BuildContext context, ConsultantsState state) {
+ if (state is ConsultantsStateLoaded) {
+ return Padding(
+ padding: const EdgeInsets.symmetric(vertical: 8),
+ child: Material(
+ color: Colors.white,
+ borderRadius: BorderRadius.circular(12),
+ child: Padding(
+ padding: const EdgeInsets.symmetric(horizontal: 16),
+ child: ListView.separated(
+ padding: EdgeInsets.symmetric(vertical: 16),
+ shrinkWrap: true,
+ physics: BouncingScrollPhysics(),
+ itemBuilder: (context, index) {
+ return ConsultantWidget(consultant: state.consultantsList[index]);
+ },
+ separatorBuilder: (context, index) {
+ return SizedBox(height: 12);
+ },
+ itemCount: state.consultantsList.length,
+ ),
+ ),
+ ),
+ );
+ } else if (state is ConsultantsStateError) {
+ return Scaffold(
+ backgroundColor: Colors.grey.shade200,
+ body: Padding(
+ padding: const EdgeInsets.all(16),
+ child: Center(
+ child: Text(state.errorMessage),
+ ),
+ ),
+ );
+ } else {
+ return Scaffold(
+ backgroundColor: Colors.grey.shade200,
+ body: const Loader(),
+ );
+ }
+ },
+ ),
+ );
+ }
+}
+
+
\ No newline at end of file
diff --git a/lib/features/feed/presentation/widgets/diets_widget.dart b/lib/features/feed/presentation/widgets/diets_widget.dart
index 6597f72e..d42d7da3 100644
--- a/lib/features/feed/presentation/widgets/diets_widget.dart
+++ b/lib/features/feed/presentation/widgets/diets_widget.dart
@@ -144,10 +144,12 @@ class _DietsWidgetState extends State {
FeedIconButton(
svgIcon: SvgPicture.asset('assets/icons/repost.svg'),
onTap: () async {
+ final box = context.findRenderObject() as RenderBox?;
final result = await Share.shareUri(
Uri.parse(
baseUrl + '/ru/diet/' + widget.diet.id.toString(),
),
+ sharePositionOrigin: box!.localToGlobal(Offset.zero) & box.size,
);
switch (result.status) {
case ShareResultStatus.success:
diff --git a/lib/features/feed/presentation/widgets/plan_widget.dart b/lib/features/feed/presentation/widgets/plan_widget.dart
index 56d31f9c..a77c9b3e 100644
--- a/lib/features/feed/presentation/widgets/plan_widget.dart
+++ b/lib/features/feed/presentation/widgets/plan_widget.dart
@@ -200,10 +200,12 @@ class _PlanWidgetState extends State {
FeedIconButton(
svgIcon: SvgPicture.asset('assets/icons/repost.svg'),
onTap: () async {
+ final box = context.findRenderObject() as RenderBox?;
final result = await Share.shareUri(
Uri.parse(
baseUrl + '/ru/diet/' + widget.plan.id.toString(),
),
+ sharePositionOrigin: box!.localToGlobal(Offset.zero) & box.size,
);
switch (result.status) {
case ShareResultStatus.success:
diff --git a/lib/features/feed/presentation/widgets/recipes_widget.dart b/lib/features/feed/presentation/widgets/recipes_widget.dart
index eb4b065f..61936531 100644
--- a/lib/features/feed/presentation/widgets/recipes_widget.dart
+++ b/lib/features/feed/presentation/widgets/recipes_widget.dart
@@ -21,6 +21,14 @@ class RecipesWidget extends StatefulWidget {
}
class _RecipesWidgetState extends State {
+ late bool isLiked;
+
+ @override
+ void initState() {
+ super.initState();
+ isLiked = false;
+ }
+
@override
Widget build(BuildContext context) {
return InkWell(
@@ -143,11 +151,15 @@ class _RecipesWidgetState extends State {
'assets/icons/share.svg',
colorFilter: ColorFilter.mode(appTheme.gray600, BlendMode.srcIn),
),
- onTap: () => Share.shareUri(
- Uri.parse(
- baseUrl + '/ru/blog_post/' + widget.recipes.id.toString(),
- ),
- ),
+ onTap: () {
+ final box = context.findRenderObject() as RenderBox?;
+ Share.shareUri(
+ Uri.parse(
+ baseUrl + '/ru/blog_post/' + widget.recipes.id.toString(),
+ ),
+ sharePositionOrigin: box!.localToGlobal(Offset.zero) & box.size,
+ );
+ },
),
Spacer(),
Icon(
diff --git a/lib/features/feed/repositories/feed_repository.dart b/lib/features/feed/repositories/feed_repository.dart
index 9c3360fc..a90b4d5b 100644
--- a/lib/features/feed/repositories/feed_repository.dart
+++ b/lib/features/feed/repositories/feed_repository.dart
@@ -1,6 +1,7 @@
import 'package:eatvio_app/features/feed/models/comment_model.dart';
import 'package:eatvio_app/features/feed/models/diets_pagination_model.dart';
import 'package:eatvio_app/features/feed/models/feed_blog_post_settings_model.dart';
+import 'package:eatvio_app/features/feed/models/feed_consultant_model.dart';
import 'package:eatvio_app/features/feed/models/plan_pagination_model.dart';
import 'package:eatvio_app/features/feed/models/recipes_model.dart';
import 'package:eatvio_app/features/feed/services/feed_service.dart';
@@ -208,4 +209,12 @@ class FeedRepository {
rethrow;
}
}
+
+ Future> getConsultants() async {
+ try {
+ return (await feedService.getConsultants()).data;
+ } catch (e) {
+ rethrow;
+ }
+ }
}
diff --git a/lib/features/feed/services/feed_service.dart b/lib/features/feed/services/feed_service.dart
index 585d8217..9551f16b 100644
--- a/lib/features/feed/services/feed_service.dart
+++ b/lib/features/feed/services/feed_service.dart
@@ -2,6 +2,7 @@ import 'package:dio/dio.dart';
import 'package:eatvio_app/features/feed/models/comment_model.dart';
import 'package:eatvio_app/features/feed/models/diets_pagination_model.dart';
import 'package:eatvio_app/features/feed/models/feed_blog_post_settings_model.dart';
+import 'package:eatvio_app/features/feed/models/feed_consultant_model.dart';
import 'package:eatvio_app/features/feed/models/plan_pagination_model.dart';
import 'package:eatvio_app/features/feed/models/recipes_pagination_model.dart';
import 'package:retrofit/retrofit.dart';
@@ -101,4 +102,7 @@ abstract class FeedService {
Future unlikedBlogPost({
@Path() required int id,
});
+
+ @GET('/api/consultants/index')
+ Future getConsultants();
}
diff --git a/lib/features/feed/services/feed_service.g.dart b/lib/features/feed/services/feed_service.g.dart
index 89279ebb..c6668b66 100644
--- a/lib/features/feed/services/feed_service.g.dart
+++ b/lib/features/feed/services/feed_service.g.dart
@@ -539,6 +539,39 @@ class _FeedService implements FeedService {
await _dio.fetch(_options);
}
+ @override
+ Future getConsultants() async {
+ final _extra = {};
+ final queryParameters = {};
+ final _headers = {};
+ const Map? _data = null;
+ final _options = _setStreamType(Options(
+ method: 'GET',
+ headers: _headers,
+ extra: _extra,
+ )
+ .compose(
+ _dio.options,
+ '/api/consultants/index',
+ queryParameters: queryParameters,
+ data: _data,
+ )
+ .copyWith(
+ baseUrl: _combineBaseUrls(
+ _dio.options.baseUrl,
+ baseUrl,
+ )));
+ final _result = await _dio.fetch