diff --git a/.flutter-plugins-dependencies b/.flutter-plugins-dependencies index 40d25c0..5a35239 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":"camera_avfoundation","path":"/root/.pub-cache/hosted/pub.dev/camera_avfoundation-0.10.3/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"connectivity_plus","path":"/root/.pub-cache/hosted/pub.dev/connectivity_plus-7.3.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"file_picker_darwin","path":"/root/.pub-cache/hosted/pub.dev/file_picker_darwin-2.1.0/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_local_notifications","path":"/root/.pub-cache/hosted/pub.dev/flutter_local_notifications-22.3.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_native_splash","path":"/root/.pub-cache/hosted/pub.dev/flutter_native_splash-2.4.7/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_darwin","path":"/root/.pub-cache/hosted/pub.dev/flutter_secure_storage_darwin-0.4.2/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_sound","path":"/root/.pub-cache/hosted/pub.dev/flutter_sound-9.30.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"fluttertoast","path":"/root/.pub-cache/hosted/pub.dev/fluttertoast-9.1.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"geocoding_darwin","path":"/root/.pub-cache/hosted/pub.dev/geocoding_darwin-1.0.3/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"geolocator_apple","path":"/root/.pub-cache/hosted/pub.dev/geolocator_apple-2.3.14/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"google_maps_flutter_ios","path":"/root/.pub-cache/hosted/pub.dev/google_maps_flutter_ios-2.18.6/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"google_mlkit_commons","path":"/root/.pub-cache/hosted/pub.dev/google_mlkit_commons-0.12.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"google_mlkit_text_recognition","path":"/root/.pub-cache/hosted/pub.dev/google_mlkit_text_recognition-0.16.0/","native_build":true,"dependencies":["google_mlkit_commons"],"dev_dependency":false},{"name":"image_picker_ios","path":"/root/.pub-cache/hosted/pub.dev/image_picker_ios-0.8.13+7/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"mobile_scanner","path":"/root/.pub-cache/hosted/pub.dev/mobile_scanner-7.4.2/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"/root/.pub-cache/hosted/pub.dev/package_info_plus-10.2.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_foundation","path":"/root/.pub-cache/hosted/pub.dev/path_provider_foundation-2.6.0/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"permission_handler_apple","path":"/root/.pub-cache/hosted/pub.dev/permission_handler_apple-9.6.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"shared_preferences_foundation","path":"/root/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.5.7/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"speech_to_text","path":"/root/.pub-cache/hosted/pub.dev/speech_to_text-7.4.0/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"sqflite_darwin","path":"/root/.pub-cache/hosted/pub.dev/sqflite_darwin-2.4.2/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"url_launcher_ios","path":"/root/.pub-cache/hosted/pub.dev/url_launcher_ios-6.4.2/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"video_player_avfoundation","path":"/root/.pub-cache/hosted/pub.dev/video_player_avfoundation-2.12.0/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"workmanager_apple","path":"/root/.pub-cache/hosted/pub.dev/workmanager_apple-0.9.11/","native_build":true,"dependencies":[],"dev_dependency":false}],"android":[{"name":"android_file_picker","path":"/root/.pub-cache/hosted/pub.dev/android_file_picker-2.0.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"camera_android_camerax","path":"/root/.pub-cache/hosted/pub.dev/camera_android_camerax-0.7.1+2/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"connectivity_plus","path":"/root/.pub-cache/hosted/pub.dev/connectivity_plus-7.3.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_local_notifications","path":"/root/.pub-cache/hosted/pub.dev/flutter_local_notifications-22.3.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_native_splash","path":"/root/.pub-cache/hosted/pub.dev/flutter_native_splash-2.4.7/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_plugin_android_lifecycle","path":"/root/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.35/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage","path":"/root/.pub-cache/hosted/pub.dev/flutter_secure_storage-11.1.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_sound","path":"/root/.pub-cache/hosted/pub.dev/flutter_sound-9.30.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"fluttertoast","path":"/root/.pub-cache/hosted/pub.dev/fluttertoast-9.1.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"geocoding_android","path":"/root/.pub-cache/hosted/pub.dev/geocoding_android-5.0.2/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"geolocator_android","path":"/root/.pub-cache/hosted/pub.dev/geolocator_android-5.0.3/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"google_maps_flutter_android","path":"/root/.pub-cache/hosted/pub.dev/google_maps_flutter_android-2.19.10/","native_build":true,"dependencies":["flutter_plugin_android_lifecycle"],"dev_dependency":false},{"name":"google_mlkit_commons","path":"/root/.pub-cache/hosted/pub.dev/google_mlkit_commons-0.12.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"google_mlkit_text_recognition","path":"/root/.pub-cache/hosted/pub.dev/google_mlkit_text_recognition-0.16.0/","native_build":true,"dependencies":["google_mlkit_commons"],"dev_dependency":false},{"name":"image_picker_android","path":"/root/.pub-cache/hosted/pub.dev/image_picker_android-0.8.13+17/","native_build":true,"dependencies":["flutter_plugin_android_lifecycle"],"dev_dependency":false},{"name":"jni","path":"/root/.pub-cache/hosted/pub.dev/jni-1.0.3/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"jni_flutter","path":"/root/.pub-cache/hosted/pub.dev/jni_flutter-1.0.3/","native_build":true,"dependencies":["jni"],"dev_dependency":false},{"name":"mobile_scanner","path":"/root/.pub-cache/hosted/pub.dev/mobile_scanner-7.4.2/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"/root/.pub-cache/hosted/pub.dev/package_info_plus-10.2.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_android","path":"/root/.pub-cache/hosted/pub.dev/path_provider_android-2.3.1/","native_build":false,"dependencies":["jni","jni_flutter"],"dev_dependency":false},{"name":"permission_handler_android","path":"/root/.pub-cache/hosted/pub.dev/permission_handler_android-13.0.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"shared_preferences_android","path":"/root/.pub-cache/hosted/pub.dev/shared_preferences_android-2.4.23/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"speech_to_text","path":"/root/.pub-cache/hosted/pub.dev/speech_to_text-7.4.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"sqflite_android","path":"/root/.pub-cache/hosted/pub.dev/sqflite_android-2.4.2+3/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"url_launcher_android","path":"/root/.pub-cache/hosted/pub.dev/url_launcher_android-6.3.30/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"video_player_android","path":"/root/.pub-cache/hosted/pub.dev/video_player_android-2.9.5/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"workmanager_android","path":"/root/.pub-cache/hosted/pub.dev/workmanager_android-0.10.9/","native_build":true,"dependencies":[],"dev_dependency":false}],"macos":[{"name":"connectivity_plus","path":"/root/.pub-cache/hosted/pub.dev/connectivity_plus-7.3.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"file_picker_darwin","path":"/root/.pub-cache/hosted/pub.dev/file_picker_darwin-2.1.0/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"file_selector_macos","path":"/root/.pub-cache/hosted/pub.dev/file_selector_macos-0.9.5+1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_local_notifications","path":"/root/.pub-cache/hosted/pub.dev/flutter_local_notifications-22.3.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_darwin","path":"/root/.pub-cache/hosted/pub.dev/flutter_secure_storage_darwin-0.4.2/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_sound","path":"/root/.pub-cache/hosted/pub.dev/flutter_sound-9.30.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"geocoding_darwin","path":"/root/.pub-cache/hosted/pub.dev/geocoding_darwin-1.0.3/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"geolocator_apple","path":"/root/.pub-cache/hosted/pub.dev/geolocator_apple-2.3.14/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"image_picker_macos","path":"/root/.pub-cache/hosted/pub.dev/image_picker_macos-0.2.2+1/","native_build":false,"dependencies":["file_selector_macos"],"dev_dependency":false},{"name":"mobile_scanner","path":"/root/.pub-cache/hosted/pub.dev/mobile_scanner-7.4.2/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"/root/.pub-cache/hosted/pub.dev/package_info_plus-10.2.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_foundation","path":"/root/.pub-cache/hosted/pub.dev/path_provider_foundation-2.6.0/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"shared_preferences_foundation","path":"/root/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.5.7/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"speech_to_text","path":"/root/.pub-cache/hosted/pub.dev/speech_to_text-7.4.0/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"sqflite_darwin","path":"/root/.pub-cache/hosted/pub.dev/sqflite_darwin-2.4.2/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"url_launcher_macos","path":"/root/.pub-cache/hosted/pub.dev/url_launcher_macos-3.2.6/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"video_player_avfoundation","path":"/root/.pub-cache/hosted/pub.dev/video_player_avfoundation-2.12.0/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"workmanager_apple","path":"/root/.pub-cache/hosted/pub.dev/workmanager_apple-0.9.11/","native_build":true,"dependencies":[],"dev_dependency":false}],"linux":[{"name":"connectivity_plus","path":"/root/.pub-cache/hosted/pub.dev/connectivity_plus-7.3.1/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"file_picker_linux","path":"/root/.pub-cache/hosted/pub.dev/file_picker_linux-2.0.0/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"file_selector_linux","path":"/root/.pub-cache/hosted/pub.dev/file_selector_linux-0.9.4+1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_local_notifications_linux","path":"/root/.pub-cache/hosted/pub.dev/flutter_local_notifications_linux-8.0.1/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_linux","path":"/root/.pub-cache/hosted/pub.dev/flutter_secure_storage_linux-3.0.3/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_sound","path":"/root/.pub-cache/hosted/pub.dev/flutter_sound-9.30.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"geolocator_linux","path":"/root/.pub-cache/hosted/pub.dev/geolocator_linux-0.2.6/","native_build":false,"dependencies":["package_info_plus"],"dev_dependency":false},{"name":"image_picker_linux","path":"/root/.pub-cache/hosted/pub.dev/image_picker_linux-0.2.2/","native_build":false,"dependencies":["file_selector_linux"],"dev_dependency":false},{"name":"jni","path":"/root/.pub-cache/hosted/pub.dev/jni-1.0.3/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"/root/.pub-cache/hosted/pub.dev/package_info_plus-10.2.1/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"path_provider_linux","path":"/root/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.2/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"shared_preferences_linux","path":"/root/.pub-cache/hosted/pub.dev/shared_preferences_linux-2.4.1/","native_build":false,"dependencies":["path_provider_linux"],"dev_dependency":false},{"name":"url_launcher_linux","path":"/root/.pub-cache/hosted/pub.dev/url_launcher_linux-3.2.3/","native_build":true,"dependencies":[],"dev_dependency":false}],"windows":[{"name":"connectivity_plus","path":"/root/.pub-cache/hosted/pub.dev/connectivity_plus-7.3.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"file_selector_windows","path":"/root/.pub-cache/hosted/pub.dev/file_selector_windows-0.9.3+6/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_local_notifications_windows","path":"/root/.pub-cache/hosted/pub.dev/flutter_local_notifications_windows-3.1.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_windows","path":"/root/.pub-cache/hosted/pub.dev/flutter_secure_storage_windows-4.2.2/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_sound","path":"/root/.pub-cache/hosted/pub.dev/flutter_sound-9.30.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"geolocator_windows","path":"/root/.pub-cache/hosted/pub.dev/geolocator_windows-0.2.5/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"image_picker_windows","path":"/root/.pub-cache/hosted/pub.dev/image_picker_windows-0.2.2/","native_build":false,"dependencies":["file_selector_windows"],"dev_dependency":false},{"name":"jni","path":"/root/.pub-cache/hosted/pub.dev/jni-1.0.3/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"/root/.pub-cache/hosted/pub.dev/package_info_plus-10.2.1/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"path_provider_windows","path":"/root/.pub-cache/hosted/pub.dev/path_provider_windows-2.3.0/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"permission_handler_windows","path":"/root/.pub-cache/hosted/pub.dev/permission_handler_windows-0.2.2/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"shared_preferences_windows","path":"/root/.pub-cache/hosted/pub.dev/shared_preferences_windows-2.4.1/","native_build":false,"dependencies":["path_provider_windows"],"dev_dependency":false},{"name":"speech_to_text_windows","path":"/root/.pub-cache/hosted/pub.dev/speech_to_text_windows-1.0.1/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"url_launcher_windows","path":"/root/.pub-cache/hosted/pub.dev/url_launcher_windows-3.1.6/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"windows_file_picker","path":"/root/.pub-cache/hosted/pub.dev/windows_file_picker-2.0.0/","native_build":false,"dependencies":[],"dev_dependency":false}],"web":[{"name":"camera_web","path":"/root/.pub-cache/hosted/pub.dev/camera_web-0.3.5+6/","dependencies":[],"dev_dependency":false},{"name":"connectivity_plus","path":"/root/.pub-cache/hosted/pub.dev/connectivity_plus-7.3.1/","dependencies":[],"dev_dependency":false},{"name":"file_picker_web","path":"/root/.pub-cache/hosted/pub.dev/file_picker_web-4.0.0/","dependencies":[],"dev_dependency":false},{"name":"flutter_local_notifications_web","path":"/root/.pub-cache/hosted/pub.dev/flutter_local_notifications_web-1.0.0/","dependencies":[],"dev_dependency":false},{"name":"flutter_native_splash","path":"/root/.pub-cache/hosted/pub.dev/flutter_native_splash-2.4.7/","dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_web","path":"/root/.pub-cache/hosted/pub.dev/flutter_secure_storage_web-2.1.1/","dependencies":[],"dev_dependency":false},{"name":"flutter_sound_web","path":"/root/.pub-cache/hosted/pub.dev/flutter_sound_web-9.30.0/","dependencies":[],"dev_dependency":false},{"name":"fluttertoast","path":"/root/.pub-cache/hosted/pub.dev/fluttertoast-9.1.0/","dependencies":[],"dev_dependency":false},{"name":"geolocator_web","path":"/root/.pub-cache/hosted/pub.dev/geolocator_web-4.1.4/","dependencies":[],"dev_dependency":false},{"name":"google_maps_flutter_web","path":"/root/.pub-cache/hosted/pub.dev/google_maps_flutter_web-0.6.3+1/","dependencies":[],"dev_dependency":false},{"name":"image_picker_for_web","path":"/root/.pub-cache/hosted/pub.dev/image_picker_for_web-3.1.1/","dependencies":[],"dev_dependency":false},{"name":"mobile_scanner","path":"/root/.pub-cache/hosted/pub.dev/mobile_scanner-7.4.2/","dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"/root/.pub-cache/hosted/pub.dev/package_info_plus-10.2.1/","dependencies":[],"dev_dependency":false},{"name":"permission_handler_html","path":"/root/.pub-cache/hosted/pub.dev/permission_handler_html-0.1.4+1/","dependencies":[],"dev_dependency":false},{"name":"shared_preferences_web","path":"/root/.pub-cache/hosted/pub.dev/shared_preferences_web-2.4.3/","dependencies":[],"dev_dependency":false},{"name":"speech_to_text","path":"/root/.pub-cache/hosted/pub.dev/speech_to_text-7.4.0/","dependencies":[],"dev_dependency":false},{"name":"url_launcher_web","path":"/root/.pub-cache/hosted/pub.dev/url_launcher_web-2.4.3/","dependencies":[],"dev_dependency":false},{"name":"video_player_web","path":"/root/.pub-cache/hosted/pub.dev/video_player_web-2.4.0/","dependencies":[],"dev_dependency":false},{"name":"workmanager_web","path":"/root/.pub-cache/hosted/pub.dev/workmanager_web-0.2.0/","dependencies":[],"dev_dependency":false}]},"dependencyGraph":[{"name":"android_file_picker","dependencies":[]},{"name":"camera","dependencies":["camera_android_camerax","camera_avfoundation","camera_web","flutter_plugin_android_lifecycle"]},{"name":"camera_android_camerax","dependencies":[]},{"name":"camera_avfoundation","dependencies":[]},{"name":"camera_web","dependencies":[]},{"name":"connectivity_plus","dependencies":[]},{"name":"file_picker","dependencies":["android_file_picker","file_picker_darwin","file_picker_linux","windows_file_picker","file_picker_web"]},{"name":"file_picker_darwin","dependencies":[]},{"name":"file_picker_linux","dependencies":[]},{"name":"file_picker_web","dependencies":[]},{"name":"file_selector_linux","dependencies":[]},{"name":"file_selector_macos","dependencies":[]},{"name":"file_selector_windows","dependencies":[]},{"name":"flutter_local_notifications","dependencies":["flutter_local_notifications_linux","flutter_local_notifications_windows","flutter_local_notifications_web"]},{"name":"flutter_local_notifications_linux","dependencies":[]},{"name":"flutter_local_notifications_web","dependencies":[]},{"name":"flutter_local_notifications_windows","dependencies":[]},{"name":"flutter_native_splash","dependencies":[]},{"name":"flutter_plugin_android_lifecycle","dependencies":[]},{"name":"flutter_secure_storage","dependencies":["flutter_secure_storage_darwin","flutter_secure_storage_linux","flutter_secure_storage_web","flutter_secure_storage_windows"]},{"name":"flutter_secure_storage_darwin","dependencies":[]},{"name":"flutter_secure_storage_linux","dependencies":[]},{"name":"flutter_secure_storage_web","dependencies":[]},{"name":"flutter_secure_storage_windows","dependencies":["path_provider"]},{"name":"flutter_sound","dependencies":["path_provider","flutter_sound_web"]},{"name":"flutter_sound_web","dependencies":[]},{"name":"fluttertoast","dependencies":[]},{"name":"geocoding","dependencies":["geocoding_android","geocoding_darwin"]},{"name":"geocoding_android","dependencies":[]},{"name":"geocoding_darwin","dependencies":[]},{"name":"geolocator","dependencies":["geolocator_android","geolocator_apple","geolocator_web","geolocator_windows","geolocator_linux"]},{"name":"geolocator_android","dependencies":[]},{"name":"geolocator_apple","dependencies":[]},{"name":"geolocator_linux","dependencies":["package_info_plus"]},{"name":"geolocator_web","dependencies":[]},{"name":"geolocator_windows","dependencies":[]},{"name":"google_maps_flutter","dependencies":["google_maps_flutter_android","google_maps_flutter_ios","google_maps_flutter_web"]},{"name":"google_maps_flutter_android","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"google_maps_flutter_ios","dependencies":[]},{"name":"google_maps_flutter_web","dependencies":[]},{"name":"google_mlkit_commons","dependencies":[]},{"name":"google_mlkit_text_recognition","dependencies":["google_mlkit_commons"]},{"name":"image_picker","dependencies":["image_picker_android","image_picker_for_web","image_picker_ios","image_picker_linux","image_picker_macos","image_picker_windows"]},{"name":"image_picker_android","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"image_picker_for_web","dependencies":[]},{"name":"image_picker_ios","dependencies":[]},{"name":"image_picker_linux","dependencies":["file_selector_linux"]},{"name":"image_picker_macos","dependencies":["file_selector_macos"]},{"name":"image_picker_windows","dependencies":["file_selector_windows"]},{"name":"jni","dependencies":[]},{"name":"jni_flutter","dependencies":["jni"]},{"name":"mobile_scanner","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":["jni","jni_flutter"]},{"name":"path_provider_foundation","dependencies":[]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_windows","dependencies":[]},{"name":"permission_handler","dependencies":["permission_handler_android","permission_handler_apple","permission_handler_html","permission_handler_windows"]},{"name":"permission_handler_android","dependencies":[]},{"name":"permission_handler_apple","dependencies":[]},{"name":"permission_handler_html","dependencies":[]},{"name":"permission_handler_windows","dependencies":[]},{"name":"shared_preferences","dependencies":["shared_preferences_android","shared_preferences_foundation","shared_preferences_linux","shared_preferences_web","shared_preferences_windows"]},{"name":"shared_preferences_android","dependencies":[]},{"name":"shared_preferences_foundation","dependencies":[]},{"name":"shared_preferences_linux","dependencies":["path_provider_linux"]},{"name":"shared_preferences_web","dependencies":[]},{"name":"shared_preferences_windows","dependencies":["path_provider_windows"]},{"name":"speech_to_text","dependencies":["speech_to_text_windows"]},{"name":"speech_to_text_windows","dependencies":[]},{"name":"sqflite","dependencies":["sqflite_android","sqflite_darwin"]},{"name":"sqflite_android","dependencies":[]},{"name":"sqflite_darwin","dependencies":[]},{"name":"url_launcher","dependencies":["url_launcher_android","url_launcher_ios","url_launcher_linux","url_launcher_macos","url_launcher_web","url_launcher_windows"]},{"name":"url_launcher_android","dependencies":[]},{"name":"url_launcher_ios","dependencies":[]},{"name":"url_launcher_linux","dependencies":[]},{"name":"url_launcher_macos","dependencies":[]},{"name":"url_launcher_web","dependencies":[]},{"name":"url_launcher_windows","dependencies":[]},{"name":"video_player","dependencies":["video_player_android","video_player_avfoundation","video_player_web"]},{"name":"video_player_android","dependencies":[]},{"name":"video_player_avfoundation","dependencies":[]},{"name":"video_player_web","dependencies":[]},{"name":"windows_file_picker","dependencies":[]},{"name":"workmanager","dependencies":["workmanager_android","workmanager_apple","workmanager_web"]},{"name":"workmanager_android","dependencies":[]},{"name":"workmanager_apple","dependencies":[]},{"name":"workmanager_web","dependencies":[]}],"date_created":"2026-09-16 17:37:43.875237","version":"3.41.1","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":"camera_avfoundation","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\camera_avfoundation-0.10.3\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"connectivity_plus","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\connectivity_plus-7.3.1\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"file_picker_darwin","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\file_picker_darwin-2.1.0\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_foreground_task","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\flutter_foreground_task-9.2.2\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_local_notifications","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\flutter_local_notifications-22.3.1\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_native_splash","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\flutter_native_splash-2.4.7\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_darwin","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\flutter_secure_storage_darwin-0.4.2\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_sound","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\flutter_sound-9.30.0\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"fluttertoast","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\fluttertoast-9.1.0\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"geocoding_darwin","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\geocoding_darwin-1.0.3\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"geolocator_apple","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\geolocator_apple-2.3.14\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"google_maps_flutter_ios","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\google_maps_flutter_ios-2.18.6\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"google_mlkit_commons","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\google_mlkit_commons-0.12.0\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"google_mlkit_text_recognition","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\google_mlkit_text_recognition-0.16.0\\\\","native_build":true,"dependencies":["google_mlkit_commons"],"dev_dependency":false},{"name":"image_picker_ios","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\image_picker_ios-0.8.13+7\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"mobile_scanner","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\mobile_scanner-7.4.2\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\package_info_plus-10.2.1\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_foundation","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\path_provider_foundation-2.6.0\\\\","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"permission_handler_apple","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\permission_handler_apple-9.6.1\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"shared_preferences_foundation","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\shared_preferences_foundation-2.5.7\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"speech_to_text","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\speech_to_text-7.4.0\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"sqflite_darwin","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\sqflite_darwin-2.4.2\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"url_launcher_ios","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\url_launcher_ios-6.4.2\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"video_player_avfoundation","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\video_player_avfoundation-2.12.0\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"workmanager_apple","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\workmanager_apple-0.9.11\\\\","native_build":true,"dependencies":[],"dev_dependency":false}],"android":[{"name":"android_file_picker","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\android_file_picker-2.0.0\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"camera_android_camerax","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\camera_android_camerax-0.7.1+2\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"connectivity_plus","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\connectivity_plus-7.3.1\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_foreground_task","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\flutter_foreground_task-9.2.2\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_local_notifications","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\flutter_local_notifications-22.3.1\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_native_splash","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\flutter_native_splash-2.4.7\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_plugin_android_lifecycle","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\flutter_plugin_android_lifecycle-2.0.35\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\flutter_secure_storage-11.1.1\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_sound","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\flutter_sound-9.30.0\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"fluttertoast","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\fluttertoast-9.1.0\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"geocoding_android","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\geocoding_android-5.0.2\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"geolocator_android","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\geolocator_android-5.0.3\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"google_maps_flutter_android","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\google_maps_flutter_android-2.19.10\\\\","native_build":true,"dependencies":["flutter_plugin_android_lifecycle"],"dev_dependency":false},{"name":"google_mlkit_commons","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\google_mlkit_commons-0.12.0\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"google_mlkit_text_recognition","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\google_mlkit_text_recognition-0.16.0\\\\","native_build":true,"dependencies":["google_mlkit_commons"],"dev_dependency":false},{"name":"image_picker_android","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\image_picker_android-0.8.13+17\\\\","native_build":true,"dependencies":["flutter_plugin_android_lifecycle"],"dev_dependency":false},{"name":"jni","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\jni-1.0.3\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"jni_flutter","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\jni_flutter-1.0.3\\\\","native_build":true,"dependencies":["jni"],"dev_dependency":false},{"name":"mobile_scanner","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\mobile_scanner-7.4.2\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\package_info_plus-10.2.1\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_android","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\path_provider_android-2.3.1\\\\","native_build":false,"dependencies":["jni","jni_flutter"],"dev_dependency":false},{"name":"permission_handler_android","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\permission_handler_android-13.0.1\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"shared_preferences_android","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\shared_preferences_android-2.4.23\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"speech_to_text","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\speech_to_text-7.4.0\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"sqflite_android","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\sqflite_android-2.4.2+3\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"url_launcher_android","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\url_launcher_android-6.3.30\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"video_player_android","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\video_player_android-2.9.5\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"workmanager_android","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\workmanager_android-0.10.9\\\\","native_build":true,"dependencies":[],"dev_dependency":false}],"macos":[{"name":"connectivity_plus","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\connectivity_plus-7.3.1\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"file_picker_darwin","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\file_picker_darwin-2.1.0\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"file_selector_macos","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\file_selector_macos-0.9.5+1\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_local_notifications","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\flutter_local_notifications-22.3.1\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_darwin","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\flutter_secure_storage_darwin-0.4.2\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_sound","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\flutter_sound-9.30.0\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"geocoding_darwin","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\geocoding_darwin-1.0.3\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"geolocator_apple","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\geolocator_apple-2.3.14\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"image_picker_macos","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\image_picker_macos-0.2.2+1\\\\","native_build":false,"dependencies":["file_selector_macos"],"dev_dependency":false},{"name":"mobile_scanner","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\mobile_scanner-7.4.2\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\package_info_plus-10.2.1\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"path_provider_foundation","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\path_provider_foundation-2.6.0\\\\","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"shared_preferences_foundation","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\shared_preferences_foundation-2.5.7\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"speech_to_text","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\speech_to_text-7.4.0\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"sqflite_darwin","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\sqflite_darwin-2.4.2\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"url_launcher_macos","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\url_launcher_macos-3.2.6\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"video_player_avfoundation","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\video_player_avfoundation-2.12.0\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"workmanager_apple","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\workmanager_apple-0.9.11\\\\","native_build":true,"dependencies":[],"dev_dependency":false}],"linux":[{"name":"connectivity_plus","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\connectivity_plus-7.3.1\\\\","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"file_picker_linux","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\file_picker_linux-2.0.0\\\\","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"file_selector_linux","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\file_selector_linux-0.9.4+1\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_local_notifications_linux","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\flutter_local_notifications_linux-8.0.1\\\\","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_linux","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\flutter_secure_storage_linux-3.0.3\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_sound","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\flutter_sound-9.30.0\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"geolocator_linux","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\geolocator_linux-0.2.6\\\\","native_build":false,"dependencies":["package_info_plus"],"dev_dependency":false},{"name":"image_picker_linux","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\image_picker_linux-0.2.2\\\\","native_build":false,"dependencies":["file_selector_linux"],"dev_dependency":false},{"name":"jni","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\jni-1.0.3\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\package_info_plus-10.2.1\\\\","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"path_provider_linux","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\path_provider_linux-2.2.2\\\\","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"shared_preferences_linux","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\shared_preferences_linux-2.4.1\\\\","native_build":false,"dependencies":["path_provider_linux"],"dev_dependency":false},{"name":"url_launcher_linux","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\url_launcher_linux-3.2.3\\\\","native_build":true,"dependencies":[],"dev_dependency":false}],"windows":[{"name":"connectivity_plus","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\connectivity_plus-7.3.1\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"file_selector_windows","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\file_selector_windows-0.9.3+6\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_local_notifications_windows","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\flutter_local_notifications_windows-3.1.1\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_windows","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\flutter_secure_storage_windows-4.2.2\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"flutter_sound","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\flutter_sound-9.30.0\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"geolocator_windows","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\geolocator_windows-0.2.5\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"image_picker_windows","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\image_picker_windows-0.2.2\\\\","native_build":false,"dependencies":["file_selector_windows"],"dev_dependency":false},{"name":"jni","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\jni-1.0.3\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\package_info_plus-10.2.1\\\\","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"path_provider_windows","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\path_provider_windows-2.3.0\\\\","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"permission_handler_windows","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\permission_handler_windows-0.2.2\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"shared_preferences_windows","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\shared_preferences_windows-2.4.1\\\\","native_build":false,"dependencies":["path_provider_windows"],"dev_dependency":false},{"name":"speech_to_text_windows","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\speech_to_text_windows-1.0.1\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"url_launcher_windows","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\url_launcher_windows-3.1.6\\\\","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"windows_file_picker","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\windows_file_picker-2.0.0\\\\","native_build":false,"dependencies":[],"dev_dependency":false}],"web":[{"name":"camera_web","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\camera_web-0.3.5+6\\\\","dependencies":[],"dev_dependency":false},{"name":"connectivity_plus","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\connectivity_plus-7.3.1\\\\","dependencies":[],"dev_dependency":false},{"name":"file_picker_web","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\file_picker_web-4.0.0\\\\","dependencies":[],"dev_dependency":false},{"name":"flutter_local_notifications_web","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\flutter_local_notifications_web-1.0.0\\\\","dependencies":[],"dev_dependency":false},{"name":"flutter_native_splash","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\flutter_native_splash-2.4.7\\\\","dependencies":[],"dev_dependency":false},{"name":"flutter_secure_storage_web","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\flutter_secure_storage_web-2.1.1\\\\","dependencies":[],"dev_dependency":false},{"name":"flutter_sound_web","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\flutter_sound_web-9.30.0\\\\","dependencies":[],"dev_dependency":false},{"name":"fluttertoast","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\fluttertoast-9.1.0\\\\","dependencies":[],"dev_dependency":false},{"name":"geolocator_web","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\geolocator_web-4.1.4\\\\","dependencies":[],"dev_dependency":false},{"name":"google_maps_flutter_web","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\google_maps_flutter_web-0.6.3+1\\\\","dependencies":[],"dev_dependency":false},{"name":"image_picker_for_web","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\image_picker_for_web-3.1.1\\\\","dependencies":[],"dev_dependency":false},{"name":"mobile_scanner","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\mobile_scanner-7.4.2\\\\","dependencies":[],"dev_dependency":false},{"name":"package_info_plus","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\package_info_plus-10.2.1\\\\","dependencies":[],"dev_dependency":false},{"name":"permission_handler_html","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\permission_handler_html-0.1.4+1\\\\","dependencies":[],"dev_dependency":false},{"name":"shared_preferences_web","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\shared_preferences_web-2.4.3\\\\","dependencies":[],"dev_dependency":false},{"name":"speech_to_text","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\speech_to_text-7.4.0\\\\","dependencies":[],"dev_dependency":false},{"name":"url_launcher_web","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\url_launcher_web-2.4.3\\\\","dependencies":[],"dev_dependency":false},{"name":"video_player_web","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\video_player_web-2.4.0\\\\","dependencies":[],"dev_dependency":false},{"name":"workmanager_web","path":"C:\\\\Users\\\\azmat\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\workmanager_web-0.2.0\\\\","dependencies":[],"dev_dependency":false}]},"dependencyGraph":[{"name":"android_file_picker","dependencies":[]},{"name":"camera","dependencies":["camera_android_camerax","camera_avfoundation","camera_web","flutter_plugin_android_lifecycle"]},{"name":"camera_android_camerax","dependencies":[]},{"name":"camera_avfoundation","dependencies":[]},{"name":"camera_web","dependencies":[]},{"name":"connectivity_plus","dependencies":[]},{"name":"file_picker","dependencies":["android_file_picker","file_picker_darwin","file_picker_linux","windows_file_picker","file_picker_web"]},{"name":"file_picker_darwin","dependencies":[]},{"name":"file_picker_linux","dependencies":[]},{"name":"file_picker_web","dependencies":[]},{"name":"file_selector_linux","dependencies":[]},{"name":"file_selector_macos","dependencies":[]},{"name":"file_selector_windows","dependencies":[]},{"name":"flutter_foreground_task","dependencies":["shared_preferences"]},{"name":"flutter_local_notifications","dependencies":["flutter_local_notifications_linux","flutter_local_notifications_windows","flutter_local_notifications_web"]},{"name":"flutter_local_notifications_linux","dependencies":[]},{"name":"flutter_local_notifications_web","dependencies":[]},{"name":"flutter_local_notifications_windows","dependencies":[]},{"name":"flutter_native_splash","dependencies":[]},{"name":"flutter_plugin_android_lifecycle","dependencies":[]},{"name":"flutter_secure_storage","dependencies":["flutter_secure_storage_darwin","flutter_secure_storage_linux","flutter_secure_storage_web","flutter_secure_storage_windows"]},{"name":"flutter_secure_storage_darwin","dependencies":[]},{"name":"flutter_secure_storage_linux","dependencies":[]},{"name":"flutter_secure_storage_web","dependencies":[]},{"name":"flutter_secure_storage_windows","dependencies":["path_provider"]},{"name":"flutter_sound","dependencies":["path_provider","flutter_sound_web"]},{"name":"flutter_sound_web","dependencies":[]},{"name":"fluttertoast","dependencies":[]},{"name":"geocoding","dependencies":["geocoding_android","geocoding_darwin"]},{"name":"geocoding_android","dependencies":[]},{"name":"geocoding_darwin","dependencies":[]},{"name":"geolocator","dependencies":["geolocator_android","geolocator_apple","geolocator_web","geolocator_windows","geolocator_linux"]},{"name":"geolocator_android","dependencies":[]},{"name":"geolocator_apple","dependencies":[]},{"name":"geolocator_linux","dependencies":["package_info_plus"]},{"name":"geolocator_web","dependencies":[]},{"name":"geolocator_windows","dependencies":[]},{"name":"google_maps_flutter","dependencies":["google_maps_flutter_android","google_maps_flutter_ios","google_maps_flutter_web"]},{"name":"google_maps_flutter_android","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"google_maps_flutter_ios","dependencies":[]},{"name":"google_maps_flutter_web","dependencies":[]},{"name":"google_mlkit_commons","dependencies":[]},{"name":"google_mlkit_text_recognition","dependencies":["google_mlkit_commons"]},{"name":"image_picker","dependencies":["image_picker_android","image_picker_for_web","image_picker_ios","image_picker_linux","image_picker_macos","image_picker_windows"]},{"name":"image_picker_android","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"image_picker_for_web","dependencies":[]},{"name":"image_picker_ios","dependencies":[]},{"name":"image_picker_linux","dependencies":["file_selector_linux"]},{"name":"image_picker_macos","dependencies":["file_selector_macos"]},{"name":"image_picker_windows","dependencies":["file_selector_windows"]},{"name":"jni","dependencies":[]},{"name":"jni_flutter","dependencies":["jni"]},{"name":"mobile_scanner","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":["jni","jni_flutter"]},{"name":"path_provider_foundation","dependencies":[]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_windows","dependencies":[]},{"name":"permission_handler","dependencies":["permission_handler_android","permission_handler_apple","permission_handler_html","permission_handler_windows"]},{"name":"permission_handler_android","dependencies":[]},{"name":"permission_handler_apple","dependencies":[]},{"name":"permission_handler_html","dependencies":[]},{"name":"permission_handler_windows","dependencies":[]},{"name":"shared_preferences","dependencies":["shared_preferences_android","shared_preferences_foundation","shared_preferences_linux","shared_preferences_web","shared_preferences_windows"]},{"name":"shared_preferences_android","dependencies":[]},{"name":"shared_preferences_foundation","dependencies":[]},{"name":"shared_preferences_linux","dependencies":["path_provider_linux"]},{"name":"shared_preferences_web","dependencies":[]},{"name":"shared_preferences_windows","dependencies":["path_provider_windows"]},{"name":"speech_to_text","dependencies":["speech_to_text_windows"]},{"name":"speech_to_text_windows","dependencies":[]},{"name":"sqflite","dependencies":["sqflite_android","sqflite_darwin"]},{"name":"sqflite_android","dependencies":[]},{"name":"sqflite_darwin","dependencies":[]},{"name":"url_launcher","dependencies":["url_launcher_android","url_launcher_ios","url_launcher_linux","url_launcher_macos","url_launcher_web","url_launcher_windows"]},{"name":"url_launcher_android","dependencies":[]},{"name":"url_launcher_ios","dependencies":[]},{"name":"url_launcher_linux","dependencies":[]},{"name":"url_launcher_macos","dependencies":[]},{"name":"url_launcher_web","dependencies":[]},{"name":"url_launcher_windows","dependencies":[]},{"name":"video_player","dependencies":["video_player_android","video_player_avfoundation","video_player_web"]},{"name":"video_player_android","dependencies":[]},{"name":"video_player_avfoundation","dependencies":[]},{"name":"video_player_web","dependencies":[]},{"name":"windows_file_picker","dependencies":[]},{"name":"workmanager","dependencies":["workmanager_android","workmanager_apple","workmanager_web"]},{"name":"workmanager_android","dependencies":[]},{"name":"workmanager_apple","dependencies":[]},{"name":"workmanager_web","dependencies":[]}],"date_created":"2026-10-02 21:59:27.015250","version":"3.47.4","swift_package_manager_enabled":{"ios":false,"macos":false}} \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/authsec_flutter.iml b/.idea/authsec_flutter.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/.idea/authsec_flutter.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/caches/deviceStreaming.xml b/.idea/caches/deviceStreaming.xml new file mode 100644 index 0000000..d88f911 --- /dev/null +++ b/.idea/caches/deviceStreaming.xml @@ -0,0 +1,2385 @@ + + + + + + \ No newline at end of file diff --git a/.idea/deviceManager.xml b/.idea/deviceManager.xml new file mode 100644 index 0000000..91f9558 --- /dev/null +++ b/.idea/deviceManager.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/.idea/markdown.xml b/.idea/markdown.xml new file mode 100644 index 0000000..c61ea33 --- /dev/null +++ b/.idea/markdown.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..4b151ab --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..8468fdc --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/assets/translations_dynamic/en.json b/assets/translations_dynamic/en.json new file mode 100644 index 0000000..313285f --- /dev/null +++ b/assets/translations_dynamic/en.json @@ -0,0 +1,8 @@ +{ + "student": "Student", + "create_student": "Create Student", + "update_student": "Update Student", + "name": "Name", + "phone_number": "Phone Number", + "email": "Email" +} diff --git a/assets/translations_dynamic/hi.json b/assets/translations_dynamic/hi.json new file mode 100644 index 0000000..9afbd24 --- /dev/null +++ b/assets/translations_dynamic/hi.json @@ -0,0 +1,8 @@ +{ + "student": "छात्र", + "create_student": "छात्र बनाएं", + "update_student": "छात्र अपडेट करें", + "name": "नाम", + "phone_number": "फोन नंबर", + "email": "ईमेल" +} diff --git a/l10n.yaml b/l10n.yaml new file mode 100644 index 0000000..9ff7739 --- /dev/null +++ b/l10n.yaml @@ -0,0 +1,7 @@ +arb-dir: lib/l10n +template-arb-file: app_en.arb +output-localization-file: app_localizations.dart +# Checked-in output in lib/l10n (Flutter 3.47+ always generates +# non-synthetic files): deterministic for portal generated apps, +# Docker Linux builds and CI without extra gen steps. +output-dir: lib/l10n diff --git a/lib/Utils/dynamic_strings.dart b/lib/Utils/dynamic_strings.dart new file mode 100644 index 0000000..b1c9601 --- /dev/null +++ b/lib/Utils/dynamic_strings.dart @@ -0,0 +1,43 @@ +import 'dart:convert'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:provider/provider.dart'; +import '../providers/locale_provider.dart'; + +/// Lightweight runtime reader for builder-generated dynamic strings (Group-2). +/// Generated Hybrid screens call: `DynamicStrings.of(context).tr('phone_number')` +/// No heavy package, no ML model, no network: pure JSON maps (KBs) + Provider. +/// Fallback chain: current lang -> English -> pretty key. Never crashes. +/// +/// Bootstrap loads embedded assets once (see main.dart): +/// assets/translations_dynamic/en.json, hi.json +/// Later, portal-backend diffs merge via LocaleProvider.updateFromServer(). +class DynamicStrings { + final LocaleProvider _provider; + DynamicStrings._(this._provider); + + /// Listens to locale changes so Text rebuilds on language switch. + static DynamicStrings of(BuildContext context) { + return DynamicStrings._(Provider.of(context)); + } + + String tr(String key) => _provider.trDynamic(key); + + /// Preload embedded asset tables. Call once before runApp finishes splash. + static Future>> loadEmbedded() async { + final out = >{}; + for (final lang in LocaleProvider.supportedCodes) { + try { + final raw = await rootBundle.loadString('assets/translations_dynamic/$lang.json'); + final decoded = jsonDecode(raw) as Map; + out[lang] = decoded.map((k, v) => MapEntry( + k.toString().trim().toLowerCase().replaceAll(RegExp(r'\s+'), '_'), + v.toString(), + )); + } catch (_) { + out[lang] = {}; + } + } + return out; + } +} diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb new file mode 100644 index 0000000..cd81968 --- /dev/null +++ b/lib/l10n/app_en.arb @@ -0,0 +1,33 @@ +{ + "@@locale": "en", + "error": "Error", + "@error": { "description": "Dialog error title" }, + "ok": "OK", + "@ok": { "description": "Dialog OK button" }, + "search": "Search...", + "@search": { "description": "List search hint" }, + "confirmDeletion": "Confirm Deletion", + "@confirmDeletion": { "description": "Delete dialog title" }, + "deleteConfirmation": "Are you sure you want to delete?", + "@deleteConfirmation": { "description": "Delete dialog body" }, + "cancel": "Cancel", + "@cancel": { "description": "Cancel button" }, + "delete": "Delete", + "@delete": { "description": "Delete button" }, + "additionalFields": "Additional Fields", + "@additionalFields": { "description": "Audit fields dialog title" }, + "close": "Close", + "@close": { "description": "Close button" }, + "selectImageSource": "Select Image Source", + "@selectImageSource": { "description": "Image picker title" }, + "gallery": "Gallery", + "@gallery": { "description": "Image gallery option" }, + "camera": "Camera", + "@camera": { "description": "Camera option" }, + "submit": "Submit", + "@submit": { "description": "Form submit button" }, + "update": "Update", + "@update": { "description": "Form update button" }, + "edit": "Edit", + "@edit": { "description": "Edit action" } +} diff --git a/lib/l10n/app_hi.arb b/lib/l10n/app_hi.arb new file mode 100644 index 0000000..3c90027 --- /dev/null +++ b/lib/l10n/app_hi.arb @@ -0,0 +1,18 @@ +{ + "@@locale": "hi", + "error": "त्रुटि", + "ok": "ठीक है", + "search": "खोजें...", + "confirmDeletion": "हटाने की पुष्टि करें", + "deleteConfirmation": "क्या आप वाकई हटाना चाहते हैं?", + "cancel": "रद्द करें", + "delete": "हटाएं", + "additionalFields": "अतिरिक्त फ़ील्ड", + "close": "बंद करें", + "selectImageSource": "छवि स्रोत चुनें", + "gallery": "गैलरी", + "camera": "कैमरा", + "submit": "जमा करें", + "update": "अपडेट करें", + "edit": "संपादित करें" +} diff --git a/lib/l10n/app_localizations.dart b/lib/l10n/app_localizations.dart new file mode 100644 index 0000000..d538fcb --- /dev/null +++ b/lib/l10n/app_localizations.dart @@ -0,0 +1,223 @@ +import 'dart:async'; + +import 'package:flutter/foundation.dart'; +import 'package:flutter/widgets.dart'; +import 'package:flutter_localizations/flutter_localizations.dart'; +import 'package:intl/intl.dart' as intl; + +import 'app_localizations_en.dart'; +import 'app_localizations_hi.dart'; + +// ignore_for_file: type=lint + +/// Callers can lookup localized strings with an instance of AppLocalizations +/// returned by `AppLocalizations.of(context)`. +/// +/// Applications need to include `AppLocalizations.delegate()` in their app's +/// `localizationDelegates` list, and the locales they support in the app's +/// `supportedLocales` list. For example: +/// +/// ```dart +/// import 'l10n/app_localizations.dart'; +/// +/// return MaterialApp( +/// localizationsDelegates: AppLocalizations.localizationsDelegates, +/// supportedLocales: AppLocalizations.supportedLocales, +/// home: MyApplicationHome(), +/// ); +/// ``` +/// +/// ## Update pubspec.yaml +/// +/// Please make sure to update your pubspec.yaml to include the following +/// packages: +/// +/// ```yaml +/// dependencies: +/// # Internationalization support. +/// flutter_localizations: +/// sdk: flutter +/// intl: any # Use the pinned version from flutter_localizations +/// +/// # Rest of dependencies +/// ``` +/// +/// ## iOS Applications +/// +/// iOS applications define key application metadata, including supported +/// locales, in an Info.plist file that is built into the application bundle. +/// To configure the locales supported by your app, you’ll need to edit this +/// file. +/// +/// First, open your project’s ios/Runner.xcworkspace Xcode workspace file. +/// Then, in the Project Navigator, open the Info.plist file under the Runner +/// project’s Runner folder. +/// +/// Next, select the Information Property List item, select Add Item from the +/// Editor menu, then select Localizations from the pop-up menu. +/// +/// Select and expand the newly-created Localizations item then, for each +/// locale your application supports, add a new item and select the locale +/// you wish to add from the pop-up menu in the Value field. This list should +/// be consistent with the languages listed in the AppLocalizations.supportedLocales +/// property. +abstract class AppLocalizations { + AppLocalizations(String locale) + : localeName = intl.Intl.canonicalizedLocale(locale.toString()); + + final String localeName; + + static AppLocalizations? of(BuildContext context) { + return Localizations.of(context, AppLocalizations); + } + + static const LocalizationsDelegate delegate = + _AppLocalizationsDelegate(); + + /// A list of this localizations delegate along with the default localizations + /// delegates. + /// + /// Returns a list of localizations delegates containing this delegate along with + /// GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate, + /// and GlobalWidgetsLocalizations.delegate. + /// + /// Additional delegates can be added by appending to this list in + /// MaterialApp. This list does not have to be used at all if a custom list + /// of delegates is preferred or required. + static const List> localizationsDelegates = + >[ + delegate, + GlobalMaterialLocalizations.delegate, + GlobalCupertinoLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + ]; + + /// A list of this localizations delegate's supported locales. + static const List supportedLocales = [ + Locale('en'), + Locale('hi') + ]; + + /// Dialog error title + /// + /// In en, this message translates to: + /// **'Error'** + String get error; + + /// Dialog OK button + /// + /// In en, this message translates to: + /// **'OK'** + String get ok; + + /// List search hint + /// + /// In en, this message translates to: + /// **'Search...'** + String get search; + + /// Delete dialog title + /// + /// In en, this message translates to: + /// **'Confirm Deletion'** + String get confirmDeletion; + + /// Delete dialog body + /// + /// In en, this message translates to: + /// **'Are you sure you want to delete?'** + String get deleteConfirmation; + + /// Cancel button + /// + /// In en, this message translates to: + /// **'Cancel'** + String get cancel; + + /// Delete button + /// + /// In en, this message translates to: + /// **'Delete'** + String get delete; + + /// Audit fields dialog title + /// + /// In en, this message translates to: + /// **'Additional Fields'** + String get additionalFields; + + /// Close button + /// + /// In en, this message translates to: + /// **'Close'** + String get close; + + /// Image picker title + /// + /// In en, this message translates to: + /// **'Select Image Source'** + String get selectImageSource; + + /// Image gallery option + /// + /// In en, this message translates to: + /// **'Gallery'** + String get gallery; + + /// Camera option + /// + /// In en, this message translates to: + /// **'Camera'** + String get camera; + + /// Form submit button + /// + /// In en, this message translates to: + /// **'Submit'** + String get submit; + + /// Form update button + /// + /// In en, this message translates to: + /// **'Update'** + String get update; + + /// Edit action + /// + /// In en, this message translates to: + /// **'Edit'** + String get edit; +} + +class _AppLocalizationsDelegate + extends LocalizationsDelegate { + const _AppLocalizationsDelegate(); + + @override + Future load(Locale locale) { + return SynchronousFuture(lookupAppLocalizations(locale)); + } + + @override + bool isSupported(Locale locale) => + ['en', 'hi'].contains(locale.languageCode); + + @override + bool shouldReload(_AppLocalizationsDelegate old) => false; +} + +AppLocalizations lookupAppLocalizations(Locale locale) { + // Lookup logic when only language code is specified. + switch (locale.languageCode) { + case 'en': + return AppLocalizationsEn(); + case 'hi': + return AppLocalizationsHi(); + } + + throw FlutterError( + 'AppLocalizations.delegate failed to load unsupported locale "$locale". This is likely ' + 'an issue with the localizations generation tool. Please file an issue ' + 'on GitHub with a reproducible sample app and the gen-l10n configuration ' + 'that was used.'); +} diff --git a/lib/l10n/app_localizations_en.dart b/lib/l10n/app_localizations_en.dart new file mode 100644 index 0000000..62f1291 --- /dev/null +++ b/lib/l10n/app_localizations_en.dart @@ -0,0 +1,55 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for English (`en`). +class AppLocalizationsEn extends AppLocalizations { + AppLocalizationsEn([String locale = 'en']) : super(locale); + + @override + String get error => 'Error'; + + @override + String get ok => 'OK'; + + @override + String get search => 'Search...'; + + @override + String get confirmDeletion => 'Confirm Deletion'; + + @override + String get deleteConfirmation => 'Are you sure you want to delete?'; + + @override + String get cancel => 'Cancel'; + + @override + String get delete => 'Delete'; + + @override + String get additionalFields => 'Additional Fields'; + + @override + String get close => 'Close'; + + @override + String get selectImageSource => 'Select Image Source'; + + @override + String get gallery => 'Gallery'; + + @override + String get camera => 'Camera'; + + @override + String get submit => 'Submit'; + + @override + String get update => 'Update'; + + @override + String get edit => 'Edit'; +} diff --git a/lib/l10n/app_localizations_hi.dart b/lib/l10n/app_localizations_hi.dart new file mode 100644 index 0000000..64c3c64 --- /dev/null +++ b/lib/l10n/app_localizations_hi.dart @@ -0,0 +1,55 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Hindi (`hi`). +class AppLocalizationsHi extends AppLocalizations { + AppLocalizationsHi([String locale = 'hi']) : super(locale); + + @override + String get error => 'त्रुटि'; + + @override + String get ok => 'ठीक है'; + + @override + String get search => 'खोजें...'; + + @override + String get confirmDeletion => 'हटाने की पुष्टि करें'; + + @override + String get deleteConfirmation => 'क्या आप वाकई हटाना चाहते हैं?'; + + @override + String get cancel => 'रद्द करें'; + + @override + String get delete => 'हटाएं'; + + @override + String get additionalFields => 'अतिरिक्त फ़ील्ड'; + + @override + String get close => 'बंद करें'; + + @override + String get selectImageSource => 'छवि स्रोत चुनें'; + + @override + String get gallery => 'गैलरी'; + + @override + String get camera => 'कैमरा'; + + @override + String get submit => 'जमा करें'; + + @override + String get update => 'अपडेट करें'; + + @override + String get edit => 'संपादित करें'; +} diff --git a/lib/main.dart b/lib/main.dart index ae3cd6c..334da33 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,10 +1,14 @@ import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; import 'package:sqflite/sqflite.dart'; import 'package:sqflite_common_ffi/sqflite_ffi.dart'; import 'package:sqlite3/sqlite3.dart'; +import 'providers/locale_provider.dart'; +import 'l10n/app_localizations.dart'; +import 'Utils/dynamic_strings.dart'; import 'screens/Attendance/attendance_service.dart'; import 'screens/splash_screen/splash_screen.dart'; @@ -37,6 +41,14 @@ void main() async { // Background duty-tracking service (5-min GPS snapshots while punched in). AttendanceService.initService(); + // Group-2 i18n bootstrap: locale pref + embedded dynamic tables + server + // diff cache (all offline-first; reverts by removing provider wiring below). + final localeProvider = LocaleProvider(); + final embedded = await DynamicStrings.loadEmbedded(); + localeProvider.seedTables(embedded); + await localeProvider.loadServerCache(); + await localeProvider.init(); + //Request notification permissions // await _requestNotificationPermissions(); @@ -49,7 +61,12 @@ void main() async { // initialDelay: const Duration(seconds: 5), // constraints: Constraints(networkType: NetworkType.connected), // ); - runApp(MyApp()); + runApp( + ChangeNotifierProvider.value( + value: localeProvider, + child: const MyApp(), + ), + ); } // Future _requestNotificationPermissions() async { @@ -217,10 +234,17 @@ final GlobalKey navigatorKey = GlobalKey(); // } class MyApp extends StatelessWidget { + const MyApp({super.key}); @override Widget build(BuildContext context) { + final locale = Provider.of(context).locale; return MaterialApp( debugShowCheckedModeBanner: false, + // Group-2: ARB static words. Generated Hybrid screens additionally use + // DynamicStrings.of(context).tr(key) for wireframe fields. + locale: locale, + supportedLocales: const [Locale('en'), Locale('hi')], + localizationsDelegates: AppLocalizations.localizationsDelegates, home: const SplashScreen(), routes: {}, theme: ThemeData( diff --git a/lib/providers/locale_provider.dart b/lib/providers/locale_provider.dart new file mode 100644 index 0000000..ea854c0 --- /dev/null +++ b/lib/providers/locale_provider.dart @@ -0,0 +1,92 @@ +import 'package:flutter/material.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +/// Single source of truth for app language (Group-2). +/// Drives BOTH systems together: +/// - ARB static words via MaterialApp.locale (AppLocalizations) +/// - wireframe field words via DynamicStrings.tr(key) backed by +/// assets/translations_dynamic/{lang}.json (free, offline, KBs). +/// Revert: remove provider wiring in main.dart; generated screens fall back +/// to English keys (DynamicStrings.tr returns readable fallback, never crash). +class LocaleProvider with ChangeNotifier { + static const _prefKey = 'app_locale_code'; + static const supportedCodes = ['en', 'hi']; + + Locale _locale = const Locale('en'); + Locale get locale => _locale; + String get code => _locale.languageCode; + + /// lang -> (key -> translated value). Embedded assets loaded once at startup. + final Map> _tables = {}; + + /// Server-supplied diff cache (future: portal-backend translations API). + /// Key format: "lang::key" -> value, persisted to SharedPreferences. + final Map _serverDiff = {}; + + bool _ready = false; + bool get ready => _ready; + + Future init() async { + final prefs = await SharedPreferences.getInstance(); + final saved = prefs.getString(_prefKey); + if (saved != null && supportedCodes.contains(saved)) { + _locale = Locale(saved); + } + _ready = true; + notifyListeners(); + } + + /// Called once from bootstrap with preloaded asset tables. + void seedTables(Map> tables) { + _tables.addAll(tables); + } + + /// Merge server diff (new wireframe fields added after release). + /// Works offline afterwards because diff is persisted. + Future updateFromServer(Map words, String lang) async { + if (words.isEmpty) return; + final table = _tables.putIfAbsent(lang, () => {}); + table.addAll(words); + for (final e in words.entries) { + _serverDiff['$lang::${e.key}'] = e.value; + } + final prefs = await SharedPreferences.getInstance(); + // Persist each entry individually to survive restarts (small volume). + for (final e in words.entries) { + await prefs.setString('dyn_${lang}_${e.key}', e.value); + } + notifyListeners(); + } + + Future loadServerCache() async { + final prefs = await SharedPreferences.getInstance(); + for (final lang in supportedCodes) { + final table = _tables.putIfAbsent(lang, () => {}); + for (final key in prefs.getKeys().where((k) => k.startsWith('dyn_${lang}_'))) { + final field = key.substring('dyn_${lang}_'.length); + final v = prefs.getString(key); + if (v != null) table[field] = v; + } + } + notifyListeners(); + } + + Future setLocale(String code) async { + if (!supportedCodes.contains(code)) return; + _locale = Locale(code); + final prefs = await SharedPreferences.getInstance(); + await prefs.setString(_prefKey, code); + notifyListeners(); + } + + /// Runtime lookup for wireframe-driven strings. + /// Never throws: missing key -> English table -> pretty fallback. + String trDynamic(String key) { + final norm = key.trim().toLowerCase().replaceAll(RegExp(r'\s+'), '_'); + final cur = _tables[code]?[norm]; + if (cur != null && cur.isNotEmpty) return cur; + final en = _tables['en']?[norm]; + if (en != null && en.isNotEmpty) return en; + return key.replaceAll('_', ' '); + } +} diff --git a/lib/widgets/language_switcher.dart b/lib/widgets/language_switcher.dart new file mode 100644 index 0000000..ea5bc68 --- /dev/null +++ b/lib/widgets/language_switcher.dart @@ -0,0 +1,38 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import '../providers/locale_provider.dart'; + +/// One-tap language switch driving ARB + dynamic strings together (Group-2). +/// Drop into profile / settings / app bar: +/// const LanguageSwitcher() +class LanguageSwitcher extends StatelessWidget { + final bool compact; + const LanguageSwitcher({super.key, this.compact = false}); + + static const _labels = {'en': 'English', 'hi': 'हिन्दी'}; + + @override + Widget build(BuildContext context) { + final provider = Provider.of(context); + if (compact) { + return DropdownButtonHideUnderline( + child: DropdownButton( + value: provider.code, + items: LocaleProvider.supportedCodes + .map((c) => DropdownMenuItem(value: c, child: Text(_labels[c] ?? c))) + .toList(), + onChanged: (c) { + if (c != null) provider.setLocale(c); + }, + ), + ); + } + return SegmentedButton( + segments: LocaleProvider.supportedCodes + .map((c) => ButtonSegment(value: c, label: Text(_labels[c] ?? c))) + .toList(), + selected: {provider.code}, + onSelectionChanged: (s) => provider.setLocale(s.first), + ); + } +} diff --git a/pubspec.lock b/pubspec.lock index 602c413..322c98d 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -534,6 +534,11 @@ packages: url: "https://pub.dev" source: hosted version: "3.1.1" + flutter_localizations: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" flutter_map: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 4eda4d5..c08e18a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -30,6 +30,8 @@ environment: dependencies: flutter: sdk: flutter + flutter_localizations: + sdk: flutter # The following adds the Cupertino Icons font to your application. @@ -119,6 +121,7 @@ dependency_overrides: # The following section is specific to Flutter packages. flutter: + generate: true # The following line ensures that the Material Icons font is # included with your application, so that you can use the icons in @@ -128,6 +131,7 @@ flutter: assets: - assets/ - assets/images/ + - assets/translations_dynamic/ # To add assets to your application, add an assets section, like this: # assets: