diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json
index bd2a7c0..c66169c 100644
--- a/.dart_tool/package_config.json
+++ b/.dart_tool/package_config.json
@@ -529,6 +529,24 @@
"packageUri": "lib/",
"languageVersion": "3.0"
},
+ {
+ "name": "image_cropper",
+ "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image_cropper-9.1.0",
+ "packageUri": "lib/",
+ "languageVersion": "3.3"
+ },
+ {
+ "name": "image_cropper_for_web",
+ "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image_cropper_for_web-6.1.0",
+ "packageUri": "lib/",
+ "languageVersion": "3.3"
+ },
+ {
+ "name": "image_cropper_platform_interface",
+ "rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image_cropper_platform_interface-7.1.0",
+ "packageUri": "lib/",
+ "languageVersion": "3.3"
+ },
{
"name": "image_size_getter",
"rootUri": "file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image_size_getter-2.4.0",
@@ -1130,7 +1148,7 @@
"languageVersion": "3.7"
}
],
- "generated": "2025-06-17T18:40:18.603782Z",
+ "generated": "2025-09-08T19:38:33.805712Z",
"generator": "pub",
"generatorVersion": "3.7.0",
"flutterRoot": "file:///Users/vitalijnecitajlo/fvm/versions/3.29.0",
diff --git a/.dart_tool/package_config_subset b/.dart_tool/package_config_subset
index e12b35b..6270333 100644
--- a/.dart_tool/package_config_subset
+++ b/.dart_tool/package_config_subset
@@ -334,6 +334,18 @@ image
3.0
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image-4.5.4/
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image-4.5.4/lib/
+image_cropper
+3.3
+file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image_cropper-9.1.0/
+file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image_cropper-9.1.0/lib/
+image_cropper_for_web
+3.3
+file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image_cropper_for_web-6.1.0/
+file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image_cropper_for_web-6.1.0/lib/
+image_cropper_platform_interface
+3.3
+file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image_cropper_platform_interface-7.1.0/
+file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image_cropper_platform_interface-7.1.0/lib/
image_size_getter
2.12
file:///Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image_size_getter-2.4.0/
diff --git a/.flutter-plugins b/.flutter-plugins
index 74ff2cc..6241bee 100644
--- a/.flutter-plugins
+++ b/.flutter-plugins
@@ -8,6 +8,8 @@ flutter_secure_storage_macos=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/f
flutter_secure_storage_web=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage_web-1.2.1/
flutter_secure_storage_windows=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage_windows-3.1.2/
fluttertoast=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/fluttertoast-8.2.12/
+image_cropper=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image_cropper-9.1.0/
+image_cropper_for_web=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image_cropper_for_web-6.1.0/
package_info_plus=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_info_plus-8.3.0/
path_provider=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider-2.1.5/
path_provider_android=/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_android-2.2.16/
diff --git a/.flutter-plugins-dependencies b/.flutter-plugins-dependencies
index 1cf9d9d..44b4a98 100644
--- a/.flutter-plugins-dependencies
+++ b/.flutter-plugins-dependencies
@@ -1 +1 @@
-{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"file_picker","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file_picker-10.0.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage-9.2.4/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"fluttertoast","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/fluttertoast-8.2.12/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_info_plus-8.3.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_foundation","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"share_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/share_plus-10.1.4/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"sqlite3_flutter_libs","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3_flutter_libs-0.5.32/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false}],"android":[{"name":"file_picker","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file_picker-10.0.0/","native_build":true,"dependencies":["flutter_plugin_android_lifecycle"],"dev_dependency":false},{"name":"flutter_displaymode","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_displaymode-0.6.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_plugin_android_lifecycle","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.27/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage-9.2.4/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"fluttertoast","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/fluttertoast-8.2.12/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_info_plus-8.3.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_android","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_android-2.2.16/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"share_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/share_plus-10.1.4/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"sqlite3_flutter_libs","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3_flutter_libs-0.5.32/","native_build":true,"dependencies":[],"dev_dependency":false}],"macos":[{"name":"file_picker","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file_picker-10.0.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_macos","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage_macos-3.1.3/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_info_plus-8.3.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_foundation","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"share_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/share_plus-10.1.4/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"sqlite3_flutter_libs","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3_flutter_libs-0.5.32/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false}],"linux":[{"name":"file_picker","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file_picker-10.0.0/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_linux","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage_linux-1.2.2/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_info_plus-8.3.0/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"path_provider_linux","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"share_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/share_plus-10.1.4/","native_build":false,"dependencies":["url_launcher_linux"],"dev_dependency":false},{"name":"sqlite3_flutter_libs","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3_flutter_libs-0.5.32/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"url_launcher_linux","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/url_launcher_linux-3.2.1/","native_build":true,"dependencies":[],"dev_dependency":false}],"windows":[{"name":"file_picker","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file_picker-10.0.0/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_windows","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage_windows-3.1.2/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_info_plus-8.3.0/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"path_provider_windows","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_windows-2.3.0/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"share_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/share_plus-10.1.4/","native_build":true,"dependencies":["url_launcher_windows"],"dev_dependency":false},{"name":"sqlite3_flutter_libs","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3_flutter_libs-0.5.32/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"url_launcher_windows","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/url_launcher_windows-3.1.4/","native_build":true,"dependencies":[],"dev_dependency":false}],"web":[{"name":"file_picker","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file_picker-10.0.0/","dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_web","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage_web-1.2.1/","dependencies":[],"dev_dependency":false},{"name":"fluttertoast","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/fluttertoast-8.2.12/","dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_info_plus-8.3.0/","dependencies":[],"dev_dependency":false},{"name":"share_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/share_plus-10.1.4/","dependencies":["url_launcher_web"],"dev_dependency":false},{"name":"url_launcher_web","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/url_launcher_web-2.4.0/","dependencies":[],"dev_dependency":false}]},"dependencyGraph":[{"name":"file_picker","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"flutter_displaymode","dependencies":[]},{"name":"flutter_plugin_android_lifecycle","dependencies":[]},{"name":"flutter_secure_storage","dependencies":["flutter_secure_storage_linux","flutter_secure_storage_macos","flutter_secure_storage_web","flutter_secure_storage_windows"]},{"name":"flutter_secure_storage_linux","dependencies":[]},{"name":"flutter_secure_storage_macos","dependencies":[]},{"name":"flutter_secure_storage_web","dependencies":[]},{"name":"flutter_secure_storage_windows","dependencies":["path_provider"]},{"name":"fluttertoast","dependencies":[]},{"name":"package_info_plus","dependencies":[]},{"name":"path_provider","dependencies":["path_provider_android","path_provider_foundation","path_provider_linux","path_provider_windows"]},{"name":"path_provider_android","dependencies":[]},{"name":"path_provider_foundation","dependencies":[]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_windows","dependencies":[]},{"name":"share_plus","dependencies":["url_launcher_web","url_launcher_windows","url_launcher_linux"]},{"name":"sqlite3_flutter_libs","dependencies":[]},{"name":"url_launcher_linux","dependencies":[]},{"name":"url_launcher_web","dependencies":[]},{"name":"url_launcher_windows","dependencies":[]}],"date_created":"2025-06-17 21:40:17.098788","version":"3.29.0","swift_package_manager_enabled":{"ios":false,"macos":false}}
\ No newline at end of file
+{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"file_picker","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file_picker-10.0.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage-9.2.4/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"fluttertoast","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/fluttertoast-8.2.12/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"image_cropper","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image_cropper-9.1.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_info_plus-8.3.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_foundation","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"share_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/share_plus-10.1.4/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"sqlite3_flutter_libs","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3_flutter_libs-0.5.32/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false}],"android":[{"name":"file_picker","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file_picker-10.0.0/","native_build":true,"dependencies":["flutter_plugin_android_lifecycle"],"dev_dependency":false},{"name":"flutter_displaymode","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_displaymode-0.6.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_plugin_android_lifecycle","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.27/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage-9.2.4/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"fluttertoast","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/fluttertoast-8.2.12/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"image_cropper","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image_cropper-9.1.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_info_plus-8.3.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_android","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_android-2.2.16/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"share_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/share_plus-10.1.4/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"sqlite3_flutter_libs","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3_flutter_libs-0.5.32/","native_build":true,"dependencies":[],"dev_dependency":false}],"macos":[{"name":"file_picker","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file_picker-10.0.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_macos","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage_macos-3.1.3/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_info_plus-8.3.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_foundation","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"share_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/share_plus-10.1.4/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"sqlite3_flutter_libs","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3_flutter_libs-0.5.32/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false}],"linux":[{"name":"file_picker","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file_picker-10.0.0/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_linux","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage_linux-1.2.2/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_info_plus-8.3.0/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"path_provider_linux","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"share_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/share_plus-10.1.4/","native_build":false,"dependencies":["url_launcher_linux"],"dev_dependency":false},{"name":"sqlite3_flutter_libs","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3_flutter_libs-0.5.32/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"url_launcher_linux","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/url_launcher_linux-3.2.1/","native_build":true,"dependencies":[],"dev_dependency":false}],"windows":[{"name":"file_picker","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file_picker-10.0.0/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_windows","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage_windows-3.1.2/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_info_plus-8.3.0/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"path_provider_windows","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/path_provider_windows-2.3.0/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"share_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/share_plus-10.1.4/","native_build":true,"dependencies":["url_launcher_windows"],"dev_dependency":false},{"name":"sqlite3_flutter_libs","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/sqlite3_flutter_libs-0.5.32/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"url_launcher_windows","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/url_launcher_windows-3.1.4/","native_build":true,"dependencies":[],"dev_dependency":false}],"web":[{"name":"file_picker","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/file_picker-10.0.0/","dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_web","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/flutter_secure_storage_web-1.2.1/","dependencies":[],"dev_dependency":false},{"name":"fluttertoast","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/fluttertoast-8.2.12/","dependencies":[],"dev_dependency":false},{"name":"image_cropper_for_web","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/image_cropper_for_web-6.1.0/","dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/package_info_plus-8.3.0/","dependencies":[],"dev_dependency":false},{"name":"share_plus","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/share_plus-10.1.4/","dependencies":["url_launcher_web"],"dev_dependency":false},{"name":"url_launcher_web","path":"/Users/vitalijnecitajlo/.pub-cache/hosted/pub.dev/url_launcher_web-2.4.0/","dependencies":[],"dev_dependency":false}]},"dependencyGraph":[{"name":"file_picker","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"flutter_displaymode","dependencies":[]},{"name":"flutter_plugin_android_lifecycle","dependencies":[]},{"name":"flutter_secure_storage","dependencies":["flutter_secure_storage_linux","flutter_secure_storage_macos","flutter_secure_storage_web","flutter_secure_storage_windows"]},{"name":"flutter_secure_storage_linux","dependencies":[]},{"name":"flutter_secure_storage_macos","dependencies":[]},{"name":"flutter_secure_storage_web","dependencies":[]},{"name":"flutter_secure_storage_windows","dependencies":["path_provider"]},{"name":"fluttertoast","dependencies":[]},{"name":"image_cropper","dependencies":["image_cropper_for_web"]},{"name":"image_cropper_for_web","dependencies":[]},{"name":"package_info_plus","dependencies":[]},{"name":"path_provider","dependencies":["path_provider_android","path_provider_foundation","path_provider_linux","path_provider_windows"]},{"name":"path_provider_android","dependencies":[]},{"name":"path_provider_foundation","dependencies":[]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_windows","dependencies":[]},{"name":"share_plus","dependencies":["url_launcher_web","url_launcher_windows","url_launcher_linux"]},{"name":"sqlite3_flutter_libs","dependencies":[]},{"name":"url_launcher_linux","dependencies":[]},{"name":"url_launcher_web","dependencies":[]},{"name":"url_launcher_windows","dependencies":[]}],"date_created":"2025-09-08 22:38:32.215720","version":"3.29.0","swift_package_manager_enabled":{"ios":false,"macos":false}}
\ No newline at end of file
diff --git a/Makefile b/Makefile
index 5466a89..f8c403b 100644
--- a/Makefile
+++ b/Makefile
@@ -8,10 +8,6 @@ clean:
codegen: clean
fvm flutter pub run build_runner build --delete-conflicting-outputs
-watchgen: clean
- fvm flutter pub run build_runner watch --delete-conflicting-outputs
-
-
iosPod:
cd ios && rm -rf Podfile.lock Pods Runner.xcworkspace && fvm flutter clean && fvm flutter pub get && pod install
@@ -31,8 +27,8 @@ macosPodUpdate:
cd macos && pod install --repo-update
androidBuild: clean
- fvm flutter build apk --split-per-abi
- mv `pwd`/build/app/outputs/flutter-apk/app-armeabi-v7a-release.apk /tmp/$(PROJECT_NAME)-$(env)-$(ver).apk
+ fvm flutter build apk
+ mv `pwd`/build/app/outputs/flutter-apk/app-release.apk /tmp/$(PROJECT_NAME)-$(env)-$(ver).apk
echo /tmp/$(PROJECT_NAME)-$(env)-$(ver).apk
open /tmp
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 1ef671b..1f23c0a 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -38,6 +38,11 @@
+
+
+
-
+
+
+
+
\ No newline at end of file
diff --git a/lib/common/services/api_client.dart b/lib/common/services/api_client.dart
index daa67aa..ba1e9db 100644
--- a/lib/common/services/api_client.dart
+++ b/lib/common/services/api_client.dart
@@ -2,6 +2,8 @@
import 'package:dio/dio.dart';
import 'package:dio_smart_retry/dio_smart_retry.dart';
import 'package:remever/common/functions.dart';
+import 'package:remever/common/resources.dart';
+import 'package:remever/common/storage.dart';
import 'package:talker_dio_logger/talker_dio_logger_interceptor.dart';
import 'package:talker_dio_logger/talker_dio_logger_settings.dart';
@@ -17,17 +19,17 @@ InterceptorsWrapper get _auth {
RequestOptions options,
RequestInterceptorHandler handler,
) async {
- // try {
- // String? token = await authSecStorage.read(key: StorageKeys.authToken);
+ try {
+ String? token = await authSecStorage.read(key: StorageKeys.accessToken);
- // if (token != null) {
- // options.headers['Authorization'] = 'Bearer $token';
- // }
- // } catch (e) {
- // getIt().log(
- // entity: LogEntity.error(message: 'Error to load access token $e'),
- // );
- // }
+ if (token != null) {
+ options.headers['Authorization'] = 'Bearer $token';
+ }
+ } catch (e) {
+ // getIt().log(
+ // entity: LogEntity.error(message: 'Error to load access token $e'),
+ // );
+ }
return handler.next(options);
},
diff --git a/lib/database/dao/collections_dao.dart b/lib/database/dao/collections_dao.dart
index 1d95f94..d160762 100644
--- a/lib/database/dao/collections_dao.dart
+++ b/lib/database/dao/collections_dao.dart
@@ -28,6 +28,18 @@ class CollectionsDao extends DatabaseAccessor
}
}
+ Future getCollectionById(String? id) {
+ try {
+ return db.managers.collections
+ .filter((f) => f.id.equals(id))
+ .getSingleOrNull();
+ } catch (e, st) {
+ logger.logError('Ошибка в методе getCollectionById', e, st);
+
+ throw ('EXEPTION');
+ }
+ }
+
/// Создание коллекции
Future createCollection(CrudCollectionDto dto) async {
try {
@@ -36,7 +48,7 @@ class CollectionsDao extends DatabaseAccessor
title: dto.title,
desc: dto.desc,
isPublic: Value(dto.isPublic),
- image: Value(dto.avatar),
+ image: Value(dto.avatar),
),
);
} catch (e, st) {
@@ -54,7 +66,7 @@ class CollectionsDao extends DatabaseAccessor
title: Value(dto.title),
desc: Value(dto.desc),
isPublic: Value(dto.isPublic),
- image: Value(dto.avatar),
+ image: Value(dto.avatar),
),
);
} catch (e, st) {
diff --git a/lib/database/dao/tickets_dao.dart b/lib/database/dao/tickets_dao.dart
index 516f12f..d5499a1 100644
--- a/lib/database/dao/tickets_dao.dart
+++ b/lib/database/dao/tickets_dao.dart
@@ -27,6 +27,20 @@ class TicketsDao extends DatabaseAccessor with _$TicketsDaoMixin {
}
}
+ /// Получение билетов из базы данных
+ Future getTicketsInCollectionCount(String collectionId) async {
+ try {
+ return (await db.managers.tickets
+ .filter((f) => f.collectionId.id(collectionId))
+ .get())
+ .length;
+ } catch (e, st) {
+ logger.logError('Ошибка в методе getTicketsInCollectionCount', e, st);
+
+ throw ('EXEPTION');
+ }
+ }
+
/// Удаление билета
Future removeTicket(String id) async {
try {
@@ -45,8 +59,8 @@ class TicketsDao extends DatabaseAccessor with _$TicketsDaoMixin {
question: dto.question!,
answer: dto.answer!,
collectionId: dto.collection!.id,
- questionImage: Value(dto.questionImage),
- answerImage: Value(dto.answerImage),
+ questionImage: Value(dto.questionImage),
+ answerImage: Value(dto.answerImage),
);
await db.managers.tickets.create((o) => companion);
@@ -58,8 +72,8 @@ class TicketsDao extends DatabaseAccessor with _$TicketsDaoMixin {
answer: dto.question!,
question: dto.answer!,
collectionId: dto.collection!.id,
- answerImage: Value(dto.questionImage),
- questionImage: Value(dto.answerImage),
+ answerImage: Value(dto.questionImage),
+ questionImage: Value(dto.answerImage),
);
await db.managers.tickets.create((o) => revertCompanion);
diff --git a/lib/database/database.g.dart b/lib/database/database.g.dart
index 1627aa0..aefe1fb 100644
--- a/lib/database/database.g.dart
+++ b/lib/database/database.g.dart
@@ -75,11 +75,11 @@ class $CollectionsTable extends Collections
);
static const VerificationMeta _imageMeta = const VerificationMeta('image');
@override
- late final GeneratedColumn image = GeneratedColumn(
+ late final GeneratedColumn image = GeneratedColumn(
'image',
aliasedName,
true,
- type: DriftSqlType.blob,
+ type: DriftSqlType.string,
requiredDuringInsert: false,
);
static const VerificationMeta _payloadMeta = const VerificationMeta(
@@ -281,7 +281,7 @@ class $CollectionsTable extends Collections
data['${effectivePrefix}desc'],
)!,
image: attachedDatabase.typeMapping.read(
- DriftSqlType.blob,
+ DriftSqlType.string,
data['${effectivePrefix}image'],
),
payload: attachedDatabase.typeMapping.read(
@@ -328,7 +328,7 @@ class Collection extends DataClass implements Insertable {
final DateTime updatedAt;
final String title;
final String desc;
- final Uint8List? image;
+ final String? image;
final String? payload;
final int likesCount;
final bool isLiked;
@@ -356,7 +356,7 @@ class Collection extends DataClass implements Insertable {
map['title'] = Variable(title);
map['desc'] = Variable(desc);
if (!nullToAbsent || image != null) {
- map['image'] = Variable(image);
+ map['image'] = Variable(image);
}
if (!nullToAbsent || payload != null) {
map['payload'] = Variable(payload);
@@ -399,7 +399,7 @@ class Collection extends DataClass implements Insertable {
updatedAt: serializer.fromJson(json['updatedAt']),
title: serializer.fromJson(json['title']),
desc: serializer.fromJson(json['desc']),
- image: serializer.fromJson(json['image']),
+ image: serializer.fromJson(json['image']),
payload: serializer.fromJson(json['payload']),
likesCount: serializer.fromJson(json['likesCount']),
isLiked: serializer.fromJson(json['isLiked']),
@@ -416,7 +416,7 @@ class Collection extends DataClass implements Insertable {
'updatedAt': serializer.toJson(updatedAt),
'title': serializer.toJson(title),
'desc': serializer.toJson(desc),
- 'image': serializer.toJson(image),
+ 'image': serializer.toJson(image),
'payload': serializer.toJson(payload),
'likesCount': serializer.toJson(likesCount),
'isLiked': serializer.toJson(isLiked),
@@ -431,7 +431,7 @@ class Collection extends DataClass implements Insertable {
DateTime? updatedAt,
String? title,
String? desc,
- Value image = const Value.absent(),
+ Value image = const Value.absent(),
Value payload = const Value.absent(),
int? likesCount,
bool? isLiked,
@@ -495,7 +495,7 @@ class Collection extends DataClass implements Insertable {
updatedAt,
title,
desc,
- $driftBlobEquality.hash(image),
+ image,
payload,
likesCount,
isLiked,
@@ -511,7 +511,7 @@ class Collection extends DataClass implements Insertable {
other.updatedAt == this.updatedAt &&
other.title == this.title &&
other.desc == this.desc &&
- $driftBlobEquality.equals(other.image, this.image) &&
+ other.image == this.image &&
other.payload == this.payload &&
other.likesCount == this.likesCount &&
other.isLiked == this.isLiked &&
@@ -525,7 +525,7 @@ class CollectionsCompanion extends UpdateCompanion {
final Value updatedAt;
final Value title;
final Value desc;
- final Value image;
+ final Value image;
final Value payload;
final Value likesCount;
final Value isLiked;
@@ -567,7 +567,7 @@ class CollectionsCompanion extends UpdateCompanion {
Expression? updatedAt,
Expression? title,
Expression? desc,
- Expression? image,
+ Expression? image,
Expression? payload,
Expression? likesCount,
Expression? isLiked,
@@ -597,7 +597,7 @@ class CollectionsCompanion extends UpdateCompanion {
Value? updatedAt,
Value? title,
Value? desc,
- Value? image,
+ Value? image,
Value? payload,
Value? likesCount,
Value? isLiked,
@@ -640,7 +640,7 @@ class CollectionsCompanion extends UpdateCompanion {
map['desc'] = Variable(desc.value);
}
if (image.present) {
- map['image'] = Variable(image.value);
+ map['image'] = Variable(image.value);
}
if (payload.present) {
map['payload'] = Variable(payload.value);
@@ -749,14 +749,13 @@ class $TicketsTable extends Tickets with TableInfo<$TicketsTable, Ticket> {
'questionImage',
);
@override
- late final GeneratedColumn questionImage =
- GeneratedColumn(
- 'question_image',
- aliasedName,
- true,
- type: DriftSqlType.blob,
- requiredDuringInsert: false,
- );
+ late final GeneratedColumn questionImage = GeneratedColumn(
+ 'question_image',
+ aliasedName,
+ true,
+ type: DriftSqlType.string,
+ requiredDuringInsert: false,
+ );
static const VerificationMeta _answerMeta = const VerificationMeta('answer');
@override
late final GeneratedColumn answer = GeneratedColumn(
@@ -770,14 +769,13 @@ class $TicketsTable extends Tickets with TableInfo<$TicketsTable, Ticket> {
'answerImage',
);
@override
- late final GeneratedColumn answerImage =
- GeneratedColumn(
- 'answer_image',
- aliasedName,
- true,
- type: DriftSqlType.blob,
- requiredDuringInsert: false,
- );
+ late final GeneratedColumn answerImage = GeneratedColumn(
+ 'answer_image',
+ aliasedName,
+ true,
+ type: DriftSqlType.string,
+ requiredDuringInsert: false,
+ );
static const VerificationMeta _collectionIdMeta = const VerificationMeta(
'collectionId',
);
@@ -924,7 +922,7 @@ class $TicketsTable extends Tickets with TableInfo<$TicketsTable, Ticket> {
data['${effectivePrefix}question'],
)!,
questionImage: attachedDatabase.typeMapping.read(
- DriftSqlType.blob,
+ DriftSqlType.string,
data['${effectivePrefix}question_image'],
),
answer:
@@ -933,7 +931,7 @@ class $TicketsTable extends Tickets with TableInfo<$TicketsTable, Ticket> {
data['${effectivePrefix}answer'],
)!,
answerImage: attachedDatabase.typeMapping.read(
- DriftSqlType.blob,
+ DriftSqlType.string,
data['${effectivePrefix}answer_image'],
),
collectionId:
@@ -965,9 +963,9 @@ class Ticket extends DataClass implements Insertable {
/// Дата последней модификации
final DateTime updatedAt;
final String question;
- final Uint8List? questionImage;
+ final String? questionImage;
final String answer;
- final Uint8List? answerImage;
+ final String? answerImage;
final String collectionId;
final double progress;
const Ticket({
@@ -989,11 +987,11 @@ class Ticket extends DataClass implements Insertable {
map['updated_at'] = Variable(updatedAt);
map['question'] = Variable(question);
if (!nullToAbsent || questionImage != null) {
- map['question_image'] = Variable(questionImage);
+ map['question_image'] = Variable(questionImage);
}
map['answer'] = Variable(answer);
if (!nullToAbsent || answerImage != null) {
- map['answer_image'] = Variable(answerImage);
+ map['answer_image'] = Variable(answerImage);
}
map['collection_id'] = Variable(collectionId);
map['progress'] = Variable(progress);
@@ -1030,9 +1028,9 @@ class Ticket extends DataClass implements Insertable {
createdAt: serializer.fromJson(json['createdAt']),
updatedAt: serializer.fromJson(json['updatedAt']),
question: serializer.fromJson(json['question']),
- questionImage: serializer.fromJson(json['questionImage']),
+ questionImage: serializer.fromJson(json['questionImage']),
answer: serializer.fromJson(json['answer']),
- answerImage: serializer.fromJson(json['answerImage']),
+ answerImage: serializer.fromJson(json['answerImage']),
collectionId: serializer.fromJson(json['collectionId']),
progress: serializer.fromJson(json['progress']),
);
@@ -1045,9 +1043,9 @@ class Ticket extends DataClass implements Insertable {
'createdAt': serializer.toJson(createdAt),
'updatedAt': serializer.toJson(updatedAt),
'question': serializer.toJson(question),
- 'questionImage': serializer.toJson(questionImage),
+ 'questionImage': serializer.toJson(questionImage),
'answer': serializer.toJson(answer),
- 'answerImage': serializer.toJson(answerImage),
+ 'answerImage': serializer.toJson(answerImage),
'collectionId': serializer.toJson(collectionId),
'progress': serializer.toJson(progress),
};
@@ -1058,9 +1056,9 @@ class Ticket extends DataClass implements Insertable {
DateTime? createdAt,
DateTime? updatedAt,
String? question,
- Value questionImage = const Value.absent(),
+ Value questionImage = const Value.absent(),
String? answer,
- Value answerImage = const Value.absent(),
+ Value answerImage = const Value.absent(),
String? collectionId,
double? progress,
}) => Ticket(
@@ -1118,9 +1116,9 @@ class Ticket extends DataClass implements Insertable {
createdAt,
updatedAt,
question,
- $driftBlobEquality.hash(questionImage),
+ questionImage,
answer,
- $driftBlobEquality.hash(answerImage),
+ answerImage,
collectionId,
progress,
);
@@ -1132,9 +1130,9 @@ class Ticket extends DataClass implements Insertable {
other.createdAt == this.createdAt &&
other.updatedAt == this.updatedAt &&
other.question == this.question &&
- $driftBlobEquality.equals(other.questionImage, this.questionImage) &&
+ other.questionImage == this.questionImage &&
other.answer == this.answer &&
- $driftBlobEquality.equals(other.answerImage, this.answerImage) &&
+ other.answerImage == this.answerImage &&
other.collectionId == this.collectionId &&
other.progress == this.progress);
}
@@ -1144,9 +1142,9 @@ class TicketsCompanion extends UpdateCompanion {
final Value createdAt;
final Value updatedAt;
final Value question;
- final Value questionImage;
+ final Value questionImage;
final Value answer;
- final Value answerImage;
+ final Value answerImage;
final Value collectionId;
final Value progress;
final Value rowid;
@@ -1181,9 +1179,9 @@ class TicketsCompanion extends UpdateCompanion {
Expression? createdAt,
Expression? updatedAt,
Expression? question,
- Expression? questionImage,
+ Expression? questionImage,
Expression? answer,
- Expression? answerImage,
+ Expression? answerImage,
Expression? collectionId,
Expression? progress,
Expression? rowid,
@@ -1207,9 +1205,9 @@ class TicketsCompanion extends UpdateCompanion {
Value? createdAt,
Value? updatedAt,
Value? question,
- Value? questionImage,
+ Value? questionImage,
Value? answer,
- Value? answerImage,
+ Value? answerImage,
Value? collectionId,
Value? progress,
Value? rowid,
@@ -1244,13 +1242,13 @@ class TicketsCompanion extends UpdateCompanion {
map['question'] = Variable(question.value);
}
if (questionImage.present) {
- map['question_image'] = Variable(questionImage.value);
+ map['question_image'] = Variable(questionImage.value);
}
if (answer.present) {
map['answer'] = Variable(answer.value);
}
if (answerImage.present) {
- map['answer_image'] = Variable(answerImage.value);
+ map['answer_image'] = Variable(answerImage.value);
}
if (collectionId.present) {
map['collection_id'] = Variable(collectionId.value);
@@ -1318,7 +1316,7 @@ typedef $$CollectionsTableCreateCompanionBuilder =
Value updatedAt,
required String title,
required String desc,
- Value image,
+ Value image,
Value payload,
Value likesCount,
Value isLiked,
@@ -1333,7 +1331,7 @@ typedef $$CollectionsTableUpdateCompanionBuilder =
Value updatedAt,
Value title,
Value desc,
- Value image,
+ Value image,
Value payload,
Value likesCount,
Value isLiked,
@@ -1400,7 +1398,7 @@ class $$CollectionsTableFilterComposer
builder: (column) => ColumnFilters(column),
);
- ColumnFilters get image => $composableBuilder(
+ ColumnFilters get image => $composableBuilder(
column: $table.image,
builder: (column) => ColumnFilters(column),
);
@@ -1490,7 +1488,7 @@ class $$CollectionsTableOrderingComposer
builder: (column) => ColumnOrderings(column),
);
- ColumnOrderings get image => $composableBuilder(
+ ColumnOrderings get image => $composableBuilder(
column: $table.image,
builder: (column) => ColumnOrderings(column),
);
@@ -1545,7 +1543,7 @@ class $$CollectionsTableAnnotationComposer
GeneratedColumn get desc =>
$composableBuilder(column: $table.desc, builder: (column) => column);
- GeneratedColumn get image =>
+ GeneratedColumn get image =>
$composableBuilder(column: $table.image, builder: (column) => column);
GeneratedColumn get payload =>
@@ -1627,7 +1625,7 @@ class $$CollectionsTableTableManager
Value updatedAt = const Value.absent(),
Value title = const Value.absent(),
Value desc = const Value.absent(),
- Value image = const Value.absent(),
+ Value image = const Value.absent(),
Value payload = const Value.absent(),
Value likesCount = const Value.absent(),
Value isLiked = const Value.absent(),
@@ -1655,7 +1653,7 @@ class $$CollectionsTableTableManager
Value updatedAt = const Value.absent(),
required String title,
required String desc,
- Value image = const Value.absent(),
+ Value image = const Value.absent(),
Value payload = const Value.absent(),
Value likesCount = const Value.absent(),
Value isLiked = const Value.absent(),
@@ -1743,9 +1741,9 @@ typedef $$TicketsTableCreateCompanionBuilder =
Value createdAt,
Value updatedAt,
required String question,
- Value questionImage,
+ Value questionImage,
required String answer,
- Value answerImage,
+ Value answerImage,
required String collectionId,
Value progress,
Value rowid,
@@ -1756,9 +1754,9 @@ typedef $$TicketsTableUpdateCompanionBuilder =
Value createdAt,
Value updatedAt,
Value question,
- Value questionImage,
+ Value questionImage,
Value answer,
- Value answerImage,
+ Value answerImage,
Value collectionId,
Value progress,
Value rowid,
@@ -1817,7 +1815,7 @@ class $$TicketsTableFilterComposer
builder: (column) => ColumnFilters(column),
);
- ColumnFilters get questionImage => $composableBuilder(
+ ColumnFilters get questionImage => $composableBuilder(
column: $table.questionImage,
builder: (column) => ColumnFilters(column),
);
@@ -1827,7 +1825,7 @@ class $$TicketsTableFilterComposer
builder: (column) => ColumnFilters(column),
);
- ColumnFilters get answerImage => $composableBuilder(
+ ColumnFilters get answerImage => $composableBuilder(
column: $table.answerImage,
builder: (column) => ColumnFilters(column),
);
@@ -1890,7 +1888,7 @@ class $$TicketsTableOrderingComposer
builder: (column) => ColumnOrderings(column),
);
- ColumnOrderings get questionImage => $composableBuilder(
+ ColumnOrderings get questionImage => $composableBuilder(
column: $table.questionImage,
builder: (column) => ColumnOrderings(column),
);
@@ -1900,7 +1898,7 @@ class $$TicketsTableOrderingComposer
builder: (column) => ColumnOrderings(column),
);
- ColumnOrderings get answerImage => $composableBuilder(
+ ColumnOrderings get answerImage => $composableBuilder(
column: $table.answerImage,
builder: (column) => ColumnOrderings(column),
);
@@ -1955,7 +1953,7 @@ class $$TicketsTableAnnotationComposer
GeneratedColumn get question =>
$composableBuilder(column: $table.question, builder: (column) => column);
- GeneratedColumn get questionImage => $composableBuilder(
+ GeneratedColumn