From 39650469843e3f4fab8c87d5aa2dea840fa8b73d Mon Sep 17 00:00:00 2001 From: Suriya Date: Fri, 26 Jun 2026 13:43:37 +0530 Subject: [PATCH] Initial commit of Doormile CRM Mobile with UI modernizations --- .gitignore | 45 + .metadata | 45 + README.md | 22 + analysis_options.yaml | 28 + android/.gitignore | 14 + android/app/build.gradle.kts | 75 + android/app/src/debug/AndroidManifest.xml | 7 + android/app/src/main/AndroidManifest.xml | 50 + .../kotlin/com/doormile/crm/MainActivity.kt | 5 + .../drawable-hdpi/ic_launcher_foreground.png | Bin 0 -> 8669 bytes .../drawable-mdpi/ic_launcher_foreground.png | Bin 0 -> 4906 bytes .../res/drawable-v21/launch_background.xml | 11 + .../drawable-xhdpi/ic_launcher_foreground.png | Bin 0 -> 10871 bytes .../ic_launcher_foreground.png | Bin 0 -> 17971 bytes .../ic_launcher_foreground.png | Bin 0 -> 26099 bytes .../main/res/drawable/launch_background.xml | 11 + .../res/mipmap-anydpi-v26/launcher_icon.xml | 5 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../main/res/mipmap-hdpi/launcher_icon.png | Bin 0 -> 4771 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../main/res/mipmap-mdpi/launcher_icon.png | Bin 0 -> 2809 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xhdpi/launcher_icon.png | Bin 0 -> 6023 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxhdpi/launcher_icon.png | Bin 0 -> 9951 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../main/res/mipmap-xxxhdpi/launcher_icon.png | Bin 0 -> 13005 bytes .../app/src/main/res/values-night/styles.xml | 18 + android/app/src/main/res/values/colors.xml | 4 + android/app/src/main/res/values/styles.xml | 18 + android/app/src/profile/AndroidManifest.xml | 7 + android/build.gradle.kts | 24 + .../reports/problems/problems-report.html | 663 ++++ android/gradle.properties | 7 + .../gradle/wrapper/gradle-wrapper.properties | 5 + android/settings.gradle.kts | 26 + api.txt | 252 ++ assets/_icon_preview.png | Bin 0 -> 83551 bytes assets/doormile_d_only.png | Bin 0 -> 102084 bytes assets/doormile_fg.png | Bin 0 -> 19283 bytes assets/doormile_round_fg.png | Bin 0 -> 83771 bytes assets/doormilelogo512512.png | Bin 0 -> 22445 bytes assets/doormilelogo_full.png | Bin 0 -> 44643 bytes assets/doormilelogoround.png | Bin 0 -> 32335 bytes assets/preloader.png | Bin 0 -> 8207 bytes assets/test_merge.png | Bin 0 -> 29349 bytes buildlog.txt | 2551 +++++++++++++++ ios/.gitignore | 34 + ios/Flutter/AppFrameworkInfo.plist | 26 + ios/Flutter/Debug.xcconfig | 1 + ios/Flutter/Release.xcconfig | 1 + ios/Runner.xcodeproj/project.pbxproj | 616 ++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 101 + .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 + .../Icon-App-1024x1024@1x.png | Bin 0 -> 87178 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 943 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 2286 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 3545 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 1617 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 3601 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 5275 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 2286 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 4821 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 8010 bytes .../AppIcon.appiconset/Icon-App-50x50@1x.png | Bin 0 -> 2891 bytes .../AppIcon.appiconset/Icon-App-50x50@2x.png | Bin 0 -> 6643 bytes .../AppIcon.appiconset/Icon-App-57x57@1x.png | Bin 0 -> 3591 bytes .../AppIcon.appiconset/Icon-App-57x57@2x.png | Bin 0 -> 7539 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 8010 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 10991 bytes .../AppIcon.appiconset/Icon-App-72x72@1x.png | Bin 0 -> 4289 bytes .../AppIcon.appiconset/Icon-App-72x72@2x.png | Bin 0 -> 8814 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 4593 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 9107 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 10189 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + ios/Runner/Base.lproj/LaunchScreen.storyboard | 37 + ios/Runner/Base.lproj/Main.storyboard | 26 + ios/Runner/Info.plist | 51 + ios/Runner/Runner-Bridging-Header.h | 1 + ios/RunnerTests/RunnerTests.swift | 12 + lib/app.dart | 291 ++ lib/data/india_cities.dart | 166 + lib/data/india_locations.dart | 221 ++ lib/data/initial_data.dart | 46 + lib/main.dart | 130 + lib/models/activity.dart | 19 + lib/models/app_stats.dart | 31 + lib/models/client.dart | 173 + lib/screens/clients_screen.dart | 1483 +++++++++ lib/screens/dashboard_screen.dart | 709 ++++ lib/screens/login_screen.dart | 266 ++ lib/screens/pricing_screen.dart | 538 ++++ lib/screens/survey_screen.dart | 2843 +++++++++++++++++ lib/screens/surveys_list_screen.dart | 843 +++++ lib/screens/update_screen.dart | 93 + lib/services/auth_service.dart | 85 + lib/services/crm_api_service.dart | 380 +++ lib/services/location_service.dart | 146 + lib/services/qdrant_service.dart | 235 ++ lib/theme/app_theme.dart | 361 +++ lib/utils/snackbar_utils.dart | 83 + linux/.gitignore | 1 + linux/CMakeLists.txt | 128 + linux/flutter/CMakeLists.txt | 88 + linux/flutter/generated_plugin_registrant.cc | 11 + linux/flutter/generated_plugin_registrant.h | 15 + linux/flutter/generated_plugins.cmake | 24 + linux/runner/CMakeLists.txt | 26 + linux/runner/main.cc | 6 + linux/runner/my_application.cc | 148 + linux/runner/my_application.h | 21 + macos/.gitignore | 7 + macos/Flutter/Flutter-Debug.xcconfig | 1 + macos/Flutter/Flutter-Release.xcconfig | 1 + macos/Flutter/GeneratedPluginRegistrant.swift | 14 + macos/Runner.xcodeproj/project.pbxproj | 705 ++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 99 + .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + macos/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 68 + .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 102994 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 5680 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 520 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 14142 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1066 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 36406 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 2218 bytes macos/Runner/Base.lproj/MainMenu.xib | 343 ++ macos/Runner/Configs/AppInfo.xcconfig | 14 + macos/Runner/Configs/Debug.xcconfig | 2 + macos/Runner/Configs/Release.xcconfig | 2 + macos/Runner/Configs/Warnings.xcconfig | 13 + macos/Runner/DebugProfile.entitlements | 12 + macos/Runner/Info.plist | 32 + macos/Runner/MainFlutterWindow.swift | 15 + macos/Runner/Release.entitlements | 8 + macos/RunnerTests/RunnerTests.swift | 12 + pubspec.lock | 642 ++++ pubspec.yaml | 39 + qdrant/README.md | 28 + qdrant/docker-compose.yml | 32 + qdrant/migrate.py | 84 + qdrant/qdrant_to_postgres.py | 126 + test/widget_test.dart | 9 + web/favicon.png | Bin 0 -> 917 bytes web/icons/Icon-192.png | Bin 0 -> 5292 bytes web/icons/Icon-512.png | Bin 0 -> 8252 bytes web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes web/index.html | 38 + web/manifest.json | 35 + windows/.gitignore | 17 + windows/CMakeLists.txt | 108 + windows/flutter/CMakeLists.txt | 109 + .../flutter/generated_plugin_registrant.cc | 14 + windows/flutter/generated_plugin_registrant.h | 15 + windows/flutter/generated_plugins.cmake | 25 + windows/runner/CMakeLists.txt | 40 + windows/runner/Runner.rc | 121 + windows/runner/flutter_window.cpp | 71 + windows/runner/flutter_window.h | 33 + windows/runner/main.cpp | 43 + windows/runner/resource.h | 16 + windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes windows/runner/runner.exe.manifest | 14 + windows/runner/utils.cpp | 65 + windows/runner/utils.h | 19 + windows/runner/win32_window.cpp | 288 ++ windows/runner/win32_window.h | 102 + 183 files changed, 18135 insertions(+) create mode 100644 .gitignore create mode 100644 .metadata create mode 100644 README.md create mode 100644 analysis_options.yaml create mode 100644 android/.gitignore create mode 100644 android/app/build.gradle.kts create mode 100644 android/app/src/debug/AndroidManifest.xml create mode 100644 android/app/src/main/AndroidManifest.xml create mode 100644 android/app/src/main/kotlin/com/doormile/crm/MainActivity.kt create mode 100644 android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/drawable/launch_background.xml create mode 100644 android/app/src/main/res/mipmap-anydpi-v26/launcher_icon.xml create mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-hdpi/launcher_icon.png create mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-mdpi/launcher_icon.png create mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xhdpi/launcher_icon.png create mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png create mode 100644 android/app/src/main/res/values-night/styles.xml create mode 100644 android/app/src/main/res/values/colors.xml create mode 100644 android/app/src/main/res/values/styles.xml create mode 100644 android/app/src/profile/AndroidManifest.xml create mode 100644 android/build.gradle.kts create mode 100644 android/build/reports/problems/problems-report.html create mode 100644 android/gradle.properties create mode 100644 android/gradle/wrapper/gradle-wrapper.properties create mode 100644 android/settings.gradle.kts create mode 100644 api.txt create mode 100644 assets/_icon_preview.png create mode 100644 assets/doormile_d_only.png create mode 100644 assets/doormile_fg.png create mode 100644 assets/doormile_round_fg.png create mode 100644 assets/doormilelogo512512.png create mode 100644 assets/doormilelogo_full.png create mode 100644 assets/doormilelogoround.png create mode 100644 assets/preloader.png create mode 100644 assets/test_merge.png create mode 100644 buildlog.txt create mode 100644 ios/.gitignore create mode 100644 ios/Flutter/AppFrameworkInfo.plist create mode 100644 ios/Flutter/Debug.xcconfig create mode 100644 ios/Flutter/Release.xcconfig create mode 100644 ios/Runner.xcodeproj/project.pbxproj create mode 100644 ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 ios/Runner/AppDelegate.swift create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 ios/Runner/Base.lproj/Main.storyboard create mode 100644 ios/Runner/Info.plist create mode 100644 ios/Runner/Runner-Bridging-Header.h create mode 100644 ios/RunnerTests/RunnerTests.swift create mode 100644 lib/app.dart create mode 100644 lib/data/india_cities.dart create mode 100644 lib/data/india_locations.dart create mode 100644 lib/data/initial_data.dart create mode 100644 lib/main.dart create mode 100644 lib/models/activity.dart create mode 100644 lib/models/app_stats.dart create mode 100644 lib/models/client.dart create mode 100644 lib/screens/clients_screen.dart create mode 100644 lib/screens/dashboard_screen.dart create mode 100644 lib/screens/login_screen.dart create mode 100644 lib/screens/pricing_screen.dart create mode 100644 lib/screens/survey_screen.dart create mode 100644 lib/screens/surveys_list_screen.dart create mode 100644 lib/screens/update_screen.dart create mode 100644 lib/services/auth_service.dart create mode 100644 lib/services/crm_api_service.dart create mode 100644 lib/services/location_service.dart create mode 100644 lib/services/qdrant_service.dart create mode 100644 lib/theme/app_theme.dart create mode 100644 lib/utils/snackbar_utils.dart create mode 100644 linux/.gitignore create mode 100644 linux/CMakeLists.txt create mode 100644 linux/flutter/CMakeLists.txt create mode 100644 linux/flutter/generated_plugin_registrant.cc create mode 100644 linux/flutter/generated_plugin_registrant.h create mode 100644 linux/flutter/generated_plugins.cmake create mode 100644 linux/runner/CMakeLists.txt create mode 100644 linux/runner/main.cc create mode 100644 linux/runner/my_application.cc create mode 100644 linux/runner/my_application.h create mode 100644 macos/.gitignore create mode 100644 macos/Flutter/Flutter-Debug.xcconfig create mode 100644 macos/Flutter/Flutter-Release.xcconfig create mode 100644 macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 macos/Runner.xcodeproj/project.pbxproj create mode 100644 macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 macos/Runner/AppDelegate.swift create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 macos/Runner/Base.lproj/MainMenu.xib create mode 100644 macos/Runner/Configs/AppInfo.xcconfig create mode 100644 macos/Runner/Configs/Debug.xcconfig create mode 100644 macos/Runner/Configs/Release.xcconfig create mode 100644 macos/Runner/Configs/Warnings.xcconfig create mode 100644 macos/Runner/DebugProfile.entitlements create mode 100644 macos/Runner/Info.plist create mode 100644 macos/Runner/MainFlutterWindow.swift create mode 100644 macos/Runner/Release.entitlements create mode 100644 macos/RunnerTests/RunnerTests.swift create mode 100644 pubspec.lock create mode 100644 pubspec.yaml create mode 100644 qdrant/README.md create mode 100644 qdrant/docker-compose.yml create mode 100644 qdrant/migrate.py create mode 100644 qdrant/qdrant_to_postgres.py create mode 100644 test/widget_test.dart create mode 100644 web/favicon.png create mode 100644 web/icons/Icon-192.png create mode 100644 web/icons/Icon-512.png create mode 100644 web/icons/Icon-maskable-192.png create mode 100644 web/icons/Icon-maskable-512.png create mode 100644 web/index.html create mode 100644 web/manifest.json create mode 100644 windows/.gitignore create mode 100644 windows/CMakeLists.txt create mode 100644 windows/flutter/CMakeLists.txt create mode 100644 windows/flutter/generated_plugin_registrant.cc create mode 100644 windows/flutter/generated_plugin_registrant.h create mode 100644 windows/flutter/generated_plugins.cmake create mode 100644 windows/runner/CMakeLists.txt create mode 100644 windows/runner/Runner.rc create mode 100644 windows/runner/flutter_window.cpp create mode 100644 windows/runner/flutter_window.h create mode 100644 windows/runner/main.cpp create mode 100644 windows/runner/resource.h create mode 100644 windows/runner/resources/app_icon.ico create mode 100644 windows/runner/runner.exe.manifest create mode 100644 windows/runner/utils.cpp create mode 100644 windows/runner/utils.h create mode 100644 windows/runner/win32_window.cpp create mode 100644 windows/runner/win32_window.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3820a95 --- /dev/null +++ b/.gitignore @@ -0,0 +1,45 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.build/ +.buildlog/ +.history +.svn/ +.swiftpm/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins-dependencies +.pub-cache/ +.pub/ +/build/ +/coverage/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/.metadata b/.metadata new file mode 100644 index 0000000..f742fe2 --- /dev/null +++ b/.metadata @@ -0,0 +1,45 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: "bd7a4a6b5576630823ca344e3e684c53aa1a0f46" + channel: "stable" + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: bd7a4a6b5576630823ca344e3e684c53aa1a0f46 + base_revision: bd7a4a6b5576630823ca344e3e684c53aa1a0f46 + - platform: android + create_revision: bd7a4a6b5576630823ca344e3e684c53aa1a0f46 + base_revision: bd7a4a6b5576630823ca344e3e684c53aa1a0f46 + - platform: ios + create_revision: bd7a4a6b5576630823ca344e3e684c53aa1a0f46 + base_revision: bd7a4a6b5576630823ca344e3e684c53aa1a0f46 + - platform: linux + create_revision: bd7a4a6b5576630823ca344e3e684c53aa1a0f46 + base_revision: bd7a4a6b5576630823ca344e3e684c53aa1a0f46 + - platform: macos + create_revision: bd7a4a6b5576630823ca344e3e684c53aa1a0f46 + base_revision: bd7a4a6b5576630823ca344e3e684c53aa1a0f46 + - platform: web + create_revision: bd7a4a6b5576630823ca344e3e684c53aa1a0f46 + base_revision: bd7a4a6b5576630823ca344e3e684c53aa1a0f46 + - platform: windows + create_revision: bd7a4a6b5576630823ca344e3e684c53aa1a0f46 + base_revision: bd7a4a6b5576630823ca344e3e684c53aa1a0f46 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/README.md b/README.md new file mode 100644 index 0000000..063cfcb --- /dev/null +++ b/README.md @@ -0,0 +1,22 @@ +# doormile_flutter + +A new Flutter project. + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) + +For help getting started with Flutter development, view the +[online documentation](https://docs.flutter.dev/), which offers tutorials, +samples, guidance on mobile development, and a full API reference. + + +PS E:\Doormile\Doormile-app\crm_flutter> claude + +Resume this session with: +claude --resume 0ea33e07-ef7d-4b60-99ee-23d954cb58ac \ No newline at end of file diff --git a/analysis_options.yaml b/analysis_options.yaml new file mode 100644 index 0000000..0d29021 --- /dev/null +++ b/analysis_options.yaml @@ -0,0 +1,28 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at https://dart.dev/lints. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/android/.gitignore b/android/.gitignore new file mode 100644 index 0000000..be3943c --- /dev/null +++ b/android/.gitignore @@ -0,0 +1,14 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java +.cxx/ + +# Remember to never publicly share your keystore. +# See https://flutter.dev/to/reference-keystore +key.properties +**/*.keystore +**/*.jks diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts new file mode 100644 index 0000000..79e842a --- /dev/null +++ b/android/app/build.gradle.kts @@ -0,0 +1,75 @@ +import java.util.Properties +import java.io.FileInputStream + +val keystoreProperties = Properties() +val keystorePropertiesFile = File(rootDir, "key.properties") + +if (keystorePropertiesFile.exists()) { + keystoreProperties.load(FileInputStream(keystorePropertiesFile)) +} + +plugins { + id("com.android.application") + id("kotlin-android") + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.doormile.crm" + + compileSdk = flutter.compileSdkVersion + ndkVersion = "28.2.13676358" + + signingConfigs { + create("release") { + keyAlias = keystoreProperties.getProperty("keyAlias") + keyPassword = keystoreProperties.getProperty("keyPassword") + storeFile = file(keystoreProperties.getProperty("storeFile")) + storePassword = keystoreProperties.getProperty("storePassword") + } + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_17.toString() + } + + defaultConfig { + applicationId = "com.doormile.crm" + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + signingConfig = signingConfigs.getByName("release") + + isMinifyEnabled = true + isShrinkResources = true + ndk { + debugSymbolLevel = "SYMBOL_TABLE" + } + } + } + + packaging { + jniLibs { + excludes += setOf("**/libjsc.so") + useLegacyPackaging = true + } + + resources { + excludes += setOf("META-INF/*") + } + } +} + +flutter { + source = "../.." +} \ No newline at end of file diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..399f698 --- /dev/null +++ b/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..fc30b8a --- /dev/null +++ b/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android/app/src/main/kotlin/com/doormile/crm/MainActivity.kt b/android/app/src/main/kotlin/com/doormile/crm/MainActivity.kt new file mode 100644 index 0000000..d6de25b --- /dev/null +++ b/android/app/src/main/kotlin/com/doormile/crm/MainActivity.kt @@ -0,0 +1,5 @@ +package com.doormile.crm + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity : FlutterActivity() diff --git a/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png b/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..c2ed52077c4788aea99695d388fe50b535c5728d GIT binary patch literal 8669 zcmd6tF(}sP(g4AhZGpPyK8{U z@7?_m?tSr`XRZBWpL6zE>+JLW>>Z`9ra**GgO7%WMx>-DtNHZL|L?=aej58vDQMBq zK!r-O(jUAs53=z5$mK2vjW5m@+DKd??&4)|nYKf4qw$eAA=@rqRg58Qtz6IgcR5nF zS0Qh)Fl7PKA7n|fjHJmo$gi1G-VUj%@umHdFnS!@v*@Rj`2EM?+Yam@fKCgsh|pfV zFEFOB`BcXU0zI2mr+f=}_7e0i5=$xadH&ny`7pM47#j%xKhv}SGgI79@X#uiASl>0 zv4C1oPL-+(JC%*d)C?ERJl8Odv=yIhqx_wS?}=|zC<|)_yrC@uYVIxl7HEwAe(6f zhz%zhMX)mu5^BKWqAe_$oQ*coRnJ`H

2P3{(hStn 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 k?*B4`>y=NdN!< literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png b/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..5e96803693b65736f74474043ffc9f02a9ddceef GIT binary patch literal 4906 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 NuBM?zjhapPe*mP>8yNrq literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-v21/launch_background.xml b/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000..d52e483 --- /dev/null +++ b/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png b/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..5857463f0c245390559b39897b504bfb23d5cf65 GIT binary patch literal 10871 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png b/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..d7a782d421209114d8bbc32cfd2d790990260872 GIT binary patch literal 26099 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable/launch_background.xml b/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..4f1ae62 --- /dev/null +++ b/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/android/app/src/main/res/mipmap-anydpi-v26/launcher_icon.xml b/android/app/src/main/res/mipmap-anydpi-v26/launcher_icon.xml new file mode 100644 index 0000000..5f349f7 --- /dev/null +++ b/android/app/src/main/res/mipmap-anydpi-v26/launcher_icon.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-hdpi/launcher_icon.png b/android/app/src/main/res/mipmap-hdpi/launcher_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..299cab7d5f2afcae25eb796ab09cc84722303fe6 GIT binary patch literal 4771 zcmV;U5?t+xP)n6p*K-P!Z&fh))!GD69{}^(TTNkAghb6+u||0gA3K5P$dr zWI+KzKv5KS1w>YVyT}T(w3auer44PVPK@bdf<9VL-0AE+f`7KqP zzpO0a{q;Js^2-O|5e)KTfFut>b z8B7p_B3Wb81exATseJ%H6E&t4rGEC{9@h5pF0Xx~i|6W-HBS&pRgeZqW~@4`U?gpv zr6UzBk~wxH5I`t8Q_LXzjMHSi@`cCt_C`^O7k&JQrdUwtL zZt+-Gd4X^I!bZ?!1@%#C2hPy6Se2$^R73}vpze)JvnxY^E2xWoB zymTmSn98yRmS68?Z7W}QRn207_r^VWq6%t7DqAnswcOm6qWeVaW9Z)tatg*n+MR=d zP>_jC6BW2DaqL!8#({PJk5K;JI;h>VKT=oX9@;Q9k5b>d&{^?lX@D(>cdob<)K94$ zJXf2wNk=Nok=hLddch5IXMmwkk9dcU8w5#0+U)~`kNxm5IJ@*Muz`h6RX(=Y>-ajJIpR{#Fxv3&OihdRBte929Eubjv|l_2GRKZWKPH}GlLCE@Zjis_ zBe?YCZYZ5OAN;j-l6IOP4KHc4wx<)+ge|OfU998Ate_z({X@}|lY09A=)8Q1@akV{ zn14PnY52x#;C6lgPh zvhccJFQ7BckhlI_sQ7RLoSOFv@P5Cjl^`c+Oz&_!u%EHk)s2nSsDg0MiKHAtrGnh| zUjx(dA&EXmvjUfS%cma)rcEm-dU6`@tk{SNN?K*%d>8inoVyzur$GgwwZaWqt{jqK zAaDIjVRO9Rk$%r$xM|y3C>-;w;Cu#w&ooz;^;xC8tpBe8Pf@h%qbf)Rgc41;+*;wA zleb|dqz%6Ql@kP7)cmav-GQTkJgNjC5^O1r=z_OTzpd zf)JL~?@2j9q}<#MazA(-3Ll#Uz+Z90O{B7Ofu_Z>C9aE8B3&0zLAOwv0mEqHOu4+x z^HZgPD(I;RW)E7Fv zu?W;Rv`%Qej?3mj-Tr@q*HRsl8A+=3<4pR@ciop3iTg?vgz=omne@5x0oyNm@w#vV zgQ)xdC;0h}(ZZgRe%GM5ucr)pXt($UD0ybKL_U%+&e-IseW!*G)Q0+sJB(4MO*N1T zNjwM7R(O24-Vm@mplIx5$bJ8>p;LYkXBNK++O9W3+MTxom7_?S9<`igqXf}kv}k{UW>C;EI<#rc;alq8BFQkH6-_(FNgDQ zz6T^tL)tyJ3Cc*jYY-?j>QEniruIwcz@dS|0k|tx?Ov6B(rS10QWwv$AXd;_w0^Wa zOlla=yUC|=RhAiY3MMpZj6l5`>Wfc6?ccwbID5kQW)sxx-Y+Q2@t;D$NZ1b@5!yJG zh3YSNgY!rc82a{A?`n^fYKS@rfpngFq+m+#9Qe7!XDz5$uHuC|mI%oLjac%KWL&ZR=`KnKL4`V_ZqB zAjBvpwcvBMZZ#iN5T<5wDQ2*^6Gj5l64(Hn6(lJvCxRrPa{ZRbU1%Ci58ekg-|hv! z%>lU|z6qLkZK4i|OH-GhE13QuS}IiCyHHGCk>67!C@UudKhF+cnp-OM!^>|jTi!{gZef)zWJdM5(R;v6Ws{0f`-a3 z!Wisdj5!<^}0ysckM^Pm-! zd)NJy+Myr0t6!$jKIJPllC^}{heQJG$%4;ngVPKD`r9(%qi2~-4-OTA`WHXm9O~yd zd{pqbQwR5tc|N9P7U=T3fb;0_kgT18?yVz8hU%!GJ2A3!Fs5d%1u(@^xnV1uS@IV6 zs(Xk3v~7(OIW|gpiDD@(v&Ww zyMxFgmF+0x=ZHJ1vNM5HHajZ@{0=7+Pnaoq$70|EGdbCCV%A?mdkfz9O*_^B)4EmI zIQXV$Z|n$lKm314hDVKf6$F=;uUJ7QQrU`1m4#GQrpO*=GU2POgQI_VN(f)bfqT*U zH&$H{5CFOFy$0&G(K!+Lc8TE?J!CwPKf8fcm?$+t8pJ}%kdn~gvBGb6!qJB&L{v^B zw0!!Hka}CgCL0|?F>skB0{OEuK%`Iv2(-5lf)teI03IF-AD;})UkW91Wk$O27Rcqe zDc|r?SmZYh@_XjIiLqYrm?8#25Hxj}I@s($%kt~AxnMi^FWFrYkoWO&!P%25sKb&M z!%pDQ#ug)q(HVl`foH{U5yvLP5@{3_AFKzO${ za7meW=tw34`LiRLl=AR=othv*@l=e|B^%D;rGhz^1Fcfq7pKFK;eQM}QXsV@R$s;^ ziY+53qduYg^xLJeCKh-*W##;rkWCsCdS#O}6-cc+F>?X%-tafG{gM~J_TwRmiw~EX zA{qDH8S@BEYTH!M+35I1WtBt)p;8KOUM#3syD=;Tn||LNanFgU-6K5{@;vV=_PY;JSQt|1 zcOU4f)P`cLu4Bal)i%*=DsJ%6$lo|-O3!@ol$A$RAo?(|n0H@|ReEN_I9A`DpiW?e zW-Bj&L*}HO4zP#pJm(UQ?f>?%DhGPF z=vjkcfudI~m4C1v>Q9~xeaAP-ed2W3nJWmixJXn;1m*AlEljqPtqW~#Aq9QowSPKJ zo$)f}rh_u1_uDaz(j!0S37Ix6q5kBV$Zg`F7Z*9tgfi$Ln`CBn(b`en&9`4f}A{8zmv7S{fIhkvG{_sOWqa;kg-zBZIv$1RT-BCE~~*o!xLy9sMZmFW=9! zd7U9=`qN;>tZIVX0kniCW-knrZ)2@*UgUgLVp&-FVw1%%Lj%@Yh1v(C z_c!Lmk!lTOJ@IhFHZj*o-|Ob6{SXALg7!mh7eXPVnh`P%#{Rv8rPowK*Qxoh0$YAj zB6D(q%JuHrSLJ=f6oh4r@77zU&(~&ug+-x3ITnUs?E}*L8v>naifPl-=5|bYb8QML zH*SZ@zkMbZ^1#1cZ+RA1ki37y1lV_8$F6=#`@473dI`Du)V!C4UlRGozeia2{Zq)` z%CXPuShL4#-x2AWs2RdHT$MAsP|QFqMhnV#e*lg@ISul+t-UG*bIF9O)4e+P!pzT&1(pNkX=P41{Q{3?E}*LuSej9jC+oJSs~WCYo7boYmXk*yo{Jw z3RvTbWsJ{i%yIWZ)ECR1+i8pi91249^`;1gk*8X0MhUye2UA5?g@T3K(Iw99MXp3nncMw7XAKl)sI zpRk?Ddz49=IhskGNy`XXA@Em}6=ahlwGIgkDswtedi|BZ$MIhIdmK+$MOenOA^3UT z^(9;P_F8w%E6MmDp`?%zv5fJ3clDwz9_xxR>h$M^s`Qh@k;!O41^5!A%gKR}z&)(( zgN+{R@{61=+=L~Fq_Q<@`G9q0y=B4b`b$fP(#El)7-Inzh9q+iIWWM!ldXGi2V1w= zA&LYh3(Z1jbpy|CWv#36lc!+v`l@szupXp?g6@qB_NI)D8P78T@1a9J*KSPB6#Csq zn)5I5nw{@k6z~)kxjjW#7=pDANbg4mduxR%wi*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@UIR*o^Wy_W&OS1Gk=UML~*^=cA&Wy(Yy}!J3 zpWnal-gCc9-GJVr#*(WsP8=%f$M=(TBhn>JW)DG1k%{7n1ZpCs!J+soZ~MJgo8No! zvcK_kvCnnvcEES5t7FTZz0oX4$y0Sb=1$R>@-rn}E`e#(L4*XeASakbc|f+tIPodg zt0*?VxA>^1ZvPRFW1n5|S3ML1(nXDBuED%+vevXfBM64h4B8Aq$dq(r7aCK>&NC!$ z{K8xJ!H4eZ&38KZUum}iIuf*V4d&Ie^+|;qK`^#FZyYv=dVYT##b*yELslkfQb;nVsk$D^CutKF9Bi!F{Gq#gi4 z(hXl9pT0js(&dC1)hC_O=gy|oS<}go*{98C7zg%e26DJ<<#g{ahp1xT0rHerus*FI z8s`|yuRW%XpS96hk$=taxzuF?rf5x1zZ{pgS1X9|Dsf9X^;^4=QfJQ~QSRJp1cNhw zwUqjp-$7uljSNy{N+m zfcz3;@(#RgXls&_XxQ#;lsMs$ZXw>4yJ0E^RMg zHXxsK=p)jlr95!*9GEDKd2agi%m{G7dua1}O0TwfvBM0|lAwXN(FI>vEE~-H!z9mv zF)?=Wle5`!f)iOE-+TWehjqM%6mLWW<{8XuGP$c1MYiT6EgNr@ovyFl*kMwFEV1XA zpM0E5V{>9&k88o<{LBLOVrNL&9PCBA+*Rt}ssX)3jU`W?SjgLbmd%g)!UkM!s{Hgw zhYjE;+xi|QPJE1pY=50}z0=yf798OD%8UNU+So`BdmMWzf;+Zqz&wMw5E}_`Kfh*W zrwO(PHOKx%#Z&TV^r4T)Fd&ol)&BbwX_68tZrGr(YvHyrVb~`S1t65!(r{B$?!@&Mz zSu}?%3!h`xfeSXyD=XKrHsY||uF4J7ioc2(FiqEEE)UEQ9;D_?ZxaC?Ce z0?Wa1>I`YjNid7fPRpl;(yOF2`Pns?Y14N`huxPpdj{L+5OxG(r@0?D+P5(S5EAnX z5!-Y&JZKLTkB0<}hP)N`sNuq8wcj`-i+as@n#$gJp9XLJ4JC{o8Frr_%Z!_K({|#V znE^;fg7G{90<#B!y5bVDz4be?AN?mLT?N*^zF%K5Pn}4Xf_&Cao;oSwGr)}-kRfSv zEuzLEBa`CE2twjmQDsNb`0Z`Fx#3N!{M$dmPlzIAyttUE4u8&GXwU6C%z$X*DHs5P zBSLY31YwNEI8h!d>D3rFG~Deflt6%P?fw(}@3n2r?e?7T2>G2(sy}mqBvS&7*z*o0 zKK>{?UfVdYFoJA$8#A2qyN$ouRyRQkeds`>Ib zYh!I=hCyCqPNY$P-9zyshq7}?lP8e<=vVBx{!9t!+V~GJj@kD)BL9|qOWJ5{(ARKCnwA&j^iD=a1YsY%!mYY>xxtfeiJ4cOVVy z3hK{Yr1P_WPEGb&wXgR03H5mJ+po6rF8aO}_1Ie(JFgGr$dnIR5aM_T&tW?Q*R`8r zw_Pyz+jgN_2`UtP7H8m(n&-@r}l zsBFh>wVjqXgYfwWB&jG0xXX~Z%lw{V2(9Rc+y})h7L_CS9JYYB7~EOl4~ZKpF^-{CW~^Go;_tRC z2sa=hr#U3>)zpUdH(I}?dMp!vfC4@r%K>if`j~|r9R1h76f*-1G&M199N;d<)y1xv>6HJA5U)6&2m6L zRPK`P%f<|WfY$&uTX7*RqX~X&hjUJMW zt<-piq)8KK*zezhaMdPxzst?UUk=m~ctJ#6C;Qyhn8X{kg!+rh2#O0(g`o~ZC4N})It6F`zP!%%tN=JgDmg`T_R!%`8Ch&h*?}Dz4}wbk zAPXEESo6HVLCxX1^1i!jRkTu5)ZL0#M0kmbEvK0UO!S3r+Fd0k4(2Mi6fx()*F0t( z3a2c=b=@YE*roePKpnekwYHGo_P^I zH2|SVq}ugtMR6mPK{QbDpguL=z%Gd5!Y)_khH1f%Ju*aHt{`+w+JJXK7>}qD!DRKr z`q+a5!4%|e{6apr83(BnY9AAwnC7Gqln*4}$iI=oA`9%U&u#t>?0MO--z1&B00000 LNkvXXu0mjfV~JhA literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..09d4391482be68e9e4a07fab769b5de337d16eb1 GIT binary patch literal 721 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD3?#3*wSy!iOI#yLg7ec#$`gxH85~pclTsBt za}(23gHjVyDhp4h+5i=O3-AeX1=1l$e`s#|#^}+&7(N@w0CIr{$Oe+Uk^K-ZP~83C zcc@hG6rikF&NPT(23>y!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png b/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6c3e7dccec5e504076d5b578191bb1d14824e6a8 GIT binary patch literal 6023 zcmV;27kKE2P)3 z33L=yy8f%WdP#RD>5z>ikOYCSL`Tq3QFIu2Dk{pbIU){>K~PZ?WprSK86PNaD5!vl zh=>cz8x+(x3W_@TL`O$(oye*okc4bx?WEVLcfM;H>F!(I)t&Av`km9~Bz^+T%EBnS7+$oQ`G0Di&C~#5Yv-IolQ{4LV}=YofUE`f?{uw zz4gtCTwN`D%FDd2k}}zSpw#Ou-tTdKS)+IwI{Th@kUIMUe8?8{Y3J%Kmz}LQj~px| zT$n0I{YfBE^#H-|Z-YRB!6r&6HljYgbOsu#H~-YGkX);H4ib*V9F(g;K1ggl*b7!m2>aw37mR6!bWks%SE8;KP8h}ZSWE?3j5 z+ntS@%4K&&T+XWj9j*Wa3F5_u#L;7nwp#{E36}{%XFLRgn5Q!ipPFDCJ|!Xb(PFn_ z$5vRqnpf4E7JJMv08?B*?kXqsqDDH>z4{V7$H`gYWL!$BZHD%2;8#%HGNIkeSL zw{)ws{&~A1J3He1aaVwz1ZlFV$MlJ&l)om5y6kwLuRTZ=rGC@R=}%v4>T&O8$BD(8 z9d*ySN%6$hr`GR}kbU1Fa+Dk;Qj~~Jn<(mfO*f~n8e_E0ezvvx zuAQ!??NMF72E;`Hc)8B8^n7Zl-aIj)0|kK+hn!9+7Z0c83(ldWvwlTVa$>u##naG4 zjeEbQhL8VEbsy}erZ2zMtdIV~En6P3SIjytdn(&?F&xBP0b`A}Ni)sq zD~*EKL+dd~=MJTeiC0tFRhN=6Gd-r)0|oZDcsTp?nSUoaE32vIf8V95EpJleXJ2R< z0}s-=s%fszE#Jl~SF@;rm}1}*(Dh4h>}p0cK0N0x$)dnZG| zIX6ybpOyoMsr>nkbbRA$Yzhm71VK!_(~`OIT)kz~!}f~X8WlP80U8k#1@zMy`#xaJ z+1gX5KOT9<$Jg66VuhrQ0j?Y)L}D`2?Z`kMvTtk>{_gz6{gCCZuc2g?1^Ow!wu+k4uW z0@ssw_pOwD<76sbx|+(?yhMsyeesi})1R>-DfiO{nk&Zdb~k_6o^!WL0b`A}iMN|G zUeXDIDOA7Y;pbApWB0Kqt}8>IVxzwI&!wy>*U*8x@1us@|5ojb2X2uyd&lyYswvx? z^;@DnXVeOqXtWj0GH0wIK~OaxhzSYQchNnRRdgK*f}qx|%fVc58lAaqJ(aK9MBm@{ zD9No3Za+MDcbYRcNklWYIP2F%bFQcqz=Utfcn({7wLX@?1vGf=6YOTXBLq=oFY1(w zhEeg2capvMfJ#R}_oFO`qESM`3c$3(p8OEPPak(B4R~rX>C6d{4&UW~2WaSy&9wiH z`Bc62EtOt^2$^_@nzuRY{~pQs5h(yKT+I2Qrk%WdZlk=pv%1xk6ApNg2CaFV%>DA| z$dae|odiL5yE)^g!)4D{}qyTKP?ziS_Rb6Td0u?;@0A*c2LCbL68hF42gMkjrUcglX zWVG0tv-PINl3`jlYnl}B7faU4tPqM{%oh6P{2LADr@M-l9k+cm}JHpZ9Br*jzTJ+rzmCKY))UH){fOq z-rU=@U-i!nSZuT$`ayMd1f%30w|&>q5H8P<3YcrjTA?=YW1WwsW+bZ}cWoUt{A-Wq z{_TP&kYu%zDKCeNy>sHSD#MtNLCgL_+2Ze<_ah38SfM;4G}VE>qn4_UzE!j`8Tz$>`R z)x4AE-sCFaT2sn&c!PLt$-~c~?4n8Szv@mx{YRhDo{Ps*-$iqobv9Ojy{l^5c52xD zSx_5Xvha(qcho);*cPM!iy#`WHT9U!I|)q61&=Lcc9QN4#pR|$^B$mevHH~DFFys0FeHvfYz%MUUbo)B92W5aZkA%bN>mhb zpQtC#iTbcz56^#ylF$D&SqAhYMN!Ckw4ChU9Uy(Gjoh^-SfAFzC3N)3HSCjr?`+EZ z(@gGI@UFq-dgRgI?GpmhMj8@F?{GD~>HE%40ppA|?jx?Vnkjqw^;&K_Dx9Veeg-+T6q zkmu}m^He&v@_F*wgH1sQ$>b^^ThwO_)+dbO4cPO#@mHf>UsSHHg+Ho4~w`d-|qP2 zNS7OvCkZOc((Gy7-`1nZ3KO8T=PNq$*wbt!6cRd-Qhqy}n)ZA}p87@>jd#YzXEaB0 zWED-~DgeRAhzNhawU+I(P6~X4!OAsfB510sJJUnKS$>?Yb}C-p!Zu{#V9M{!cFdWR z#*#5BlfD==iAB>5UiTCWkJJjpIze{4;4g&Z`zat>)Tig^jOX(PLd05kgni#ZDqZ$0 zRd0KX6puG-e>`NF*Nr2^T)kx^ZvX_!#yVCrUO>!e$%9YO z@eNyvWNkSXX=6q)t8Uq<7g!Ll4^>;=rao;7h*tR276u6!Hhu9;P}^C0^T?A5Ku#8K z07NNwb;xcHl|8eby;!xbW)PR!f60B6_PfjJU#E}o6FyM8;{)n*@9dadA7sc=Kw+EA zC1fL}iW1i}h!F9v41}G-Hydb+*I6wr_O#-K%_lcfK43>%`0~n=0l^vLM^pLQSN!_e z|FfT5)wN_u4;gK#2~37dgKTirLy-EX3sSN)Kr#(coBt7?-xVRd+-#>=`qUaCum5yo zIb#qFc;bHg{=b(52_GSng)c7m+tZ}~Zd8y0FlRS@wwKaIxBvaeWC*iG;QL4*u|P5n zk#cp0!Mp>p9BXfKL_E;?Ln(bXea?@G76C}T@)DKMf{bB;Aug1OK#6$s*A+mf}rcMCzbcRAHN7QrQGM0f{lTfFkX8ZfJZ{}RCp(|_Z zHI#GH6#9C65xFY;Q-ER39JFRBiTdDuCU&(+=L})lGp9l|6fp`Q#fql@B%n(HOX4M9dU^T7U8xc(^;4Tg~C zF!vAkaX8B=nBrsM%r~jX60(=Ty})ZUWTdtG#O;Oba8mK~IaK@hd#Zgf-SAAm$izAQ zr4=M4TEm{l)H_%}2ua6#LCf*sU{KjhLG}`eFL;gdvi)lXg#Yc7+o|o=6USNzfe)%)5xWtbL0=?dX!Mlz!D^RJ-#-a#z&^wc~xzcky2$ zI;ZNr%HfT8?HOMXD8$mBlK@ZB@t4$d9Qr@}SF#iq(DBW$bK4QC8tD#JQMDb#KgU5r zqCb%kv`j$ye@CP4pC8lr3m;c)PrdTLDC75I=*uf76M2K5PD55^RL&!{95B%sdiA6g zs(}H%oTHsc3++&9v z3#cW5gXK#C%@>%a0vkPb9mnv6z199Z76fggPQ_`9=CY~fhXkq-ZUIg@p+C4`C7iX~mfZtB4mOW*?bcP_iv*TEKOimsS5G*X0YC!Y? zrXK7_kF8YC0!<%#dDPbc^K&3zK#LWeDzdDSJ>}AI+0A{VVrdIe1D-PYYePB9@lu6h zuyM~pi&x{Sg))XrQI(mEni!b>il$3=yTT2zcb6Gqx2YkIy8(xICh~>z$Wv+U4P@YWlp$?q!^hXAUpp2 zugKu9CZ7VzWp_=f*ZD8d`3CmIE;W`4Nc{DgVc81t0)+4ZM`>BuF+CasvV48Nz5Z7I zPG1zM*UUd^9xEImJ06b6u1|dA;V1XnAhHIRa$si&%YNW+%$N<4g;KG8bI3l)=L|jh zxAS;-lL*f*zyl(sznwCRnpLKSjB!`QED{`yjA{=WWbOO=qypY`Hg1|?N_&(?rd_da z6ZLzDn>ZO4ScjZ`@^6odA?sAMs;skp@U}XbQ@`Y)Cz+d(2hn7rJ`1?%aZv$um^>(o z;sIm3@Bfp+M#e_5r}dpeeZrN22jSxL=ibgTKiUlqp%P?s_R06Uhmt&GRtTNI7roe z0HDb~^?yGFyzgrI$4zqjVIIBwv1is(&dpQWl`Ce-?ZvVULjk4_zg36^ub|_HQkFay zjRK6lvS{$yWf3K1hXQ_eygXr`R`wi1je=9Z^HTuwSKn~dKVD=`3nE5CIAH1HtElh& z^P;{uK_`Yaa|ecqgbS+rY3#@ahmVOldU{Spl|PHOgZYgy2=>;QHJ)I8Hn_#$=n#HPG$; zj4IY`WH%8hw5(`^05>2a9W;+`Z($*cyy$7{u2ZiV$uityY3ug^EW2t{$5meUK2+o2 zwQ&^yUYk`dRd=Cy0k8e=-rDft!6ot4@^RFpVVCn(Iu^Lc?L#-5ws@E9|PpBNhW6c6H6zF`xC>zPo7$iwU z-gr@Se`1cC9uXhY`_|YkDZ>GK56D8zwEl&=WlN|MC?VbcOYO(+crH1AB(E9A zMb^pBi6u7@AdC_+P)p`$QRLc(?G+(6Paze6-SMiH>f2B`g4YhVKy$x7lt1s6$((rP zk>w%yq=}wwsh(9CrtVDGz!&gdp0BrzQY%dY-b_Pg+Aoefw0zx0bslLV`qveH`QM|12Q*uWPzSBzh1&E6sL7}VS1`r+sRo9@r; z#f%s3kw;djQWXOpMR6={u9y%>ai55SAHj>iqNQreY;)!&EVFriFfXOrm?L>zsJf;Bo4W}s|`z{{|2TOEPUw>y_G@d2BxkR?o5h!4pt zTB>G5Q_Lr-@ZVRRbu3C2WjoY<3Ao@rBgZqAT@bx?H?C1kIWW0k*UzIQ{;3~(@@M#D z5-FmNzs3o@q%_SkXS~FHC$wdr9QyMjs($@#DtLThOaory3HWnibmXz%o(jzQD>|!; z6}3%A)v~90zBTJr?&_!wFj9Sf(HKVj3hvR)PJvYeT#4{`!0aBXkQ=qFb{2PbAvgN* z#k}kG#?tdp$}m)w4cySNr`Iw6GB`*7~!ag%N1Tfo+UL9Sm$?{QijyFM7_DO zWY|1Q*2)XQ6!V0)sN|ui=;-q27#$|!|2vBm5aBizDCW80HO)D3pSqe~Slrc$c~aYE z?cV0HB9!g8$(+6-)RaVRiEH?&;}g$vwt}(OEig8;6BvKo_%mkb-R-0 zKJ0WgZr|l<+Ig+1$MkDWDf886@l~NHEaU{Ajzp8}Er(wmu30rtR;&0ok0@mXCCB6Csui93^dU&~`PQ0c_<+9}6v|-n1(9qUmuYMiqL5sxcn%;H3)w(O zNI_0SOvY{}x(r{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png b/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e67ce0fa93d30433ad72a8a4fad67d867171bda7 GIT binary patch literal 9951 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png b/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c4261d23d114e33f7f9b12ac8635ccdd2c3437c9 GIT binary patch literal 13005 zcmW+-WmucN8ZPe6(BbYfT#F5d;_mLwaQDG*x55|>!(E5FyAIdkZl~Y*@%H_bt4W_U z$!&=SDM_Ot6Cnct05n+{Nmaf2b3F8EV`m6$KvN@?)MX_!ezd`CN4Qexyf`7qSOwMu31G z#K4L+72HoaY#RO63^urM(-ek`7)x?RCb&U(1k(U11}GppAZhi06yOYi;QOfA=?yjfpp;4?x#r*m)hdtG0zd;ZM-7;}JL-GZ@pkd(F7C{&*j4c0{e z46JyTmN$Px!}i7ilgG@Vm3|G3i2%bQrvTLH4GWW}6R4lImcFQ0+bxHf#GnXI;z*Gm zUVTo#)2<$SUn6Wjx2_$s_;fF7Zv=}5hJ&AGl)$bcN&_-EDHkqCxTiF*fyi$jT7n7- zQC0Z^B520AxJAu+Y)sds>kSq}58Lb!>I@diT=f^l12MQ0kcfJ?w{ZfZ6aMa?gFUliZOqeahBn=1}-7>>Q$(3C7E!B_A*Qqb~c^*5~MYm?NlDf}+KI*nM_9`qA zIOm8)t}9+4J#x3JhD(7#NPV3MY>eE3`=wBnYIgZWmhdW|V5s(6cGXUDsM1ZfY5dsE z#mrNv=jAV6^AvqvdMPYUmgq%=Li%YJ>sg+HARd|hpH_B-U#CKT4BD4?=%sa@gl?ek z2EGb&8O^eyLi%E&qyIxnT!olfmMY_P`QQbOhD`5Yr|`xXVCgMj=~S=Lk-cB~+#uZX zX|(|g6`VT55HqdA;QEFdQ~2jqIBzjXiBeHcO*$ZzcLV8pn<2B3orHew)dd{zJ#uxAmC@!<%tVm&dog)AaWg0tIx{Bmlc8rWBuh#))or6v2O^S*RQ)Y~2&* z$cY5;IU7Ex$%!q2eoy3>7)@@DD(`I`Ve9jO8C~zA9Xi3s4YB(Bt&y`K!`(;*c+hU% zt*Ll74>vsER8D?oUB9_=*edrsuz~}CMpH1Gf)%d}iuheje;F;0lg>~O>J)tG`!A^G zZ>ZP?6=^3`*HP9N>!4?1Cu7mey`N`O%q6Y`JM9vnt_$f!a)R~;E&4~`Gl-1Ww!YEb zvAD{?%AFXmGT)>(f^BazcL27#PA*>DZ6;)KT z#$J2N!L2Ucqg?BaXOxdKv*e~PuZ-T`A}3_7ZFDoWWeg&T72YlJtF&CuRiAQ(+IFf4 zj`e;g*~#wva6_8XmOazjNve`0r7;@0oOngLo#1bIaH`Gb35+mzgfwl)-&$F4?D<)h zBQ!i$M5*jUJ=t2gJm@k09CUkyzfI4I)yd{ZTvSHYOg%FHlao2T9-13fkQ~jpMq$n> zc(6v1De?Y(@U4;eHaLUOX4*s_S;qW*%HaxOlr^_tErfsiuJssHXUD7W$A&Y$G9-0D zr&Fx72976AF=5DY9=749@Iin^;)Cg-QO;uAp#sy-EKyKE=B4_^N_=@*Z=lPgLW(lo z$e$@CFc1-Wa}$s%`kr6vZ>;o()8O#KQZrq+Yen5NsLcJ&VCvH#@3UrSGVKB(QnlhWxoe6ow|z z*&3^e$79BSShgGD1lgd6mR{U=X=nJTk@Ta%6a& zqbS)gr4QW?-a<7_(HEsRFng3^{t)r;^yzqFJW6_rc4;SH3c^SUTf!Hc-*a)coupJr zlX~3ND~@{-=~MOk-L1;;W(t68j>GPXx9DIX%dH_nbx>X|t6MR&)Qi8=(!mVc5em#h z06PBWGk~?@PJ~^l1pM+B#yObwSr6IRFRiadx*^!L|L_Z~R5e*@b=+n&GMxCuuYZ|< z&iAIIH`S0wboboBPQLHL+@e=|Hz0oj?}2r38ie?ArZlLn1vkSbyG8L2aicpaOd@h=_uiQA^4?& z4S0t7TS^k)3fjvnEuoeGw>EeCY<8goW77HG_U9~HA<>5AUC!?!ASXfqd=tx(=exR$ z7YuFAgZ2%Pq%tYpzwMC6*yYUlP-e=Ujn6m2Y(4y8E~Zl%$b()~L6c1IK`Oc8&};PJ zpPwBA5GcQ{GyLlbdHn1bG(!1j`!Qvu!!6l`^_N}Ym$VGFZu0v_N!}oa(I^DSs=Ik= z8XDQU*uAqS*Gy=F5*fY}6uv)F*!&u#E2)-()g6;-%1{o4nr7ouQclHt?Le0E>VW^M z1V;oF9`>Q=iKe!wHGkAv!`A@Kw1)&E(+ii;oSY}N?t3o?x=+>W@h-2?YmZY`Cr^tBZ^-b? zgbE1&2UoNs^Bw-F8I7NA?;FT2+db2?dRAzdyc?B^Qf(l^Y#&(0K;(fe-#-up;1}=Y zE3_y6O()?VF7JGqO@GHsc2fUT=}N-jrP`seX0xkq77!DDb*ZF+V-6@AjbbQ;9xP#jZ@Tkw(qOl0CJ8NI zA=tWG8%FSgn=VkdEa%+0x?4<&fBX^L3-tBK#@9;Ycm>0v}53!upwz z18LpTb!bx3V)=wQ@@h;d&tu$+7$BE&WAJP&)XgTICEvY@@XP4p!AGzxu&f(*@)7fd#eq}endAsK_dp8&Hzu|zOlS4*t9T!=<2tU2uj3u=z)BrSubrp%O9@1w z0VQPj%F3g@$*fV7{?4y4#mX-h(*>ks5QN5)p-Q2Xaif~%WzCk)U$PH0o|G7YpVe7i z^eXXE_SrX$O@t)r?EB#pieqx3HN<4r{>nOCU~FP`x`Pr%`*_+8J2fp#?=n-G{1_9Fv~sHebHr`tB}8>3i= zzM~f#8Q+trl1%ZO7>)Tc`WiGtCd|Rsi0S4uLvnSrA?K8P;*Dcg zJp^EC)Jp8P@k>&blW0sej_I&ulD`kAxWl;)Dh2;z6Go_YD}MInQw)K&D&=x9pAS8A z{Q+C~NjONeGjq4jaL-lP3PwglYA2E9ig^$e33k>1^s+nOr}BcI$8~t z%IUnXp`|2nDU1-P=?*zUh|*8_2>~K+$riRdK_u!nKlFg_vxqzXF(Pktd`uPKDQPFH z?%a(9&4h9dLt;G=dRP5ArtjLR0uY#r4%T3T5C=CFgRv37qsUu3i#Jc{?B^bE`cc2y zjSdw#k}SjXkSG1CIkBD>Mum;fDG28feRMrPAY%GL94Z$AoCETXcgFEvtdF5ly=4xt zPGX6-j=E#%9Ps*wQr_)&_gJ;jqnXm39Ye$axXq>4BF`LEsnB?aq6ZR<5QQ!0iBw(% zVf`$!ohQf>4btpN+pXi)YiXB)$pEAFaiiAWkn-yG0-G11s_Pe`H^4XZ(tHNLA)vHK zfTcx|TaIS&%c1r!>sR`Ak6_3*_I44v!#H6IA=C)BIR)ll!s-Zu)&B$i{MCh)Mr0F2 zz!b@1*~HU)$`e9>_yqy3f`h%q9*ZGTTTy_$cTrkTT>X17ls)&eU2SeV0Pe!CKVUC{ z{)pWYS8`JnTilUkc#Yss1e)b(hX#p&!aS=KDJRvOZd=Flu5F!wS3P_J<&vnRiaM;y z@5bzO@+y?^nSr;SxUCC-Zi&OybAlKzk1gQN1sAXH*TctTfO+EI>C=tW4zgJ7J$9=z zGf9V<_a{lI<)5cjG-O;JiuLg9Dug_trP6-STi${tB{E|(9CnZBcQnnuw1 zAE}uWPl~1+IOqFc8q>Q~TEzE7bw-RFx;HU-&OA5G`Z8z@ zouH(K6%65nVkZ4kHcSr_surNbyNH(>M)_!lQdLWzyN$rN*>Cno%|qg(YQIl5Q*(3Z zT}WMDCXCtIpa(xlp?3e;v%lR73a)Gj{qwzhhfK?Zv=g$3TU53vjw>P>kS=jEXuri% zFg9+{&tVpzic8U7i?UkO)tgi#0`CSr{Src!K7yJq`izUb=me|fZISFyQ>lKGphsc4 z$Iio|QN94&56)kqnP|0e3g%Xh>hP90n#Mf(IQA{177a)5Os#^GCZbF%oK~jd1gyV8 zHhCOb1cEQZsSUE2SiOzD>8;9jshlp9Mw^c-3xUa{DVPCEpd)rq+_3o1@C#OxVo#eF zfBWaXjYmaT<@Sf{dJ`f}FU+^HfGi@?T+ywJH5Btv5{^sW3teSW)1tG47V-J~_y$3|>7 zODKIf;|t*0>ukWz(URkDE})QZ51jAUXw zjL3y#dBAzK_>)@^hs*PkSNqXc98eBsI&K+ z73h9JWQX09H4L?ju<+yB>fTwtysXSi<8ys|FZYRIwEbi-?@vHVZSD%c)|LOwAto9) zXt1?&Q+E~E@zfTbN39l5LjqCj5cZfz&6`@Pftl!vKLZRw98%H$l{P&}89%1^P!A8!E?G?SZ<6;!OX<8hA50Uwo_Ip|~QhxRomi2#tqtQPOM3b4N0pyo}c-^29O zVn3P7-c~*Qvqt7~9*xn+oxwrYlj4>$(bu?dl&|D#v6gP{I@(CzJ_vkB_txsimVDg! zRwK`bjg;EUc`khS5wHM&NKm0aYI@)X<6zT8H=)d&kQW`y`-mR<3!?<(JOy7qusn330 z=QXCplLD3hz6ou1dsSxi_%QW%uM&<$M5@Z_W+izKIOq9?U&a&ws-Gog@>6@B7f?=BYt$t ze^K!zs}f(2*dp*I^I$<@2TQWeLPDEp{ePfbLm;|ARCcJ#-Mi7^5|ioM)#*e8n-R*v zYFl}%q{$e4T$FsCof|1ChVr&Opx7wTN}{^eJoX7WrjUHEDI08l$eXif&Ctd+>8+4z zjz%t4-ao=dbxe>76>^ENkyVnfBkrD6CjSpZc&Qt`!4N~5&P{%)XPbjrYTo;#FYaCN zd6uIoQr-o5a6hCxKM<|OHZLPj))W8?W>zUbGCFf1spbIaiV0=wg|0e-Lx`t3Xqb8( zx>$ueUFeZbtwf<*Q1YQpTTz_NZ;g5kr(GTRP{036e&Pw+aM4R%+9rmI+aA6D&4)HX z5Ck9OB&oV%v)>b{Bp(NvzVZO-xT~_l^QG@CbNA?9Z3^3K&$6BPn-fnwrtSRUeQ%At zFWEomb7rd@!9;N0Zas@w`#e}*twzm!bK?y%a^o{Nly_z=d=(jiGQqAo>27tzz+_3p zivDIQODY75@+bG&3FFU5=CNe-XRqP;i~0v`D~XxKTxXwu*h-NiC;k7X1J~d|gYLFh zx}`ToVA1?g-eLDW`qOeW>Iu4>?+}qnaz_U~I(Fk`kr0sRBtMtlBJ#BzZfW9BvjYvz zju&&__pVR($0EkE_4rN2qS*VWN6xCrHlB(t!U`{Iv=2?-NK^e4I;~ z16a$74HK0#ysSkdPb`M_)v%r2d|ELF6~I9z`pFp{Oq-L;cbIJbD{oO1+tfl$L!5V(_8eVk zULfxowPHkBd@n;~`sHn*GHkeP1!YCegmqgl^I}i>mY1&g*8`7R8{V%47&QI+#6N(A zT%|&d{^HNpi)7aS=?O}rFW4@*6{RD)1&6B^XR610vG^+hE>>e6!;dM^J>e&;4K#l~ zBc@{e812i<=O^6Q!LNu;{OE&TmB8{bcPTwB^GN<-Fn&n?dK{>C?0ftgPQ zmClbYK`kcIwDg67*92D|puvHZrNo8kjUUrhg>u)Im2q z1m%7^$N1VSSgI$qq7jlgSyz-PZbF#@1n=*9A^?rgS6|MaePyZ7I77Z4;gasa5%JM+ z2u1dfrO7avTC>o^(H_f~kgu{eqtwifUP)WlVTbzxSCZ-~oq9DaDCI0K8vl7rZ^;B8 z&f}Il8t@SU1~-hcMItC*vH5sqQ6U_p&>A_Yw1`jc3hs%_tL5&cpDqf8Zyq6CSSduC z9Janj;QdKt)1L?4@|z3P1CJL0o%z&XG?_zMICTW~Q0$TXG0NzL*)`^-5cz~JB5@1- z4>Sa?3;xG9g-R4p0y&EkXEzLy3dm zG$ea-lMGo)*AZ2R@1gHY>{m1{88lU@#E8GL?1@p|)yen@YTlvqU*9ucWu~~tfF_s+ zS2oCywn+W_2~&~Ndv0p-YCtTSJJYW!zJn^dldQh498Xs{QksAKL=p{1OrW@Od;yAC3C@6N+Mp>(W9N{;w5df5kC0aQQDs1MS+ z(J1PEGF5lOVhC zVOXMFuZPF)?kdw=k4r$=ZH2!%FPQ!}oBs)UoPjM07|Kg#6M8dY1KnKiy^;7@>-XV? zNWj3KirFh~dCndOF096(KUDg4ZT&$mZpqTY00X4UjBHXa0K&-E7GYr;5C%?t%VYI7 zm4*?J9v`g6lFSxm#=+7)|JF!?SLJ$YS{a}cey>(gCY#S1FbEHH;Q{dWvXyb~a_TL= z>R~^fKO3_;#dD7>i<+ezW!_r!KSTvQPUXxI4fIG|dL}`55(x?!fnb3rBMeU#R1FA_ zqYQjhidr1ZJWQ(_D0ssDI6=|Es6-Zhhb~vnqi7FSA0173!M1{X@S?T>*#2ol#5g2~ zshtL-WR~Jk&Foht6|xBO(f#CtU#yR-PDPPUTzg%(z~1_~+k%@f@`hz4%YSIsd7iW% zn(gP9WnDjHP>}4rHJuV!(xra^Zbh0gE6lS$yO~};?%2Ni+^piA>@8cCnj9&TBq$?&F zTNT~>nGXbyrfl13MD$wR z!DFLNqXSLKi75egiE%RRseQLLCDILw?Ie?+p>^{hhJuOM?4vjP2eEJ$qfn#LpOv2> zawqLaHVBuvOoxtO--T~^G_GHUx{$8T8Or}iKY7EyllL$3@p=P$9;LvNLpNUvIVF+W zBs*&{%Rbyt_cLXVK^xIJ?K|j7m4D4nv}oPG@|#Jw`=3nh zuzB>*ld@JwE7(V|V*%0d@KI{7RrstS#R#=IAYdVxJJs+{0c?D|3Jlt^ewK{6Z7ck( z55eEQQnB~SBRXHiRM0j2wnuihbN0lba?i^}q}O!}1J>99F(LohL@})L3>c4iT-YWZ z6BIQ(9uYI#TFNR7lGLLm)(({ zZu*Oi5y7T0(33uNc(ZB~z_3E_*gDI)BWIi=C!!x6_#_-}%e)DHShx?nLJS_>HRrXdgfefhluou-56!N@ zj(l2{RnZvnL(-JQ+C64t#75Hd>R&RR5v-QF4yr;s%x_kA%ZSf69~h7s_SDsB#_6}^wU_Hax+Za;onF>%5hdVu^g5|d7wYTfdx-^Nsg zb}7qnqZgpxuxe;<_50cs@x%%yH-QTpEj=t`F(NCIPr8)@G<51lH*kX=m?GVT&IfJh ze1~?ZfYV=DLjTMJqEl{O(87&jRLC1?1QdN?S^XcQyCYpl^gZ|o`fp#z>?ts+!?q^8 zvyapmk(e$s2p&{&Zb03teoYn6)1cNL^-wj{^>f};<+?(&rDhaSb5qRs51{HkvcDMi z8=TO8)FONxnEh&VMrl;TBC=ZF-8S-n69FME@EpWgz#EBU>=K+WM+IPXv5yF2ay!VF zBMkuP&_}$(*D*gOG#0p^CncTM8ExDx1;Y3#`~3V5vyR^~^ut`@t6;75{rE*G7$JbX%wWjeV@&67Xp5-w6xNJ-zpH@$`kUN1sEy^@h z2AL0wYf}vZ-2Ir;JE`2yM^)Fl*Y?oSa0(4TqdNNVfk-kGM@tkY`k!8+ze4fauPF#-vwprczEM_@>b2kuu9zKOocsix z$Xozmmp>nOW5a3el_WDz6-C#2PK$BEz?3gAZ!dpX`tXH;8TQl+lxV}Ce{*%JUx9C z!R_hW8T=OzQu_^$;bw?kul2+rbg%u>A3Hd&_HEb$fqd^g`{Ph|pPhmrzm`=08S(Yu!I<=+ws0ID4xTE@gZm%SZkx2HI+FN$&RIq_#BjR|r-2@tUY zeuy+zw!?6+tv9zs_@vPVsQ^N!c6e5l#;WZCJ#(SVS1LReRU^8$mbu>Kct}hg1(HI z*scJs*MHQBH=D(aF&?tYOtFI=AK1Wag{_jI*KpcT(<)wYJyiC|(W_4cD02jp*nd?y zOxvwE6!xzpl*ye&71((SVm=8P5;G-T!{vg>44bdAWV*@gWtvtm8(S*fE2h;+``Dbt&Nt*yu*J1a? z@$=bjkb0m*E8)B@jYW1<-3*{+5Uoe0@r%YMn?m}3J`4o$E*3+)P~VJ0DAxL=7>LB? znvZv}Dlb`a-4&4)IqUM;du*``Cf6xt1`R)vA#f;{TsvMU%6XpC8nSYtnh70s1U$hg z5&|Kaj1fzeIBFujc5?tak3efy&!txL9jx(D&(@!)&a$emo;#v?@;lra>) zdvk$+D-gIq?cyt$0WNn`wEG*i-#2u*7vez{yl?JUzr>-0&!jqzEEfHF*(&225VpY~ zGw&M%$9g=zvgi6m=e`^x>$#a0&A7Sm@rGG>Xv+heL1lI6Y2lQD0f-7DT$63^=^C}% zlLMtHpel49)QEf=t4%IkkH^(`sD|j_C;`XWC~$V7l#XWCE%o07V-=CRc-qY->a?oz zi%bm)bIJtVGpdRS1orTfEDfQ!eIF%Jc;JbWo68_dVZrH*vV_Tj=I;j&mK1UHPSIC8 zAgPa7l{0?XDbDhQlT`fxVHS6g!+lIVBoXk19yw|q>QJjHw20!h2xPPz@PX;V#$EQ-mk%WWv2)bFNc0_ax5N>E38ZCd04a5Wv?% z`TY7T3C!(RZ^b;_9t}qgQ*~O^@+wF9zk(=zU=LUfAU@-_?5$+_GyK+1{?_O^kq2l1 zVOr7(K4KHp%b1P}(tJYTZ66MJZO2>W_&Y{v!?*i|?rR&HEz959YqJ_GM8F?onknZE zj&f;b(dtFcRFN~05v#g7?*I(Ne)^*s)iz4j_fUW~D_^qaTv9=W18Z960W0ObG$z8$TGFc))Oc`fJGq`9z3 z7o8~*7fmbLv3WJwh~NO*^$zN4eeqcZuFqj`I9Y`>Q-~y#)xr3IT_}Zg@u3|9goT^< zwgV2n)!t|VN{`7$4|v%(zkk!P`ap3jf5h>#GL-9mPane`%e9*#|)>q3X(MY}Lx4 zYKeTLZ@(1mnWi7+MJ%r<2T2a6Kp%#fN zY|%=KT*Zt=vE!}5is&AR9Q^~OWToO)OZ) zqB!~Y*nL2h(5~ud}^wTOI_%2hXME- z82cwUOwLEVd;M_ON*z4zs{qaRPZ%(II9}+ke_0B*Lo4j-HJF+1TcUW-`t6cD7L)EI z_S#C^u^FtMa7$A`Vk+gqFU`T~zo^gC@QadG{I1e!Smf{ryVKD5SqK4A!2-2{|0%H$ z^LB(32ye?}M;It1#?~Avj>F zkw|0{h)49tvd{bbBDLs9I+I{m#Gi@$8(ZH&i?y~5!`gIZy-mkVRQZ`N#J4U~vM~Dz zb8h&d#ZFV2e}ACt_%oN>Ec5pwL#2FMY!f@F(}7PZ}x|Hk9Gq}=*g>dLrto^ zzZ*t|#r801WA(r6vFJnX`vz`1@88X{`bUYo5lLLm*ypVUFhF{yQY0CX_d$zqPc;yb z7?0&DkU*M^q1WzK0hN_Q*2}F>vw?G_vWh7V&)R4cWN6YfvvP*@d>6kofYM=Nx1oP< z(?T22W19Yj)yr$$I0p9XbYdOm5SU@H@LAP9&7Pq>w}?SNYkRdc2`UUkMTD-qWWOh; zlUe&^e}QrKZGu;U1V!Im8`O1F?*L+0s1k9mIMYWWTHWm5M(tA zh@pru4}Om%H~h!pS)YwOe;8C;GQ+C$eZk;oq2sLjr3}diiB_oWQ^2IoOw-_Tg)|{3 zz3&R)mY*iuu=svH%*fcq78W5~vP5dw87y$!@Dn*djRj8~dN|4bJ{x|HAm3GYRPntRr$iGHJO94`n?mPvkGhY2((v1B#A@iDW)X5fNH!UQql3Hym(*Qu;H zKw%Wcy6MqQ}sga7T;zw!L2t)6w`V zF{v~1)s4i&UU!gNDI{AF!_#7SY5T)8Z_O~l1QN61bQpi|Q;Iq5F`~BJeDHDlMC?sS z?d+mKxPpnlev1rM-~L}R1KYtlZu^dU1Cnx>L6!gOe@xUDFuu0!OD4oA%6THTD1jSG ziKf6_jzdD=XXbliOi(&mgS+|NO}e3%J6O4HUd4t8Fj!)T)=m%DJT`v(F3f3)eXCtR zPWJ>W))IR4N-#UlTV9V2-;-v-@Odkzus-8aq1dFkuLWV8oz=i@nV}!?65r4Cq#k10 zSjlMDMrjBk?uf2y5@+v6Mk|S%&~>*ue-_m83sd%xgZOmq1MJYS^^qW@jt2xMObrbr zO48DeQ18u*6UG#uNsQJ<851t*UBhCv3$RnFDtY<{& zWd}O|4?2KP6$zWCZ1?HT;{Nb55_vkkl$RY^{Wvm!6k$ocLjvS$n9yxYk`mB~;Ztq! zPi-ajKI(XwL-Po=F|QxIxaMYbE;4iYSXIp6=sF(jtKBwuNps;A;sZ{Yb^4}k-srr8 zH-42(?xYv~sobC|!r=60z7gv5RD89Pk(Y1QpWjmcSE3?I>g?umtoKHK%CW>f?Dm+X?B?CWgx}e2mtP^Ft@3Zmq^aqaO9$C&6?Z!N5^o z&m-N-?*hVBSazrzMn0?rI-@w1*P-D`{b@Es%cQ8Oz1C1FPUA4$#DMuQMS?4vgzD(Y zZDOfag2w?8e`BJsO^zrHy~Qo+SDHD}9?D4V!#MS%M3`}?$YV5A`x{Mr3T<@AAwnKt|xi?{3cIj}8+Pj2f>pmtsyC?G@t(2y} zIAf%G2!JF6H@T-xB#KJ}O*eAC?ctg0qsbgpjiNI1kVyuA*gjON#m^zp2-a`!JjYeC zSMioAn&psta(*X(&4B_sSgt^RZ1x;?MB@l&<5BIjw!`b*?US?TF(bQ>Kr{<(*w1}6q!_QpXjKq5uAuLYisG!gplb6!!kTjNfhE_y zK9**Dr>@tzX;rXRivTwV`Z9W&i$uK*8JGUA@VVHh2St^y3bGnf)mMXSVDubv8o@40 z(b8Hnh@XuaFhzpNhl3%`r3bSO6PEfVav6%X=0s-gdjy#5@4JpWy4L_re~!$*|reTGGKmB2tup5fVLO!yu*~{96@_Sl}*T`u=qPK^&Lw z>&;a%L~KEb{dhtvf4{)@v^lf`6@J#p3P)Uc4%M^(fGXsKCo)96LnzOFs%!KMLR_Yj z-_L^+rX!P1%NQY2A6%U{c14@MG$D)y#HBm!A?5P1M<%PQi$h8frprGyMkIWNf_0;X1HJTbr9ciKsv!&E z!;7n^|8m#@C#V#Lp`OK%Cs{l(YSEE$o|~QzG_Wl*HRF6SJ17B^Cs2K9`tO?NE=W{U1t?B z++aq_C_%;nK_9Cd7a>qukT^Wue?)i;!d^k43mu9t&$Fk&PT}YGG0InvTMLp!!*^!M z<|nmCsx*rtc+@M{rP~oaOBQR{=arkO`=zU?hn@|>qAV2Wi-414i0oU{oMsQpWFMO} zJTGCM^;ectQ4YJRP46rR)~Jttd;}7^@3ObL`>6^1{GS`VzH6I-MJaPoDxV zFJP=wDWWyEGJ#AHv@^Dq!HZ-VK5xR4UrqkIY%m0oHX~gP?(-q}-6Md9o0;8ZE zgDe-^G}HruZZsEc(2NSuBn0Xo$7NBQQav0_KM5c<4ypzKvV@4|iI7r!0nk_us^y&4 u{XIS%u-D=y{hB-GqEqpDCulAIDw_Q5F(Hvk7znwh0+5wblB^at4*4HlvH`RJ literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/values-night/styles.xml b/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000..06952be --- /dev/null +++ b/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/android/app/src/main/res/values/colors.xml b/android/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..c5d5899 --- /dev/null +++ b/android/app/src/main/res/values/colors.xml @@ -0,0 +1,4 @@ + + + #FFFFFF + \ No newline at end of file diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..cb1ef88 --- /dev/null +++ b/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/android/app/src/profile/AndroidManifest.xml b/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..399f698 --- /dev/null +++ b/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/android/build.gradle.kts b/android/build.gradle.kts new file mode 100644 index 0000000..dbee657 --- /dev/null +++ b/android/build.gradle.kts @@ -0,0 +1,24 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = + rootProject.layout.buildDirectory + .dir("../../build") + .get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/android/build/reports/problems/problems-report.html b/android/build/reports/problems/problems-report.html new file mode 100644 index 0000000..a1b475a --- /dev/null +++ b/android/build/reports/problems/problems-report.html @@ -0,0 +1,663 @@ + + + + + + + + + + + + + Gradle Configuration Cache + + + +

+ +
+ Loading... +
+ + + + + + diff --git a/android/gradle.properties b/android/gradle.properties new file mode 100644 index 0000000..b7ecb1f --- /dev/null +++ b/android/gradle.properties @@ -0,0 +1,7 @@ +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +android.useAndroidX=true +# This builtInKotlin flag was added automatically by Flutter migrator +android.builtInKotlin=false +# This newDsl flag was added automatically by Flutter migrator +android.newDsl=false +kotlin.incremental=false diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..e4ef43f --- /dev/null +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-all.zip diff --git a/android/settings.gradle.kts b/android/settings.gradle.kts new file mode 100644 index 0000000..ca7fe06 --- /dev/null +++ b/android/settings.gradle.kts @@ -0,0 +1,26 @@ +pluginManagement { + val flutterSdkPath = + run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.11.1" apply false + id("org.jetbrains.kotlin.android") version "2.2.20" apply false +} + +include(":app") diff --git a/api.txt b/api.txt new file mode 100644 index 0000000..859a0c7 --- /dev/null +++ b/api.txt @@ -0,0 +1,252 @@ + +like how we are doing thi specifer using mobile or wb + + +To specify whether the survey was taken on mobile or web, you just need to hardcode the registration_source identifier directly into the API request code of your respective frontends. + +This is the most reliable way to handle it, because your mobile codebase uniquely knows it's the mobile app, and your web codebase uniquely knows it's the web app. + +Here is exactly how you handle it in both environments: + +1. In your Flutter (Mobile) App +When you build the JSON body to send your POST request via the http package or dio, you simply inject "mobile" and grab the current logged-in user's ID from your local state: + +dart +// Inside your Flutter API service +Future submitSurvey(String firstName, double lat, double lon, int currentUserId) async { + final payload = { + "first_name": firstName, + // ... other fields + "survey_lat": lat, + "survey_long": lon, + + // Explicitly tag this as coming from the mobile app + "registration_source": "mobile", + "registered_by_id": currentUserId + }; + await http.post( + Uri.parse('https://api.doormile.com/api/v1/crm/clients'), + headers: {"Content-Type": "application/json"}, + body: jsonEncode(payload), + ); +} +2. In your React / Web App +Similarly, inside your Web frontend's API submission function, you explicitly hardcode "web" as the source: + +javascript +// Inside your Web frontend API utility +async function submitSurvey(formData, lat, lon, currentUserId) { + const payload = { + first_name: formData.firstName, + // ... other fields + survey_lat: lat, + survey_long: lon, + + // Explicitly tag this as coming from the web dashboard + registration_source: "web", + registered_by_id: currentUserId + }; + await fetch('https://api.doormile.com/api/v1/crm/clients', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(payload) + }); +} +Alternative Option: Backend "User-Agent" Detection +If you don't want to pass it manually in the JSON payload, we can modify the Golang backend to automatically detect the platform by reading the HTTP Headers. + +When a request hits your API, Fiber can check the User-Agent header (Flutter usually sends Dart/ (dart:io), while Web sends standard browser data like Mozilla/5.0...). Let me know if you would prefer the backend to automate this detection instead! + +12:16 PM + + +Here are the **GET** and **POST** APIs that are now fully functional and mapped in your backend. + +All endpoints use the base URL path: `http://localhost:8081/api/v1/crm/clients` + +### 1. Create a New Client (POST) +**Endpoint:** `POST /api/v1/crm/clients` +**Description:** Registers a new client in `doormile_clients`, hashes their password, sets up their auth credentials in `doormile_auth`, and optionally accepts a vector for future AI search. + +**Request Body (JSON):** +```json +{ + "first_name": "John", + "last_name": "Doe", + "email": "john.doe@example.com", + "password": "securepassword123", + "phone": "+1234567890", + "address": "123 Main St, Tech City", + "vector": [0.1, 0.5, -0.3] // Optional: For Qdrant AI embedding integration +} +``` + +**Success Response (201 Created):** +```json +{ + "id": 1, + "first_name": "John", + "last_name": "Doe", + "email": "john.doe@example.com", + "phone": "+1234567890", + "address": "123 Main St, Tech City", + "role": "user" +} +``` + +--- + +### 2. Fetch All Clients (GET) +**Endpoint:** `GET /api/v1/crm/clients` +**Description:** Returns a list of all registered clients alongside their authentication details (like email and role) by performing a SQL join behind the scenes. + +**Request Body:** None + +**Success Response (200 OK):** +```json +[ + { + "id": 1, + "first_name": "John", + "last_name": "Doe", + "email": "john.doe@example.com", + "phone": "+1234567890", + "address": "123 Main St, Tech City", + "role": "user" + }, + { + "id": 2, + "first_name": "Jane", + "last_name": "Smith", + "email": "jane@example.com", + "phone": "+1987654321", + "address": "456 Commerce Rd", + "role": "user" + } +] +``` + +--- + +### 3. Fetch a Specific Client (GET) +**Endpoint:** `GET /api/v1/crm/clients/:id` +**Description:** Returns the details for a specific client matching the provided ID in the URL. + +**Request Body:** None + +**Success Response (200 OK) for `/api/v1/crm/clients/1`:** +```json +{ + "id": 1, + "first_name": "John", + "last_name": "Doe", + "email": "john.doe@example.com", + "phone": "+1234567890", + "address": "123 Main St, Tech City", + "role": "user" +} +``` + +### Implementation Notes: +* You can find the exact backend logic for these in `controllers/clientController.go`. +* The structured structs representing these API JSON payloads are located in `dto/client.go`. + +Edited client.go +Edited client.go +Edited clientController.go +Ran command: `& "C:\Program Files\Go\bin\go.exe" run main.go` + +This makes perfect sense—having an exact audit trail of exactly *where*, *when*, and *by whom* the survey was captured (alongside whether it was captured in the field on `mobile` or from the office on `web`) is crucial for data integrity. + +I have completely refactored the models, DTOs, and API logic to rename the columns and add these tracking fields. Additionally, I successfully booted up the backend in the background to automatically migrate these changes into your active PostgreSQL database! + +Here is exactly what was updated: + +1. **Renamed GPS Columns**: `latitude` and `longitude` were renamed strictly to `surveylat` and `surveylong` across the database columns and the JSON payload schemas. +2. **Registration Origin Tracking**: Added a `registration_source` string field (so you can pass "mobile" or "web"). +3. **Creator Identifier**: Added a `registered_by_id` (Integer) field to uniquely track the specific logged-in user who submitted the survey payload. + +### Your Updated POST Payload Schema +Your `POST /api/v1/crm/clients` payload originating from both your Mobile Flutter App and your Web App should now look exactly like this: + +```json +{ + "first_name": "John", + "last_name": "Doe", + "email": "john.doe@example.com", + "password": "securepassword123", + "phone": "+1234567890", + "address": "123 Main St, Tech City", + "survey_lat": 37.7749, + "survey_long": -122.4194, + "pincode": "94103", + "registration_source": "mobile", + "registered_by_id": 42 +} +``` + +Whenever you retrieve a client record using `GET /api/v1/crm/clients/:id`, it will return these exact fields so you'll always know the survey's origin platform, the exact location it was plotted, and the user who processed it! + + +To specify whether the survey was taken on **mobile** or **web**, you just need to hardcode the `registration_source` identifier directly into the API request code of your respective frontends. + +This is the most reliable way to handle it, because your mobile codebase uniquely knows it's the mobile app, and your web codebase uniquely knows it's the web app. + +Here is exactly how you handle it in both environments: + +### 1. In your Flutter (Mobile) App +When you build the JSON body to send your POST request via the `http` package or `dio`, you simply inject `"mobile"` and grab the current logged-in user's ID from your local state: + +```dart +// Inside your Flutter API service +Future submitSurvey(String firstName, double lat, double lon, int currentUserId) async { + final payload = { + "first_name": firstName, + // ... other fields + "survey_lat": lat, + "survey_long": lon, + + // Explicitly tag this as coming from the mobile app + "registration_source": "mobile", + "registered_by_id": currentUserId + }; + + await http.post( + Uri.parse('https://api.doormile.com/api/v1/crm/clients'), + headers: {"Content-Type": "application/json"}, + body: jsonEncode(payload), + ); +} +``` + +### 2. In your React / Web App +Similarly, inside your Web frontend's API submission function, you explicitly hardcode `"web"` as the source: + +```javascript +// Inside your Web frontend API utility +async function submitSurvey(formData, lat, lon, currentUserId) { + const payload = { + first_name: formData.firstName, + // ... other fields + survey_lat: lat, + survey_long: lon, + + // Explicitly tag this as coming from the web dashboard + registration_source: "web", + registered_by_id: currentUserId + }; + + await fetch('https://api.doormile.com/api/v1/crm/clients', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(payload) + }); +} +``` + +### Alternative Option: Backend "User-Agent" Detection +If you don't want to pass it manually in the JSON payload, we can modify the Golang backend to automatically detect the platform by reading the HTTP Headers. + +When a request hits your API, Fiber can check the `User-Agent` header (Flutter usually sends `Dart/ (dart:io)`, while Web sends standard browser data like `Mozilla/5.0...`). Let me know if you would prefer the backend to automate this detection instead! + + diff --git a/assets/_icon_preview.png b/assets/_icon_preview.png new file mode 100644 index 0000000000000000000000000000000000000000..f64351844eb8674eeada1cad25774313d5258af3 GIT binary patch literal 83551 zcmeFZ^;=Zm7dA|Tgn%F+4T>TSQj!V?NC`+u!%)&79fKfU(hZVIcgN5T1JWQ}(hN1^ z%zMVq^FDvXbA9H_}KMDL#0{@f1|0MALrUXtDm(WN_N#|ddPZ7;Uvi*ybpy3y2B&4KlQMJmO4b%00 z4EPU$=;_AyFGiYGsI$UFe*; zH`^Y1d8Wn#MBG!tf6>+|*T|Zj5D2hhn5gO0?Ox4S7(&l$v|j+vXiB4E??*o6%dP7d znUIww=@@bLdhla|_s-x7f^`6XcK2;FutHB8TWiE$$D}g}y>X|Y*9`Mk- z8tNhIf(MWUGHeWH<~T2WG#QzvoUhiB-{(pJ6RQ9BMjY$CI;SAQK${A9{Mo-xxd|%Y z6fCe20^g4N7yU)kSnrsjDtg#5GN7OT<`oTKy=Pv0R{|gkP{_X#Gue2**s1~^VCKFA zlsM+;)6OFfXz@{xw6FoPj4dlrfXG|_o7XNEwWs=Tz%0A@sCVj9Q15thrCmiN#Ki7v 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 Ue6KwAF%a-mRnk(dl(!1~A8j?inE(I) literal 0 HcmV?d00001 diff --git a/assets/doormilelogoround.png b/assets/doormilelogoround.png new file mode 100644 index 0000000000000000000000000000000000000000..4d89c35b1cc153b1cc83821e88b63836d5c09f41 GIT binary patch literal 32335 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 Bdj$Xh literal 0 HcmV?d00001 diff --git a/assets/test_merge.png b/assets/test_merge.png new file mode 100644 index 0000000000000000000000000000000000000000..d5779299c848a336f630f1a77fb0c19b404a49d8 GIT binary patch literal 29349 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 DKHNbO literal 0 HcmV?d00001 diff --git a/buildlog.txt b/buildlog.txt new file mode 100644 index 0000000..226e669 --- /dev/null +++ b/buildlog.txt @@ -0,0 +1,2551 @@ +[ +9 ms] executing: sysctl hw.optional.arm64 +[ +2 ms] Exit code 0 from: sysctl hw.optional.arm64 +[ ] hw.optional.arm64: 1 +[ +2 ms] Artifact Instance of 'MaterialFonts' is not required, skipping update. +[ ] Artifact Instance of 'GradleWrapper' is not required, skipping update. +[ ] Artifact Instance of 'AndroidGenSnapshotArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'AndroidInternalBuildArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'IOSEngineArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'FlutterWebSdk' is not required, skipping update. +[ ] Artifact Instance of 'LegacyCanvasKitRemover' is not required, skipping update. +[ ] Artifact Instance of 'FlutterSdk' is not required, skipping update. +[ ] Artifact Instance of 'WindowsEngineArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'MacOSEngineArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'LinuxEngineArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'LinuxFuchsiaSDKArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'MacOSFuchsiaSDKArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'FlutterRunnerSDKArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'FlutterRunnerDebugSymbols' is not required, skipping update. +[ ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'FontSubsetArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'PubDependencies' is not required, skipping update. +[ ] executing: [/Users/anbarasu/flutter/] git -c log.showSignature=false log HEAD -n 1 --pretty=format:%ad --date=iso +[ +6 ms] Exit code 0 from: git -c log.showSignature=false log HEAD -n 1 --pretty=format:%ad --date=iso +[ ] 2026-05-15 14:13:13 -0700 +[ +3 ms] Artifact Instance of 'AndroidGenSnapshotArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'AndroidInternalBuildArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'IOSEngineArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'FlutterWebSdk' is not required, skipping update. +[ ] Artifact Instance of 'FlutterEngineStamp' is not required, skipping update. +[ ] Artifact Instance of 'LegacyCanvasKitRemover' is not required, skipping update. +[ ] Artifact Instance of 'WindowsEngineArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'MacOSEngineArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'LinuxEngineArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'LinuxFuchsiaSDKArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'MacOSFuchsiaSDKArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'FlutterRunnerSDKArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'FlutterRunnerDebugSymbols' is not required, skipping update. +[ +12 ms] Artifact Instance of 'MaterialFonts' is not required, skipping update. +[ ] Artifact Instance of 'GradleWrapper' is not required, skipping update. +[ ] Artifact Instance of 'AndroidInternalBuildArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'IOSEngineArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'FlutterWebSdk' is not required, skipping update. +[ ] Artifact Instance of 'FlutterEngineStamp' is not required, skipping update. +[ ] Artifact Instance of 'LegacyCanvasKitRemover' is not required, skipping update. +[ ] Artifact Instance of 'FlutterSdk' is not required, skipping update. +[ ] Artifact Instance of 'WindowsEngineArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'MacOSEngineArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'LinuxEngineArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'LinuxFuchsiaSDKArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'MacOSFuchsiaSDKArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'FlutterRunnerSDKArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'FlutterRunnerDebugSymbols' is not required, skipping update. +[ ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'FontSubsetArtifacts' is not required, skipping update. +[ ] Artifact Instance of 'PubDependencies' is not required, skipping update. +[ +23 ms] Skipping pub get: version match. +[ +25 ms] Found plugin path_provider at /Users/anbarasu/.pub-cache/hosted/pub.dev/path_provider-2.1.5/ +[ +1 ms] Found plugin path_provider_windows at /Users/anbarasu/.pub-cache/hosted/pub.dev/path_provider_windows-2.3.0/ +[ +1 ms] Found plugin path_provider_linux at /Users/anbarasu/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/ +[ +1 ms] Found plugin path_provider_foundation at /Users/anbarasu/.pub-cache/hosted/pub.dev/path_provider_foundation-2.6.0/ +[ +3 ms] Found plugin path_provider_android at /Users/anbarasu/.pub-cache/hosted/pub.dev/path_provider_android-2.3.1/ +[ ] Found plugin jni_flutter at /Users/anbarasu/.pub-cache/hosted/pub.dev/jni_flutter-1.0.1/ +[ ] Found plugin jni at /Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/ +[ ] Found plugin geolocator at /Users/anbarasu/.pub-cache/hosted/pub.dev/geolocator-13.0.4/ +[ ] Found plugin geolocator_windows at /Users/anbarasu/.pub-cache/hosted/pub.dev/geolocator_windows-0.2.5/ +[ ] Found plugin geolocator_web at /Users/anbarasu/.pub-cache/hosted/pub.dev/geolocator_web-4.1.3/ +[ ] Found plugin geolocator_apple at /Users/anbarasu/.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/ +[ ] Found plugin geolocator_android at /Users/anbarasu/.pub-cache/hosted/pub.dev/geolocator_android-4.6.2/ +[ +5 ms] executing: sysctl hw.optional.arm64 +[ +2 ms] Exit code 0 from: sysctl hw.optional.arm64 +[ ] hw.optional.arm64: 1 +[ ] executing: /usr/bin/arch -arm64e xcrun xcodebuild -version +[ +58 ms] Exit code 0 from: /usr/bin/arch -arm64e xcrun xcodebuild -version +[ ] Xcode 26.2 + Build version 17C52 +[ +16 ms] Found plugin path_provider at /Users/anbarasu/.pub-cache/hosted/pub.dev/path_provider-2.1.5/ +[ ] Found plugin path_provider_windows at /Users/anbarasu/.pub-cache/hosted/pub.dev/path_provider_windows-2.3.0/ +[ ] Found plugin path_provider_linux at /Users/anbarasu/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/ +[ ] Found plugin path_provider_foundation at /Users/anbarasu/.pub-cache/hosted/pub.dev/path_provider_foundation-2.6.0/ +[ +1 ms] Found plugin path_provider_android at /Users/anbarasu/.pub-cache/hosted/pub.dev/path_provider_android-2.3.1/ +[ ] Found plugin jni_flutter at /Users/anbarasu/.pub-cache/hosted/pub.dev/jni_flutter-1.0.1/ +[ ] Found plugin jni at /Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/ +[ ] Found plugin geolocator at /Users/anbarasu/.pub-cache/hosted/pub.dev/geolocator-13.0.4/ +[ ] Found plugin geolocator_windows at /Users/anbarasu/.pub-cache/hosted/pub.dev/geolocator_windows-0.2.5/ +[ ] Found plugin geolocator_web at /Users/anbarasu/.pub-cache/hosted/pub.dev/geolocator_web-4.1.3/ +[ ] Found plugin geolocator_apple at /Users/anbarasu/.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/ +[ ] Found plugin geolocator_android at /Users/anbarasu/.pub-cache/hosted/pub.dev/geolocator_android-4.6.2/ +[ +4 ms] Skipping generating web_plugin_registrant.dart because it is up-to-date. +[ +9 ms] Found plugin path_provider at /Users/anbarasu/.pub-cache/hosted/pub.dev/path_provider-2.1.5/ +[ ] Found plugin path_provider_windows at /Users/anbarasu/.pub-cache/hosted/pub.dev/path_provider_windows-2.3.0/ +[ ] Found plugin path_provider_linux at /Users/anbarasu/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/ +[ ] Found plugin path_provider_foundation at /Users/anbarasu/.pub-cache/hosted/pub.dev/path_provider_foundation-2.6.0/ +[ +2 ms] Found plugin path_provider_android at /Users/anbarasu/.pub-cache/hosted/pub.dev/path_provider_android-2.3.1/ +[ ] Found plugin jni_flutter at /Users/anbarasu/.pub-cache/hosted/pub.dev/jni_flutter-1.0.1/ +[ ] Found plugin jni at /Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/ +[ ] Found plugin geolocator at /Users/anbarasu/.pub-cache/hosted/pub.dev/geolocator-13.0.4/ +[ ] Found plugin geolocator_windows at /Users/anbarasu/.pub-cache/hosted/pub.dev/geolocator_windows-0.2.5/ +[ ] Found plugin geolocator_web at /Users/anbarasu/.pub-cache/hosted/pub.dev/geolocator_web-4.1.3/ +[ ] Found plugin geolocator_apple at /Users/anbarasu/.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/ +[ ] Found plugin geolocator_android at /Users/anbarasu/.pub-cache/hosted/pub.dev/geolocator_android-4.6.2/ +[ +2 ms] Generating /Users/anbarasu/Downloads/doormile_flutter/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java +[ ] Skipping generating GeneratedPluginRegistrant.java because it is up-to-date. +[ +1 ms] Skipping generating generated_plugin_registrant.h because it is up-to-date. +[ ] Skipping generating generated_plugin_registrant.cc because it is up-to-date. +[ ] Skipping generating generated_plugins.cmake because it is up-to-date. +[ ] Skipping generating generated_plugin_registrant.h because it is up-to-date. +[ ] Skipping generating generated_plugin_registrant.cc because it is up-to-date. +[ ] Skipping generating generated_plugins.cmake because it is up-to-date. +[ ] Skipping generating GeneratedPluginRegistrant.h because it is up-to-date. +[ ] Skipping generating GeneratedPluginRegistrant.m because it is up-to-date. +[ ] Skipping generating GeneratedPluginRegistrant.swift because it is up-to-date. +[ +5 ms] executing: pgrep -n -f -l xcodebuild -clonedSourcePackagesDirPath /Users/anbarasu/Downloads/doormile_flutter/build/ios/SourcePackages -resolvePackageDependencies +[ +13 ms] executing: [/Users/anbarasu/Downloads/doormile_flutter/ios/] /usr/bin/arch -arm64e xcrun xcodebuild -clonedSourcePackagesDirPath /Users/anbarasu/Downloads/doormile_flutter/build/ios/SourcePackages -resolvePackageDependencies +[ +90 ms] executing: /usr/bin/plutil -convert xml1 -o - /Applications/Android Studio.app/Contents/Info.plist +[ +5 ms] Exit code 0 from: /usr/bin/plutil -convert xml1 -o - /Applications/Android Studio.app/Contents/Info.plist +[ ] + + + + CFBundleDevelopmentRegion + English + CFBundleDocumentTypes + + + CFBundleTypeExtensions + + ipr + + CFBundleTypeIconFile + studio.icns + CFBundleTypeName + Android Studio Project File + CFBundleTypeRole + Editor + + + CFBundleTypeExtensions + + * + + CFBundleTypeName + All documents + CFBundleTypeOSTypes + + **** + + CFBundleTypeRole + Editor + LSTypeIsPackage + + + + CFBundleExecutable + studio + CFBundleGetInfoString + Android Studio 2025.2, build AI-252.25557.131.2521.14432022. Copyright JetBrains s.r.o., (c) 2000-2025 + CFBundleIconFile + studio.icns + CFBundleIdentifier + com.google.android.studio + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Android Studio + CFBundlePackageType + APPL + CFBundleShortVersionString + 2025.2 + CFBundleURLTypes + + + CFBundleTypeRole + Editor + CFBundleURLName + Stacktrace + CFBundleURLSchemes + + idea + + + + CFBundleVersion + AI-252.25557.131.2521.14432022 + LSApplicationCategoryType + public.app-category.developer-tools + LSArchitecturePriority + + arm64 + + LSMinimumSystemVersion + 10.13 + LSRequiresNativeExecution + YES + NSAppleEventsUsageDescription + An application in Android Studio requests the ability to send Apple events. + NSBluetoothAlwaysUsageDescription + An application in Android Studio requests access to Bluetooth. + NSCameraUsageDescription + An application in Android Studio requests access to the device's camera. + NSDesktopFolderUsageDescription + An application in Android Studio requests access to the user's Desktop folder. + NSDocumentsFolderUsageDescription + An application in Android Studio requests access to the user's Documents folder. + NSDownloadsFolderUsageDescription + An application in Android Studio requests access to the user's Downloads folder. + NSHighResolutionCapable + + NSLocalNetworkUsageDescription + Android Studio's features, such as SSH and database connectivity, require permissions for accessing the local network and sending broadcast requests. + NSLocationUsageDescription + An application in Android Studio requests access to the user's location information. + NSMicrophoneUsageDescription + An application in Android Studio requests access to the device's microphone. + NSNetworkVolumesUsageDescription + An application in Android Studio requests access to files on a network volume. + NSRemovableVolumesUsageDescription + An application in Android Studio requests access to files on a removable volume. + NSSupportsAutomaticGraphicsSwitching + + + +[ +3 ms] executing: /Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/java -version +[ +40 ms] Exit code 0 from: /Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/java -version +[ ] openjdk version "21.0.8" 2025-07-15 + OpenJDK Runtime Environment (build 21.0.8+-14196175-b1038.72) + OpenJDK 64-Bit Server VM (build 21.0.8+-14196175-b1038.72, mixed mode) +[ +3 ms] Top-level Gradle build file not found, skipping migration of task "clean". +[ ] executing: /Library/Java/JavaVirtualMachines/openjdk-17.jdk/Contents/Home/bin/java --version +[ +22 ms] Exit code 0 from: /Library/Java/JavaVirtualMachines/openjdk-17.jdk/Contents/Home/bin/java --version +[ ] openjdk 17.0.17 2025-10-21 + OpenJDK Runtime Environment Homebrew (build 17.0.17+0) + OpenJDK 64-Bit Server VM Homebrew (build 17.0.17+0, mixed mode, sharing) +[ +1 ms] CMake project not found, skipping support Android 15 16k page size migration. +[ ] The developer has already configured the Built-In Kotlin flag, skipping migration. +[ ] The developer has already configured the new DSL flag, skipping migration. +[ +1 ms] Using gradle from /Users/anbarasu/Downloads/doormile_flutter/android/gradlew. +[ +6 ms] LocalFile: '/Users/anbarasu/Downloads/doormile_flutter/android/build.gradle.kts' doesn't provide an AGP version. Checking settings. +[ ] LocalFile: '/Users/anbarasu/Downloads/doormile_flutter/android/settings.gradle.kts' provides AGP version: 8.11.1 +[ +6 ms] Running Gradle task 'bundleRelease'... +[ ] executing: [/Users/anbarasu/Downloads/doormile_flutter/android/] /Users/anbarasu/Downloads/doormile_flutter/android/gradlew --full-stacktrace --info -Pverbose=true -Ptarget-platform=android-arm,android-arm64,android-x64 -Ptarget=lib/main.dart -Pbase-application-name=android.app.Application -Pdart-defines=RkxVVFRFUl9WRVJTSU9OPTMuNDQuMA==,RkxVVFRFUl9DSEFOTkVMPXN0YWJsZQ==,RkxVVFRFUl9HSVRfVVJMPWh0dHBzOi8vZ2l0aHViLmNvbS9mbHV0dGVyL2ZsdXR0ZXIuZ2l0,RkxVVFRFUl9GUkFNRVdPUktfUkVWSVNJT049NTU5ZmZhM2Y3NQ==,RkxVVFRFUl9FTkdJTkVfUkVWSVNJT049NGM1MjVkYWM1ZQ==,RkxVVFRFUl9EQVJUX1ZFUlNJT049My4xMi4w -Pdart-obfuscation=false -Ptrack-widget-creation=true -Ptree-shake-icons=true bundleRelease +[ +210 ms] Initialized native services in: /Users/anbarasu/.gradle/native +[ ] Initialized jansi services in: /Users/anbarasu/.gradle/native +[ +115 ms] The client will now receive all logging from the daemon (pid: 29613). The daemon log file: /Users/anbarasu/.gradle/daemon/8.14/daemon-29613.out.log +[ ] Starting 5th build in daemon [uptime: 10 mins 51.786 secs, performance: 100%, GC rate: 0.00/s, heap usage: 0% of 6 GiB] +[ ] Using 10 worker leases. +[ ] Now considering [/Users/anbarasu/Downloads/doormile_flutter/android, /Users/anbarasu/flutter/packages/flutter_tools/gradle] as hierarchies to watch +[ ] Watching the file system is configured to be enabled if available +[ ] File system watching is active +[ ] Starting Build +[ ] Now considering [/Users/anbarasu/flutter/packages/flutter_tools/gradle, /Users/anbarasu/Downloads/doormile_flutter/android] as hierarchies to watch +[ +99 ms] > Configure project :gradle +[ ] Evaluating project ':gradle' using build file '/Users/anbarasu/flutter/packages/flutter_tools/gradle/build.gradle.kts'. +[ ] Resolved plugin [id: 'org.gradle.java-gradle-plugin'] +[ ] Resolved plugin [id: 'org.gradle.groovy'] +[ ] Resolved plugin [id: 'org.gradle.kotlin.kotlin-dsl', version: '5.2.0'] +[ ] Resolved plugin [id: 'org.jetbrains.kotlin.jvm', version: '2.2.20'] +[ ] Build b0fbb022-5ca9-44e4-94f6-596ae9452722 is started +[ ] Using Kotlin Gradle Plugin gradle813 variant +[ ] kotlin scripting plugin: created the scripting discovery configuration: kotlinScriptDef +[ ] kotlin scripting plugin: created the scripting discovery configuration: testKotlinScriptDef +[ ] WARNING: Unsupported Kotlin plugin version. +[ ] The `embedded-kotlin` and `kotlin-dsl` plugins rely on features of Kotlin `2.0.21` that might work differently than in the requested version `2.2.20`. +[ ] file or directory '/Users/anbarasu/flutter/packages/flutter_tools/gradle/src/main/java', not found +[ ] Resolved plugin [id: 'dev.flutter.flutter-plugin-loader', version: '1.0.0'] +[ ] Resolved plugin [id: 'com.android.application', version: '8.11.1', apply: false] +[ ] Resolved plugin [id: 'org.jetbrains.kotlin.android', version: '2.2.20', apply: false] +[ ] Resolve mutations for :gradle:checkKotlinGradlePluginConfigurationErrors (Thread[Execution worker,5,main]) started. +[ ] :gradle:checkKotlinGradlePluginConfigurationErrors (Thread[Execution worker,5,main]) started. +[ ] > Task :gradle:checkKotlinGradlePluginConfigurationErrors SKIPPED +[ ] Skipping task ':gradle:checkKotlinGradlePluginConfigurationErrors' as task onlyIf 'errorDiagnostics are present' is false. +[ ] Resolve mutations for :gradle:compileKotlin (Thread[Execution worker,5,main]) started. +[ ] :gradle:compileKotlin (Thread[Execution worker,5,main]) started. +[ ] > Task :gradle:compileKotlin UP-TO-DATE +[ ] Caching disabled for task ':gradle:compileKotlin' because: +[ ] Build cache is disabled +[ ] Skipping task ':gradle:compileKotlin' as it is up-to-date. +[ ] Resolve mutations for :gradle:compileJava (Thread[Execution worker,5,main]) started. +[ ] :gradle:compileJava (Thread[Execution worker,5,main]) started. +[ ] > Task :gradle:compileJava NO-SOURCE +[ ] Skipping task ':gradle:compileJava' as it has no source files and no previous output files. +[ ] Resolve mutations for :gradle:compileGroovy (Thread[Execution worker,5,main]) started. +[ ] :gradle:compileGroovy (Thread[Execution worker,5,main]) started. +[ ] > Task :gradle:compileGroovy NO-SOURCE +[ ] Skipping task ':gradle:compileGroovy' as it has no source files and no previous output files. +[ ] Resolve mutations for :gradle:pluginDescriptors (Thread[Execution worker,5,main]) started. +[ ] :gradle:pluginDescriptors (Thread[Execution worker,5,main]) started. +[ ] > Task :gradle:pluginDescriptors UP-TO-DATE +[ ] Caching disabled for task ':gradle:pluginDescriptors' because: +[ ] Build cache is disabled +[ ] Not worth caching +[ ] Skipping task ':gradle:pluginDescriptors' as it is up-to-date. +[ ] Resolve mutations for :gradle:processResources (Thread[Execution worker,5,main]) started. +[ ] :gradle:processResources (Thread[Execution worker,5,main]) started. +[ ] > Task :gradle:processResources UP-TO-DATE +[ ] Caching disabled for task ':gradle:processResources' because: +[ ] Build cache is disabled +[ ] Not worth caching +[ ] Skipping task ':gradle:processResources' as it is up-to-date. +[ ] Resolve mutations for :gradle:classes (Thread[Execution worker,5,main]) started. +[ ] :gradle:classes (Thread[Execution worker,5,main]) started. +[ ] > Task :gradle:classes UP-TO-DATE +[ ] Skipping task ':gradle:classes' as it has no actions. +[ ] Resolve mutations for :gradle:jar (Thread[Execution worker,5,main]) started. +[ ] :gradle:jar (Thread[Execution worker,5,main]) started. +[ ] > Task :gradle:jar UP-TO-DATE +[ ] Caching disabled for task ':gradle:jar' because: +[ ] Build cache is disabled +[ ] Not worth caching +[ ] Skipping task ':gradle:jar' as it is up-to-date. +[ +95 ms] Settings evaluated using settings file '/Users/anbarasu/Downloads/doormile_flutter/android/settings.gradle.kts'. +[ ] Projects loaded. Root project using build file '/Users/anbarasu/Downloads/doormile_flutter/android/build.gradle.kts'. +[ ] Included projects: [root project 'android', project ':app', project ':geolocator_android', project ':jni', project ':jni_flutter'] +[ ] > Configure project :app +[ ] Evaluating project ':app' using build file '/Users/anbarasu/Downloads/doormile_flutter/android/app/build.gradle.kts'. +[ ] Resolved plugin [id: 'com.android.application'] +[ ] Resolved plugin [id: 'kotlin-android'] +[ ] Resolved plugin [id: 'dev.flutter.flutter-gradle-plugin'] +[ ] Using default execution profile +[ ] Build 982634eb-17c1-4374-b8bf-069dc6d4837f is started +[ ] Using Kotlin Gradle Plugin gradle813 variant +[ ] Using Kotlin Gradle Plugin gradle813 variant +[ ] Using Kotlin Gradle Plugin gradle813 variant +[ ] Using Kotlin Gradle Plugin gradle813 variant +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ +1 ms] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] > Configure project : +[ ] Evaluating root project 'android' using build file '/Users/anbarasu/Downloads/doormile_flutter/android/build.gradle.kts'. +[ +95 ms] > Configure project :geolocator_android +[ ] Evaluating project ':geolocator_android' using build file '/Users/anbarasu/.pub-cache/hosted/pub.dev/geolocator_android-4.6.2/android/build.gradle'. +[ ] Using default execution profile +[ ] > Configure project :jni +[ ] Evaluating project ':jni' using build file '/Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/android/build.gradle'. +[ ] Using default execution profile +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] C/C++: android.ndkVersion from module build.gradle is [28.2.13676358] +[ ] C/C++: android.ndkPath from module build.gradle is not set +[ ] C/C++: ndk.dir in local.properties is not set +[ ] C/C++: Not considering ANDROID_NDK_HOME because support was removed after deprecation period. +[ ] C/C++: sdkFolder is /Users/anbarasu/Library/Android/sdk +[ ] > Configure project :jni_flutter +[ ] Evaluating project ':jni_flutter' using build file '/Users/anbarasu/.pub-cache/hosted/pub.dev/jni_flutter-1.0.1/android/build.gradle'. +[ ] Using default execution profile +[ ] All projects evaluated. +[ ] Task name matched 'bundleRelease' +[ ] Selected primary task 'bundleRelease' from project : +[ ] WARNING: Your Android app project: app located at: /Users/anbarasu/Downloads/doormile_flutter/android/app/build.gradle.kts +[ ] applies the Kotlin Gradle Plugin, which will cause build failures in future versions of Flutter. +[ ] Please migrate your app to Built-in Kotlin using this guide: https://docs.flutter.dev/release/breaking-changes/migrate-to-built-in-kotlin/for-app-developers +[ +97 ms] Tasks to be executed: [task ':app:preBuild', task ':app:preReleaseBuild', task ':app:generateReleaseResValues', task ':geolocator_android:preBuild', task ':geolocator_android:preReleaseBuild', task ':geolocator_android:generateReleaseResValues', task ':geolocator_android:generateReleaseResources', task ':geolocator_android:packageReleaseResources', task ':jni:preBuild', task ':jni:preReleaseBuild', task ':jni:generateReleaseResValues', task ':jni:generateReleaseResources', task ':jni:packageReleaseResources', task ':jni_flutter:preBuild', task ':jni_flutter:preReleaseBuild', task ':jni_flutter:generateReleaseResValues', task ':jni_flutter:generateReleaseResources', task ':jni_flutter:packageReleaseResources', task ':app:mapReleaseSourceSetPaths', task ':app:generateReleaseResources', task ':app:mergeReleaseResources', task ':app:createReleaseCompatibleScreenManifests', task ':app:extractDeepLinksRelease', task ':geolocator_android:extractDeepLinksRelease', task ':geolocator_android:processReleaseManifest', task ':jni:extractDeepLinksRelease', task ':jni:processReleaseManifest', task ':jni_flutter:extractDeepLinksRelease', task ':jni_flutter:processReleaseManifest', task ':app:processReleaseMainManifest', task ':app:outputReleaseAppLinkSettings', task ':app:processReleaseManifest', task ':app:processApplicationManifestReleaseForBundle', task ':geolocator_android:writeReleaseAarMetadata', task ':jni:writeReleaseAarMetadata', task ':jni_flutter:writeReleaseAarMetadata', task ':app:checkReleaseAarMetadata', task ':app:cleanMergeReleaseAssets', task ':app:compileFlutterBuildRelease', task ':app:mergeReleaseShaders', task ':app:compileReleaseShaders', task ':app:generateReleaseAssets', task ':geolocator_android:mergeReleaseShaders', task ':geolocator_android:compileReleaseShaders', task ':geolocator_android:generateReleaseAssets', task ':geolocator_android:mergeReleaseAssets', task ':jni:mergeReleaseShaders', task ':jni:compileReleaseShaders', task ':jni:generateReleaseAssets', task ':jni:mergeReleaseAssets', task ':jni_flutter:mergeReleaseShaders', task ':jni_flutter:compileReleaseShaders', task ':jni_flutter:generateReleaseAssets', task ':jni_flutter:mergeReleaseAssets', task ':app:mergeReleaseAssets', task ':app:copyFlutterAssetsRelease', task ':app:packageReleaseResources', task ':app:parseReleaseLocalResources', task ':app:processReleaseManifestForPackage', task ':geolocator_android:compileReleaseLibraryResources', task ':geolocator_android:parseReleaseLocalResources', task ':geolocator_android:generateReleaseRFile', task ':jni:compileReleaseLibraryResources', task ':jni:parseReleaseLocalResources', task ':jni:generateReleaseRFile', task ':jni_flutter:compileReleaseLibraryResources', task ':jni_flutter:parseReleaseLocalResources', task ':jni_flutter:generateReleaseRFile', task ':app:processReleaseResources', task ':app:bundleReleaseResources', task ':app:extractReleaseVersionControlInfo', task ':geolocator_android:checkKotlinGradlePluginConfigurationErrors', task ':geolocator_android:compileReleaseKotlin', task ':geolocator_android:javaPreCompileRelease', task ':geolocator_android:compileReleaseJavaWithJavac', task ':geolocator_android:bundleLibRuntimeToDirRelease', task ':jni:checkKotlinGradlePluginConfigurationErrors', task ':jni:compileReleaseKotlin', task ':jni:javaPreCompileRelease', task ':jni:compileReleaseJavaWithJavac', task ':jni:bundleLibCompileToJarRelease', task ':jni_flutter:checkKotlinGradlePluginConfigurationErrors', task ':jni_flutter:compileReleaseKotlin', task ':jni_flutter:javaPreCompileRelease', task ':jni_flutter:compileReleaseJavaWithJavac', task ':jni_flutter:bundleLibRuntimeToDirRelease', task ':jni:bundleLibRuntimeToDirRelease', task ':app:checkReleaseDuplicateClasses', task ':app:buildKotlinToolingMetadata', task ':app:checkKotlinGradlePluginConfigurationErrors', task ':geolocator_android:bundleLibCompileToJarRelease', task ':jni_flutter:bundleLibCompileToJarRelease', task ':app:compileReleaseKotlin', task ':app:javaPreCompileRelease', task ':app:compileReleaseJavaWithJavac', task ':app:dexBuilderRelease', task ':app:desugarReleaseFileDependencies', task ':app:mergeReleaseStartupProfile', task ':app:mergeExtDexRelease', task ':app:mergeDexRelease', task ':geolocator_android:bundleLibRuntimeToJarRelease', task ':jni_flutter:bundleLibRuntimeToJarRelease', task ':jni:bundleLibRuntimeToJarRelease', task ':app:mergeReleaseGlobalSynthetics', task ':app:processReleaseJavaRes', task ':geolocator_android:processReleaseJavaRes', task ':jni:processReleaseJavaRes', task ':jni_flutter:processReleaseJavaRes', task ':app:mergeReleaseJavaResource', task ':app:configureCMakeRelease[arm64-v8a]', task ':app:buildCMakeRelease[arm64-v8a]', task ':app:configureCMakeRelease[armeabi-v7a]', task ':app:buildCMakeRelease[armeabi-v7a]', task ':app:configureCMakeRelease[x86_64]', task ':app:buildCMakeRelease[x86_64]', task ':app:copyJniLibsflutterBuildRelease', task ':app:mergeReleaseJniLibFolders', task ':geolocator_android:mergeReleaseJniLibFolders', task ':geolocator_android:mergeReleaseNativeLibs', task ':geolocator_android:copyReleaseJniLibsProjectOnly', task ':jni:configureCMakeRelWithDebInfo[arm64-v8a]', task ':jni:buildCMakeRelWithDebInfo[arm64-v8a]', task ':jni:configureCMakeRelWithDebInfo[armeabi-v7a]', task ':jni:buildCMakeRelWithDebInfo[armeabi-v7a]', task ':jni:configureCMakeRelWithDebInfo[x86]', task ':jni:buildCMakeRelWithDebInfo[x86]', task ':jni:configureCMakeRelWithDebInfo[x86_64]', task ':jni:buildCMakeRelWithDebInfo[x86_64]', task ':jni:mergeReleaseJniLibFolders', task ':jni:mergeReleaseNativeLibs', task ':jni:copyReleaseJniLibsProjectOnly', task ':jni_flutter:mergeReleaseJniLibFolders', task ':jni_flutter:mergeReleaseNativeLibs', task ':jni_flutter:copyReleaseJniLibsProjectOnly', task ':app:mergeReleaseNativeLibs', task ':app:stripReleaseDebugSymbols', task ':app:writeReleaseAppMetadata', task ':app:buildReleasePreBundle', task ':geolocator_android:prepareReleaseArtProfile', task ':jni:prepareReleaseArtProfile', task ':jni_flutter:prepareReleaseArtProfile', task ':app:mergeReleaseArtProfile', task ':app:compileReleaseArtProfile', task ':app:collectReleaseDependencies', task ':app:configureReleaseDependencies', task ':app:extractReleaseNativeSymbolTables', task ':app:extractProguardFiles', task ':geolocator_android:createFullJarRelease', task ':geolocator_android:extractProguardFiles', task ':geolocator_android:generateReleaseLintModel', task ':geolocator_android:prepareLintJarForPublish', task ':jni:createFullJarRelease', task ':jni:extractProguardFiles', task ':jni:generateReleaseLintModel', task ':jni:prepareLintJarForPublish', task ':jni_flutter:createFullJarRelease', task ':jni_flutter:extractProguardFiles', task ':jni_flutter:generateReleaseLintModel', task ':jni_flutter:prepareLintJarForPublish', task ':app:generateReleaseLintVitalReportModel', task ':geolocator_android:stripReleaseDebugSymbols', task ':geolocator_android:copyReleaseJniLibsProjectAndLocalJars', task ':geolocator_android:extractDeepLinksForAarRelease', task ':geolocator_android:extractReleaseAnnotations', task ':geolocator_android:mergeReleaseGeneratedProguardFiles', task ':geolocator_android:mergeReleaseConsumerProguardFiles', task ':geolocator_android:mergeReleaseJavaResource', task ':geolocator_android:syncReleaseLibJars', task ':geolocator_android:bundleReleaseLocalLintAar', task ':jni_flutter:stripReleaseDebugSymbols', task ':jni_flutter:copyReleaseJniLibsProjectAndLocalJars', task ':jni_flutter:extractDeepLinksForAarRelease', task ':jni_flutter:extractReleaseAnnotations', task ':jni_flutter:mergeReleaseGeneratedProguardFiles', task ':jni_flutter:mergeReleaseConsumerProguardFiles', task ':jni_flutter:mergeReleaseJavaResource', task ':jni_flutter:syncReleaseLibJars', task ':jni_flutter:bundleReleaseLocalLintAar', task ':jni:stripReleaseDebugSymbols', task ':jni:copyReleaseJniLibsProjectAndLocalJars', task ':jni:extractDeepLinksForAarRelease', task ':jni:extractReleaseAnnotations', task ':jni:mergeReleaseGeneratedProguardFiles', task ':jni:mergeReleaseConsumerProguardFiles', task ':jni:mergeReleaseJavaResource', task ':jni:syncReleaseLibJars', task ':jni:bundleReleaseLocalLintAar', task ':geolocator_android:lintVitalAnalyzeRelease', task ':geolocator_android:writeReleaseLintModelMetadata', task ':jni:lintVitalAnalyzeRelease', task ':jni:writeReleaseLintModelMetadata', task ':jni_flutter:lintVitalAnalyzeRelease', task ':jni_flutter:writeReleaseLintModelMetadata', task ':app:lintVitalAnalyzeRelease', task ':geolocator_android:generateReleaseLintVitalModel', task ':jni:generateReleaseLintVitalModel', task ':jni_flutter:generateReleaseLintVitalModel', task ':app:lintVitalReportRelease', task ':app:lintVitalRelease', task ':app:parseReleaseIntegrityConfig', task ':app:packageReleaseBundle', task ':app:validateSigningRelease', task ':app:signReleaseBundle', task ':app:produceReleaseBundleIdeListingFile', task ':app:createReleaseBundleListingFileRedirect', task ':app:bundleRelease'] +[ ] Tasks that were excluded: [] +[ ] work action Parameters of ClassesDirToClassesTransform (Thread[Execution worker Thread 6,5,main]) started. +[ ] work action Parameters of DexingNoClasspathTransform (Thread[Execution worker Thread 6,5,main]) started. +[ ] work action Parameters of DexingOutputSplitTransform (Thread[Execution worker Thread 6,5,main]) started. +[ ] work action Parameters of IdentityTransform (Thread[Execution worker Thread 6,5,main]) started. +[ ] work action Parameters of DexingOutputSplitTransform (Thread[Execution worker Thread 6,5,main]) started. +[ ] work action Parameters of ExtractAarTransform (Thread[Execution worker Thread 6,5,main]) started. +[ ] work action Parameters of ExtractAarTransform (Thread[Execution worker Thread 6,5,main]) started. +[ ] Resolve mutations for :app:preBuild (Thread[Execution worker Thread 6,5,main]) started. +[ ] :app:preBuild (Thread[Execution worker Thread 6,5,main]) started. +[ ] > Task :app:preBuild UP-TO-DATE +[ ] Skipping task ':app:preBuild' as it has no actions. +[ ] Resolve mutations for :app:preReleaseBuild (Thread[Execution worker Thread 6,5,main]) started. +[ ] :app:preReleaseBuild (Thread[Execution worker Thread 6,5,main]) started. +[ ] > Task :app:preReleaseBuild UP-TO-DATE +[ ] Skipping task ':app:preReleaseBuild' as it has no actions. +[ ] Resolve mutations for :app:generateReleaseResValues (Thread[Execution worker Thread 6,5,main]) started. +[ ] :app:generateReleaseResValues (Thread[Execution worker Thread 6,5,main]) started. +[ ] > Task :app:generateReleaseResValues UP-TO-DATE +[ ] Caching disabled for task ':app:generateReleaseResValues' because: +[ ] Build cache is disabled +[ ] Skipping task ':app:generateReleaseResValues' as it is up-to-date. +[ ] Resolve mutations for :geolocator_android:preBuild (Thread[Execution worker Thread 6,5,main]) started. +[ ] :geolocator_android:preBuild (Thread[Execution worker Thread 6,5,main]) started. +[ ] > Task :geolocator_android:preBuild UP-TO-DATE +[ ] Skipping task ':geolocator_android:preBuild' as it has no actions. +[ ] Resolve mutations for :geolocator_android:preReleaseBuild (Thread[Execution worker Thread 6,5,main]) started. +[ ] :geolocator_android:preReleaseBuild (Thread[Execution worker Thread 6,5,main]) started. +[ ] > Task :geolocator_android:preReleaseBuild UP-TO-DATE +[ ] Skipping task ':geolocator_android:preReleaseBuild' as it has no actions. +[ ] Resolve mutations for :geolocator_android:generateReleaseResValues (Thread[Execution worker Thread 6,5,main]) started. +[ ] :geolocator_android:generateReleaseResValues (Thread[Execution worker Thread 6,5,main]) started. +[ ] > Task :geolocator_android:generateReleaseResValues UP-TO-DATE +[ ] Caching disabled for task ':geolocator_android:generateReleaseResValues' because: +[ ] Build cache is disabled +[ ] Skipping task ':geolocator_android:generateReleaseResValues' as it is up-to-date. +[ ] Resolve mutations for :geolocator_android:generateReleaseResources (Thread[Execution worker Thread 6,5,main]) started. +[ ] :geolocator_android:generateReleaseResources (Thread[included builds,5,main]) started. +[ ] > Task :geolocator_android:generateReleaseResources UP-TO-DATE +[ ] Caching disabled for task ':geolocator_android:generateReleaseResources' because: +[ ] Build cache is disabled +[ ] Skipping task ':geolocator_android:generateReleaseResources' as it is up-to-date. +[ ] Resolve mutations for :geolocator_android:packageReleaseResources (Thread[included builds,5,main]) started. +[ ] :geolocator_android:packageReleaseResources (Thread[included builds,5,main]) started. +[ ] > Task :geolocator_android:packageReleaseResources UP-TO-DATE +[ ] Caching disabled for task ':geolocator_android:packageReleaseResources' because: +[ ] Build cache is disabled +[ ] Skipping task ':geolocator_android:packageReleaseResources' as it is up-to-date. +[ ] work action resolve packageReleaseResources (project :geolocator_android) (Thread[included builds,5,main]) started. +[ ] Resolve mutations for :jni:preBuild (Thread[included builds,5,main]) started. +[ ] :jni:preBuild (Thread[included builds,5,main]) started. +[ ] > Task :jni:preBuild UP-TO-DATE +[ ] Skipping task ':jni:preBuild' as it has no actions. +[ ] Resolve mutations for :jni:preReleaseBuild (Thread[included builds,5,main]) started. +[ ] :jni:preReleaseBuild (Thread[included builds,5,main]) started. +[ ] > Task :jni:preReleaseBuild UP-TO-DATE +[ ] Skipping task ':jni:preReleaseBuild' as it has no actions. +[ ] Resolve mutations for :jni:generateReleaseResValues (Thread[included builds,5,main]) started. +[ ] :jni:generateReleaseResValues (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :jni:generateReleaseResValues UP-TO-DATE +[ ] Caching disabled for task ':jni:generateReleaseResValues' because: +[ ] Build cache is disabled +[ ] Skipping task ':jni:generateReleaseResValues' as it is up-to-date. +[ ] Resolve mutations for :jni:generateReleaseResources (Thread[Execution worker Thread 9,5,main]) started. +[ ] :jni:generateReleaseResources (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :jni:generateReleaseResources UP-TO-DATE +[ ] Caching disabled for task ':jni:generateReleaseResources' because: +[ ] Build cache is disabled +[ ] Skipping task ':jni:generateReleaseResources' as it is up-to-date. +[ ] Resolve mutations for :jni:packageReleaseResources (Thread[Execution worker Thread 9,5,main]) started. +[ ] :jni:packageReleaseResources (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :jni:packageReleaseResources UP-TO-DATE +[ ] Caching disabled for task ':jni:packageReleaseResources' because: +[ ] Build cache is disabled +[ ] Skipping task ':jni:packageReleaseResources' as it is up-to-date. +[ ] work action resolve packageReleaseResources (project :jni) (Thread[Execution worker Thread 9,5,main]) started. +[ ] Resolve mutations for :jni_flutter:preBuild (Thread[Execution worker Thread 9,5,main]) started. +[ ] :jni_flutter:preBuild (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :jni_flutter:preBuild UP-TO-DATE +[ ] Skipping task ':jni_flutter:preBuild' as it has no actions. +[ ] Resolve mutations for :jni_flutter:preReleaseBuild (Thread[Execution worker Thread 9,5,main]) started. +[ ] :jni_flutter:preReleaseBuild (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :jni_flutter:preReleaseBuild UP-TO-DATE +[ ] Skipping task ':jni_flutter:preReleaseBuild' as it has no actions. +[ ] Resolve mutations for :jni_flutter:generateReleaseResValues (Thread[Execution worker Thread 9,5,main]) started. +[ ] :jni_flutter:generateReleaseResValues (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :jni_flutter:generateReleaseResValues UP-TO-DATE +[ ] Caching disabled for task ':jni_flutter:generateReleaseResValues' because: +[ ] Build cache is disabled +[ ] Skipping task ':jni_flutter:generateReleaseResValues' as it is up-to-date. +[ ] Resolve mutations for :jni_flutter:generateReleaseResources (Thread[Execution worker Thread 9,5,main]) started. +[ ] :jni_flutter:generateReleaseResources (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :jni_flutter:generateReleaseResources UP-TO-DATE +[ ] Caching disabled for task ':jni_flutter:generateReleaseResources' because: +[ ] Build cache is disabled +[ ] Skipping task ':jni_flutter:generateReleaseResources' as it is up-to-date. +[ ] Resolve mutations for :jni_flutter:packageReleaseResources (Thread[Execution worker Thread 9,5,main]) started. +[ ] :jni_flutter:packageReleaseResources (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :jni_flutter:packageReleaseResources UP-TO-DATE +[ ] Caching disabled for task ':jni_flutter:packageReleaseResources' because: +[ ] Build cache is disabled +[ ] Skipping task ':jni_flutter:packageReleaseResources' as it is up-to-date. +[ ] work action resolve packageReleaseResources (project :jni_flutter) (Thread[Execution worker Thread 9,5,main]) started. +[ ] Resolve mutations for :app:mapReleaseSourceSetPaths (Thread[Execution worker Thread 9,5,main]) started. +[ ] :app:mapReleaseSourceSetPaths (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :app:mapReleaseSourceSetPaths UP-TO-DATE +[ ] Caching disabled for task ':app:mapReleaseSourceSetPaths' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':app:mapReleaseSourceSetPaths' as it is up-to-date. +[ ] Resolve mutations for :app:generateReleaseResources (Thread[Execution worker Thread 9,5,main]) started. +[ ] :app:generateReleaseResources (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :app:generateReleaseResources UP-TO-DATE +[ ] Caching disabled for task ':app:generateReleaseResources' because: +[ ] Build cache is disabled +[ ] Skipping task ':app:generateReleaseResources' as it is up-to-date. +[ ] Resolve mutations for :app:mergeReleaseResources (Thread[Execution worker Thread 9,5,main]) started. +[ ] :app:mergeReleaseResources (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :app:mergeReleaseResources UP-TO-DATE +[ ] Caching disabled for task ':app:mergeReleaseResources' because: +[ ] Build cache is disabled +[ ] Skipping task ':app:mergeReleaseResources' as it is up-to-date. +[ ] Resolve mutations for :app:createReleaseCompatibleScreenManifests (Thread[Execution worker Thread 9,5,main]) started. +[ ] :app:createReleaseCompatibleScreenManifests (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :app:createReleaseCompatibleScreenManifests UP-TO-DATE +[ ] Caching disabled for task ':app:createReleaseCompatibleScreenManifests' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':app:createReleaseCompatibleScreenManifests' as it is up-to-date. +[ ] Resolve mutations for :app:extractDeepLinksRelease (Thread[Execution worker Thread 9,5,main]) started. +[ ] :app:extractDeepLinksRelease (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :app:extractDeepLinksRelease UP-TO-DATE +[ ] Caching disabled for task ':app:extractDeepLinksRelease' because: +[ ] Build cache is disabled +[ ] Skipping task ':app:extractDeepLinksRelease' as it is up-to-date. +[ ] Resolve mutations for :geolocator_android:extractDeepLinksRelease (Thread[Execution worker Thread 9,5,main]) started. +[ ] :geolocator_android:extractDeepLinksRelease (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :geolocator_android:extractDeepLinksRelease UP-TO-DATE +[ ] Caching disabled for task ':geolocator_android:extractDeepLinksRelease' because: +[ ] Build cache is disabled +[ ] Skipping task ':geolocator_android:extractDeepLinksRelease' as it is up-to-date. +[ ] work action resolve navigation.json (project :geolocator_android) (Thread[Execution worker Thread 9,5,main]) started. +[ ] Resolve mutations for :geolocator_android:processReleaseManifest (Thread[Execution worker Thread 9,5,main]) started. +[ ] :geolocator_android:processReleaseManifest (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :geolocator_android:processReleaseManifest UP-TO-DATE +[ ] Caching disabled for task ':geolocator_android:processReleaseManifest' because: +[ ] Build cache is disabled +[ ] Skipping task ':geolocator_android:processReleaseManifest' as it is up-to-date. +[ ] work action resolve AndroidManifest.xml (project :geolocator_android) (Thread[Execution worker Thread 9,5,main]) started. +[ ] Resolve mutations for :jni:extractDeepLinksRelease (Thread[Execution worker Thread 9,5,main]) started. +[ ] :jni:extractDeepLinksRelease (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :jni:extractDeepLinksRelease UP-TO-DATE +[ ] Caching disabled for task ':jni:extractDeepLinksRelease' because: +[ ] Build cache is disabled +[ ] Skipping task ':jni:extractDeepLinksRelease' as it is up-to-date. +[ ] work action resolve navigation.json (project :jni) (Thread[Execution worker Thread 9,5,main]) started. +[ ] Resolve mutations for :jni:processReleaseManifest (Thread[Execution worker Thread 9,5,main]) started. +[ ] :jni:processReleaseManifest (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :jni:processReleaseManifest UP-TO-DATE +[ ] Caching disabled for task ':jni:processReleaseManifest' because: +[ ] Build cache is disabled +[ ] Skipping task ':jni:processReleaseManifest' as it is up-to-date. +[ ] work action resolve AndroidManifest.xml (project :jni) (Thread[Execution worker Thread 9,5,main]) started. +[ ] Resolve mutations for :jni_flutter:extractDeepLinksRelease (Thread[Execution worker Thread 9,5,main]) started. +[ ] :jni_flutter:extractDeepLinksRelease (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :jni_flutter:extractDeepLinksRelease UP-TO-DATE +[ ] Caching disabled for task ':jni_flutter:extractDeepLinksRelease' because: +[ ] Build cache is disabled +[ ] Skipping task ':jni_flutter:extractDeepLinksRelease' as it is up-to-date. +[ ] work action resolve navigation.json (project :jni_flutter) (Thread[Execution worker Thread 9,5,main]) started. +[ ] Resolve mutations for :jni_flutter:processReleaseManifest (Thread[Execution worker Thread 9,5,main]) started. +[ ] :jni_flutter:processReleaseManifest (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :jni_flutter:processReleaseManifest UP-TO-DATE +[ ] Caching disabled for task ':jni_flutter:processReleaseManifest' because: +[ ] Build cache is disabled +[ ] Skipping task ':jni_flutter:processReleaseManifest' as it is up-to-date. +[ ] work action resolve AndroidManifest.xml (project :jni_flutter) (Thread[Execution worker Thread 9,5,main]) started. +[ ] Resolve mutations for :app:processReleaseMainManifest (Thread[Execution worker Thread 9,5,main]) started. +[ ] :app:processReleaseMainManifest (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :app:processReleaseMainManifest UP-TO-DATE +[ ] Caching disabled for task ':app:processReleaseMainManifest' because: +[ ] Build cache is disabled +[ ] Skipping task ':app:processReleaseMainManifest' as it is up-to-date. +[ ] Resolve mutations for :app:outputReleaseAppLinkSettings (Thread[Execution worker Thread 9,5,main]) started. +[ ] :app:outputReleaseAppLinkSettings (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :app:outputReleaseAppLinkSettings UP-TO-DATE +[ ] Caching disabled for task ':app:outputReleaseAppLinkSettings' because: +[ ] Build cache is disabled +[ ] Caching has not been enabled for the task +[ ] Skipping task ':app:outputReleaseAppLinkSettings' as it is up-to-date. +[ ] Resolve mutations for :app:processReleaseManifest (Thread[Execution worker Thread 9,5,main]) started. +[ ] :app:processReleaseManifest (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :app:processReleaseManifest UP-TO-DATE +[ ] Caching disabled for task ':app:processReleaseManifest' because: +[ ] Build cache is disabled +[ ] Skipping task ':app:processReleaseManifest' as it is up-to-date. +[ ] Resolve mutations for :app:processApplicationManifestReleaseForBundle (Thread[Execution worker Thread 9,5,main]) started. +[ ] :app:processApplicationManifestReleaseForBundle (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :app:processApplicationManifestReleaseForBundle UP-TO-DATE +[ ] Caching disabled for task ':app:processApplicationManifestReleaseForBundle' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':app:processApplicationManifestReleaseForBundle' as it is up-to-date. +[ ] Resolve mutations for :geolocator_android:writeReleaseAarMetadata (Thread[Execution worker Thread 9,5,main]) started. +[ ] :geolocator_android:writeReleaseAarMetadata (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :geolocator_android:writeReleaseAarMetadata UP-TO-DATE +[ ] Caching disabled for task ':geolocator_android:writeReleaseAarMetadata' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':geolocator_android:writeReleaseAarMetadata' as it is up-to-date. +[ ] work action resolve aar-metadata.properties (project :geolocator_android) (Thread[Execution worker Thread 9,5,main]) started. +[ ] Resolve mutations for :jni:writeReleaseAarMetadata (Thread[Execution worker Thread 9,5,main]) started. +[ ] :jni:writeReleaseAarMetadata (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :jni:writeReleaseAarMetadata UP-TO-DATE +[ ] Caching disabled for task ':jni:writeReleaseAarMetadata' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':jni:writeReleaseAarMetadata' as it is up-to-date. +[ ] work action resolve aar-metadata.properties (project :jni) (Thread[Execution worker Thread 9,5,main]) started. +[ ] Resolve mutations for :jni_flutter:writeReleaseAarMetadata (Thread[Execution worker Thread 9,5,main]) started. +[ ] :jni_flutter:writeReleaseAarMetadata (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :jni_flutter:writeReleaseAarMetadata UP-TO-DATE +[ ] Caching disabled for task ':jni_flutter:writeReleaseAarMetadata' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':jni_flutter:writeReleaseAarMetadata' as it is up-to-date. +[ ] work action resolve aar-metadata.properties (project :jni_flutter) (Thread[Execution worker Thread 9,5,main]) started. +[ ] Resolve mutations for :app:checkReleaseAarMetadata (Thread[Execution worker Thread 9,5,main]) started. +[ ] :app:checkReleaseAarMetadata (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :app:checkReleaseAarMetadata UP-TO-DATE +[ ] Caching disabled for task ':app:checkReleaseAarMetadata' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':app:checkReleaseAarMetadata' as it is up-to-date. +[ ] Resolve mutations for :app:cleanMergeReleaseAssets (Thread[Execution worker Thread 9,5,main]) started. +[ +90 ms] :app:cleanMergeReleaseAssets (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :app:cleanMergeReleaseAssets +[ ] Caching disabled for task ':app:cleanMergeReleaseAssets' because: +[ ] Build cache is disabled +[ ] Task ':app:cleanMergeReleaseAssets' is not up-to-date because: +[ ] Task has not declared any outputs despite executing actions. +[ ] Resolve mutations for :app:compileFlutterBuildRelease (Thread[Execution worker Thread 9,5,main]) started. +[ ] :app:compileFlutterBuildRelease (Thread[Execution worker Thread 9,5,main]) started. +[+1199 ms] > Task :app:compileFlutterBuildRelease +[ ] Caching disabled for task ':app:compileFlutterBuildRelease' because: +[ ] Build cache is disabled +[ ] Caching has not been enabled for the task +[ ] Task ':app:compileFlutterBuildRelease' is not up-to-date because: +[ ] Value of input property 'verbose' has changed for task ':app:compileFlutterBuildRelease' +[ ] Starting process 'command '/Users/anbarasu/flutter/bin/flutter''. Working directory: /Users/anbarasu/Downloads/doormile_flutter Command: /Users/anbarasu/flutter/bin/flutter --verbose assemble --no-version-check --depfile /Users/anbarasu/Downloads/doormile_flutter/build/app/intermediates/flutter/release/flutter_build.d --output /Users/anbarasu/Downloads/doormile_flutter/build/app/intermediates/flutter/release -dTargetFile=lib/main.dart -dTargetPlatform=android -dBuildMode=release -dTrackWidgetCreation=true -dTreeShakeIcons=true --DartDefines=RkxVVFRFUl9WRVJTSU9OPTMuNDQuMA==,RkxVVFRFUl9DSEFOTkVMPXN0YWJsZQ==,RkxVVFRFUl9HSVRfVVJMPWh0dHBzOi8vZ2l0aHViLmNvbS9mbHV0dGVyL2ZsdXR0ZXIuZ2l0,RkxVVFRFUl9GUkFNRVdPUktfUkVWSVNJT049NTU5ZmZhM2Y3NQ==,RkxVVFRFUl9FTkdJTkVfUkVWSVNJT049NGM1MjVkYWM1ZQ==,RkxVVFRFUl9EQVJUX1ZFUlNJT049My4xMi4w -dFlavor= -dAndroidArchs=android-arm android-arm64 android-x64 -dMinSdkVersion=24 android_aot_bundle_release_android-arm android_aot_bundle_release_android-arm64 android_aot_bundle_release_android-x64 +[ ] Successfully started process 'command '/Users/anbarasu/flutter/bin/flutter'' +[ ] [ +12 ms] executing: sysctl hw.optional.arm64 +[ ] [ +4 ms] Exit code 0 from: sysctl hw.optional.arm64 +[ ] [ ] hw.optional.arm64: 1 +[ ] [ +3 ms] Artifact Instance of 'MaterialFonts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'GradleWrapper' is not required, skipping update. +[ ] [ ] Artifact Instance of 'AndroidGenSnapshotArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'AndroidInternalBuildArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'IOSEngineArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'FlutterWebSdk' is not required, skipping update. +[ ] [ ] Artifact Instance of 'LegacyCanvasKitRemover' is not required, skipping update. +[ ] [ ] Artifact Instance of 'FlutterSdk' is not required, skipping update. +[ ] [ ] Artifact Instance of 'WindowsEngineArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'MacOSEngineArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'LinuxEngineArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'LinuxFuchsiaSDKArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'MacOSFuchsiaSDKArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'FlutterRunnerSDKArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'FlutterRunnerDebugSymbols' is not required, skipping update. +[ ] [ ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'FontSubsetArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'PubDependencies' is not required, skipping update. +[ ] [ +3 ms] Artifact Instance of 'AndroidGenSnapshotArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'AndroidInternalBuildArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'IOSEngineArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'FlutterWebSdk' is not required, skipping update. +[ ] [ ] Artifact Instance of 'FlutterEngineStamp' is not required, skipping update. +[ ] [ ] Artifact Instance of 'LegacyCanvasKitRemover' is not required, skipping update. +[ ] [ ] Artifact Instance of 'WindowsEngineArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'MacOSEngineArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'LinuxEngineArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'LinuxFuchsiaSDKArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'MacOSFuchsiaSDKArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'FlutterRunnerSDKArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'FlutterRunnerDebugSymbols' is not required, skipping update. +[ ] [ +17 ms] Artifact Instance of 'MaterialFonts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'GradleWrapper' is not required, skipping update. +[ ] [ ] Artifact Instance of 'AndroidInternalBuildArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'IOSEngineArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'FlutterWebSdk' is not required, skipping update. +[ ] [ ] Artifact Instance of 'FlutterEngineStamp' is not required, skipping update. +[ ] [ ] Artifact Instance of 'LegacyCanvasKitRemover' is not required, skipping update. +[ ] [ ] Artifact Instance of 'FlutterSdk' is not required, skipping update. +[ ] [ ] Artifact Instance of 'WindowsEngineArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'MacOSEngineArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'LinuxEngineArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'LinuxFuchsiaSDKArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'MacOSFuchsiaSDKArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'FlutterRunnerSDKArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'FlutterRunnerDebugSymbols' is not required, skipping update. +[ ] [ ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'FontSubsetArtifacts' is not required, skipping update. +[ ] [ ] Artifact Instance of 'PubDependencies' is not required, skipping update. +[ ] [ +16 ms] Initializing file store +[ ] [ +4 ms] Done initializing file store +[ ] [ +55 ms] Skipping target: gen_dart_plugin_registrant +[ ] [ +1 ms] Skipping target: dart_build +[ ] [ ] Skipping target: gen_localizations +[ ] [ ] Skipping target: install_code_assets +[ ] [ +449 ms] Skipping target: kernel_snapshot_program +[ ] [ +34 ms] Skipping target: android_aot_release_android-arm +[ ] [ +30 ms] Skipping target: aot_android_asset_bundle +[ ] [ +31 ms] Skipping target: android_aot_release_android-arm64 +[ ] [ +31 ms] Skipping target: android_aot_release_android-x64 +[ ] [ +33 ms] Skipping target: android_aot_bundle_release_android-arm +[ ] [ +32 ms] Skipping target: android_aot_bundle_release_android-arm64 +[ ] [ +33 ms] Skipping target: android_aot_bundle_release_android-x64 +[ ] [ ] Skipping target: _composite +[ ] [ ] Persisting file store +[ ] [ +3 ms] Done persisting file store +[ ] [ +5 ms] build succeeded. +[ ] [ +2 ms] "flutter assemble" took 789ms. +[ ] [ +2 ms] executing: sw_vers -productName +[ ] [ +10 ms] Exit code 0 from: sw_vers -productName +[ ] [ ] macOS +[ ] [ ] executing: sw_vers -productVersion +[ ] [ +7 ms] Exit code 0 from: sw_vers -productVersion +[ ] [ ] 26.4.1 +[ ] [ ] executing: sw_vers -buildVersion +[ ] [ +11 ms] Exit code 0 from: sw_vers -buildVersion +[ ] [ ] 25E253 +[ ] [ ] executing: uname -m +[ ] [ +6 ms] Exit code 0 from: uname -m +[ ] [ ] arm64 +[ ] [ +21 ms] Running 1 shutdown hook +[ ] [ ] Shutdown hooks complete +[ ] [ +257 ms] exiting with code 0 +[ ] Resolve mutations for :app:mergeReleaseShaders (Thread[Execution worker Thread 9,5,main]) started. +[ ] :app:mergeReleaseShaders (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :app:mergeReleaseShaders UP-TO-DATE +[ ] Caching disabled for task ':app:mergeReleaseShaders' because: +[ ] Build cache is disabled +[ ] Simple merging task +[ ] Skipping task ':app:mergeReleaseShaders' as it is up-to-date. +[ ] Resolve mutations for :app:compileReleaseShaders (Thread[Execution worker Thread 9,5,main]) started. +[ ] :app:compileReleaseShaders (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :app:compileReleaseShaders NO-SOURCE +[ ] Skipping task ':app:compileReleaseShaders' as it has no source files and no previous output files. +[ ] Resolve mutations for :app:generateReleaseAssets (Thread[Execution worker Thread 9,5,main]) started. +[ ] :app:generateReleaseAssets (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :app:generateReleaseAssets UP-TO-DATE +[ ] Skipping task ':app:generateReleaseAssets' as it has no actions. +[ ] Resolve mutations for :geolocator_android:mergeReleaseShaders (Thread[Execution worker Thread 5,5,main]) started. +[ ] :geolocator_android:mergeReleaseShaders (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :geolocator_android:mergeReleaseShaders UP-TO-DATE +[ ] Caching disabled for task ':geolocator_android:mergeReleaseShaders' because: +[ ] Build cache is disabled +[ ] Simple merging task +[ ] Skipping task ':geolocator_android:mergeReleaseShaders' as it is up-to-date. +[ ] Resolve mutations for :geolocator_android:compileReleaseShaders (Thread[Execution worker Thread 5,5,main]) started. +[ ] :geolocator_android:compileReleaseShaders (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :geolocator_android:compileReleaseShaders NO-SOURCE +[ ] Skipping task ':geolocator_android:compileReleaseShaders' as it has no source files and no previous output files. +[ ] Resolve mutations for :geolocator_android:generateReleaseAssets (Thread[Execution worker Thread 5,5,main]) started. +[ ] :geolocator_android:generateReleaseAssets (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :geolocator_android:generateReleaseAssets UP-TO-DATE +[ ] Skipping task ':geolocator_android:generateReleaseAssets' as it has no actions. +[ ] Resolve mutations for :geolocator_android:mergeReleaseAssets (Thread[Execution worker Thread 5,5,main]) started. +[ ] :geolocator_android:mergeReleaseAssets (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :geolocator_android:mergeReleaseAssets UP-TO-DATE +[ ] Caching disabled for task ':geolocator_android:mergeReleaseAssets' because: +[ ] Build cache is disabled +[ ] Simple merging task +[ ] Skipping task ':geolocator_android:mergeReleaseAssets' as it is up-to-date. +[ ] work action resolve mergeReleaseAssets (project :geolocator_android) (Thread[Execution worker Thread 5,5,main]) started. +[ ] Resolve mutations for :jni:mergeReleaseShaders (Thread[Execution worker Thread 5,5,main]) started. +[ ] :jni:mergeReleaseShaders (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :jni:mergeReleaseShaders UP-TO-DATE +[ ] Caching disabled for task ':jni:mergeReleaseShaders' because: +[ ] Build cache is disabled +[ ] Simple merging task +[ ] Skipping task ':jni:mergeReleaseShaders' as it is up-to-date. +[ ] Resolve mutations for :jni:compileReleaseShaders (Thread[Execution worker Thread 5,5,main]) started. +[ ] :jni:compileReleaseShaders (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :jni:compileReleaseShaders NO-SOURCE +[ ] Skipping task ':jni:compileReleaseShaders' as it has no source files and no previous output files. +[ ] Resolve mutations for :jni:generateReleaseAssets (Thread[Execution worker Thread 5,5,main]) started. +[ ] :jni:generateReleaseAssets (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :jni:generateReleaseAssets UP-TO-DATE +[ ] Skipping task ':jni:generateReleaseAssets' as it has no actions. +[ ] Resolve mutations for :jni:mergeReleaseAssets (Thread[Execution worker Thread 5,5,main]) started. +[ ] :jni:mergeReleaseAssets (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :jni:mergeReleaseAssets UP-TO-DATE +[ ] Caching disabled for task ':jni:mergeReleaseAssets' because: +[ ] Build cache is disabled +[ ] Simple merging task +[ ] Skipping task ':jni:mergeReleaseAssets' as it is up-to-date. +[ ] work action resolve mergeReleaseAssets (project :jni) (Thread[Execution worker Thread 5,5,main]) started. +[ ] Resolve mutations for :jni_flutter:mergeReleaseShaders (Thread[Execution worker Thread 5,5,main]) started. +[ ] :jni_flutter:mergeReleaseShaders (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :jni_flutter:mergeReleaseShaders UP-TO-DATE +[ ] Caching disabled for task ':jni_flutter:mergeReleaseShaders' because: +[ ] Build cache is disabled +[ ] Simple merging task +[ ] Skipping task ':jni_flutter:mergeReleaseShaders' as it is up-to-date. +[ ] Resolve mutations for :jni_flutter:compileReleaseShaders (Thread[Execution worker Thread 5,5,main]) started. +[ ] :jni_flutter:compileReleaseShaders (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :jni_flutter:compileReleaseShaders NO-SOURCE +[ ] Skipping task ':jni_flutter:compileReleaseShaders' as it has no source files and no previous output files. +[ ] Resolve mutations for :jni_flutter:generateReleaseAssets (Thread[Execution worker Thread 5,5,main]) started. +[ ] :jni_flutter:generateReleaseAssets (Thread[Execution worker Thread 3,5,main]) started. +[ ] > Task :jni_flutter:generateReleaseAssets UP-TO-DATE +[ ] Skipping task ':jni_flutter:generateReleaseAssets' as it has no actions. +[ ] Resolve mutations for :jni_flutter:mergeReleaseAssets (Thread[Execution worker Thread 3,5,main]) started. +[ ] :jni_flutter:mergeReleaseAssets (Thread[Execution worker Thread 3,5,main]) started. +[ ] > Task :jni_flutter:mergeReleaseAssets UP-TO-DATE +[ ] Caching disabled for task ':jni_flutter:mergeReleaseAssets' because: +[ ] Build cache is disabled +[ ] Simple merging task +[ ] Skipping task ':jni_flutter:mergeReleaseAssets' as it is up-to-date. +[ ] work action resolve mergeReleaseAssets (project :jni_flutter) (Thread[Execution worker Thread 3,5,main]) started. +[ ] Resolve mutations for :app:mergeReleaseAssets (Thread[Execution worker Thread 3,5,main]) started. +[ ] :app:mergeReleaseAssets (Thread[Execution worker Thread 3,5,main]) started. +[ ] > Task :app:mergeReleaseAssets +[ ] Caching disabled for task ':app:mergeReleaseAssets' because: +[ ] Build cache is disabled +[ ] Simple merging task +[ ] Task ':app:mergeReleaseAssets' is not up-to-date because: +[ ] Output property 'outputDir' file /Users/anbarasu/Downloads/doormile_flutter/build/app/intermediates/assets/release/mergeReleaseAssets has been removed. +[ ] The input changes require a full rebuild for incremental task ':app:mergeReleaseAssets'. +[ ] Resolve mutations for :app:copyFlutterAssetsRelease (Thread[Execution worker Thread 3,5,main]) started. +[ ] :app:copyFlutterAssetsRelease (Thread[Execution worker Thread 3,5,main]) started. +[ ] > Task :app:copyFlutterAssetsRelease +[ ] Caching disabled for task ':app:copyFlutterAssetsRelease' because: +[ ] Build cache is disabled +[ ] Not worth caching +[ ] Task ':app:copyFlutterAssetsRelease' is not up-to-date because: +[ ] Output property 'destinationDir' file /Users/anbarasu/Downloads/doormile_flutter/build/app/intermediates/assets/release/mergeReleaseAssets/flutter_assets has been removed. +[ ] Output property 'destinationDir' file /Users/anbarasu/Downloads/doormile_flutter/build/app/intermediates/assets/release/mergeReleaseAssets/flutter_assets/AssetManifest.bin has been removed. +[ ] Output property 'destinationDir' file /Users/anbarasu/Downloads/doormile_flutter/build/app/intermediates/assets/release/mergeReleaseAssets/flutter_assets/FontManifest.json has been removed. +[ ] and more... +[ ] Resolve mutations for :app:packageReleaseResources (Thread[Execution worker Thread 3,5,main]) started. +[ ] :app:packageReleaseResources (Thread[Execution worker Thread 3,5,main]) started. +[ ] > Task :app:packageReleaseResources UP-TO-DATE +[ ] Caching disabled for task ':app:packageReleaseResources' because: +[ ] Build cache is disabled +[ ] Skipping task ':app:packageReleaseResources' as it is up-to-date. +[ ] Resolve mutations for :app:parseReleaseLocalResources (Thread[Execution worker Thread 3,5,main]) started. +[ ] :app:parseReleaseLocalResources (Thread[Execution worker Thread 3,5,main]) started. +[ ] > Task :app:parseReleaseLocalResources UP-TO-DATE +[ ] Caching disabled for task ':app:parseReleaseLocalResources' because: +[ ] Build cache is disabled +[ ] Skipping task ':app:parseReleaseLocalResources' as it is up-to-date. +[ ] Resolve mutations for :app:processReleaseManifestForPackage (Thread[Execution worker Thread 3,5,main]) started. +[ ] :app:processReleaseManifestForPackage (Thread[Execution worker Thread 3,5,main]) started. +[ ] > Task :app:processReleaseManifestForPackage UP-TO-DATE +[ ] Custom actions are attached to task ':app:processReleaseManifestForPackage'. +[ ] Caching disabled for task ':app:processReleaseManifestForPackage' because: +[ ] Build cache is disabled +[ ] Skipping task ':app:processReleaseManifestForPackage' as it is up-to-date. +[ ] Resolve mutations for :geolocator_android:compileReleaseLibraryResources (Thread[Execution worker Thread 3,5,main]) started. +[ ] :geolocator_android:compileReleaseLibraryResources (Thread[Execution worker Thread 3,5,main]) started. +[ ] > Task :geolocator_android:compileReleaseLibraryResources UP-TO-DATE +[ ] Caching disabled for task ':geolocator_android:compileReleaseLibraryResources' because: +[ ] Build cache is disabled +[ ] Skipping task ':geolocator_android:compileReleaseLibraryResources' as it is up-to-date. +[ ] work action resolve out (project :geolocator_android) (Thread[Execution worker Thread 3,5,main]) started. +[ ] Resolve mutations for :geolocator_android:parseReleaseLocalResources (Thread[Execution worker Thread 3,5,main]) started. +[ ] :geolocator_android:parseReleaseLocalResources (Thread[Execution worker Thread 3,5,main]) started. +[ ] > Task :geolocator_android:parseReleaseLocalResources UP-TO-DATE +[ ] Caching disabled for task ':geolocator_android:parseReleaseLocalResources' because: +[ ] Build cache is disabled +[ ] Skipping task ':geolocator_android:parseReleaseLocalResources' as it is up-to-date. +[ ] Resolve mutations for :geolocator_android:generateReleaseRFile (Thread[Execution worker Thread 3,5,main]) started. +[ ] :geolocator_android:generateReleaseRFile (Thread[Execution worker Thread 3,5,main]) started. +[ ] > Task :geolocator_android:generateReleaseRFile UP-TO-DATE +[ ] Caching disabled for task ':geolocator_android:generateReleaseRFile' because: +[ ] Build cache is disabled +[ ] Skipping task ':geolocator_android:generateReleaseRFile' as it is up-to-date. +[ ] work action resolve package-aware-r.txt (project :geolocator_android) (Thread[Execution worker Thread 3,5,main]) started. +[ ] Resolve mutations for :jni:compileReleaseLibraryResources (Thread[Execution worker Thread 3,5,main]) started. +[ ] :jni:compileReleaseLibraryResources (Thread[Execution worker Thread 3,5,main]) started. +[ ] > Task :jni:compileReleaseLibraryResources UP-TO-DATE +[ ] Caching disabled for task ':jni:compileReleaseLibraryResources' because: +[ ] Build cache is disabled +[ ] Skipping task ':jni:compileReleaseLibraryResources' as it is up-to-date. +[ ] work action resolve out (project :jni) (Thread[Execution worker Thread 3,5,main]) started. +[ ] Resolve mutations for :jni:parseReleaseLocalResources (Thread[Execution worker Thread 3,5,main]) started. +[ ] :jni:parseReleaseLocalResources (Thread[Execution worker Thread 3,5,main]) started. +[ ] > Task :jni:parseReleaseLocalResources UP-TO-DATE +[ ] Caching disabled for task ':jni:parseReleaseLocalResources' because: +[ ] Build cache is disabled +[ ] Skipping task ':jni:parseReleaseLocalResources' as it is up-to-date. +[ ] Resolve mutations for :jni:generateReleaseRFile (Thread[Execution worker Thread 3,5,main]) started. +[ ] :jni:generateReleaseRFile (Thread[Execution worker Thread 3,5,main]) started. +[ ] > Task :jni:generateReleaseRFile UP-TO-DATE +[ ] Caching disabled for task ':jni:generateReleaseRFile' because: +[ ] Build cache is disabled +[ ] Skipping task ':jni:generateReleaseRFile' as it is up-to-date. +[ ] work action resolve package-aware-r.txt (project :jni) (Thread[Execution worker Thread 3,5,main]) started. +[ ] Resolve mutations for :jni_flutter:compileReleaseLibraryResources (Thread[Execution worker Thread 3,5,main]) started. +[ ] :jni_flutter:compileReleaseLibraryResources (Thread[Execution worker Thread 3,5,main]) started. +[ ] > Task :jni_flutter:compileReleaseLibraryResources UP-TO-DATE +[ ] Caching disabled for task ':jni_flutter:compileReleaseLibraryResources' because: +[ ] Build cache is disabled +[ ] Skipping task ':jni_flutter:compileReleaseLibraryResources' as it is up-to-date. +[ ] work action resolve out (project :jni_flutter) (Thread[Execution worker Thread 3,5,main]) started. +[ ] Resolve mutations for :jni_flutter:parseReleaseLocalResources (Thread[Execution worker Thread 3,5,main]) started. +[ ] :jni_flutter:parseReleaseLocalResources (Thread[Execution worker Thread 3,5,main]) started. +[ ] > Task :jni_flutter:parseReleaseLocalResources UP-TO-DATE +[ ] Caching disabled for task ':jni_flutter:parseReleaseLocalResources' because: +[ ] Build cache is disabled +[ ] Skipping task ':jni_flutter:parseReleaseLocalResources' as it is up-to-date. +[ ] Resolve mutations for :jni_flutter:generateReleaseRFile (Thread[Execution worker Thread 3,5,main]) started. +[ ] :jni_flutter:generateReleaseRFile (Thread[Execution worker Thread 3,5,main]) started. +[ ] > Task :jni_flutter:generateReleaseRFile UP-TO-DATE +[ ] Caching disabled for task ':jni_flutter:generateReleaseRFile' because: +[ ] Build cache is disabled +[ ] Skipping task ':jni_flutter:generateReleaseRFile' as it is up-to-date. +[ ] work action resolve package-aware-r.txt (project :jni_flutter) (Thread[Execution worker Thread 3,5,main]) started. +[ ] Resolve mutations for :app:processReleaseResources (Thread[Execution worker Thread 5,5,main]) started. +[ ] :app:processReleaseResources (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :app:processReleaseResources UP-TO-DATE +[ ] Caching disabled for task ':app:processReleaseResources' because: +[ ] Build cache is disabled +[ ] Skipping task ':app:processReleaseResources' as it is up-to-date. +[ ] Resolve mutations for :app:bundleReleaseResources (Thread[Execution worker Thread 5,5,main]) started. +[ ] :app:bundleReleaseResources (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :app:bundleReleaseResources UP-TO-DATE +[ ] Caching disabled for task ':app:bundleReleaseResources' because: +[ ] Build cache is disabled +[ ] Skipping task ':app:bundleReleaseResources' as it is up-to-date. +[ ] Resolve mutations for :app:extractReleaseVersionControlInfo (Thread[Execution worker Thread 5,5,main]) started. +[ ] :app:extractReleaseVersionControlInfo (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :app:extractReleaseVersionControlInfo UP-TO-DATE +[ ] Caching disabled for task ':app:extractReleaseVersionControlInfo' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':app:extractReleaseVersionControlInfo' as it is up-to-date. +[ ] Resolve mutations for :geolocator_android:checkKotlinGradlePluginConfigurationErrors (Thread[Execution worker Thread 5,5,main]) started. +[ ] :geolocator_android:checkKotlinGradlePluginConfigurationErrors (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :geolocator_android:checkKotlinGradlePluginConfigurationErrors SKIPPED +[ ] Skipping task ':geolocator_android:checkKotlinGradlePluginConfigurationErrors' as task onlyIf 'errorDiagnostics are present' is false. +[ ] Resolve mutations for :geolocator_android:compileReleaseKotlin (Thread[Execution worker Thread 5,5,main]) started. +[ ] :geolocator_android:compileReleaseKotlin (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :geolocator_android:compileReleaseKotlin NO-SOURCE +[ ] Skipping task ':geolocator_android:compileReleaseKotlin' as it has no source files and no previous output files. +[ ] Resolve mutations for :geolocator_android:javaPreCompileRelease (Thread[Execution worker Thread 5,5,main]) started. +[ ] :geolocator_android:javaPreCompileRelease (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :geolocator_android:javaPreCompileRelease UP-TO-DATE +[ ] Caching disabled for task ':geolocator_android:javaPreCompileRelease' because: +[ ] Build cache is disabled +[ ] Skipping task ':geolocator_android:javaPreCompileRelease' as it is up-to-date. +[ ] Resolve mutations for :geolocator_android:compileReleaseJavaWithJavac (Thread[Execution worker Thread 5,5,main]) started. +[ ] :geolocator_android:compileReleaseJavaWithJavac (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :geolocator_android:compileReleaseJavaWithJavac UP-TO-DATE +[ ] Custom actions are attached to task ':geolocator_android:compileReleaseJavaWithJavac'. +[ ] Caching disabled for task ':geolocator_android:compileReleaseJavaWithJavac' because: +[ ] Build cache is disabled +[ ] Skipping task ':geolocator_android:compileReleaseJavaWithJavac' as it is up-to-date. +[ ] No compile result for :geolocator_android:compileReleaseJavaWithJavac +[ ] No compile result for :geolocator_android:compileReleaseJavaWithJavac +[ ] No compile result for :geolocator_android:compileReleaseJavaWithJavac +[ ] Resolve mutations for :geolocator_android:bundleLibRuntimeToDirRelease (Thread[Execution worker Thread 5,5,main]) started. +[ ] :geolocator_android:bundleLibRuntimeToDirRelease (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :geolocator_android:bundleLibRuntimeToDirRelease UP-TO-DATE +[ ] Caching disabled for task ':geolocator_android:bundleLibRuntimeToDirRelease' because: +[ ] Build cache is disabled +[ ] Simple merging task +[ ] Skipping task ':geolocator_android:bundleLibRuntimeToDirRelease' as it is up-to-date. +[ ] work action resolve bundleLibRuntimeToDirRelease (project :geolocator_android) (Thread[Execution worker Thread 5,5,main]) started. +[ ] ClassesDirToClassesTransform (Thread[Execution worker Thread 5,5,main]) started. +[ ] Resolve mutations for :jni:checkKotlinGradlePluginConfigurationErrors (Thread[Execution worker Thread 6,5,main]) started. +[ ] :jni:checkKotlinGradlePluginConfigurationErrors (Thread[Execution worker Thread 6,5,main]) started. +[ ] > Task :jni:checkKotlinGradlePluginConfigurationErrors SKIPPED +[ ] Skipping task ':jni:checkKotlinGradlePluginConfigurationErrors' as task onlyIf 'errorDiagnostics are present' is false. +[ ] DexingNoClasspathTransform (Thread[Execution worker Thread 5,5,main]) started. +[ ] Resolve mutations for :jni:compileReleaseKotlin (Thread[Execution worker Thread 6,5,main]) started. +[ ] :jni:compileReleaseKotlin (Thread[Execution worker Thread 6,5,main]) started. +[ ] > Transform bundleLibRuntimeToDirRelease (project :geolocator_android) with DexingNoClasspathTransform +[ ] Caching disabled for DexingNoClasspathTransform: /Users/anbarasu/Downloads/doormile_flutter/build/geolocator_android/intermediates/runtime_library_classes_dir/release/bundleLibRuntimeToDirRelease because: +[ ] Build cache is disabled +[ ] Skipping DexingNoClasspathTransform: /Users/anbarasu/Downloads/doormile_flutter/build/geolocator_android/intermediates/runtime_library_classes_dir/release/bundleLibRuntimeToDirRelease as it is up-to-date. +[ ] DexingOutputSplitTransform (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :jni:compileReleaseKotlin NO-SOURCE +[ ] Skipping task ':jni:compileReleaseKotlin' as it has no source files and no previous output files. +[ ] Resolve mutations for :jni:javaPreCompileRelease (Thread[Execution worker Thread 6,5,main]) started. +[ ] :jni:javaPreCompileRelease (Thread[Execution worker Thread 6,5,main]) started. +[ ] > Task :jni:javaPreCompileRelease UP-TO-DATE +[ ] Caching disabled for task ':jni:javaPreCompileRelease' because: +[ ] Build cache is disabled +[ ] Skipping task ':jni:javaPreCompileRelease' as it is up-to-date. +[ ] Resolve mutations for :jni:compileReleaseJavaWithJavac (Thread[Execution worker Thread 6,5,main]) started. +[ ] :jni:compileReleaseJavaWithJavac (Thread[Execution worker Thread 6,5,main]) started. +[ ] > Task :jni:compileReleaseJavaWithJavac UP-TO-DATE +[ ] Custom actions are attached to task ':jni:compileReleaseJavaWithJavac'. +[ ] Caching disabled for task ':jni:compileReleaseJavaWithJavac' because: +[ ] Build cache is disabled +[ ] Skipping task ':jni:compileReleaseJavaWithJavac' as it is up-to-date. +[ ] No compile result for :jni:compileReleaseJavaWithJavac +[ ] No compile result for :jni:compileReleaseJavaWithJavac +[ ] No compile result for :jni:compileReleaseJavaWithJavac +[ ] Resolve mutations for :jni:bundleLibCompileToJarRelease (Thread[Execution worker Thread 6,5,main]) started. +[ ] :jni:bundleLibCompileToJarRelease (Thread[Execution worker Thread 6,5,main]) started. +[ ] > Task :jni:bundleLibCompileToJarRelease UP-TO-DATE +[ ] Caching disabled for task ':jni:bundleLibCompileToJarRelease' because: +[ ] Build cache is disabled +[ ] Simple merging task +[ ] Skipping task ':jni:bundleLibCompileToJarRelease' as it is up-to-date. +[ ] work action resolve classes.jar (project :jni) (Thread[Execution worker Thread 6,5,main]) started. +[ ] Resolve mutations for :jni_flutter:checkKotlinGradlePluginConfigurationErrors (Thread[Execution worker Thread 6,5,main]) started. +[ ] :jni_flutter:checkKotlinGradlePluginConfigurationErrors (Thread[Execution worker Thread 6,5,main]) started. +[ ] > Task :jni_flutter:checkKotlinGradlePluginConfigurationErrors SKIPPED +[ ] Skipping task ':jni_flutter:checkKotlinGradlePluginConfigurationErrors' as task onlyIf 'errorDiagnostics are present' is false. +[ ] Resolve mutations for :jni_flutter:compileReleaseKotlin (Thread[Execution worker Thread 6,5,main]) started. +[ ] :jni_flutter:compileReleaseKotlin (Thread[Execution worker Thread 6,5,main]) started. +[ ] > Task :jni_flutter:compileReleaseKotlin NO-SOURCE +[ ] Skipping task ':jni_flutter:compileReleaseKotlin' as it has no source files and no previous output files. +[ ] Resolve mutations for :jni_flutter:javaPreCompileRelease (Thread[Execution worker Thread 6,5,main]) started. +[ ] :jni_flutter:javaPreCompileRelease (Thread[Execution worker Thread 6,5,main]) started. +[ ] > Task :jni_flutter:javaPreCompileRelease UP-TO-DATE +[ ] Caching disabled for task ':jni_flutter:javaPreCompileRelease' because: +[ ] Build cache is disabled +[ ] Skipping task ':jni_flutter:javaPreCompileRelease' as it is up-to-date. +[ ] Resolve mutations for :jni_flutter:compileReleaseJavaWithJavac (Thread[Execution worker Thread 6,5,main]) started. +[ ] :jni_flutter:compileReleaseJavaWithJavac (Thread[Execution worker Thread 6,5,main]) started. +[ +89 ms] > Task :jni_flutter:compileReleaseJavaWithJavac UP-TO-DATE +[ ] Custom actions are attached to task ':jni_flutter:compileReleaseJavaWithJavac'. +[ ] Caching disabled for task ':jni_flutter:compileReleaseJavaWithJavac' because: +[ ] Build cache is disabled +[ ] Skipping task ':jni_flutter:compileReleaseJavaWithJavac' as it is up-to-date. +[ ] No compile result for :jni_flutter:compileReleaseJavaWithJavac +[ ] No compile result for :jni_flutter:compileReleaseJavaWithJavac +[ ] No compile result for :jni_flutter:compileReleaseJavaWithJavac +[ ] Resolve mutations for :jni_flutter:bundleLibRuntimeToDirRelease (Thread[Execution worker Thread 6,5,main]) started. +[ ] :jni_flutter:bundleLibRuntimeToDirRelease (Thread[Execution worker Thread 6,5,main]) started. +[ ] > Task :jni_flutter:bundleLibRuntimeToDirRelease UP-TO-DATE +[ ] Caching disabled for task ':jni_flutter:bundleLibRuntimeToDirRelease' because: +[ ] Build cache is disabled +[ ] Simple merging task +[ ] Skipping task ':jni_flutter:bundleLibRuntimeToDirRelease' as it is up-to-date. +[ ] work action resolve bundleLibRuntimeToDirRelease (project :jni_flutter) (Thread[Execution worker Thread 6,5,main]) started. +[ ] ClassesDirToClassesTransform (Thread[Execution worker Thread 6,5,main]) started. +[ ] Resolve mutations for :jni:bundleLibRuntimeToDirRelease (Thread[Execution worker Thread 4,5,main]) started. +[ ] DexingNoClasspathTransform (Thread[Execution worker Thread 4,5,main]) started. +[ ] :jni:bundleLibRuntimeToDirRelease (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :jni:bundleLibRuntimeToDirRelease UP-TO-DATE +[ ] Caching disabled for task ':jni:bundleLibRuntimeToDirRelease' because: +[ ] Build cache is disabled +[ ] Simple merging task +[ ] Skipping task ':jni:bundleLibRuntimeToDirRelease' as it is up-to-date. +[ ] work action resolve bundleLibRuntimeToDirRelease (project :jni) (Thread[Execution worker Thread 5,5,main]) started. +[ ] ClassesDirToClassesTransform (Thread[Execution worker Thread 5,5,main]) started. +[ ] Resolve mutations for :app:checkReleaseDuplicateClasses (Thread[Execution worker Thread 6,5,main]) started. +[ ] :app:checkReleaseDuplicateClasses (Thread[Execution worker Thread 6,5,main]) started. +[ ] DexingNoClasspathTransform (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Transform bundleLibRuntimeToDirRelease (project :jni_flutter) with DexingNoClasspathTransform +[ ] Caching disabled for DexingNoClasspathTransform: /Users/anbarasu/Downloads/doormile_flutter/build/jni_flutter/intermediates/runtime_library_classes_dir/release/bundleLibRuntimeToDirRelease because: +[ ] Build cache is disabled +[ ] Skipping DexingNoClasspathTransform: /Users/anbarasu/Downloads/doormile_flutter/build/jni_flutter/intermediates/runtime_library_classes_dir/release/bundleLibRuntimeToDirRelease as it is up-to-date. +[ ] DexingOutputSplitTransform (Thread[Execution worker Thread 4,5,main]) started. +[ ] > Transform bundleLibRuntimeToDirRelease (project :jni) with DexingNoClasspathTransform +[ ] Caching disabled for DexingNoClasspathTransform: /Users/anbarasu/Downloads/doormile_flutter/build/jni/intermediates/runtime_library_classes_dir/release/bundleLibRuntimeToDirRelease because: +[ ] Build cache is disabled +[ ] Skipping DexingNoClasspathTransform: /Users/anbarasu/Downloads/doormile_flutter/build/jni/intermediates/runtime_library_classes_dir/release/bundleLibRuntimeToDirRelease as it is up-to-date. +[ ] DexingOutputSplitTransform (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :app:checkReleaseDuplicateClasses UP-TO-DATE +[ ] Caching disabled for task ':app:checkReleaseDuplicateClasses' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':app:checkReleaseDuplicateClasses' as it is up-to-date. +[ ] Resolve mutations for :app:buildKotlinToolingMetadata (Thread[Execution worker Thread 6,5,main]) started. +[ ] :app:buildKotlinToolingMetadata (Thread[Execution worker Thread 6,5,main]) started. +[ ] > Task :app:buildKotlinToolingMetadata UP-TO-DATE +[ ] Caching disabled for task ':app:buildKotlinToolingMetadata' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':app:buildKotlinToolingMetadata' as it is up-to-date. +[ ] Resolve mutations for :app:checkKotlinGradlePluginConfigurationErrors (Thread[Execution worker Thread 6,5,main]) started. +[ ] :app:checkKotlinGradlePluginConfigurationErrors (Thread[Execution worker Thread 6,5,main]) started. +[ ] > Task :app:checkKotlinGradlePluginConfigurationErrors SKIPPED +[ ] Skipping task ':app:checkKotlinGradlePluginConfigurationErrors' as task onlyIf 'errorDiagnostics are present' is false. +[ ] Resolve mutations for :geolocator_android:bundleLibCompileToJarRelease (Thread[Execution worker Thread 6,5,main]) started. +[ ] :geolocator_android:bundleLibCompileToJarRelease (Thread[Execution worker Thread 6,5,main]) started. +[ ] > Task :geolocator_android:bundleLibCompileToJarRelease UP-TO-DATE +[ ] Caching disabled for task ':geolocator_android:bundleLibCompileToJarRelease' because: +[ ] Build cache is disabled +[ ] Simple merging task +[ ] Skipping task ':geolocator_android:bundleLibCompileToJarRelease' as it is up-to-date. +[ ] work action resolve classes.jar (project :geolocator_android) (Thread[Execution worker Thread 6,5,main]) started. +[ ] Resolve mutations for :jni_flutter:bundleLibCompileToJarRelease (Thread[Execution worker Thread 6,5,main]) started. +[ ] :jni_flutter:bundleLibCompileToJarRelease (Thread[Execution worker Thread 6,5,main]) started. +[ ] > Task :jni_flutter:bundleLibCompileToJarRelease UP-TO-DATE +[ ] Caching disabled for task ':jni_flutter:bundleLibCompileToJarRelease' because: +[ ] Build cache is disabled +[ ] Simple merging task +[ ] Skipping task ':jni_flutter:bundleLibCompileToJarRelease' as it is up-to-date. +[ ] work action resolve classes.jar (project :jni_flutter) (Thread[Execution worker Thread 6,5,main]) started. +[ ] Resolve mutations for :app:compileReleaseKotlin (Thread[Execution worker Thread 6,5,main]) started. +[ ] :app:compileReleaseKotlin (Thread[Execution worker Thread 6,5,main]) started. +[ ] > Task :app:compileReleaseKotlin UP-TO-DATE +[ ] Adding -Xuse-inline-scopes-numbers Kotlin compiler flag for task :app:compileDebugAndroidTestKotlin +[ ] GradleBuildProject.Builder should not be accessed through AnalyticsConfiguratorService after AnalyticsService is created. Analytics information of this build might be incomplete. +[ ] Caching disabled for task ':app:compileReleaseKotlin' because: +[ ] Build cache is disabled +[ ] Skipping task ':app:compileReleaseKotlin' as it is up-to-date. +[ ] Resolve mutations for :app:javaPreCompileRelease (Thread[Execution worker Thread 6,5,main]) started. +[ ] :app:javaPreCompileRelease (Thread[Execution worker Thread 6,5,main]) started. +[ ] > Task :app:javaPreCompileRelease UP-TO-DATE +[ ] Caching disabled for task ':app:javaPreCompileRelease' because: +[ ] Build cache is disabled +[ ] Skipping task ':app:javaPreCompileRelease' as it is up-to-date. +[ ] Resolve mutations for :app:compileReleaseJavaWithJavac (Thread[Execution worker Thread 6,5,main]) started. +[ ] :app:compileReleaseJavaWithJavac (Thread[Execution worker Thread 6,5,main]) started. +[ ] > Task :app:compileReleaseJavaWithJavac UP-TO-DATE +[ ] Custom actions are attached to task ':app:compileReleaseJavaWithJavac'. +[ ] Caching disabled for task ':app:compileReleaseJavaWithJavac' because: +[ ] Build cache is disabled +[ ] Skipping task ':app:compileReleaseJavaWithJavac' as it is up-to-date. +[ ] No compile result for :app:compileReleaseJavaWithJavac +[ ] No compile result for :app:compileReleaseJavaWithJavac +[ ] No compile result for :app:compileReleaseJavaWithJavac +[ ] Resolve mutations for :app:dexBuilderRelease (Thread[Execution worker Thread 6,5,main]) started. +[ ] :app:dexBuilderRelease (Thread[Execution worker Thread 6,5,main]) started. +[ ] > Task :app:dexBuilderRelease UP-TO-DATE +[ ] Caching disabled for task ':app:dexBuilderRelease' because: +[ ] Build cache is disabled +[ ] Skipping task ':app:dexBuilderRelease' as it is up-to-date. +[ ] Resolve mutations for :app:desugarReleaseFileDependencies (Thread[Execution worker Thread 6,5,main]) started. +[ ] :app:desugarReleaseFileDependencies (Thread[Execution worker Thread 6,5,main]) started. +[ ] > Task :app:desugarReleaseFileDependencies UP-TO-DATE +[ ] Caching disabled for task ':app:desugarReleaseFileDependencies' because: +[ ] Build cache is disabled +[ ] Skipping task ':app:desugarReleaseFileDependencies' as it is up-to-date. +[ ] Resolve mutations for :app:mergeReleaseStartupProfile (Thread[Execution worker Thread 6,5,main]) started. +[ ] :app:mergeReleaseStartupProfile (Thread[Execution worker Thread 6,5,main]) started. +[ ] > Task :app:mergeReleaseStartupProfile UP-TO-DATE +[ ] Caching disabled for task ':app:mergeReleaseStartupProfile' because: +[ ] Build cache is disabled +[ ] Simple merging task +[ ] Skipping task ':app:mergeReleaseStartupProfile' as it is up-to-date. +[ ] Resolve mutations for :app:mergeExtDexRelease (Thread[Execution worker Thread 6,5,main]) started. +[ ] :app:mergeExtDexRelease (Thread[Execution worker Thread 6,5,main]) started. +[ ] > Task :app:mergeExtDexRelease UP-TO-DATE +[ ] Caching disabled for task ':app:mergeExtDexRelease' because: +[ ] Build cache is disabled +[ ] Skipping task ':app:mergeExtDexRelease' as it is up-to-date. +[ ] Resolve mutations for :app:mergeDexRelease (Thread[Execution worker Thread 6,5,main]) started. +[ ] :app:mergeDexRelease (Thread[Execution worker Thread 6,5,main]) started. +[ ] > Task :app:mergeDexRelease UP-TO-DATE +[ ] Caching disabled for task ':app:mergeDexRelease' because: +[ ] Build cache is disabled +[ ] Skipping task ':app:mergeDexRelease' as it is up-to-date. +[ ] Resolve mutations for :geolocator_android:bundleLibRuntimeToJarRelease (Thread[Execution worker Thread 6,5,main]) started. +[ ] :geolocator_android:bundleLibRuntimeToJarRelease (Thread[Execution worker Thread 7,5,main]) started. +[ ] > Task :geolocator_android:bundleLibRuntimeToJarRelease UP-TO-DATE +[ ] Caching disabled for task ':geolocator_android:bundleLibRuntimeToJarRelease' because: +[ ] Build cache is disabled +[ ] Simple merging task +[ ] Skipping task ':geolocator_android:bundleLibRuntimeToJarRelease' as it is up-to-date. +[ ] work action resolve classes.jar (project :geolocator_android) (Thread[Execution worker Thread 7,5,main]) started. +[ ] IdentityTransform (Thread[Execution worker Thread 7,5,main]) started. +[ ] Resolve mutations for :jni_flutter:bundleLibRuntimeToJarRelease (Thread[Execution worker Thread 2,5,main]) started. +[ ] DexingNoClasspathTransform (Thread[Execution worker Thread 7,5,main]) started. +[ ] :jni_flutter:bundleLibRuntimeToJarRelease (Thread[Execution worker Thread 2,5,main]) started. +[ ] > Task :jni_flutter:bundleLibRuntimeToJarRelease UP-TO-DATE +[ ] Caching disabled for task ':jni_flutter:bundleLibRuntimeToJarRelease' because: +[ ] Build cache is disabled +[ ] Simple merging task +[ ] Skipping task ':jni_flutter:bundleLibRuntimeToJarRelease' as it is up-to-date. +[ ] work action resolve classes.jar (project :jni_flutter) (Thread[Execution worker Thread 2,5,main]) started. +[ ] IdentityTransform (Thread[Execution worker Thread 2,5,main]) started. +[ ] Resolve mutations for :jni:bundleLibRuntimeToJarRelease (Thread[Execution worker Thread 5,5,main]) started. +[ ] DexingNoClasspathTransform (Thread[Execution worker Thread 2,5,main]) started. +[ ] > Transform classes.jar (project :geolocator_android) with DexingNoClasspathTransform +[ ] Caching disabled for DexingNoClasspathTransform: /Users/anbarasu/Downloads/doormile_flutter/build/geolocator_android/intermediates/runtime_library_classes_jar/release/bundleLibRuntimeToJarRelease/classes.jar because: +[ ] Build cache is disabled +[ ] Skipping DexingNoClasspathTransform: /Users/anbarasu/Downloads/doormile_flutter/build/geolocator_android/intermediates/runtime_library_classes_jar/release/bundleLibRuntimeToJarRelease/classes.jar as it is up-to-date. +[ ] :jni:bundleLibRuntimeToJarRelease (Thread[Execution worker Thread 5,5,main]) started. +[ ] DexingOutputSplitTransform (Thread[Execution worker Thread 7,5,main]) started. +[ ] > Transform classes.jar (project :jni_flutter) with DexingNoClasspathTransform +[ ] Caching disabled for DexingNoClasspathTransform: /Users/anbarasu/Downloads/doormile_flutter/build/jni_flutter/intermediates/runtime_library_classes_jar/release/bundleLibRuntimeToJarRelease/classes.jar because: +[ ] Build cache is disabled +[ ] Skipping DexingNoClasspathTransform: /Users/anbarasu/Downloads/doormile_flutter/build/jni_flutter/intermediates/runtime_library_classes_jar/release/bundleLibRuntimeToJarRelease/classes.jar as it is up-to-date. +[ ] > Task :jni:bundleLibRuntimeToJarRelease UP-TO-DATE +[ ] Caching disabled for task ':jni:bundleLibRuntimeToJarRelease' because: +[ ] Build cache is disabled +[ ] Simple merging task +[ ] Skipping task ':jni:bundleLibRuntimeToJarRelease' as it is up-to-date. +[ ] DexingOutputSplitTransform (Thread[Execution worker Thread 2,5,main]) started. +[ ] work action resolve classes.jar (project :jni) (Thread[Execution worker Thread 5,5,main]) started. +[ ] IdentityTransform (Thread[Execution worker Thread 5,5,main]) started. +[ ] Resolve mutations for :app:processReleaseJavaRes (Thread[Execution worker Thread 6,5,main]) started. +[ ] DexingNoClasspathTransform (Thread[Execution worker Thread 5,5,main]) started. +[ ] :app:processReleaseJavaRes (Thread[Execution worker Thread 6,5,main]) started. +[ ] > Transform classes.jar (project :jni) with DexingNoClasspathTransform +[ ] Caching disabled for DexingNoClasspathTransform: /Users/anbarasu/Downloads/doormile_flutter/build/jni/intermediates/runtime_library_classes_jar/release/bundleLibRuntimeToJarRelease/classes.jar because: +[ ] Build cache is disabled +[ ] Skipping DexingNoClasspathTransform: /Users/anbarasu/Downloads/doormile_flutter/build/jni/intermediates/runtime_library_classes_jar/release/bundleLibRuntimeToJarRelease/classes.jar as it is up-to-date. +[ ] DexingOutputSplitTransform (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :app:processReleaseJavaRes UP-TO-DATE +[ ] file or directory '/Users/anbarasu/Downloads/doormile_flutter/android/app/src/main/resources', not found +[ ] file or directory '/Users/anbarasu/Downloads/doormile_flutter/android/app/src/release/resources', not found +[ ] file or directory '/Users/anbarasu/Downloads/doormile_flutter/android/app/src/main/resources', not found +[ ] file or directory '/Users/anbarasu/Downloads/doormile_flutter/android/app/src/release/resources', not found +[ ] Caching disabled for task ':app:processReleaseJavaRes' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':app:processReleaseJavaRes' as it is up-to-date. +[ ] Resolve mutations for :app:mergeReleaseGlobalSynthetics (Thread[Execution worker Thread 6,5,main]) started. +[ ] :app:mergeReleaseGlobalSynthetics (Thread[Execution worker Thread 6,5,main]) started. +[ ] > Task :app:mergeReleaseGlobalSynthetics UP-TO-DATE +[ ] Caching disabled for task ':app:mergeReleaseGlobalSynthetics' because: +[ ] Build cache is disabled +[ ] Skipping task ':app:mergeReleaseGlobalSynthetics' as it is up-to-date. +[ ] Resolve mutations for :geolocator_android:processReleaseJavaRes (Thread[Execution worker Thread 6,5,main]) started. +[ ] :geolocator_android:processReleaseJavaRes (Thread[Execution worker Thread 6,5,main]) started. +[ ] > Task :geolocator_android:processReleaseJavaRes NO-SOURCE +[ ] file or directory '/Users/anbarasu/.pub-cache/hosted/pub.dev/geolocator_android-4.6.2/android/src/main/resources', not found +[ ] file or directory '/Users/anbarasu/.pub-cache/hosted/pub.dev/geolocator_android-4.6.2/android/src/release/resources', not found +[ ] Skipping task ':geolocator_android:processReleaseJavaRes' as it has no source files and no previous output files. +[ ] work action resolve out (project :geolocator_android) (Thread[Execution worker Thread 6,5,main]) started. +[ ] Resolve mutations for :jni:processReleaseJavaRes (Thread[Execution worker Thread 9,5,main]) started. +[ ] :jni:processReleaseJavaRes (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :jni:processReleaseJavaRes NO-SOURCE +[ ] file or directory '/Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/android/src/main/resources', not found +[ ] file or directory '/Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/android/src/release/resources', not found +[ ] Skipping task ':jni:processReleaseJavaRes' as it has no source files and no previous output files. +[ ] work action resolve out (project :jni) (Thread[Execution worker Thread 9,5,main]) started. +[ ] Resolve mutations for :jni_flutter:processReleaseJavaRes (Thread[Execution worker Thread 9,5,main]) started. +[ ] :jni_flutter:processReleaseJavaRes (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :jni_flutter:processReleaseJavaRes NO-SOURCE +[ ] file or directory '/Users/anbarasu/.pub-cache/hosted/pub.dev/jni_flutter-1.0.1/android/src/main/resources', not found +[ ] file or directory '/Users/anbarasu/.pub-cache/hosted/pub.dev/jni_flutter-1.0.1/android/src/release/resources', not found +[ ] Skipping task ':jni_flutter:processReleaseJavaRes' as it has no source files and no previous output files. +[ ] work action resolve out (project :jni_flutter) (Thread[Execution worker Thread 9,5,main]) started. +[ ] Resolve mutations for :app:mergeReleaseJavaResource (Thread[Execution worker Thread 5,5,main]) started. +[ ] :app:mergeReleaseJavaResource (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :app:mergeReleaseJavaResource UP-TO-DATE +[ ] Caching disabled for task ':app:mergeReleaseJavaResource' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':app:mergeReleaseJavaResource' as it is up-to-date. +[ ] Resolve mutations for :app:configureCMakeRelease[arm64-v8a] (Thread[Execution worker Thread 5,5,main]) started. +[ ] :app:configureCMakeRelease[arm64-v8a] (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :app:configureCMakeRelease[arm64-v8a] +[ ] Caching disabled for task ':app:configureCMakeRelease[arm64-v8a]' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Task ':app:configureCMakeRelease[arm64-v8a]' is not up-to-date because: +[ ] Task.upToDateWhen is false. +[ ] C/C++: SDK Manager found the following installed packages: build-tools;33.0.1 build-tools;34.0.0 build-tools;35.0.0 build-tools;36.0.0 cmake;3.22.1 cmdline-tools;latest emulator ndk;25.1.8937393 ndk;26.3.11579264 ndk;27.0.12077973 ndk;28.2.13676358 platform-tools platforms;android-13 platforms;android-20 platforms;android-30 platforms;android-31 platforms;android-33 platforms;android-34 platforms;android-35 platforms;android-35-ext14 platforms;android-36 platforms;android-36-ext18 sources;android-20 sources;android-33 sources;android-36 system-images;android-36;google_apis_playstore;arm64-v8a system-images;android-36;google_apis_playstore_ps16k;arm64-v8a +[ ] C/C++: /Users/anbarasu/flutter/packages/flutter_tools/gradle/src/main/scripts/CMakeLists.txt release|arm64-v8a : Start JSON generation. Platform version: 24 min SDK version: arm64-v8a +[ ] C/C++: /Users/anbarasu/flutter/packages/flutter_tools/gradle/src/main/scripts/CMakeLists.txt release|arm64-v8a : JSON '/Users/anbarasu/Downloads/doormile_flutter/build/.cxx/release/11545f15/arm64-v8a/android_gradle_build.json' was up-to-date +[ ] C/C++: /Users/anbarasu/flutter/packages/flutter_tools/gradle/src/main/scripts/CMakeLists.txt release|arm64-v8a : JSON generation completed without problems +[ ] C/C++: /Users/anbarasu/flutter/packages/flutter_tools/gradle/src/main/scripts/CMakeLists.txt release|arm64-v8a : Writing build model to /Users/anbarasu/Downloads/doormile_flutter/build/app/intermediates/cxx/release/11545f15/logs/arm64-v8a/build_model.json +[ ] Resolve mutations for :app:buildCMakeRelease[arm64-v8a] (Thread[Execution worker Thread 5,5,main]) started. +[ ] :app:buildCMakeRelease[arm64-v8a] (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :app:buildCMakeRelease[arm64-v8a] +[ ] Caching disabled for task ':app:buildCMakeRelease[arm64-v8a]' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Task ':app:buildCMakeRelease[arm64-v8a]' is not up-to-date because: +[ ] Task.upToDateWhen is false. +[ ] C/C++: starting build +[ ] C/C++: reading expected JSONs +[ ] C/C++: done reading expected JSONs +[ ] C/C++: executing build commands for targets that produce .so files or executables +[ ] C/C++: evaluate miniconfig +[ ] C/C++: no libraries +[ ] Resolve mutations for :app:configureCMakeRelease[armeabi-v7a] (Thread[Execution worker Thread 5,5,main]) started. +[ ] :app:configureCMakeRelease[armeabi-v7a] (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :app:configureCMakeRelease[armeabi-v7a] +[ ] Caching disabled for task ':app:configureCMakeRelease[armeabi-v7a]' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Task ':app:configureCMakeRelease[armeabi-v7a]' is not up-to-date because: +[ ] Task.upToDateWhen is false. +[ ] C/C++: /Users/anbarasu/flutter/packages/flutter_tools/gradle/src/main/scripts/CMakeLists.txt release|armeabi-v7a : Start JSON generation. Platform version: 24 min SDK version: armeabi-v7a +[ ] C/C++: /Users/anbarasu/flutter/packages/flutter_tools/gradle/src/main/scripts/CMakeLists.txt release|armeabi-v7a : JSON '/Users/anbarasu/Downloads/doormile_flutter/build/.cxx/release/11545f15/armeabi-v7a/android_gradle_build.json' was up-to-date +[ ] C/C++: /Users/anbarasu/flutter/packages/flutter_tools/gradle/src/main/scripts/CMakeLists.txt release|armeabi-v7a : JSON generation completed without problems +[ ] C/C++: /Users/anbarasu/flutter/packages/flutter_tools/gradle/src/main/scripts/CMakeLists.txt release|armeabi-v7a : Writing build model to /Users/anbarasu/Downloads/doormile_flutter/build/app/intermediates/cxx/release/11545f15/logs/armeabi-v7a/build_model.json +[ ] Resolve mutations for :app:buildCMakeRelease[armeabi-v7a] (Thread[Execution worker Thread 5,5,main]) started. +[ ] :app:buildCMakeRelease[armeabi-v7a] (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :app:buildCMakeRelease[armeabi-v7a] +[ ] Caching disabled for task ':app:buildCMakeRelease[armeabi-v7a]' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Task ':app:buildCMakeRelease[armeabi-v7a]' is not up-to-date because: +[ ] Task.upToDateWhen is false. +[ ] C/C++: starting build +[ ] C/C++: reading expected JSONs +[ ] C/C++: done reading expected JSONs +[ ] C/C++: executing build commands for targets that produce .so files or executables +[ ] C/C++: evaluate miniconfig +[ ] C/C++: no libraries +[ ] Resolve mutations for :app:configureCMakeRelease[x86_64] (Thread[Execution worker Thread 5,5,main]) started. +[ ] :app:configureCMakeRelease[x86_64] (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :app:configureCMakeRelease[x86_64] +[ ] Caching disabled for task ':app:configureCMakeRelease[x86_64]' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Task ':app:configureCMakeRelease[x86_64]' is not up-to-date because: +[ ] Task.upToDateWhen is false. +[ ] C/C++: /Users/anbarasu/flutter/packages/flutter_tools/gradle/src/main/scripts/CMakeLists.txt release|x86_64 : Start JSON generation. Platform version: 24 min SDK version: x86_64 +[ ] C/C++: /Users/anbarasu/flutter/packages/flutter_tools/gradle/src/main/scripts/CMakeLists.txt release|x86_64 : JSON '/Users/anbarasu/Downloads/doormile_flutter/build/.cxx/release/11545f15/x86_64/android_gradle_build.json' was up-to-date +[ ] C/C++: /Users/anbarasu/flutter/packages/flutter_tools/gradle/src/main/scripts/CMakeLists.txt release|x86_64 : JSON generation completed without problems +[ ] C/C++: /Users/anbarasu/flutter/packages/flutter_tools/gradle/src/main/scripts/CMakeLists.txt release|x86_64 : Writing build model to /Users/anbarasu/Downloads/doormile_flutter/build/app/intermediates/cxx/release/11545f15/logs/x86_64/build_model.json +[ ] Resolve mutations for :app:buildCMakeRelease[x86_64] (Thread[Execution worker Thread 5,5,main]) started. +[ ] :app:buildCMakeRelease[x86_64] (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :app:buildCMakeRelease[x86_64] +[ ] Caching disabled for task ':app:buildCMakeRelease[x86_64]' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Task ':app:buildCMakeRelease[x86_64]' is not up-to-date because: +[ ] Task.upToDateWhen is false. +[ ] C/C++: starting build +[ ] C/C++: reading expected JSONs +[ ] C/C++: done reading expected JSONs +[ ] C/C++: executing build commands for targets that produce .so files or executables +[ ] C/C++: evaluate miniconfig +[ ] C/C++: no libraries +[ ] Resolve mutations for :app:copyJniLibsflutterBuildRelease (Thread[Execution worker Thread 5,5,main]) started. +[ ] :app:copyJniLibsflutterBuildRelease (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :app:copyJniLibsflutterBuildRelease UP-TO-DATE +[ ] Caching disabled for task ':app:copyJniLibsflutterBuildRelease' because: +[ ] Build cache is disabled +[ ] Not worth caching +[ ] Skipping task ':app:copyJniLibsflutterBuildRelease' as it is up-to-date. +[ ] Resolve mutations for :app:mergeReleaseJniLibFolders (Thread[Execution worker Thread 5,5,main]) started. +[ ] :app:mergeReleaseJniLibFolders (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :app:mergeReleaseJniLibFolders UP-TO-DATE +[ ] Caching disabled for task ':app:mergeReleaseJniLibFolders' because: +[ ] Build cache is disabled +[ ] Simple merging task +[ ] Skipping task ':app:mergeReleaseJniLibFolders' as it is up-to-date. +[ ] Resolve mutations for :geolocator_android:mergeReleaseJniLibFolders (Thread[Execution worker Thread 5,5,main]) started. +[ ] :geolocator_android:mergeReleaseJniLibFolders (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :geolocator_android:mergeReleaseJniLibFolders UP-TO-DATE +[ ] Caching disabled for task ':geolocator_android:mergeReleaseJniLibFolders' because: +[ ] Build cache is disabled +[ ] Simple merging task +[ ] Skipping task ':geolocator_android:mergeReleaseJniLibFolders' as it is up-to-date. +[ ] Resolve mutations for :geolocator_android:mergeReleaseNativeLibs (Thread[Execution worker Thread 5,5,main]) started. +[ ] :geolocator_android:mergeReleaseNativeLibs (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :geolocator_android:mergeReleaseNativeLibs NO-SOURCE +[ ] Skipping task ':geolocator_android:mergeReleaseNativeLibs' as it has no source files and no previous output files. +[ ] Resolve mutations for :geolocator_android:copyReleaseJniLibsProjectOnly (Thread[Execution worker Thread 5,5,main]) started. +[ ] :geolocator_android:copyReleaseJniLibsProjectOnly (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :geolocator_android:copyReleaseJniLibsProjectOnly UP-TO-DATE +[ ] Caching disabled for task ':geolocator_android:copyReleaseJniLibsProjectOnly' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':geolocator_android:copyReleaseJniLibsProjectOnly' as it is up-to-date. +[ ] work action resolve jni (project :geolocator_android) (Thread[Execution worker Thread 5,5,main]) started. +[ ] Resolve mutations for :jni:configureCMakeRelWithDebInfo[arm64-v8a] (Thread[Execution worker Thread 5,5,main]) started. +[ ] :jni:configureCMakeRelWithDebInfo[arm64-v8a] (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :jni:configureCMakeRelWithDebInfo[arm64-v8a] +[ ] Caching disabled for task ':jni:configureCMakeRelWithDebInfo[arm64-v8a]' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Task ':jni:configureCMakeRelWithDebInfo[arm64-v8a]' is not up-to-date because: +[ ] Task.upToDateWhen is false. +[ ] C/C++: /Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/src/CMakeLists.txt release|arm64-v8a : Start JSON generation. Platform version: 21 min SDK version: arm64-v8a +[ ] C/C++: /Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/src/CMakeLists.txt release|arm64-v8a : JSON '/Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/android/.cxx/RelWithDebInfo/216c5f6t/arm64-v8a/android_gradle_build.json' was up-to-date +[ ] C/C++: /Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/src/CMakeLists.txt release|arm64-v8a : JSON generation completed without problems +[ ] C/C++: /Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/src/CMakeLists.txt release|arm64-v8a : Writing build model to /Users/anbarasu/Downloads/doormile_flutter/build/jni/intermediates/cxx/RelWithDebInfo/216c5f6t/logs/arm64-v8a/build_model.json +[ ] Resolve mutations for :jni:buildCMakeRelWithDebInfo[arm64-v8a] (Thread[Execution worker Thread 5,5,main]) started. +[ ] :jni:buildCMakeRelWithDebInfo[arm64-v8a] (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :jni:buildCMakeRelWithDebInfo[arm64-v8a] +[ ] Caching disabled for task ':jni:buildCMakeRelWithDebInfo[arm64-v8a]' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Task ':jni:buildCMakeRelWithDebInfo[arm64-v8a]' is not up-to-date because: +[ ] Task.upToDateWhen is false. +[ ] C/C++: starting build +[ ] C/C++: reading expected JSONs +[ ] C/C++: done reading expected JSONs +[ ] C/C++: executing build commands for targets that produce .so files or executables +[ ] C/C++: evaluate miniconfig +[ ] C/C++: evaluate library jni (arm64-v8a) +[ ] C/C++: building target library jni because no targets are specified. +[ ] C/C++: about to build targets jni +[ ] C/C++: Build jni +[ ] C/C++: /Users/anbarasu/Library/Android/sdk/cmake/3.22.1/bin/ninja \ +[ ] -C \ +[ ] /Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/android/.cxx/RelWithDebInfo/216c5f6t/arm64-v8a \ +[ ] jni +[ ] Starting process 'command '/Users/anbarasu/Library/Android/sdk/cmake/3.22.1/bin/ninja''. Working directory: /Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/android Command: /Users/anbarasu/Library/Android/sdk/cmake/3.22.1/bin/ninja -C /Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/android/.cxx/RelWithDebInfo/216c5f6t/arm64-v8a jni +[ ] Successfully started process 'command '/Users/anbarasu/Library/Android/sdk/cmake/3.22.1/bin/ninja'' +[ ] C/C++: Received process result: 0 +[ ] C/C++: check expected build outputs +[ ] C/C++: build complete +[ ] Resolve mutations for :jni:configureCMakeRelWithDebInfo[armeabi-v7a] (Thread[Execution worker Thread 5,5,main]) started. +[ ] :jni:configureCMakeRelWithDebInfo[armeabi-v7a] (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :jni:configureCMakeRelWithDebInfo[armeabi-v7a] +[ ] Caching disabled for task ':jni:configureCMakeRelWithDebInfo[armeabi-v7a]' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Task ':jni:configureCMakeRelWithDebInfo[armeabi-v7a]' is not up-to-date because: +[ ] Task.upToDateWhen is false. +[ ] C/C++: /Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/src/CMakeLists.txt release|armeabi-v7a : Start JSON generation. Platform version: 21 min SDK version: armeabi-v7a +[ ] C/C++: /Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/src/CMakeLists.txt release|armeabi-v7a : JSON '/Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/android/.cxx/RelWithDebInfo/216c5f6t/armeabi-v7a/android_gradle_build.json' was up-to-date +[ ] C/C++: /Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/src/CMakeLists.txt release|armeabi-v7a : JSON generation completed without problems +[ ] C/C++: /Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/src/CMakeLists.txt release|armeabi-v7a : Writing build model to /Users/anbarasu/Downloads/doormile_flutter/build/jni/intermediates/cxx/RelWithDebInfo/216c5f6t/logs/armeabi-v7a/build_model.json +[ ] Resolve mutations for :jni:buildCMakeRelWithDebInfo[armeabi-v7a] (Thread[Execution worker Thread 5,5,main]) started. +[ ] :jni:buildCMakeRelWithDebInfo[armeabi-v7a] (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :jni:buildCMakeRelWithDebInfo[armeabi-v7a] +[ ] Caching disabled for task ':jni:buildCMakeRelWithDebInfo[armeabi-v7a]' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Task ':jni:buildCMakeRelWithDebInfo[armeabi-v7a]' is not up-to-date because: +[ ] Task.upToDateWhen is false. +[ ] C/C++: starting build +[ ] C/C++: reading expected JSONs +[ ] C/C++: done reading expected JSONs +[ ] C/C++: executing build commands for targets that produce .so files or executables +[ ] C/C++: evaluate miniconfig +[ ] C/C++: evaluate library jni (armeabi-v7a) +[ ] C/C++: building target library jni because no targets are specified. +[ ] C/C++: about to build targets jni +[ ] C/C++: Build jni +[ ] C/C++: /Users/anbarasu/Library/Android/sdk/cmake/3.22.1/bin/ninja \ +[ ] -C \ +[ ] /Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/android/.cxx/RelWithDebInfo/216c5f6t/armeabi-v7a \ +[ ] jni +[ ] Starting process 'command '/Users/anbarasu/Library/Android/sdk/cmake/3.22.1/bin/ninja''. Working directory: /Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/android Command: /Users/anbarasu/Library/Android/sdk/cmake/3.22.1/bin/ninja -C /Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/android/.cxx/RelWithDebInfo/216c5f6t/armeabi-v7a jni +[ ] Successfully started process 'command '/Users/anbarasu/Library/Android/sdk/cmake/3.22.1/bin/ninja'' +[ ] C/C++: Received process result: 0 +[ ] C/C++: check expected build outputs +[ ] C/C++: build complete +[ ] Resolve mutations for :jni:configureCMakeRelWithDebInfo[x86] (Thread[Execution worker Thread 5,5,main]) started. +[ ] :jni:configureCMakeRelWithDebInfo[x86] (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :jni:configureCMakeRelWithDebInfo[x86] +[ ] Caching disabled for task ':jni:configureCMakeRelWithDebInfo[x86]' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Task ':jni:configureCMakeRelWithDebInfo[x86]' is not up-to-date because: +[ ] Task.upToDateWhen is false. +[ ] C/C++: /Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/src/CMakeLists.txt release|x86 : Start JSON generation. Platform version: 21 min SDK version: x86 +[ ] C/C++: /Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/src/CMakeLists.txt release|x86 : JSON '/Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/android/.cxx/RelWithDebInfo/216c5f6t/x86/android_gradle_build.json' was up-to-date +[ ] C/C++: /Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/src/CMakeLists.txt release|x86 : JSON generation completed without problems +[ ] C/C++: /Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/src/CMakeLists.txt release|x86 : Writing build model to /Users/anbarasu/Downloads/doormile_flutter/build/jni/intermediates/cxx/RelWithDebInfo/216c5f6t/logs/x86/build_model.json +[ ] Resolve mutations for :jni:buildCMakeRelWithDebInfo[x86] (Thread[Execution worker Thread 5,5,main]) started. +[ ] :jni:buildCMakeRelWithDebInfo[x86] (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :jni:buildCMakeRelWithDebInfo[x86] +[ ] Caching disabled for task ':jni:buildCMakeRelWithDebInfo[x86]' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Task ':jni:buildCMakeRelWithDebInfo[x86]' is not up-to-date because: +[ ] Task.upToDateWhen is false. +[ ] C/C++: starting build +[ ] C/C++: reading expected JSONs +[ ] C/C++: done reading expected JSONs +[ ] C/C++: executing build commands for targets that produce .so files or executables +[ ] C/C++: evaluate miniconfig +[ ] C/C++: evaluate library jni (x86) +[ ] C/C++: building target library jni because no targets are specified. +[ ] C/C++: about to build targets jni +[ ] C/C++: Build jni +[ ] C/C++: /Users/anbarasu/Library/Android/sdk/cmake/3.22.1/bin/ninja \ +[ ] -C \ +[ ] /Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/android/.cxx/RelWithDebInfo/216c5f6t/x86 \ +[ ] jni +[ ] Starting process 'command '/Users/anbarasu/Library/Android/sdk/cmake/3.22.1/bin/ninja''. Working directory: /Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/android Command: /Users/anbarasu/Library/Android/sdk/cmake/3.22.1/bin/ninja -C /Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/android/.cxx/RelWithDebInfo/216c5f6t/x86 jni +[ ] Successfully started process 'command '/Users/anbarasu/Library/Android/sdk/cmake/3.22.1/bin/ninja'' +[ ] C/C++: Received process result: 0 +[ ] C/C++: check expected build outputs +[ ] C/C++: build complete +[ ] Resolve mutations for :jni:configureCMakeRelWithDebInfo[x86_64] (Thread[Execution worker Thread 5,5,main]) started. +[ ] :jni:configureCMakeRelWithDebInfo[x86_64] (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :jni:configureCMakeRelWithDebInfo[x86_64] +[ ] Caching disabled for task ':jni:configureCMakeRelWithDebInfo[x86_64]' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Task ':jni:configureCMakeRelWithDebInfo[x86_64]' is not up-to-date because: +[ ] Task.upToDateWhen is false. +[ ] C/C++: /Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/src/CMakeLists.txt release|x86_64 : Start JSON generation. Platform version: 21 min SDK version: x86_64 +[ ] C/C++: /Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/src/CMakeLists.txt release|x86_64 : JSON '/Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/android/.cxx/RelWithDebInfo/216c5f6t/x86_64/android_gradle_build.json' was up-to-date +[ ] C/C++: /Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/src/CMakeLists.txt release|x86_64 : JSON generation completed without problems +[ ] C/C++: /Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/src/CMakeLists.txt release|x86_64 : Writing build model to /Users/anbarasu/Downloads/doormile_flutter/build/jni/intermediates/cxx/RelWithDebInfo/216c5f6t/logs/x86_64/build_model.json +[ ] Resolve mutations for :jni:buildCMakeRelWithDebInfo[x86_64] (Thread[Execution worker Thread 5,5,main]) started. +[ ] :jni:buildCMakeRelWithDebInfo[x86_64] (Thread[Execution worker Thread 5,5,main]) started. +[ +86 ms] > Task :jni:buildCMakeRelWithDebInfo[x86_64] +[ ] Caching disabled for task ':jni:buildCMakeRelWithDebInfo[x86_64]' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Task ':jni:buildCMakeRelWithDebInfo[x86_64]' is not up-to-date because: +[ ] Task.upToDateWhen is false. +[ ] C/C++: starting build +[ ] C/C++: reading expected JSONs +[ ] C/C++: done reading expected JSONs +[ ] C/C++: executing build commands for targets that produce .so files or executables +[ ] C/C++: evaluate miniconfig +[ ] C/C++: evaluate library jni (x86_64) +[ ] C/C++: building target library jni because no targets are specified. +[ ] C/C++: about to build targets jni +[ ] C/C++: Build jni +[ ] C/C++: /Users/anbarasu/Library/Android/sdk/cmake/3.22.1/bin/ninja \ +[ ] -C \ +[ ] /Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/android/.cxx/RelWithDebInfo/216c5f6t/x86_64 \ +[ ] jni +[ ] Starting process 'command '/Users/anbarasu/Library/Android/sdk/cmake/3.22.1/bin/ninja''. Working directory: /Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/android Command: /Users/anbarasu/Library/Android/sdk/cmake/3.22.1/bin/ninja -C /Users/anbarasu/.pub-cache/hosted/pub.dev/jni-1.0.0/android/.cxx/RelWithDebInfo/216c5f6t/x86_64 jni +[ ] Successfully started process 'command '/Users/anbarasu/Library/Android/sdk/cmake/3.22.1/bin/ninja'' +[ ] C/C++: Received process result: 0 +[ ] C/C++: check expected build outputs +[ ] C/C++: build complete +[ ] Resolve mutations for :jni:mergeReleaseJniLibFolders (Thread[Execution worker Thread 5,5,main]) started. +[ ] :jni:mergeReleaseJniLibFolders (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :jni:mergeReleaseJniLibFolders UP-TO-DATE +[ ] Caching disabled for task ':jni:mergeReleaseJniLibFolders' because: +[ ] Build cache is disabled +[ ] Simple merging task +[ ] Skipping task ':jni:mergeReleaseJniLibFolders' as it is up-to-date. +[ ] Resolve mutations for :jni:mergeReleaseNativeLibs (Thread[Execution worker Thread 5,5,main]) started. +[ ] :jni:mergeReleaseNativeLibs (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :jni:mergeReleaseNativeLibs UP-TO-DATE +[ ] Caching disabled for task ':jni:mergeReleaseNativeLibs' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':jni:mergeReleaseNativeLibs' as it is up-to-date. +[ ] Resolve mutations for :jni:copyReleaseJniLibsProjectOnly (Thread[Execution worker Thread 5,5,main]) started. +[ ] :jni:copyReleaseJniLibsProjectOnly (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :jni:copyReleaseJniLibsProjectOnly UP-TO-DATE +[ ] Caching disabled for task ':jni:copyReleaseJniLibsProjectOnly' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':jni:copyReleaseJniLibsProjectOnly' as it is up-to-date. +[ ] work action resolve jni (project :jni) (Thread[Execution worker Thread 5,5,main]) started. +[ ] Resolve mutations for :jni_flutter:mergeReleaseJniLibFolders (Thread[Execution worker Thread 5,5,main]) started. +[ ] :jni_flutter:mergeReleaseJniLibFolders (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :jni_flutter:mergeReleaseJniLibFolders UP-TO-DATE +[ ] Caching disabled for task ':jni_flutter:mergeReleaseJniLibFolders' because: +[ ] Build cache is disabled +[ ] Simple merging task +[ ] Skipping task ':jni_flutter:mergeReleaseJniLibFolders' as it is up-to-date. +[ ] Resolve mutations for :jni_flutter:mergeReleaseNativeLibs (Thread[Execution worker Thread 5,5,main]) started. +[ ] :jni_flutter:mergeReleaseNativeLibs (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :jni_flutter:mergeReleaseNativeLibs NO-SOURCE +[ ] Skipping task ':jni_flutter:mergeReleaseNativeLibs' as it has no source files and no previous output files. +[ ] Resolve mutations for :jni_flutter:copyReleaseJniLibsProjectOnly (Thread[Execution worker Thread 5,5,main]) started. +[ ] :jni_flutter:copyReleaseJniLibsProjectOnly (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :jni_flutter:copyReleaseJniLibsProjectOnly UP-TO-DATE +[ ] Caching disabled for task ':jni_flutter:copyReleaseJniLibsProjectOnly' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':jni_flutter:copyReleaseJniLibsProjectOnly' as it is up-to-date. +[ ] work action resolve jni (project :jni_flutter) (Thread[Execution worker Thread 5,5,main]) started. +[ ] Resolve mutations for :app:mergeReleaseNativeLibs (Thread[Execution worker Thread 5,5,main]) started. +[ ] :app:mergeReleaseNativeLibs (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :app:mergeReleaseNativeLibs UP-TO-DATE +[ ] Caching disabled for task ':app:mergeReleaseNativeLibs' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':app:mergeReleaseNativeLibs' as it is up-to-date. +[ ] Resolve mutations for :app:stripReleaseDebugSymbols (Thread[Execution worker Thread 5,5,main]) started. +[ ] :app:stripReleaseDebugSymbols (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :app:stripReleaseDebugSymbols UP-TO-DATE +[ ] Caching disabled for task ':app:stripReleaseDebugSymbols' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':app:stripReleaseDebugSymbols' as it is up-to-date. +[ ] Resolve mutations for :app:writeReleaseAppMetadata (Thread[Execution worker Thread 5,5,main]) started. +[ ] :app:writeReleaseAppMetadata (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :app:writeReleaseAppMetadata UP-TO-DATE +[ ] Caching disabled for task ':app:writeReleaseAppMetadata' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':app:writeReleaseAppMetadata' as it is up-to-date. +[ ] Resolve mutations for :app:buildReleasePreBundle (Thread[Execution worker Thread 5,5,main]) started. +[ ] :app:buildReleasePreBundle (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :app:buildReleasePreBundle UP-TO-DATE +[ ] Caching disabled for task ':app:buildReleasePreBundle' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':app:buildReleasePreBundle' as it is up-to-date. +[ ] Resolve mutations for :geolocator_android:prepareReleaseArtProfile (Thread[Execution worker Thread 5,5,main]) started. +[ ] :geolocator_android:prepareReleaseArtProfile (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :geolocator_android:prepareReleaseArtProfile UP-TO-DATE +[ ] Caching disabled for task ':geolocator_android:prepareReleaseArtProfile' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':geolocator_android:prepareReleaseArtProfile' as it is up-to-date. +[ ] work action resolve baseline-prof.txt (project :geolocator_android) (Thread[Execution worker Thread 5,5,main]) started. +[ ] Resolve mutations for :jni:prepareReleaseArtProfile (Thread[Execution worker Thread 5,5,main]) started. +[ ] :jni:prepareReleaseArtProfile (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :jni:prepareReleaseArtProfile UP-TO-DATE +[ ] Caching disabled for task ':jni:prepareReleaseArtProfile' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':jni:prepareReleaseArtProfile' as it is up-to-date. +[ ] work action resolve baseline-prof.txt (project :jni) (Thread[Execution worker Thread 5,5,main]) started. +[ ] Resolve mutations for :jni_flutter:prepareReleaseArtProfile (Thread[Execution worker Thread 5,5,main]) started. +[ ] :jni_flutter:prepareReleaseArtProfile (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :jni_flutter:prepareReleaseArtProfile UP-TO-DATE +[ ] Caching disabled for task ':jni_flutter:prepareReleaseArtProfile' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':jni_flutter:prepareReleaseArtProfile' as it is up-to-date. +[ ] work action resolve baseline-prof.txt (project :jni_flutter) (Thread[Execution worker Thread 5,5,main]) started. +[ ] Resolve mutations for :app:mergeReleaseArtProfile (Thread[Execution worker Thread 5,5,main]) started. +[ ] :app:mergeReleaseArtProfile (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :app:mergeReleaseArtProfile UP-TO-DATE +[ ] Caching disabled for task ':app:mergeReleaseArtProfile' because: +[ ] Build cache is disabled +[ ] Simple merging task +[ ] Skipping task ':app:mergeReleaseArtProfile' as it is up-to-date. +[ ] Resolve mutations for :app:compileReleaseArtProfile (Thread[Execution worker Thread 5,5,main]) started. +[ ] :app:compileReleaseArtProfile (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :app:compileReleaseArtProfile UP-TO-DATE +[ ] Caching disabled for task ':app:compileReleaseArtProfile' because: +[ ] Build cache is disabled +[ ] Skipping task ':app:compileReleaseArtProfile' as it is up-to-date. +[ ] Resolve mutations for :app:collectReleaseDependencies (Thread[Execution worker Thread 5,5,main]) started. +[ ] :app:collectReleaseDependencies (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :app:collectReleaseDependencies UP-TO-DATE +[ ] Caching disabled for task ':app:collectReleaseDependencies' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':app:collectReleaseDependencies' as it is up-to-date. +[ ] Resolve mutations for :app:configureReleaseDependencies (Thread[Execution worker Thread 5,5,main]) started. +[ ] :app:configureReleaseDependencies (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :app:configureReleaseDependencies UP-TO-DATE +[ ] Caching disabled for task ':app:configureReleaseDependencies' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':app:configureReleaseDependencies' as it is up-to-date. +[ ] Resolve mutations for :app:extractReleaseNativeSymbolTables (Thread[Execution worker Thread 5,5,main]) started. +[ ] :app:extractReleaseNativeSymbolTables (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :app:extractReleaseNativeSymbolTables UP-TO-DATE +[ ] Caching disabled for task ':app:extractReleaseNativeSymbolTables' because: +[ ] Build cache is disabled +[ ] Skipping task ':app:extractReleaseNativeSymbolTables' as it is up-to-date. +[ ] Resolve mutations for :app:extractProguardFiles (Thread[Execution worker Thread 5,5,main]) started. +[ ] :app:extractProguardFiles (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :app:extractProguardFiles UP-TO-DATE +[ ] Caching disabled for task ':app:extractProguardFiles' because: +[ ] Build cache is disabled +[ ] Fast task +[ ] Skipping task ':app:extractProguardFiles' as it is up-to-date. +[ ] Resolve mutations for :geolocator_android:createFullJarRelease (Thread[Execution worker Thread 5,5,main]) started. +[ ] :geolocator_android:createFullJarRelease (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :geolocator_android:createFullJarRelease UP-TO-DATE +[ ] Caching disabled for task ':geolocator_android:createFullJarRelease' because: +[ ] Build cache is disabled +[ ] Simple merging task +[ ] Skipping task ':geolocator_android:createFullJarRelease' as it is up-to-date. +[ ] work action resolve full.jar (project :geolocator_android) (Thread[Execution worker Thread 5,5,main]) started. +[ ] work action resolve full.jar (project :geolocator_android) (Thread[Execution worker Thread 5,5,main]) started. +[ ] Resolve mutations for :geolocator_android:extractProguardFiles (Thread[Execution worker Thread 5,5,main]) started. +[ ] :geolocator_android:extractProguardFiles (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :geolocator_android:extractProguardFiles UP-TO-DATE +[ ] Caching disabled for task ':geolocator_android:extractProguardFiles' because: +[ ] Build cache is disabled +[ ] Fast task +[ ] Skipping task ':geolocator_android:extractProguardFiles' as it is up-to-date. +[ ] Resolve mutations for :geolocator_android:generateReleaseLintModel (Thread[Execution worker Thread 5,5,main]) started. +[ ] :geolocator_android:generateReleaseLintModel (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :geolocator_android:generateReleaseLintModel UP-TO-DATE +[ ] Caching disabled for task ':geolocator_android:generateReleaseLintModel' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':geolocator_android:generateReleaseLintModel' as it is up-to-date. +[ ] work action resolve generateReleaseLintModel (project :geolocator_android) (Thread[Execution worker Thread 5,5,main]) started. +[ ] work action resolve generateReleaseLintModel (project :geolocator_android) (Thread[Execution worker Thread 5,5,main]) started. +[ ] Resolve mutations for :geolocator_android:prepareLintJarForPublish (Thread[Execution worker Thread 5,5,main]) started. +[ ] :geolocator_android:prepareLintJarForPublish (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :geolocator_android:prepareLintJarForPublish UP-TO-DATE +[ ] Caching disabled for task ':geolocator_android:prepareLintJarForPublish' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':geolocator_android:prepareLintJarForPublish' as it is up-to-date. +[ ] work action resolve lint.jar (project :geolocator_android) (Thread[Execution worker Thread 5,5,main]) started. +[ ] work action resolve lint.jar (project :geolocator_android) (Thread[Execution worker Thread 5,5,main]) started. +[ ] Resolve mutations for :jni:createFullJarRelease (Thread[Execution worker Thread 5,5,main]) started. +[ ] :jni:createFullJarRelease (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :jni:createFullJarRelease UP-TO-DATE +[ ] Caching disabled for task ':jni:createFullJarRelease' because: +[ ] Build cache is disabled +[ ] Simple merging task +[ ] Skipping task ':jni:createFullJarRelease' as it is up-to-date. +[ +1 ms] work action resolve full.jar (project :jni) (Thread[Execution worker Thread 5,5,main]) started. +[ ] work action resolve full.jar (project :jni) (Thread[Execution worker Thread 5,5,main]) started. +[ ] Resolve mutations for :jni:extractProguardFiles (Thread[Execution worker Thread 5,5,main]) started. +[ ] :jni:extractProguardFiles (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :jni:extractProguardFiles UP-TO-DATE +[ ] Caching disabled for task ':jni:extractProguardFiles' because: +[ ] Build cache is disabled +[ ] Fast task +[ ] Skipping task ':jni:extractProguardFiles' as it is up-to-date. +[ ] Resolve mutations for :jni:generateReleaseLintModel (Thread[Execution worker Thread 5,5,main]) started. +[ ] :jni:generateReleaseLintModel (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :jni:generateReleaseLintModel UP-TO-DATE +[ ] Caching disabled for task ':jni:generateReleaseLintModel' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':jni:generateReleaseLintModel' as it is up-to-date. +[ ] work action resolve generateReleaseLintModel (project :jni) (Thread[Execution worker Thread 5,5,main]) started. +[ ] work action resolve generateReleaseLintModel (project :jni) (Thread[Execution worker Thread 5,5,main]) started. +[ ] Resolve mutations for :jni:prepareLintJarForPublish (Thread[Execution worker Thread 5,5,main]) started. +[ ] :jni:prepareLintJarForPublish (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :jni:prepareLintJarForPublish UP-TO-DATE +[ ] Caching disabled for task ':jni:prepareLintJarForPublish' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':jni:prepareLintJarForPublish' as it is up-to-date. +[ ] work action resolve lint.jar (project :jni) (Thread[Execution worker Thread 5,5,main]) started. +[ ] work action resolve lint.jar (project :jni) (Thread[Execution worker Thread 5,5,main]) started. +[ ] Resolve mutations for :jni_flutter:createFullJarRelease (Thread[Execution worker Thread 5,5,main]) started. +[ ] :jni_flutter:createFullJarRelease (Thread[Execution worker Thread 5,5,main]) started. +[ ] > Task :jni_flutter:createFullJarRelease UP-TO-DATE +[ ] Caching disabled for task ':jni_flutter:createFullJarRelease' because: +[ ] Build cache is disabled +[ ] Simple merging task +[ ] Skipping task ':jni_flutter:createFullJarRelease' as it is up-to-date. +[ ] work action resolve full.jar (project :jni_flutter) (Thread[Execution worker Thread 5,5,main]) started. +[ ] work action resolve full.jar (project :jni_flutter) (Thread[Execution worker Thread 5,5,main]) started. +[ ] Resolve mutations for :jni_flutter:extractProguardFiles (Thread[Execution worker Thread 9,5,main]) started. +[ ] :jni_flutter:extractProguardFiles (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :jni_flutter:extractProguardFiles UP-TO-DATE +[ ] Caching disabled for task ':jni_flutter:extractProguardFiles' because: +[ ] Build cache is disabled +[ ] Fast task +[ ] Skipping task ':jni_flutter:extractProguardFiles' as it is up-to-date. +[ ] Resolve mutations for :jni_flutter:generateReleaseLintModel (Thread[Execution worker Thread 9,5,main]) started. +[ ] :jni_flutter:generateReleaseLintModel (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :jni_flutter:generateReleaseLintModel UP-TO-DATE +[ ] Caching disabled for task ':jni_flutter:generateReleaseLintModel' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':jni_flutter:generateReleaseLintModel' as it is up-to-date. +[ ] work action resolve generateReleaseLintModel (project :jni_flutter) (Thread[Execution worker Thread 9,5,main]) started. +[ ] work action resolve generateReleaseLintModel (project :jni_flutter) (Thread[Execution worker Thread 9,5,main]) started. +[ ] Resolve mutations for :jni_flutter:prepareLintJarForPublish (Thread[Execution worker Thread 9,5,main]) started. +[ ] :jni_flutter:prepareLintJarForPublish (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :jni_flutter:prepareLintJarForPublish UP-TO-DATE +[ ] Caching disabled for task ':jni_flutter:prepareLintJarForPublish' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':jni_flutter:prepareLintJarForPublish' as it is up-to-date. +[ ] work action resolve lint.jar (project :jni_flutter) (Thread[Execution worker Thread 9,5,main]) started. +[ ] work action resolve lint.jar (project :jni_flutter) (Thread[Execution worker Thread 9,5,main]) started. +[ ] Resolve mutations for :app:generateReleaseLintVitalReportModel (Thread[Execution worker Thread 9,5,main]) started. +[ ] :app:generateReleaseLintVitalReportModel (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :app:generateReleaseLintVitalReportModel UP-TO-DATE +[ ] Caching disabled for task ':app:generateReleaseLintVitalReportModel' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':app:generateReleaseLintVitalReportModel' as it is up-to-date. +[ ] Resolve mutations for :geolocator_android:stripReleaseDebugSymbols (Thread[Execution worker Thread 9,5,main]) started. +[ ] :geolocator_android:stripReleaseDebugSymbols (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :geolocator_android:stripReleaseDebugSymbols NO-SOURCE +[ ] Skipping task ':geolocator_android:stripReleaseDebugSymbols' as it has no source files and no previous output files. +[ ] Resolve mutations for :geolocator_android:copyReleaseJniLibsProjectAndLocalJars (Thread[Execution worker Thread 9,5,main]) started. +[ ] :geolocator_android:copyReleaseJniLibsProjectAndLocalJars (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :geolocator_android:copyReleaseJniLibsProjectAndLocalJars UP-TO-DATE +[ ] Caching disabled for task ':geolocator_android:copyReleaseJniLibsProjectAndLocalJars' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':geolocator_android:copyReleaseJniLibsProjectAndLocalJars' as it is up-to-date. +[ ] Resolve mutations for :geolocator_android:extractDeepLinksForAarRelease (Thread[Execution worker Thread 9,5,main]) started. +[ ] :geolocator_android:extractDeepLinksForAarRelease (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :geolocator_android:extractDeepLinksForAarRelease UP-TO-DATE +[ ] Caching disabled for task ':geolocator_android:extractDeepLinksForAarRelease' because: +[ ] Build cache is disabled +[ ] Skipping task ':geolocator_android:extractDeepLinksForAarRelease' as it is up-to-date. +[ ] Resolve mutations for :geolocator_android:extractReleaseAnnotations (Thread[Execution worker Thread 9,5,main]) started. +[ ] :geolocator_android:extractReleaseAnnotations (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :geolocator_android:extractReleaseAnnotations UP-TO-DATE +[ ] Caching disabled for task ':geolocator_android:extractReleaseAnnotations' because: +[ ] Build cache is disabled +[ ] Skipping task ':geolocator_android:extractReleaseAnnotations' as it is up-to-date. +[ ] Resolve mutations for :geolocator_android:mergeReleaseGeneratedProguardFiles (Thread[Execution worker Thread 9,5,main]) started. +[ ] :geolocator_android:mergeReleaseGeneratedProguardFiles (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :geolocator_android:mergeReleaseGeneratedProguardFiles UP-TO-DATE +[ ] Caching disabled for task ':geolocator_android:mergeReleaseGeneratedProguardFiles' because: +[ ] Build cache is disabled +[ ] Simple merging task +[ ] Skipping task ':geolocator_android:mergeReleaseGeneratedProguardFiles' as it is up-to-date. +[ ] Resolve mutations for :geolocator_android:mergeReleaseConsumerProguardFiles (Thread[included builds,5,main]) started. +[ ] :geolocator_android:mergeReleaseConsumerProguardFiles (Thread[included builds,5,main]) started. +[ ] > Task :geolocator_android:mergeReleaseConsumerProguardFiles UP-TO-DATE +[ ] Caching disabled for task ':geolocator_android:mergeReleaseConsumerProguardFiles' because: +[ ] Build cache is disabled +[ ] Simple merging task +[ ] Skipping task ':geolocator_android:mergeReleaseConsumerProguardFiles' as it is up-to-date. +[ ] Resolve mutations for :geolocator_android:mergeReleaseJavaResource (Thread[included builds,5,main]) started. +[ ] :geolocator_android:mergeReleaseJavaResource (Thread[included builds,5,main]) started. +[ ] > Task :geolocator_android:mergeReleaseJavaResource UP-TO-DATE +[ ] Caching disabled for task ':geolocator_android:mergeReleaseJavaResource' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':geolocator_android:mergeReleaseJavaResource' as it is up-to-date. +[ ] Resolve mutations for :geolocator_android:syncReleaseLibJars (Thread[included builds,5,main]) started. +[ ] :geolocator_android:syncReleaseLibJars (Thread[included builds,5,main]) started. +[ ] > Task :geolocator_android:syncReleaseLibJars UP-TO-DATE +[ ] Caching disabled for task ':geolocator_android:syncReleaseLibJars' because: +[ ] Build cache is disabled +[ ] Skipping task ':geolocator_android:syncReleaseLibJars' as it is up-to-date. +[ ] Resolve mutations for :geolocator_android:bundleReleaseLocalLintAar (Thread[included builds,5,main]) started. +[ ] :geolocator_android:bundleReleaseLocalLintAar (Thread[included builds,5,main]) started. +[ ] > Task :geolocator_android:bundleReleaseLocalLintAar UP-TO-DATE +[ ] Caching disabled for task ':geolocator_android:bundleReleaseLocalLintAar' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':geolocator_android:bundleReleaseLocalLintAar' as it is up-to-date. +[ ] work action resolve out.aar (project :geolocator_android) (Thread[included builds,5,main]) started. +[ ] work action resolve out.aar (project :geolocator_android) (Thread[included builds,5,main]) started. +[ ] ExtractAarTransform (Thread[Execution worker,5,main]) started. +[ ] ExtractAarTransform (Thread[Execution worker Thread 3,5,main]) started. +[ ] Resolve mutations for :jni_flutter:stripReleaseDebugSymbols (Thread[included builds,5,main]) started. +[ ] :jni_flutter:stripReleaseDebugSymbols (Thread[included builds,5,main]) started. +[ ] > Task :jni_flutter:stripReleaseDebugSymbols NO-SOURCE +[ ] Skipping task ':jni_flutter:stripReleaseDebugSymbols' as it has no source files and no previous output files. +[ ] Resolve mutations for :jni_flutter:copyReleaseJniLibsProjectAndLocalJars (Thread[included builds,5,main]) started. +[ ] :jni_flutter:copyReleaseJniLibsProjectAndLocalJars (Thread[included builds,5,main]) started. +[ ] > Task :jni_flutter:copyReleaseJniLibsProjectAndLocalJars UP-TO-DATE +[ ] Caching disabled for task ':jni_flutter:copyReleaseJniLibsProjectAndLocalJars' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':jni_flutter:copyReleaseJniLibsProjectAndLocalJars' as it is up-to-date. +[ ] Resolve mutations for :jni_flutter:extractDeepLinksForAarRelease (Thread[included builds,5,main]) started. +[ ] :jni_flutter:extractDeepLinksForAarRelease (Thread[included builds,5,main]) started. +[ ] > Task :jni_flutter:extractDeepLinksForAarRelease UP-TO-DATE +[ ] Caching disabled for task ':jni_flutter:extractDeepLinksForAarRelease' because: +[ ] Build cache is disabled +[ ] Skipping task ':jni_flutter:extractDeepLinksForAarRelease' as it is up-to-date. +[ ] Resolve mutations for :jni_flutter:extractReleaseAnnotations (Thread[included builds,5,main]) started. +[ ] :jni_flutter:extractReleaseAnnotations (Thread[included builds,5,main]) started. +[ ] > Task :jni_flutter:extractReleaseAnnotations UP-TO-DATE +[ ] Caching disabled for task ':jni_flutter:extractReleaseAnnotations' because: +[ ] Build cache is disabled +[ ] Skipping task ':jni_flutter:extractReleaseAnnotations' as it is up-to-date. +[ ] Resolve mutations for :jni_flutter:mergeReleaseGeneratedProguardFiles (Thread[included builds,5,main]) started. +[ ] :jni_flutter:mergeReleaseGeneratedProguardFiles (Thread[included builds,5,main]) started. +[ ] > Task :jni_flutter:mergeReleaseGeneratedProguardFiles UP-TO-DATE +[ ] Caching disabled for task ':jni_flutter:mergeReleaseGeneratedProguardFiles' because: +[ ] Build cache is disabled +[ ] Simple merging task +[ ] Skipping task ':jni_flutter:mergeReleaseGeneratedProguardFiles' as it is up-to-date. +[ ] Resolve mutations for :jni_flutter:mergeReleaseConsumerProguardFiles (Thread[included builds,5,main]) started. +[ ] :jni_flutter:mergeReleaseConsumerProguardFiles (Thread[included builds,5,main]) started. +[ ] > Task :jni_flutter:mergeReleaseConsumerProguardFiles UP-TO-DATE +[ ] Caching disabled for task ':jni_flutter:mergeReleaseConsumerProguardFiles' because: +[ ] Build cache is disabled +[ ] Simple merging task +[ ] Skipping task ':jni_flutter:mergeReleaseConsumerProguardFiles' as it is up-to-date. +[ ] Resolve mutations for :jni_flutter:mergeReleaseJavaResource (Thread[included builds,5,main]) started. +[ ] :jni_flutter:mergeReleaseJavaResource (Thread[included builds,5,main]) started. +[ ] > Task :jni_flutter:mergeReleaseJavaResource UP-TO-DATE +[ ] Caching disabled for task ':jni_flutter:mergeReleaseJavaResource' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':jni_flutter:mergeReleaseJavaResource' as it is up-to-date. +[ ] Resolve mutations for :jni_flutter:syncReleaseLibJars (Thread[included builds,5,main]) started. +[ ] :jni_flutter:syncReleaseLibJars (Thread[included builds,5,main]) started. +[ ] > Task :jni_flutter:syncReleaseLibJars UP-TO-DATE +[ ] Caching disabled for task ':jni_flutter:syncReleaseLibJars' because: +[ ] Build cache is disabled +[ ] Skipping task ':jni_flutter:syncReleaseLibJars' as it is up-to-date. +[ ] Resolve mutations for :jni_flutter:bundleReleaseLocalLintAar (Thread[included builds,5,main]) started. +[ ] :jni_flutter:bundleReleaseLocalLintAar (Thread[included builds,5,main]) started. +[ ] > Task :jni_flutter:bundleReleaseLocalLintAar UP-TO-DATE +[ ] Caching disabled for task ':jni_flutter:bundleReleaseLocalLintAar' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':jni_flutter:bundleReleaseLocalLintAar' as it is up-to-date. +[ ] work action resolve out.aar (project :jni_flutter) (Thread[included builds,5,main]) started. +[ ] work action resolve out.aar (project :jni_flutter) (Thread[included builds,5,main]) started. +[ ] ExtractAarTransform (Thread[Execution worker Thread 2,5,main]) started. +[ ] ExtractAarTransform (Thread[Execution worker Thread 7,5,main]) started. +[ ] Resolve mutations for :jni:stripReleaseDebugSymbols (Thread[included builds,5,main]) started. +[ ] :jni:stripReleaseDebugSymbols (Thread[included builds,5,main]) started. +[ ] > Task :jni:stripReleaseDebugSymbols UP-TO-DATE +[ ] Caching disabled for task ':jni:stripReleaseDebugSymbols' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':jni:stripReleaseDebugSymbols' as it is up-to-date. +[ ] Resolve mutations for :jni:copyReleaseJniLibsProjectAndLocalJars (Thread[included builds,5,main]) started. +[ ] :jni:copyReleaseJniLibsProjectAndLocalJars (Thread[included builds,5,main]) started. +[ ] > Task :jni:copyReleaseJniLibsProjectAndLocalJars UP-TO-DATE +[ ] Caching disabled for task ':jni:copyReleaseJniLibsProjectAndLocalJars' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':jni:copyReleaseJniLibsProjectAndLocalJars' as it is up-to-date. +[ ] Resolve mutations for :jni:extractDeepLinksForAarRelease (Thread[included builds,5,main]) started. +[ ] :jni:extractDeepLinksForAarRelease (Thread[included builds,5,main]) started. +[ ] > Task :jni:extractDeepLinksForAarRelease UP-TO-DATE +[ ] Caching disabled for task ':jni:extractDeepLinksForAarRelease' because: +[ ] Build cache is disabled +[ ] Skipping task ':jni:extractDeepLinksForAarRelease' as it is up-to-date. +[ ] Resolve mutations for :jni:extractReleaseAnnotations (Thread[included builds,5,main]) started. +[ ] :jni:extractReleaseAnnotations (Thread[included builds,5,main]) started. +[ ] > Task :jni:extractReleaseAnnotations UP-TO-DATE +[ ] Caching disabled for task ':jni:extractReleaseAnnotations' because: +[ ] Build cache is disabled +[ ] Skipping task ':jni:extractReleaseAnnotations' as it is up-to-date. +[ ] Resolve mutations for :jni:mergeReleaseGeneratedProguardFiles (Thread[included builds,5,main]) started. +[ ] :jni:mergeReleaseGeneratedProguardFiles (Thread[included builds,5,main]) started. +[ ] > Task :jni:mergeReleaseGeneratedProguardFiles UP-TO-DATE +[ ] Caching disabled for task ':jni:mergeReleaseGeneratedProguardFiles' because: +[ ] Build cache is disabled +[ ] Simple merging task +[ ] Skipping task ':jni:mergeReleaseGeneratedProguardFiles' as it is up-to-date. +[ ] Resolve mutations for :jni:mergeReleaseConsumerProguardFiles (Thread[included builds,5,main]) started. +[ ] :jni:mergeReleaseConsumerProguardFiles (Thread[included builds,5,main]) started. +[ ] > Task :jni:mergeReleaseConsumerProguardFiles UP-TO-DATE +[ ] Caching disabled for task ':jni:mergeReleaseConsumerProguardFiles' because: +[ ] Build cache is disabled +[ ] Simple merging task +[ ] Skipping task ':jni:mergeReleaseConsumerProguardFiles' as it is up-to-date. +[ ] Resolve mutations for :jni:mergeReleaseJavaResource (Thread[included builds,5,main]) started. +[ ] :jni:mergeReleaseJavaResource (Thread[included builds,5,main]) started. +[ ] > Task :jni:mergeReleaseJavaResource UP-TO-DATE +[ ] Caching disabled for task ':jni:mergeReleaseJavaResource' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':jni:mergeReleaseJavaResource' as it is up-to-date. +[ ] Resolve mutations for :jni:syncReleaseLibJars (Thread[included builds,5,main]) started. +[ ] :jni:syncReleaseLibJars (Thread[included builds,5,main]) started. +[ ] > Task :jni:syncReleaseLibJars UP-TO-DATE +[ ] Caching disabled for task ':jni:syncReleaseLibJars' because: +[ ] Build cache is disabled +[ ] Skipping task ':jni:syncReleaseLibJars' as it is up-to-date. +[ ] Resolve mutations for :jni:bundleReleaseLocalLintAar (Thread[included builds,5,main]) started. +[ ] :jni:bundleReleaseLocalLintAar (Thread[included builds,5,main]) started. +[ ] > Task :jni:bundleReleaseLocalLintAar UP-TO-DATE +[ ] Caching disabled for task ':jni:bundleReleaseLocalLintAar' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':jni:bundleReleaseLocalLintAar' as it is up-to-date. +[ ] work action resolve out.aar (project :jni) (Thread[included builds,5,main]) started. +[ ] work action resolve out.aar (project :jni) (Thread[included builds,5,main]) started. +[ ] ExtractAarTransform (Thread[Execution worker Thread 5,5,main]) started. +[ ] ExtractAarTransform (Thread[Execution worker Thread 9,5,main]) started. +[ ] Resolve mutations for :geolocator_android:lintVitalAnalyzeRelease (Thread[Execution worker Thread 3,5,main]) started. +[ ] ExtractAarTransform (Thread[Execution worker Thread 2,5,main]) started. +[ ] ExtractAarTransform (Thread[included builds,5,main]) started. +[ ] :geolocator_android:lintVitalAnalyzeRelease (Thread[Execution worker Thread 3,5,main]) started. +[ ] Resolve mutations for :geolocator_android:writeReleaseLintModelMetadata (Thread[Execution worker Thread 9,5,main]) started. +[ ] :geolocator_android:writeReleaseLintModelMetadata (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :geolocator_android:writeReleaseLintModelMetadata UP-TO-DATE +[ ] Caching disabled for task ':geolocator_android:writeReleaseLintModelMetadata' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':geolocator_android:writeReleaseLintModelMetadata' as it is up-to-date. +[ ] work action resolve lint-model-metadata.properties (project :geolocator_android) (Thread[Execution worker Thread 9,5,main]) started. +[ ] work action resolve lint-model-metadata.properties (project :geolocator_android) (Thread[Execution worker Thread 9,5,main]) started. +[ ] Resolve mutations for :jni:lintVitalAnalyzeRelease (Thread[Execution worker Thread 6,5,main]) started. +[ ] :jni:lintVitalAnalyzeRelease (Thread[Execution worker Thread 6,5,main]) started. +[ ] Resolve mutations for :jni:writeReleaseLintModelMetadata (Thread[Execution worker Thread 9,5,main]) started. +[ ] :jni:writeReleaseLintModelMetadata (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :jni:writeReleaseLintModelMetadata UP-TO-DATE +[ ] Caching disabled for task ':jni:writeReleaseLintModelMetadata' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':jni:writeReleaseLintModelMetadata' as it is up-to-date. +[ ] work action resolve lint-model-metadata.properties (project :jni) (Thread[Execution worker Thread 9,5,main]) started. +[ ] work action resolve lint-model-metadata.properties (project :jni) (Thread[Execution worker Thread 9,5,main]) started. +[ ] Resolve mutations for :jni_flutter:lintVitalAnalyzeRelease (Thread[Execution worker Thread 9,5,main]) started. +[ ] :jni_flutter:lintVitalAnalyzeRelease (Thread[Execution worker Thread 9,5,main]) started. +[ ] Resolve mutations for :jni_flutter:writeReleaseLintModelMetadata (Thread[Execution worker,5,main]) started. +[ ] :jni_flutter:writeReleaseLintModelMetadata (Thread[Execution worker,5,main]) started. +[ ] > Task :jni_flutter:writeReleaseLintModelMetadata UP-TO-DATE +[ ] Caching disabled for task ':jni_flutter:writeReleaseLintModelMetadata' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':jni_flutter:writeReleaseLintModelMetadata' as it is up-to-date. +[ ] work action resolve lint-model-metadata.properties (project :jni_flutter) (Thread[Execution worker,5,main]) started. +[ ] work action resolve lint-model-metadata.properties (project :jni_flutter) (Thread[Execution worker,5,main]) started. +[ ] Resolve mutations for :geolocator_android:generateReleaseLintVitalModel (Thread[Execution worker,5,main]) started. +[ ] :geolocator_android:generateReleaseLintVitalModel (Thread[Execution worker,5,main]) started. +[ ] > Task :geolocator_android:generateReleaseLintVitalModel UP-TO-DATE +[ ] Caching disabled for task ':geolocator_android:generateReleaseLintVitalModel' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':geolocator_android:generateReleaseLintVitalModel' as it is up-to-date. +[ ] work action resolve generateReleaseLintVitalModel (project :geolocator_android) (Thread[Execution worker,5,main]) started. +[ ] work action resolve generateReleaseLintVitalModel (project :geolocator_android) (Thread[Execution worker,5,main]) started. +[ ] Resolve mutations for :jni:generateReleaseLintVitalModel (Thread[Execution worker,5,main]) started. +[ ] :jni:generateReleaseLintVitalModel (Thread[Execution worker,5,main]) started. +[ ] > Task :jni:generateReleaseLintVitalModel UP-TO-DATE +[ ] Caching disabled for task ':jni:generateReleaseLintVitalModel' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':jni:generateReleaseLintVitalModel' as it is up-to-date. +[ ] work action resolve generateReleaseLintVitalModel (project :jni) (Thread[Execution worker,5,main]) started. +[ ] work action resolve generateReleaseLintVitalModel (project :jni) (Thread[Execution worker,5,main]) started. +[ ] Resolve mutations for :jni_flutter:generateReleaseLintVitalModel (Thread[Execution worker,5,main]) started. +[ ] :jni_flutter:generateReleaseLintVitalModel (Thread[Execution worker,5,main]) started. +[ ] > Task :jni_flutter:generateReleaseLintVitalModel UP-TO-DATE +[ ] Caching disabled for task ':jni_flutter:generateReleaseLintVitalModel' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':jni_flutter:generateReleaseLintVitalModel' as it is up-to-date. +[ ] work action resolve generateReleaseLintVitalModel (project :jni_flutter) (Thread[Execution worker,5,main]) started. +[ ] work action resolve generateReleaseLintVitalModel (project :jni_flutter) (Thread[Execution worker,5,main]) started. +[ ] Resolve mutations for :app:parseReleaseIntegrityConfig (Thread[Execution worker,5,main]) started. +[ ] :app:parseReleaseIntegrityConfig (Thread[Execution worker,5,main]) started. +[ ] > Task :app:parseReleaseIntegrityConfig UP-TO-DATE +[ ] Caching disabled for task ':app:parseReleaseIntegrityConfig' because: +[ ] Build cache is disabled +[ ] Skipping task ':app:parseReleaseIntegrityConfig' as it is up-to-date. +[ ] Resolve mutations for :app:validateSigningRelease (Thread[Execution worker,5,main]) started. +[ ] :app:validateSigningRelease (Thread[Execution worker,5,main]) started. +[ ] > Task :app:validateSigningRelease UP-TO-DATE +[ ] Caching disabled for task ':app:validateSigningRelease' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':app:validateSigningRelease' as it is up-to-date. +[ +173 ms] > Task :jni_flutter:lintVitalAnalyzeRelease +[ ] Caching disabled for task ':jni_flutter:lintVitalAnalyzeRelease' because: +[ ] Build cache is disabled +[ ] Task ':jni_flutter:lintVitalAnalyzeRelease' is not up-to-date because: +[ ] Value of input property 'printStackTrace' has changed for task ':jni_flutter:lintVitalAnalyzeRelease' +[ ] Android Lint: Reusing lint classloader 31.11.1_true +[ ] work action resolve out (project :jni_flutter) (Thread[Execution worker Thread 9,5,main]) started. +[ ] work action resolve out (project :jni_flutter) (Thread[Execution worker Thread 9,5,main]) started. +[ ] > Task :jni:lintVitalAnalyzeRelease +[ ] Caching disabled for task ':jni:lintVitalAnalyzeRelease' because: +[ ] Build cache is disabled +[ ] Task ':jni:lintVitalAnalyzeRelease' is not up-to-date because: +[ ] Value of input property 'printStackTrace' has changed for task ':jni:lintVitalAnalyzeRelease' +[ ] Android Lint: Reusing lint classloader 31.11.1_true +[ ] work action resolve out (project :jni) (Thread[Execution worker Thread 6,5,main]) started. +[ ] work action resolve out (project :jni) (Thread[Execution worker Thread 4,5,main]) started. +[ +101 ms] > Task :geolocator_android:lintVitalAnalyzeRelease +[ ] Caching disabled for task ':geolocator_android:lintVitalAnalyzeRelease' because: +[ ] Build cache is disabled +[ ] Task ':geolocator_android:lintVitalAnalyzeRelease' is not up-to-date because: +[ ] Value of input property 'printStackTrace' has changed for task ':geolocator_android:lintVitalAnalyzeRelease' +[ ] Android Lint: Reusing lint classloader 31.11.1_true +[ ] work action resolve out (project :geolocator_android) (Thread[Execution worker Thread 3,5,main]) started. +[ ] work action resolve out (project :geolocator_android) (Thread[Execution worker Thread 3,5,main]) started. +[ ] Resolve mutations for :app:lintVitalAnalyzeRelease (Thread[Execution worker Thread 3,5,main]) started. +[ ] :app:lintVitalAnalyzeRelease (Thread[Execution worker Thread 3,5,main]) started. +[ +192 ms] > Task :app:lintVitalAnalyzeRelease +[ ] Caching disabled for task ':app:lintVitalAnalyzeRelease' because: +[ ] Build cache is disabled +[ ] Task ':app:lintVitalAnalyzeRelease' is not up-to-date because: +[ ] Value of input property 'printStackTrace' has changed for task ':app:lintVitalAnalyzeRelease' +[ ] Android Lint: Reusing lint classloader 31.11.1_true +[ ] Resolve mutations for :app:lintVitalReportRelease (Thread[Execution worker Thread 3,5,main]) started. +[ ] :app:lintVitalReportRelease (Thread[Execution worker Thread 3,5,main]) started. +[ ] > Task :app:lintVitalReportRelease +[ ] Caching disabled for task ':app:lintVitalReportRelease' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Task ':app:lintVitalReportRelease' is not up-to-date because: +[ ] Value of input property 'printStackTrace' has changed for task ':app:lintVitalReportRelease' +[ ] Android Lint: Reusing lint classloader 31.11.1_true +[ ] Resolve mutations for :app:lintVitalRelease (Thread[Execution worker Thread 3,5,main]) started. +[ ] :app:lintVitalRelease (Thread[Execution worker Thread 3,5,main]) started. +[ ] > Task :app:lintVitalRelease +[ ] Caching disabled for task ':app:lintVitalRelease' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Task ':app:lintVitalRelease' is not up-to-date because: +[ ] Task.upToDateWhen is false. +[ ] Resolve mutations for :app:packageReleaseBundle (Thread[Execution worker Thread 3,5,main]) started. +[ ] :app:packageReleaseBundle (Thread[Execution worker Thread 3,5,main]) started. +[ ] > Task :app:packageReleaseBundle UP-TO-DATE +[ ] Caching disabled for task ':app:packageReleaseBundle' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':app:packageReleaseBundle' as it is up-to-date. +[ ] Resolve mutations for :app:signReleaseBundle (Thread[Execution worker Thread 3,5,main]) started. +[ ] :app:signReleaseBundle (Thread[Execution worker Thread 3,5,main]) started. +[ ] > Task :app:signReleaseBundle UP-TO-DATE +[ ] Caching disabled for task ':app:signReleaseBundle' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':app:signReleaseBundle' as it is up-to-date. +[ ] Resolve mutations for :app:produceReleaseBundleIdeListingFile (Thread[Execution worker Thread 3,5,main]) started. +[ ] :app:produceReleaseBundleIdeListingFile (Thread[Execution worker Thread 3,5,main]) started. +[ ] > Task :app:produceReleaseBundleIdeListingFile UP-TO-DATE +[ ] Caching disabled for task ':app:produceReleaseBundleIdeListingFile' because: +[ ] Build cache is disabled +[ ] Fast task +[ ] Skipping task ':app:produceReleaseBundleIdeListingFile' as it is up-to-date. +[ ] Resolve mutations for :app:createReleaseBundleListingFileRedirect (Thread[Execution worker Thread 3,5,main]) started. +[ ] :app:createReleaseBundleListingFileRedirect (Thread[Execution worker Thread 3,5,main]) started. +[ ] > Task :app:createReleaseBundleListingFileRedirect UP-TO-DATE +[ ] Caching disabled for task ':app:createReleaseBundleListingFileRedirect' because: +[ ] Build cache is disabled +[ ] Caching has been disabled for the task +[ ] Skipping task ':app:createReleaseBundleListingFileRedirect' as it is up-to-date. +[ ] Resolve mutations for :app:bundleRelease (Thread[Execution worker Thread 3,5,main]) started. +[ ] :app:bundleRelease (Thread[Execution worker Thread 3,5,main]) started. +[ ] > Task :app:bundleRelease UP-TO-DATE +[ ] Skipping task ':app:bundleRelease' as it has no actions. +[ ] Build b0fbb022-5ca9-44e4-94f6-596ae9452722 is closed +[ ] Android Lint: Disposing Uast application environment in lint classloader [31.11.1_true] +[ ] Build 982634eb-17c1-4374-b8bf-069dc6d4837f is closed +[ ] [Incubating] Problems report is available at: file:///Users/anbarasu/Downloads/doormile_flutter/build/reports/problems/problems-report.html +[ ] Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0. +[ ] You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins. +[ ] For more on this, please refer to https://docs.gradle.org/8.14/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation. +[ ] BUILD SUCCESSFUL in 2s +[ ] 179 actionable tasks: 24 executed, 155 up-to-date +[ ] Watched directory hierarchies: [/Users/anbarasu/flutter/packages/flutter_tools/gradle, /Users/anbarasu/Downloads/doormile_flutter/android] +[ +4 ms] Running Gradle task 'bundleRelease'... (completed in 2,723ms) +[ +7 ms] executing: [/Users/anbarasu/Downloads/doormile_flutter/android/] /Users/anbarasu/Library/Android/sdk/cmdline-tools/latest/bin/apkanalyzer files list /Users/anbarasu/Downloads/doormile_flutter/build/app/outputs/bundle/release/app-release.aab +[ +384 ms] / + /META-INF/ + /META-INF/MANIFEST.MF + /META-INF/UPLOAD.RSA + /META-INF/UPLOAD.SF + /base/ + /base/root/ + /base/root/play-services-tasks.properties + /base/root/play-services-location.properties + /base/root/play-services-basement.properties + /base/root/play-services-base.properties + /base/root/kotlin/ + /base/root/kotlin/reflect/ + /base/root/kotlin/reflect/reflect.kotlin_builtins + /base/root/kotlin/ranges/ + /base/root/kotlin/ranges/ranges.kotlin_builtins + /base/root/kotlin/kotlin.kotlin_builtins + /base/root/kotlin/internal/ + /base/root/kotlin/internal/internal.kotlin_builtins + /base/root/kotlin/coroutines/ + /base/root/kotlin/coroutines/coroutines.kotlin_builtins + /base/root/kotlin/concurrent/ + /base/root/kotlin/concurrent/atomics/ + /base/root/kotlin/concurrent/atomics/atomics.kotlin_builtins + /base/root/kotlin/collections/ + /base/root/kotlin/collections/collections.kotlin_builtins + /base/root/kotlin/annotation/ + /base/root/kotlin/annotation/annotation.kotlin_builtins + /base/root/kotlin-tooling-metadata.json + /base/root/META-INF/ + /base/root/META-INF/versions/ + /base/root/META-INF/versions/9/ + /base/root/META-INF/versions/9/OSGI-INF/ + /base/root/META-INF/versions/9/OSGI-INF/MANIFEST.MF + /base/root/META-INF/version-control-info.textproto + /base/root/META-INF/services/ + /base/root/META-INF/services/kotlinx.coroutines.internal.MainDispatcherFactory + /base/root/META-INF/services/kotlinx.coroutines.CoroutineExceptionHandler + /base/root/META-INF/com/ + /base/root/META-INF/com/android/ + /base/root/META-INF/com/android/build/ + /base/root/META-INF/com/android/build/gradle/ + /base/root/META-INF/com/android/build/gradle/app-metadata.properties + /base/root/DebugProbesKt.bin + /base/resources.pb + /base/res/ + /base/res/mipmap-xxxhdpi-v4/ + /base/res/mipmap-xxxhdpi-v4/launcher_icon.png + /base/res/mipmap-xxxhdpi-v4/ic_launcher.png + /base/res/mipmap-xxhdpi-v4/ + /base/res/mipmap-xxhdpi-v4/launcher_icon.png + /base/res/mipmap-xxhdpi-v4/ic_launcher.png + /base/res/mipmap-xhdpi-v4/ + /base/res/mipmap-xhdpi-v4/launcher_icon.png + /base/res/mipmap-xhdpi-v4/ic_launcher.png + /base/res/mipmap-mdpi-v4/ + /base/res/mipmap-mdpi-v4/launcher_icon.png + /base/res/mipmap-mdpi-v4/ic_launcher.png + /base/res/mipmap-hdpi-v4/ + /base/res/mipmap-hdpi-v4/launcher_icon.png + /base/res/mipmap-hdpi-v4/ic_launcher.png + /base/res/layout/ + /base/res/layout/notification_template_part_time.xml + /base/res/layout/notification_template_part_chronometer.xml + /base/res/layout/ime_secondary_split_test_activity.xml + /base/res/layout/ime_base_split_test_activity.xml + /base/res/layout/custom_dialog.xml + /base/res/layout-v21/ + /base/res/layout-v21/notification_template_icon_group.xml + /base/res/layout-v21/notification_template_custom_big.xml + /base/res/layout-v21/notification_action_tombstone.xml + /base/res/layout-v21/notification_action.xml + /base/res/drawable/ + /base/res/drawable/notification_tile_bg.xml + /base/res/drawable/notification_icon_background.xml + /base/res/drawable/notification_bg_low.xml + /base/res/drawable/notification_bg.xml + /base/res/drawable/common_google_signin_btn_text_light_normal.xml + /base/res/drawable/common_google_signin_btn_text_light_focused.xml + /base/res/drawable/common_google_signin_btn_text_light.xml + /base/res/drawable/common_google_signin_btn_text_disabled.xml + /base/res/drawable/common_google_signin_btn_text_dark_normal.xml + /base/res/drawable/common_google_signin_btn_text_dark_focused.xml + /base/res/drawable/common_google_signin_btn_text_dark.xml + /base/res/drawable/common_google_signin_btn_icon_light_normal.xml + /base/res/drawable/common_google_signin_btn_icon_light_focused.xml + /base/res/drawable/common_google_signin_btn_icon_light.xml + /base/res/drawable/common_google_signin_btn_icon_disabled.xml + /base/res/drawable/common_google_signin_btn_icon_dark_normal.xml + /base/res/drawable/common_google_signin_btn_icon_dark_focused.xml + /base/res/drawable/common_google_signin_btn_icon_dark.xml + /base/res/drawable-xxxhdpi-v4/ + /base/res/drawable-xxxhdpi-v4/ic_call_decline_low.png + /base/res/drawable-xxxhdpi-v4/ic_call_decline.png + /base/res/drawable-xxxhdpi-v4/ic_call_answer_video_low.png + /base/res/drawable-xxxhdpi-v4/ic_call_answer_video.png + /base/res/drawable-xxxhdpi-v4/ic_call_answer_low.png + /base/res/drawable-xxxhdpi-v4/ic_call_answer.png + /base/res/drawable-xxhdpi-v4/ + /base/res/drawable-xxhdpi-v4/ic_call_decline_low.png + /base/res/drawable-xxhdpi-v4/ic_call_decline.png + /base/res/drawable-xxhdpi-v4/ic_call_answer_video_low.png + /base/res/drawable-xxhdpi-v4/ic_call_answer_video.png + /base/res/drawable-xxhdpi-v4/ic_call_answer_low.png + /base/res/drawable-xxhdpi-v4/ic_call_answer.png + /base/res/drawable-xxhdpi-v4/googleg_standard_color_18.png + /base/res/drawable-xxhdpi-v4/googleg_disabled_color_18.png + /base/res/drawable-xxhdpi-v4/common_google_signin_btn_text_light_normal_background.9.png + /base/res/drawable-xxhdpi-v4/common_google_signin_btn_text_dark_normal_background.9.png + /base/res/drawable-xxhdpi-v4/common_google_signin_btn_icon_light_normal_background.9.png + /base/res/drawable-xxhdpi-v4/common_google_signin_btn_icon_dark_normal_background.9.png + /base/res/drawable-xhdpi-v4/ + /base/res/drawable-xhdpi-v4/notify_panel_notification_icon_bg.png + /base/res/drawable-xhdpi-v4/notification_bg_normal_pressed.9.png + /base/res/drawable-xhdpi-v4/notification_bg_normal.9.png + /base/res/drawable-xhdpi-v4/notification_bg_low_pressed.9.png + /base/res/drawable-xhdpi-v4/notification_bg_low_normal.9.png + /base/res/drawable-xhdpi-v4/ic_call_decline_low.png + /base/res/drawable-xhdpi-v4/ic_call_decline.png + /base/res/drawable-xhdpi-v4/ic_call_answer_video_low.png + /base/res/drawable-xhdpi-v4/ic_call_answer_video.png + /base/res/drawable-xhdpi-v4/ic_call_answer_low.png + /base/res/drawable-xhdpi-v4/ic_call_answer.png + /base/res/drawable-xhdpi-v4/googleg_standard_color_18.png + /base/res/drawable-xhdpi-v4/googleg_disabled_color_18.png + /base/res/drawable-xhdpi-v4/common_google_signin_btn_text_light_normal_background.9.png + /base/res/drawable-xhdpi-v4/common_google_signin_btn_text_dark_normal_background.9.png + /base/res/drawable-xhdpi-v4/common_google_signin_btn_icon_light_normal_background.9.png + /base/res/drawable-xhdpi-v4/common_google_signin_btn_icon_dark_normal_background.9.png + /base/res/drawable-xhdpi-v4/common_full_open_on_phone.png + /base/res/drawable-v21/ + /base/res/drawable-v21/notification_action_background.xml + /base/res/drawable-v21/launch_background.xml + /base/res/drawable-mdpi-v4/ + /base/res/drawable-mdpi-v4/notify_panel_notification_icon_bg.png + /base/res/drawable-mdpi-v4/notification_bg_normal_pressed.9.png + /base/res/drawable-mdpi-v4/notification_bg_normal.9.png + /base/res/drawable-mdpi-v4/notification_bg_low_pressed.9.png + /base/res/drawable-mdpi-v4/notification_bg_low_normal.9.png + /base/res/drawable-mdpi-v4/ic_call_decline_low.png + /base/res/drawable-mdpi-v4/ic_call_decline.png + /base/res/drawable-mdpi-v4/ic_call_answer_video_low.png + /base/res/drawable-mdpi-v4/ic_call_answer_video.png + /base/res/drawable-mdpi-v4/ic_call_answer_low.png + /base/res/drawable-mdpi-v4/ic_call_answer.png + /base/res/drawable-mdpi-v4/googleg_standard_color_18.png + /base/res/drawable-mdpi-v4/googleg_disabled_color_18.png + /base/res/drawable-mdpi-v4/common_google_signin_btn_text_light_normal_background.9.png + /base/res/drawable-mdpi-v4/common_google_signin_btn_text_dark_normal_background.9.png + /base/res/drawable-mdpi-v4/common_google_signin_btn_icon_light_normal_background.9.png + /base/res/drawable-mdpi-v4/common_google_signin_btn_icon_dark_normal_background.9.png + /base/res/drawable-ldpi-v4/ + /base/res/drawable-ldpi-v4/ic_call_decline_low.png + /base/res/drawable-ldpi-v4/ic_call_decline.png + /base/res/drawable-ldpi-v4/ic_call_answer_video_low.png + /base/res/drawable-ldpi-v4/ic_call_answer_video.png + /base/res/drawable-ldpi-v4/ic_call_answer_low.png + /base/res/drawable-ldpi-v4/ic_call_answer.png + /base/res/drawable-hdpi-v4/ + /base/res/drawable-hdpi-v4/notify_panel_notification_icon_bg.png + /base/res/drawable-hdpi-v4/notification_oversize_large_icon_bg.png + /base/res/drawable-hdpi-v4/notification_bg_normal_pressed.9.png + /base/res/drawable-hdpi-v4/notification_bg_normal.9.png + /base/res/drawable-hdpi-v4/notification_bg_low_pressed.9.png + /base/res/drawable-hdpi-v4/notification_bg_low_normal.9.png + /base/res/drawable-hdpi-v4/ic_call_decline_low.png + /base/res/drawable-hdpi-v4/ic_call_decline.png + /base/res/drawable-hdpi-v4/ic_call_answer_video_low.png + /base/res/drawable-hdpi-v4/ic_call_answer_video.png + /base/res/drawable-hdpi-v4/ic_call_answer_low.png + /base/res/drawable-hdpi-v4/ic_call_answer.png + /base/res/drawable-hdpi-v4/googleg_standard_color_18.png + /base/res/drawable-hdpi-v4/googleg_disabled_color_18.png + /base/res/drawable-hdpi-v4/common_google_signin_btn_text_light_normal_background.9.png + /base/res/drawable-hdpi-v4/common_google_signin_btn_text_dark_normal_background.9.png + /base/res/drawable-hdpi-v4/common_google_signin_btn_icon_light_normal_background.9.png + /base/res/drawable-hdpi-v4/common_google_signin_btn_icon_dark_normal_background.9.png + /base/res/drawable-hdpi-v4/common_full_open_on_phone.png + /base/res/drawable-anydpi-v21/ + /base/res/drawable-anydpi-v21/ic_call_decline_low.xml + /base/res/drawable-anydpi-v21/ic_call_decline.xml + /base/res/drawable-anydpi-v21/ic_call_answer_video_low.xml + /base/res/drawable-anydpi-v21/ic_call_answer_video.xml + /base/res/drawable-anydpi-v21/ic_call_answer_low.xml + /base/res/drawable-anydpi-v21/ic_call_answer.xml + /base/res/color/ + /base/res/color/common_google_signin_btn_tint.xml + /base/res/color/common_google_signin_btn_text_light.xml + /base/res/color/common_google_signin_btn_text_dark.xml + /base/res/animator/ + /base/res/animator/fragment_open_exit.xml + /base/res/animator/fragment_open_enter.xml + /base/res/animator/fragment_fade_exit.xml + /base/res/animator/fragment_fade_enter.xml + /base/res/animator/fragment_close_exit.xml + /base/res/animator/fragment_close_enter.xml + /base/res/anim-v21/ + /base/res/anim-v21/fragment_fast_out_extra_slow_in.xml + /base/native.pb + /base/manifest/ + /base/manifest/AndroidManifest.xml + /base/lib/ + /base/lib/x86_64/ + /base/lib/x86_64/libflutter.so + /base/lib/x86_64/libdartjni.so + /base/lib/x86_64/libapp.so + /base/lib/armeabi-v7a/ + /base/lib/armeabi-v7a/libflutter.so + /base/lib/armeabi-v7a/libdartjni.so + /base/lib/armeabi-v7a/libapp.so + /base/lib/arm64-v8a/ + /base/lib/arm64-v8a/libflutter.so + /base/lib/arm64-v8a/libdartjni.so + /base/lib/arm64-v8a/libapp.so + /base/dex/ + /base/dex/classes.dex + /base/assets/ + /base/assets/flutter_assets/ + /base/assets/flutter_assets/shaders/ + /base/assets/flutter_assets/shaders/stretch_effect.frag + /base/assets/flutter_assets/shaders/ink_sparkle.frag + /base/assets/flutter_assets/packages/ + /base/assets/flutter_assets/packages/cupertino_icons/ + /base/assets/flutter_assets/packages/cupertino_icons/assets/ + /base/assets/flutter_assets/packages/cupertino_icons/assets/CupertinoIcons.ttf + /base/assets/flutter_assets/fonts/ + /base/assets/flutter_assets/fonts/MaterialIcons-Regular.otf + /base/assets/flutter_assets/assets/ + /base/assets/flutter_assets/assets/preloader.png + /base/assets/flutter_assets/NativeAssetsManifest.json + /base/assets/flutter_assets/NOTICES.Z + /base/assets/flutter_assets/FontManifest.json + /base/assets/flutter_assets/AssetManifest.bin + /base/assets.pb + /BundleConfig.pb + /BUNDLE-METADATA/ + /BUNDLE-METADATA/com.android.tools/ + /BUNDLE-METADATA/com.android.tools/d8.json + /BUNDLE-METADATA/com.android.tools.build.profiles/ + /BUNDLE-METADATA/com.android.tools.build.profiles/baseline.profm + /BUNDLE-METADATA/com.android.tools.build.profiles/baseline.prof + /BUNDLE-METADATA/com.android.tools.build.libraries/ + /BUNDLE-METADATA/com.android.tools.build.libraries/dependencies.pb + /BUNDLE-METADATA/com.android.tools.build.gradle/ + /BUNDLE-METADATA/com.android.tools.build.gradle/app-metadata.properties +[ ] libflutter.so.sym or libflutter.so.dbg not present when checking final appbundle for debug symbols. +[ ] "flutter appbundle" took 3,519ms. +[ +2 ms] executing: sw_vers -productName +[ +10 ms] Exit code 0 from: sw_vers -productName +[ ] macOS +[ ] executing: sw_vers -productVersion +[ +7 ms] Exit code 0 from: sw_vers -productVersion +[ ] 26.4.1 +[ ] executing: sw_vers -buildVersion +[ +6 ms] Exit code 0 from: sw_vers -buildVersion +[ ] 25E253 +[ ] executing: uname -m +[ +3 ms] Exit code 0 from: uname -m +[ ] arm64 +[ +19 ms] Release app bundle failed to strip debug symbols from native libraries. + Please run flutter doctor and ensure that the Android toolchain does not + report any issues. + + Otherwise, file an issue at https://github.com/flutter/flutter/issues. +[ ] + #0 throwToolExit (package:flutter_tools/src/base/common.dart:34:3) + #1 AndroidGradleBuilder.buildGradleApp (package:flutter_tools/src/android/gradle.dart:610:9) + + #2 AndroidGradleBuilder.buildAab (package:flutter_tools/src/android/gradle.dart:257:5) + + #3 BuildAppBundleCommand.runCommand (package:flutter_tools/src/commands/build_appbundle.dart:169:5) + + #4 FlutterCommand.run. (package:flutter_tools/src/runner/flutter_command.dart:1630:27) + + #5 AppContext.run. (package:flutter_tools/src/base/context.dart:154:19) + + #6 CommandRunner.runCommand (package:args/command_runner.dart:212:13) + + #7 FlutterCommandRunner.runCommand. (package:flutter_tools/src/runner/flutter_command_runner.dart:496:9) + + #8 AppContext.run. (package:flutter_tools/src/base/context.dart:154:19) + + #9 FlutterCommandRunner.runCommand (package:flutter_tools/src/runner/flutter_command_runner.dart:431:5) + + #10 FlutterCommandRunner.run. (package:flutter_tools/src/runner/flutter_command_runner.dart:307:33) + + #11 run.. (package:flutter_tools/runner.dart:104:11) + + #12 AppContext.run. (package:flutter_tools/src/base/context.dart:154:19) + + #13 main (package:flutter_tools/executable.dart:103:3) + + + +[ ] Running 1 shutdown hook +[ ] Shutdown hooks complete +[ +160 ms] exiting with code 1 diff --git a/ios/.gitignore b/ios/.gitignore new file mode 100644 index 0000000..7a7f987 --- /dev/null +++ b/ios/.gitignore @@ -0,0 +1,34 @@ +**/dgph +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/ephemeral/ +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 0000000..1dc6cf7 --- /dev/null +++ b/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 13.0 + + diff --git a/ios/Flutter/Debug.xcconfig b/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/ios/Flutter/Release.xcconfig b/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..e0f7b92 --- /dev/null +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,616 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.doormile.doormileFlutter; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.doormile.doormileFlutter.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.doormile.doormileFlutter.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.doormile.doormileFlutter.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.doormile.doormileFlutter; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.doormile.doormileFlutter; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..e3773d4 --- /dev/null +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000..6266644 --- /dev/null +++ b/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Flutter +import UIKit + +@main +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d36b1fa --- /dev/null +++ b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..f5ea08aef98f3b6adaeefdf66295c3c6a5ec131e GIT binary patch literal 87178 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 RsiXh^002ovPDHLkV1lBD-z5M5 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..824e9f6a1361ac030a36d5a1ce37f841b8bf8cc3 GIT binary patch literal 2286 zcmVNpzLaQs;$CeLF+nNe6_fBrns&+uG<#YQ9C<~cBLJ) z?W#rVZnuu@`l|Kyhtl=2uG(qc^}$mFK|n$w;hme@B=@-um&QPnLhbiY?!D*x?(cl( zobPdig7FCqKq^XRVoEcjn1J907$pD%0APXCBk~r3YY^PGIcF{J62|vJbWDvX7+pf> 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 T$sDLZ00000NkvXXu0mjfb&T{t literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..975c021307ff2603340c532fd6c14a2892490aff GIT binary patch literal 1617 zcmV-X2Cn&uP)6v`dw5M}%(Pk<%nUG=-3MaTU z0FzL-!>Jy(t8pTklx9=P>t6dwr@5PP|94ywfFDSdX`)~ZLPDho%Sa7bsg))!Aml+D z$3X~bi`CX~cjRJ=>0HCoLDLcY)iqzHd)uk9o_+xy|PAU~Io~gQ@ zn-A(5kIEu*EPc)iLMG$BFHz1zVjgLADdaN`yu+jPxE=6D(0_**B-JX2kPkb=@woCL z@8}q4ZrvtP6+4WRabs{%x+oY0$>OVueMoyhFMD+AhiR(?50FG;XGQPb1`(RXj!<01 zv9{!t6f<|hZMny|_z#<@Pz=K8f;>{K0ssgoz|;BlUyR+ME2(hy>f*mD9{jG(Gh_~1 zzfLqutvRr(JFjqyM6t)FM=A_0Bcy~%5uTOl&)vks!E!_Uzdt7z$FP=bZ9ShB+wXMU zSiHt#93n#G;qPQX2-O?X`i_?`?l(kW1kw^R48pLCRE#A3GcMr8ND^Y0@0@iw4PSq6 zsQ%V7U?h~Gl2}dR`BU_mg;Xkd8-#~tuGN)RYDpP-iI4yQLRM<0aftp&5Wuyz|`)op1X?3NQ3lW84aK7@Ti3@zpKFu#*1B~6#z3ZUq zrwhur){OjdW%llz==>d{&8-79wbq**;yF=1FKI$NfKY>rkOCucX#gP)nh7s$vHhL- zo~^9|qr~P5zpK(yqVsn^2qiDX0svh727fPHLJ^7(g~^Nv2r!Czwxa~RtlNEiKaB@_Y>(Hy{C&S!f`z}tJM#CrWNYF>=lI z>LPzHduJD5xrdA!wbPDdQaaMyBG)GQ-z*AOx%H2DoqKbo=aJENs}q+7_-e*_v)y$5 zm%t@2izCAQy+$s!0025@Cwe?ivMHtM#|F**ofttpVG74NnioCwrnd)9)(T4Gc<_*Q zd#pEZ^&Tn#3^QkUjz6;;!x+!ja~#*=8ApRGecfwcI%pa^T^F9U-gh(W^$Jg>G*O(F zzksznZf9(D=?ubo>NjsnDdWFN3fGBYJYFBQ4TzL_g zknR67FNB)u{`kOf( z+;nM(_3pFj?HoIGZW>uS&!#&niv-QBZOJK`1H054(jdZTLds|VTtm;nVz0@pXFU6C zdIRg7W*!Tnb1Z$i5>=|1>&`3eJ6;}^xi(~#R+=_4@WHBy#{C=D*+r4Is{1H&x+ka2g=&Q{O3j`d9I{&@WZ##SRx)nmaq P00000NkvXXu0mjfE2sgi literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c4a6489c0763d50ea0469872837608699d9e9e46 GIT binary patch literal 3601 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 XQ;b64=|fUd00000NkvXXu0mjfD?==A literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..b575b602cb897b4246e0d5877a067e4436be78a8 GIT binary patch literal 5275 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%0APXCBk~r3YY^PGIcF{J62|vJbWDvX7+pf> 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..1bfa190eb9eb61e243a48020cc33387c01c1e77e GIT binary patch literal 8010 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..3641bf784d1a57797c51f06b3e0c222c2103d081 GIT binary patch literal 6643 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..b0e201a31581356e1ac5f5c5d918b14f9c00de95 GIT binary patch literal 4289 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e55e57cc0c49424c864443c931768aaa0184a4fe GIT binary patch literal 8814 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 bUyT0%Mv4-{5u`W|00000NkvXXu0mjfGr-n_ literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..aa48c39cb39dc37f98833340ec99f83abd1a12ad GIT binary patch literal 9107 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 RGv@#R002ovPDHLkV1gCH+e!cc literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f22d0a137eef458db4827d132e321236e3aeed79 GIT binary patch literal 10189 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 Hu0mjfb^lUe literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 0000000..0bedcf2 --- /dev/null +++ b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000..89c2725 --- /dev/null +++ b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/ios/Runner/Base.lproj/LaunchScreen.storyboard b/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..f2e259c --- /dev/null +++ b/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner/Base.lproj/Main.storyboard b/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f3c2851 --- /dev/null +++ b/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist new file mode 100644 index 0000000..e48e76b --- /dev/null +++ b/ios/Runner/Info.plist @@ -0,0 +1,51 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Doormile CRM + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Doormile CRM + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + NSLocationWhenInUseUsageDescription + DoorMile CRM records your GPS location when a survey is submitted so the field visit can be logged accurately. + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + + + diff --git a/ios/Runner/Runner-Bridging-Header.h b/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000..308a2a5 --- /dev/null +++ b/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/ios/RunnerTests/RunnerTests.swift b/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000..86a7c3b --- /dev/null +++ b/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/lib/app.dart b/lib/app.dart new file mode 100644 index 0000000..0721afc --- /dev/null +++ b/lib/app.dart @@ -0,0 +1,291 @@ +import 'dart:async'; +import 'package:flutter/material.dart'; +import 'models/client.dart'; +import 'models/activity.dart'; +import 'models/app_stats.dart'; +import 'screens/dashboard_screen.dart'; +import 'screens/clients_screen.dart'; +import 'screens/survey_screen.dart'; +import 'screens/surveys_list_screen.dart'; +import 'screens/pricing_screen.dart'; +import 'services/crm_api_service.dart'; +import 'services/auth_service.dart'; + +class AppShell extends StatefulWidget { + final AuthUser currentUser; + final VoidCallback onLogout; + + const AppShell({ + super.key, + required this.currentUser, + required this.onLogout, + }); + + @override + State createState() => _AppShellState(); +} + +class _AppShellState extends State { + int _currentIndex = 0; + bool _backendReady = false; + + List _clients = []; + List _activities = []; + List _surveys = []; + List _pricing = []; + AppStats _stats = const AppStats( + totalClients: 0, + avgVolume: 0, + revenueOpportunity: 0, + todayEntries: 0, + pendingFollowups: 0, + ); + + final _api = CrmApiService(); + + Timer? _pollingTimer; + + @override + void initState() { + super.initState(); + _api.setToken(widget.currentUser.token); + _loadFromBackend(); + _startPolling(); + } + + void _startPolling() { + _pollingTimer = Timer.periodic(const Duration(seconds: 10), (_) { + _loadFromBackend(silent: true); + }); + } + + @override + void dispose() { + _pollingTimer?.cancel(); + super.dispose(); + } + + Future _loadFromBackend({bool silent = false}) async { + try { + final results = await Future.wait([ + _api.loadClients(), + _api.fetchSurveys(), + _api.fetchPricing(), + ]); + final clients = results[0] as List; + final surveys = results[1]; + final pricing = results[2]; + + if (!mounted) return; + setState(() { + _clients = clients; + _surveys = surveys; + _pricing = pricing; + _stats = _computeStats(clients); + _backendReady = true; + }); + } catch (_) { + if (mounted && !silent) setState(() => _backendReady = false); + } + } + + AppStats _computeStats(List clients) { + if (clients.isEmpty) { + return const AppStats( + totalClients: 0, + avgVolume: 0, + revenueOpportunity: 0, + todayEntries: 0, + pendingFollowups: 0, + ); + } + final totalVolume = clients.fold(0.0, (acc, c) => acc + c.parcelVolume); + final avg = (totalVolume / clients.length).round(); + return AppStats( + totalClients: clients.length, + avgVolume: avg, + revenueOpportunity: double.parse((totalVolume * 0.01).toStringAsFixed(2)), + todayEntries: 0, + pendingFollowups: clients.where((c) => c.dataConsent == DataConsent.basicOnly).length, + ); + } + + void _handleAddClient(Client incoming) async { + final newClient = incoming.copyWith( + recordedByName: widget.currentUser.name, + recordedByEmail: widget.currentUser.email, + recordedByRole: widget.currentUser.role, + ); + + // Optimistic UI update with a temp ID + setState(() { + _clients = [newClient, ..._clients]; + _activities = [ + Activity( + id: 'act_${DateTime.now().millisecondsSinceEpoch}', + clientName: newClient.name, + action: 'Survey submitted just now', + icon: ActivityIcon.shipping, + status: ActivityStatus.newStatus, + ), + ..._activities, + ]; + _stats = _computeStats(_clients); + }); + + // Persist to backend and swap temp ID with server-assigned ID + final saved = await _api.createClient(newClient); + if (saved != null && mounted) { + setState(() { + _clients = _clients + .map((c) => c.id == newClient.id ? saved : c) + .toList(); + }); + } + } + + void _handleUpdateNotes(String clientId, String newNotes) async { + setState(() { + _clients = _clients.map((c) { + if (c.id == clientId) { + return c.copyWith(notes: newNotes, lastUpdated: 'Updated just now'); + } + return c; + }).toList(); + + final updated = _clients.firstWhere((c) => c.id == clientId); + _activities = [ + Activity( + id: 'act_${DateTime.now().millisecondsSinceEpoch}', + clientName: updated.name, + action: 'Profile updated by Rep', + icon: ActivityIcon.edit, + ), + ..._activities, + ]; + }); + + final updated = _clients.firstWhere((c) => c.id == clientId); + await _api.updateClient(updated); + } + + void _handleCompleteClientProfile( + String clientId, + double parcelVolume, + int activeContracts, + String provider, + String notes, + ) async { + String efficiency = 'High Efficiency'; + if (provider == 'Blue Dart Express') efficiency = 'Premium Service'; + if (provider == 'Gati-KWE') efficiency = 'Cost Leader'; + if (provider == 'Delhivery') efficiency = 'Local Last Mile'; + + setState(() { + _clients = _clients.map((c) { + if (c.id != clientId) return c; + return c.copyWith( + parcelVolume: parcelVolume, + activeContracts: activeContracts, + provider: provider, + efficiency: efficiency, + notes: notes, + dataConsent: DataConsent.full, + lastUpdated: 'Just now', + surveySubmitted: true, + recordedByName: widget.currentUser.name, + recordedByEmail: widget.currentUser.email, + recordedByRole: widget.currentUser.role, + ); + }).toList(); + _stats = _computeStats(_clients); + }); + + final updated = _clients.firstWhere((c) => c.id == clientId); + await _api.updateClient(updated); + } + + void _navigateTo(int index) { + if (index == 4) { + Navigator.push(context, MaterialPageRoute( + builder: (ctx) => Scaffold( + appBar: AppBar( + backgroundColor: Colors.white, + elevation: 0, + iconTheme: const IconThemeData(color: Colors.black87), + title: const Text('Add Client', style: TextStyle(color: Colors.black87, fontWeight: FontWeight.bold)), + ), + body: SurveyScreen( + clients: _clients, + onAddClient: _handleAddClient, + onNavigate: (i) { + Navigator.pop(ctx); + _navigateTo(i); + }, + backendReady: _backendReady, + isActive: true, + ), + ), + )); + return; + } + setState(() => _currentIndex = index); + } + + @override + Widget build(BuildContext context) { + final screens = [ + DashboardScreen( + stats: _stats, + activities: _activities, + clients: _clients, + surveys: _surveys, + pricing: _pricing, + onNavigate: _navigateTo, + onDataChanged: _loadFromBackend, + backendReady: _backendReady, + onLogout: widget.onLogout, + isActive: _currentIndex == 0, + ), + ClientsScreen( + clients: _clients, + onUpdateClientNotes: _handleUpdateNotes, + onCompleteClientProfile: _handleCompleteClientProfile, + onNavigate: _navigateTo, + backendReady: _backendReady, + isActive: _currentIndex == 1, + ), + SurveysListScreen( + surveys: _surveys, + onDataChanged: _loadFromBackend, + isActive: _currentIndex == 2, + ), + PricingScreen( + pricing: _pricing, + backendReady: _backendReady, + onDataChanged: _loadFromBackend, + isActive: _currentIndex == 3, + ), + ]; + + return Scaffold( + body: SafeArea( + child: IndexedStack( + index: _currentIndex, + children: screens, + ), + ), + bottomNavigationBar: NavigationBar( + selectedIndex: _currentIndex, + onDestinationSelected: _navigateTo, + height: 68, + destinations: const [ + NavigationDestination(icon: Icon(Icons.dashboard_outlined), selectedIcon: Icon(Icons.dashboard), label: 'Home'), + NavigationDestination(icon: Icon(Icons.people_outline), selectedIcon: Icon(Icons.people), label: 'Clients'), + NavigationDestination(icon: Icon(Icons.storefront_outlined), selectedIcon: Icon(Icons.storefront), label: 'Surveys'), + NavigationDestination(icon: Icon(Icons.local_shipping_outlined), selectedIcon: Icon(Icons.local_shipping), label: 'Pricing'), + ], + ), + ); + } +} diff --git a/lib/data/india_cities.dart b/lib/data/india_cities.dart new file mode 100644 index 0000000..e02d294 --- /dev/null +++ b/lib/data/india_cities.dart @@ -0,0 +1,166 @@ +/// A selectable Indian city shown flight-booking style: "Chennai (MAA)". +class IndiaCity { + final String name; + final String code; // airport-style 3-letter code + final String state; + + const IndiaCity(this.name, this.code, this.state); + + String get label => '$name ($code)'; + + /// True if [query] matches the city name, code, or state. + bool matches(String query) { + final q = query.trim().toLowerCase(); + if (q.isEmpty) return true; + return name.toLowerCase().contains(q) || + code.toLowerCase().contains(q) || + state.toLowerCase().contains(q); + } +} + +/// Major Indian cities with flight-style codes. Tamil Nadu listed first +/// (primary operating region), then the rest of India. +const List indiaCities = [ + // ── Tamil Nadu ────────────────────────────────────────────────────────── + IndiaCity('Chennai', 'MAA', 'Tamil Nadu'), + IndiaCity('Coimbatore', 'CJB', 'Tamil Nadu'), + IndiaCity('Madurai', 'IXM', 'Tamil Nadu'), + IndiaCity('Tiruchirappalli', 'TRZ', 'Tamil Nadu'), + IndiaCity('Salem', 'SXV', 'Tamil Nadu'), + IndiaCity('Tuticorin', 'TCR', 'Tamil Nadu'), + IndiaCity('Tirupur', 'TUP', 'Tamil Nadu'), + IndiaCity('Erode', 'ERD', 'Tamil Nadu'), + IndiaCity('Vellore', 'VLR', 'Tamil Nadu'), + IndiaCity('Tirunelveli', 'TEN', 'Tamil Nadu'), + IndiaCity('Thanjavur', 'TNJ', 'Tamil Nadu'), + IndiaCity('Dindigul', 'DGL', 'Tamil Nadu'), + IndiaCity('Hosur', 'HSR', 'Tamil Nadu'), + IndiaCity('Nagercoil', 'NGL', 'Tamil Nadu'), + IndiaCity('Karur', 'KRR', 'Tamil Nadu'), + IndiaCity('Namakkal', 'NMK', 'Tamil Nadu'), + IndiaCity('Kanchipuram', 'KCP', 'Tamil Nadu'), + IndiaCity('Cuddalore', 'CDL', 'Tamil Nadu'), + IndiaCity('Thoothukudi', 'TOO', 'Tamil Nadu'), + + // ── Karnataka ─────────────────────────────────────────────────────────── + IndiaCity('Bengaluru', 'BLR', 'Karnataka'), + IndiaCity('Mysuru', 'MYQ', 'Karnataka'), + IndiaCity('Mangaluru', 'IXE', 'Karnataka'), + IndiaCity('Hubli', 'HBX', 'Karnataka'), + IndiaCity('Belagavi', 'IXG', 'Karnataka'), + IndiaCity('Kalaburagi', 'GBI', 'Karnataka'), + IndiaCity('Davangere', 'DVG', 'Karnataka'), + IndiaCity('Ballari', 'BEP', 'Karnataka'), + + // ── Kerala ────────────────────────────────────────────────────────────── + IndiaCity('Kochi', 'COK', 'Kerala'), + IndiaCity('Thiruvananthapuram', 'TRV', 'Kerala'), + IndiaCity('Kozhikode', 'CCJ', 'Kerala'), + IndiaCity('Kannur', 'CNN', 'Kerala'), + IndiaCity('Thrissur', 'TCR2', 'Kerala'), + IndiaCity('Kollam', 'QLN', 'Kerala'), + + // ── Telangana & Andhra Pradesh ────────────────────────────────────────── + IndiaCity('Hyderabad', 'HYD', 'Telangana'), + IndiaCity('Warangal', 'WGC', 'Telangana'), + IndiaCity('Visakhapatnam', 'VTZ', 'Andhra Pradesh'), + IndiaCity('Vijayawada', 'VGA', 'Andhra Pradesh'), + IndiaCity('Tirupati', 'TIR', 'Andhra Pradesh'), + IndiaCity('Guntur', 'GNT', 'Andhra Pradesh'), + IndiaCity('Rajahmundry', 'RJA', 'Andhra Pradesh'), + IndiaCity('Nellore', 'NLR', 'Andhra Pradesh'), + + // ── Maharashtra ───────────────────────────────────────────────────────── + IndiaCity('Mumbai', 'BOM', 'Maharashtra'), + IndiaCity('Pune', 'PNQ', 'Maharashtra'), + IndiaCity('Nagpur', 'NAG', 'Maharashtra'), + IndiaCity('Nashik', 'ISK', 'Maharashtra'), + IndiaCity('Aurangabad', 'IXU', 'Maharashtra'), + IndiaCity('Kolhapur', 'KLH', 'Maharashtra'), + IndiaCity('Solapur', 'SSE', 'Maharashtra'), + + // ── Delhi NCR & North ─────────────────────────────────────────────────── + IndiaCity('New Delhi', 'DEL', 'Delhi'), + IndiaCity('Gurugram', 'GGN', 'Haryana'), + IndiaCity('Noida', 'NOI', 'Uttar Pradesh'), + IndiaCity('Faridabad', 'FBD', 'Haryana'), + IndiaCity('Chandigarh', 'IXC', 'Chandigarh'), + IndiaCity('Amritsar', 'ATQ', 'Punjab'), + IndiaCity('Ludhiana', 'LUH', 'Punjab'), + IndiaCity('Jalandhar', 'JLR2', 'Punjab'), + + // ── Gujarat ───────────────────────────────────────────────────────────── + IndiaCity('Ahmedabad', 'AMD', 'Gujarat'), + IndiaCity('Surat', 'STV', 'Gujarat'), + IndiaCity('Vadodara', 'BDQ', 'Gujarat'), + IndiaCity('Rajkot', 'RAJ', 'Gujarat'), + IndiaCity('Bhavnagar', 'BHU', 'Gujarat'), + IndiaCity('Jamnagar', 'JGA', 'Gujarat'), + + // ── Rajasthan ─────────────────────────────────────────────────────────── + IndiaCity('Jaipur', 'JAI', 'Rajasthan'), + IndiaCity('Jodhpur', 'JDH', 'Rajasthan'), + IndiaCity('Udaipur', 'UDR', 'Rajasthan'), + IndiaCity('Kota', 'KTU', 'Rajasthan'), + IndiaCity('Bikaner', 'BKB', 'Rajasthan'), + + // ── Uttar Pradesh & Central ───────────────────────────────────────────── + IndiaCity('Lucknow', 'LKO', 'Uttar Pradesh'), + IndiaCity('Kanpur', 'KNU', 'Uttar Pradesh'), + IndiaCity('Varanasi', 'VNS', 'Uttar Pradesh'), + IndiaCity('Agra', 'AGR', 'Uttar Pradesh'), + IndiaCity('Prayagraj', 'IXD', 'Uttar Pradesh'), + IndiaCity('Gorakhpur', 'GOP', 'Uttar Pradesh'), + IndiaCity('Bhopal', 'BHO', 'Madhya Pradesh'), + IndiaCity('Indore', 'IDR', 'Madhya Pradesh'), + IndiaCity('Gwalior', 'GWL', 'Madhya Pradesh'), + IndiaCity('Jabalpur', 'JLR', 'Madhya Pradesh'), + IndiaCity('Raipur', 'RPR', 'Chhattisgarh'), + + // ── East & North-East ─────────────────────────────────────────────────── + IndiaCity('Kolkata', 'CCU', 'West Bengal'), + IndiaCity('Siliguri', 'IXB', 'West Bengal'), + IndiaCity('Durgapur', 'RDP', 'West Bengal'), + IndiaCity('Patna', 'PAT', 'Bihar'), + IndiaCity('Gaya', 'GAY', 'Bihar'), + IndiaCity('Ranchi', 'IXR', 'Jharkhand'), + IndiaCity('Jamshedpur', 'JSD', 'Jharkhand'), + IndiaCity('Bhubaneswar', 'BBI', 'Odisha'), + IndiaCity('Cuttack', 'CTC', 'Odisha'), + IndiaCity('Guwahati', 'GAU', 'Assam'), + IndiaCity('Dibrugarh', 'DIB', 'Assam'), + IndiaCity('Agartala', 'IXA', 'Tripura'), + IndiaCity('Imphal', 'IMF', 'Manipur'), + IndiaCity('Shillong', 'SHL', 'Meghalaya'), + IndiaCity('Aizawl', 'AJL', 'Mizoram'), + IndiaCity('Dimapur', 'DMU', 'Nagaland'), + + // ── Hills, UTs & others ───────────────────────────────────────────────── + IndiaCity('Dehradun', 'DED', 'Uttarakhand'), + IndiaCity('Haridwar', 'HDW', 'Uttarakhand'), + IndiaCity('Shimla', 'SLV', 'Himachal Pradesh'), + IndiaCity('Srinagar', 'SXR', 'Jammu & Kashmir'), + IndiaCity('Jammu', 'IXJ', 'Jammu & Kashmir'), + IndiaCity('Leh', 'IXL', 'Ladakh'), + IndiaCity('Panaji', 'GOI', 'Goa'), + IndiaCity('Puducherry', 'PNY', 'Puducherry'), + IndiaCity('Port Blair', 'IXZ', 'Andaman & Nicobar Islands'), +]; + +/// Finds a city by (loose) name match — used to map a GPS reverse-geocode +/// result to a known city. Returns null if nothing reasonable matches. +IndiaCity? findCityByName(String? name) { + if (name == null || name.trim().isEmpty) return null; + final n = name.trim().toLowerCase(); + for (final c in indiaCities) { + if (c.name.toLowerCase() == n) return c; + } + // Loose contains match (e.g. "Coimbatore District" → "Coimbatore") + for (final c in indiaCities) { + if (n.contains(c.name.toLowerCase()) || + c.name.toLowerCase().contains(n)) { + return c; + } + } + return null; +} diff --git a/lib/data/india_locations.dart b/lib/data/india_locations.dart new file mode 100644 index 0000000..f819557 --- /dev/null +++ b/lib/data/india_locations.dart @@ -0,0 +1,221 @@ +/// All Indian states + Union Territories, alphabetically sorted. +const List indianStates = [ + 'Andaman & Nicobar Islands', + 'Andhra Pradesh', + 'Arunachal Pradesh', + 'Assam', + 'Bihar', + 'Chandigarh', + 'Chhattisgarh', + 'Dadra & Nagar Haveli', + 'Daman & Diu', + 'Delhi', + 'Goa', + 'Gujarat', + 'Haryana', + 'Himachal Pradesh', + 'Jammu & Kashmir', + 'Jharkhand', + 'Karnataka', + 'Kerala', + 'Ladakh', + 'Lakshadweep', + 'Madhya Pradesh', + 'Maharashtra', + 'Manipur', + 'Meghalaya', + 'Mizoram', + 'Nagaland', + 'Odisha', + 'Puducherry', + 'Punjab', + 'Rajasthan', + 'Sikkim', + 'Tamil Nadu', + 'Telangana', + 'Tripura', + 'Uttar Pradesh', + 'Uttarakhand', + 'West Bengal', +]; + +/// Major cities per state. Falls back to an empty list for states not listed. +const Map> stateCities = { + 'Tamil Nadu': [ + 'Chennai', 'Coimbatore', 'Madurai', 'Salem', 'Tirupur', 'Erode', + 'Tiruchirappalli', 'Tirunelveli', 'Vellore', 'Dindigul', 'Thanjavur', + 'Kanchipuram', 'Namakkal', 'Karur', 'Dharmapuri', 'Krishnagiri', + 'Cuddalore', 'Villupuram', 'Nagapattinam', 'Thoothukudi', 'Virudhunagar', + 'Sivaganga', 'Ramanathapuram', 'Theni', 'Perambalur', 'Puducherry', + ], + 'Karnataka': [ + 'Bengaluru', 'Mysuru', 'Mangaluru', 'Hubli', 'Belagavi', + 'Davangere', 'Shivamogga', 'Tumakuru', 'Kalaburagi', 'Udupi', + 'Ballari', 'Bidar', 'Vijayapura', 'Raichur', 'Dharwad', 'Hassan', + ], + 'Kerala': [ + 'Kochi', 'Thiruvananthapuram', 'Kozhikode', 'Thrissur', 'Kannur', + 'Kollam', 'Palakkad', 'Malappuram', 'Alappuzha', 'Kottayam', + 'Idukki', 'Wayanad', 'Kasaragod', 'Pathanamthitta', + ], + 'Andhra Pradesh': [ + 'Vijayawada', 'Visakhapatnam', 'Tirupati', 'Guntur', 'Nellore', + 'Kakinada', 'Rajahmundry', 'Kadapa', 'Kurnool', 'Ongole', + 'Anantapur', 'Vizianagaram', 'Eluru', + ], + 'Telangana': [ + 'Hyderabad', 'Warangal', 'Nizamabad', 'Karimnagar', 'Khammam', + 'Mahbubnagar', 'Nalgonda', 'Adilabad', 'Secunderabad', 'Siddipet', + ], + 'Maharashtra': [ + 'Mumbai', 'Pune', 'Nagpur', 'Nashik', 'Aurangabad', 'Thane', + 'Solapur', 'Amravati', 'Kolhapur', 'Nanded', 'Sangli', 'Jalgaon', + 'Akola', 'Latur', 'Chandrapur', + ], + 'Delhi': [ + 'New Delhi', 'North Delhi', 'South Delhi', 'East Delhi', 'West Delhi', + 'Noida', 'Gurgaon', 'Faridabad', 'Ghaziabad', 'Dwarka', + ], + 'Gujarat': [ + 'Ahmedabad', 'Surat', 'Vadodara', 'Rajkot', 'Gandhinagar', + 'Bhavnagar', 'Jamnagar', 'Junagadh', 'Anand', 'Bharuch', + 'Morbi', 'Nadiad', 'Surendranagar', + ], + 'Rajasthan': [ + 'Jaipur', 'Jodhpur', 'Udaipur', 'Kota', 'Ajmer', + 'Bikaner', 'Alwar', 'Bharatpur', 'Sikar', 'Sri Ganganagar', + 'Pali', 'Tonk', 'Barmer', + ], + 'West Bengal': [ + 'Kolkata', 'Howrah', 'Durgapur', 'Asansol', 'Siliguri', + 'Bardhaman', 'Malda', 'Kharagpur', 'Haldia', 'Jalpaiguri', + ], + 'Uttar Pradesh': [ + 'Lucknow', 'Kanpur', 'Varanasi', 'Agra', 'Meerut', + 'Prayagraj', 'Bareilly', 'Moradabad', 'Gorakhpur', 'Aligarh', + 'Noida', 'Ghaziabad', 'Firozabad', 'Saharanpur', 'Mathura', + ], + 'Madhya Pradesh': [ + 'Bhopal', 'Indore', 'Gwalior', 'Jabalpur', 'Ujjain', + 'Sagar', 'Dewas', 'Satna', 'Ratlam', 'Rewa', 'Singrauli', + ], + 'Punjab': [ + 'Ludhiana', 'Amritsar', 'Jalandhar', 'Patiala', 'Bathinda', + 'Mohali', 'Hoshiarpur', 'Gurdaspur', 'Pathankot', 'Firozpur', + ], + 'Haryana': [ + 'Gurugram', 'Faridabad', 'Hisar', 'Panipat', 'Ambala', + 'Karnal', 'Rohtak', 'Bhiwani', 'Sirsa', 'Sonipat', + ], + 'Bihar': [ + 'Patna', 'Gaya', 'Bhagalpur', 'Muzaffarpur', 'Purnia', + 'Darbhanga', 'Arrah', 'Begusarai', 'Munger', 'Chhapra', + ], + 'Odisha': [ + 'Bhubaneswar', 'Cuttack', 'Rourkela', 'Brahmapur', 'Puri', + 'Sambalpur', 'Balasore', 'Baripada', 'Jharsuguda', + ], + 'Assam': [ + 'Guwahati', 'Silchar', 'Dibrugarh', 'Jorhat', 'Nagaon', + 'Tinsukia', 'Tezpur', 'Bongaigaon', 'Karimganj', + ], + 'Jharkhand': [ + 'Ranchi', 'Jamshedpur', 'Dhanbad', 'Bokaro', 'Deoghar', + 'Hazaribagh', 'Giridih', 'Dumka', 'Phusro', + ], + 'Chhattisgarh': [ + 'Raipur', 'Bhilai', 'Bilaspur', 'Korba', 'Rajnandgaon', + 'Durg', 'Jagdalpur', 'Ambikapur', 'Raigarh', + ], + 'Uttarakhand': [ + 'Dehradun', 'Haridwar', 'Rishikesh', 'Roorkee', 'Haldwani', + 'Nainital', 'Mussoorie', 'Kashipur', 'Rudrapur', + ], + 'Himachal Pradesh': [ + 'Shimla', 'Dharamshala', 'Solan', 'Mandi', 'Kullu', + 'Manali', 'Baddi', 'Bilaspur', 'Kangra', + ], + 'Goa': [ + 'Panaji', 'Margao', 'Vasco da Gama', 'Mapusa', 'Ponda', 'Calangute', + ], + 'Puducherry': ['Puducherry', 'Karaikal', 'Mahe', 'Yanam'], + 'Jammu & Kashmir': [ + 'Srinagar', 'Jammu', 'Anantnag', 'Baramulla', 'Sopore', 'Udhampur', + ], + 'Chandigarh': ['Chandigarh'], + 'Ladakh': ['Leh', 'Kargil'], + 'Andaman & Nicobar Islands': ['Port Blair'], + 'Manipur': ['Imphal', 'Thoubal', 'Bishnupur', 'Churachandpur'], + 'Meghalaya': ['Shillong', 'Tura', 'Jowai'], + 'Mizoram': ['Aizawl', 'Lunglei', 'Champhai'], + 'Nagaland': ['Kohima', 'Dimapur', 'Mokokchung'], + 'Arunachal Pradesh': ['Itanagar', 'Naharlagun', 'Pasighat', 'Tawang'], + 'Sikkim': ['Gangtok', 'Namchi', 'Gyalshing'], + 'Tripura': ['Agartala', 'Dharmanagar', 'Udaipur', 'Kailasahar'], +}; + +const Map> categorisedProviders = { + 'National & Pan-India Courier Services (Parcels & Express)': [ + 'Blue Dart', + 'Delhivery', + 'DTDC', + 'India Post / Speed Post', + 'The Professional Couriers', + 'XpressBees', + 'Ecom Express', + 'Shadowfax', + ], + 'National Heavyweight Cargo & B2B Surface Freight': [ + 'Safexpress', + 'VRL Logistics', + 'TCI (Transport Corporation of India)', + 'Om Logistics', + 'Best Roadways', + ], + 'Southern India Dual-Purpose & Regional Networks (Tamil Nadu, Telangana, AP, Karnataka)': [ + 'MSS (Mettur Super Services / Mettur Transports)', + 'ABT Travels & Logistics', + 'Navata Road Transport', + 'KRS (Kerala Roadways)', + 'Parveen Travels / Parveen Express', + 'SRM Transports', + 'KPN Travels & KPN Speed Parcel', + 'SRS Travels', + ], + 'Hyper-Local & District Operators in Tamil Nadu': [ + 'Hindusthan Travels', + 'City Travels', + 'Essaar Travels', + 'No. 1 Air Travels', + 'A1 Travels', + 'Krish Travels', + 'Hebron Transports', + 'Horma Travels', + 'Vivegam Travels', + 'PSS Transport', + 'SRT (Renugambal Travels)', + 'Thamarai Bus Transports', + 'Rathimeena Travels', + 'Ganesh Travels', + 'John Kennedy Bus Service', + 'Arun Travel', + 'Saaji Meera Roadways', + 'ARC Parcel Service', + 'Chakra Travels & Parcel Service', + 'MVA Parcel And Bus Service', + ], + 'Northern & Central India Regional Operators (Delhi NCR, Rajasthan, UP, MP, Punjab, Haryana)': [ + 'Shrinath Travels & Cargo', + 'Hans Travels', + 'Zingbus', + 'Kalpana Travels / City Land Travels', + 'Trackon Couriers', + 'North India Transways', + 'RSRTC Cargo', + 'UPSRTC Cargo', + ], +}; + +final List allProvidersFlat = + categorisedProviders.values.expand((list) => list).toList(); + diff --git a/lib/data/initial_data.dart b/lib/data/initial_data.dart new file mode 100644 index 0000000..da3d7fd --- /dev/null +++ b/lib/data/initial_data.dart @@ -0,0 +1,46 @@ +import '../models/client.dart'; +import '../models/activity.dart'; +import '../models/app_stats.dart'; + +const AppStats initialStats = AppStats( + totalClients: 1, + avgVolume: 200, + revenueOpportunity: 0.1, + todayEntries: 1, + pendingFollowups: 0, +); + +const List initialClients = [ + Client( + id: 'suriya_001', + name: 'Suriya', + city: 'Coimbatore', + businessType: BusinessType.ecommerce, + parcelVolume: 200, + activeContracts: 5, + provider: 'DTDC Express', + efficiency: 'High Efficiency', + status: ClientStatus.newClient, + lastUpdated: 'Just now', + surveySubmitted: true, + notes: '', + dataConsent: DataConsent.full, + phone: '', + frequency: 'Weekly', + businessState: 'Tamil Nadu', + transitType: 'within_state', + transitFrom: 'Coimbatore', + transitTo: 'Chennai', + neighbourhood: 'RS Puram', + ), +]; + +const List initialActivities = [ + Activity( + id: 'a1', + clientName: 'Suriya', + action: 'Profile created — staging entry', + icon: ActivityIcon.shipping, + status: ActivityStatus.newStatus, + ), +]; diff --git a/lib/main.dart b/lib/main.dart new file mode 100644 index 0000000..2e8b85a --- /dev/null +++ b/lib/main.dart @@ -0,0 +1,130 @@ +import 'dart:convert'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'app.dart'; +import 'screens/login_screen.dart'; +import 'screens/update_screen.dart'; +import 'services/auth_service.dart'; +import 'package:in_app_update/in_app_update.dart'; +import 'dart:io'; +import 'theme/app_theme.dart'; + +void main() async { + WidgetsFlutterBinding.ensureInitialized(); + SystemChrome.setSystemUIOverlayStyle( + const SystemUiOverlayStyle( + statusBarColor: Colors.transparent, + statusBarIconBrightness: Brightness.dark, + ), + ); + + AuthUser? initialUser; + try { + initialUser = await AuthService().getSavedUser(); + } catch (_) {} + + runApp(DoorMileApp(initialUser: initialUser)); +} + +class DoorMileApp extends StatelessWidget { + final AuthUser? initialUser; + + const DoorMileApp({super.key, this.initialUser}); + + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Doormile CRM', + debugShowCheckedModeBanner: false, + theme: buildAppTheme(), + home: AuthGate(initialUser: initialUser), + builder: (context, child) { + final mediaQuery = MediaQuery.of(context); + return Container( + color: AppColors.scaffold, + child: Center( + child: ConstrainedBox( + constraints: const BoxConstraints(maxWidth: 500), + child: MediaQuery( + data: mediaQuery.copyWith( + textScaler: mediaQuery.textScaler.clamp( + minScaleFactor: 0.85, + maxScaleFactor: 1.15, + ), + ), + child: child!, + ), + ), + ), + ); + }, + ); + } +} + +class AuthGate extends StatefulWidget { + final AuthUser? initialUser; + + const AuthGate({super.key, this.initialUser}); + + @override + State createState() => _AuthGateState(); +} + +class _AuthGateState extends State { + AuthUser? _user; + bool _updateRequired = false; + + @override + void initState() { + super.initState(); + _user = widget.initialUser; + _checkForUpdates(); + } + + Future _checkForUpdates() async { + try { + if (Platform.isAndroid) { + final info = await InAppUpdate.checkForUpdate(); + if (info.updateAvailability == UpdateAvailability.updateAvailable) { + setState(() => _updateRequired = true); + await InAppUpdate.performImmediateUpdate(); + } + } + } catch (e) { + // Ignored: Not a supported Android device or Play Store not accessible + } + } + + Future _login(AuthUser user) async { + try { + final prefs = await SharedPreferences.getInstance(); + await prefs.setString('auth_user_data', jsonEncode(user.toJson())); + await prefs.setString('user_name', user.name); + } catch (_) {} + setState(() => _user = user); + } + + Future _logout() async { + try { + final prefs = await SharedPreferences.getInstance(); + await prefs.remove('auth_user_data'); + await prefs.remove('user_name'); + } catch (_) {} + setState(() => _user = null); + } + + @override + Widget build(BuildContext context) { + if (_updateRequired) { + return const UpdateRequiredScreen(); + } + if (_user == null) { + return LoginScreen( + onLoggedIn: _login, + ); + } + return AppShell(currentUser: _user!, onLogout: _logout); + } +} diff --git a/lib/models/activity.dart b/lib/models/activity.dart new file mode 100644 index 0000000..ce6b119 --- /dev/null +++ b/lib/models/activity.dart @@ -0,0 +1,19 @@ +enum ActivityIcon { shipping, call, edit } + +enum ActivityStatus { newStatus, pending, completed } + +class Activity { + final String id; + final String clientName; + final String action; + final ActivityIcon icon; + final ActivityStatus? status; + + const Activity({ + required this.id, + required this.clientName, + required this.action, + required this.icon, + this.status, + }); +} diff --git a/lib/models/app_stats.dart b/lib/models/app_stats.dart new file mode 100644 index 0000000..dd4c620 --- /dev/null +++ b/lib/models/app_stats.dart @@ -0,0 +1,31 @@ +class AppStats { + final int totalClients; + final int avgVolume; + final double revenueOpportunity; + final int todayEntries; + final int pendingFollowups; + + const AppStats({ + required this.totalClients, + required this.avgVolume, + required this.revenueOpportunity, + required this.todayEntries, + required this.pendingFollowups, + }); + + AppStats copyWith({ + int? totalClients, + int? avgVolume, + double? revenueOpportunity, + int? todayEntries, + int? pendingFollowups, + }) { + return AppStats( + totalClients: totalClients ?? this.totalClients, + avgVolume: avgVolume ?? this.avgVolume, + revenueOpportunity: revenueOpportunity ?? this.revenueOpportunity, + todayEntries: todayEntries ?? this.todayEntries, + pendingFollowups: pendingFollowups ?? this.pendingFollowups, + ); + } +} diff --git a/lib/models/client.dart b/lib/models/client.dart new file mode 100644 index 0000000..c5d6b87 --- /dev/null +++ b/lib/models/client.dart @@ -0,0 +1,173 @@ +enum DataConsent { basicOnly, full } + +enum BusinessType { ecommerce, manufacturing, wholesale, retail } + +enum ClientStatus { newClient, pending, completed, updated } + +extension BusinessTypeLabel on BusinessType { + String get label { + switch (this) { + case BusinessType.ecommerce: + return 'E-commerce'; + case BusinessType.manufacturing: + return 'Manufacturing'; + case BusinessType.wholesale: + return 'Wholesale'; + case BusinessType.retail: + return 'Retail'; + } + } +} + +extension ClientStatusLabel on ClientStatus { + String get label { + switch (this) { + case ClientStatus.newClient: + return 'NEW'; + case ClientStatus.pending: + return 'PENDING'; + case ClientStatus.completed: + return 'COMPLETED'; + case ClientStatus.updated: + return 'UPDATED'; + } + } +} + +class Client { + final String id; + final String name; + final String city; // free-text, e.g. "New York", "Austin" + final BusinessType businessType; + final double parcelVolume; + final int activeContracts; + final String provider; + final String efficiency; + final ClientStatus status; + final String lastUpdated; + final bool surveySubmitted; + final String notes; + final DataConsent dataConsent; + + // Extended basic-info fields + final String phone; // contact number + final String frequency; // shipment frequency: Daily / Weekly / etc. + final String businessState; // Indian state of the business + final String transitType; // 'within_state' | 'state_to_state' | '' + final String transitFrom; // city (within_state) or state name (state_to_state) + final String transitTo; // city (within_state) or state name (state_to_state) + final String neighbourhood; // local area / neighbourhood + final String logisticsSegment; // 'First Mile' | 'Middle Mile' | 'Last Mile' | '' + final String pincode; // client postal/PIN code — optional manual entry + + // Device GPS at the moment of survey submission — stored for field audit, not displayed in app UI. + final double surveyLat; + final double surveyLng; + final String surveyAddress; // reverse-geocoded full address + final String surveyZone; // suburb / neighbourhood from geocoder + final String surveyPincode; // postal code from GPS reverse-geocode + + // Field-agent attribution — who collected this record (from login session). + final String recordedByName; // e.g. "Kamesh" + final String recordedByEmail; // login email of the agent + final String recordedByRole; // 'admin' | 'rep' | 'support' + + const Client({ + required this.id, + required this.name, + required this.city, + required this.businessType, + required this.parcelVolume, + required this.activeContracts, + required this.provider, + required this.efficiency, + required this.status, + required this.lastUpdated, + required this.surveySubmitted, + this.notes = '', + this.dataConsent = DataConsent.full, + this.phone = '', + this.frequency = '', + this.businessState = '', + this.transitType = '', + this.transitFrom = '', + this.transitTo = '', + this.neighbourhood = '', + this.logisticsSegment = '', + this.pincode = '', + this.surveyLat = 0.0, + this.surveyLng = 0.0, + this.surveyAddress = '', + this.surveyZone = '', + this.surveyPincode = '', + this.recordedByName = '', + this.recordedByEmail = '', + this.recordedByRole = '', + }); + + Client copyWith({ + String? id, + String? name, + String? city, + BusinessType? businessType, + double? parcelVolume, + int? activeContracts, + String? provider, + String? efficiency, + ClientStatus? status, + String? lastUpdated, + bool? surveySubmitted, + String? notes, + DataConsent? dataConsent, + String? phone, + String? frequency, + String? businessState, + String? transitType, + String? transitFrom, + String? transitTo, + String? neighbourhood, + String? logisticsSegment, + String? pincode, + double? surveyLat, + double? surveyLng, + String? surveyAddress, + String? surveyZone, + String? surveyPincode, + String? recordedByName, + String? recordedByEmail, + String? recordedByRole, + }) { + return Client( + id: id ?? this.id, + name: name ?? this.name, + city: city ?? this.city, + businessType: businessType ?? this.businessType, + parcelVolume: parcelVolume ?? this.parcelVolume, + activeContracts: activeContracts ?? this.activeContracts, + provider: provider ?? this.provider, + efficiency: efficiency ?? this.efficiency, + status: status ?? this.status, + lastUpdated: lastUpdated ?? this.lastUpdated, + surveySubmitted: surveySubmitted ?? this.surveySubmitted, + notes: notes ?? this.notes, + dataConsent: dataConsent ?? this.dataConsent, + phone: phone ?? this.phone, + frequency: frequency ?? this.frequency, + businessState: businessState ?? this.businessState, + transitType: transitType ?? this.transitType, + transitFrom: transitFrom ?? this.transitFrom, + transitTo: transitTo ?? this.transitTo, + neighbourhood: neighbourhood ?? this.neighbourhood, + logisticsSegment: logisticsSegment ?? this.logisticsSegment, + pincode: pincode ?? this.pincode, + surveyLat: surveyLat ?? this.surveyLat, + surveyLng: surveyLng ?? this.surveyLng, + surveyAddress: surveyAddress ?? this.surveyAddress, + surveyZone: surveyZone ?? this.surveyZone, + surveyPincode: surveyPincode ?? this.surveyPincode, + recordedByName: recordedByName ?? this.recordedByName, + recordedByEmail: recordedByEmail ?? this.recordedByEmail, + recordedByRole: recordedByRole ?? this.recordedByRole, + ); + } +} diff --git a/lib/screens/clients_screen.dart b/lib/screens/clients_screen.dart new file mode 100644 index 0000000..8d6fbe2 --- /dev/null +++ b/lib/screens/clients_screen.dart @@ -0,0 +1,1483 @@ +import 'package:flutter/material.dart'; +import '../models/client.dart'; +import '../theme/app_theme.dart'; +import '../utils/snackbar_utils.dart'; +import 'survey_screen.dart' show ConsentBadge, ProviderPickerSheet; + +class ClientsScreen extends StatefulWidget { + final List clients; + final void Function(String clientId, String notes) onUpdateClientNotes; + final void Function( + String clientId, + double parcelVolume, + int activeContracts, + String provider, + String notes, + ) onCompleteClientProfile; + final void Function(int) onNavigate; + final bool backendReady; + final bool isActive; + + const ClientsScreen({ + super.key, + required this.clients, + required this.onUpdateClientNotes, + required this.onCompleteClientProfile, + required this.onNavigate, + required this.backendReady, + this.isActive = false, + }); + + @override + State createState() => _ClientsScreenState(); +} + +class _ClientsScreenState extends State { + final _searchController = TextEditingController(); + final ScrollController _scrollController = ScrollController(); + String _search = ''; + String? _selectedCity; + BusinessType? _selectedType; + + @override + void didUpdateWidget(covariant ClientsScreen oldWidget) { + super.didUpdateWidget(oldWidget); + if (widget.isActive && !oldWidget.isActive) { + if (_scrollController.hasClients) { + _scrollController.animateTo(0, duration: const Duration(milliseconds: 300), curve: Curves.easeOut); + } + } + } + + @override + void dispose() { + _searchController.dispose(); + _scrollController.dispose(); + super.dispose(); + } + + /// Unique city strings from the client list for dynamic filter chips. + List get _uniqueCities { + final seen = {}; + return widget.clients + .map((c) => c.city) + .where((c) => c.isNotEmpty && seen.add(c)) + .toList(); + } + + List get _filtered { + return widget.clients.where((c) { + final q = _search.toLowerCase(); + final matchSearch = _search.isEmpty || + c.name.toLowerCase().contains(q) || + c.city.toLowerCase().contains(q) || + c.provider.toLowerCase().contains(q) || + c.neighbourhood.toLowerCase().contains(q); + final matchCity = + _selectedCity == null || c.city == _selectedCity; + final matchType = + _selectedType == null || c.businessType == _selectedType; + return matchSearch && matchCity && matchType; + }).toList(); + } + + void _openClient(Client client) { + showModalBottomSheet( + context: context, + isScrollControlled: true, + backgroundColor: Colors.transparent, + builder: (_) => _ClientDetailSheet( + client: client, + onSaveNotes: (notes) => + widget.onUpdateClientNotes(client.id, notes), + onCompleteProfile: (vol, contracts, provider, notes) { + widget.onCompleteClientProfile( + client.id, vol, contracts, provider, notes); + }, + ), + ); + } + + @override + Widget build(BuildContext context) { + final filtered = _filtered; + final cities = _uniqueCities; + + return SingleChildScrollView( + controller: _scrollController, + padding: const EdgeInsets.fromLTRB(16, 20, 16, 100), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + WideTopBanner( + backendReady: widget.backendReady, + subtitle: 'CLIENT DATABASE', + ), + const SizedBox(height: 16), + Text('Search, audit, and coordinate logistics survey reports.', + style: + TextStyle(fontSize: 13, color: AppColors.textSecondary)), + const SizedBox(height: 16), + + // Search + TextField( + controller: _searchController, + onChanged: (v) => setState(() => _search = v), + decoration: InputDecoration( + hintText: 'Search company, city, area or provider…', + hintStyle: + TextStyle(color: AppColors.muted, fontSize: 13), + prefixIcon: + Icon(Icons.search, color: AppColors.muted, size: 20), + ), + ), + const SizedBox(height: 14), + + // City filter — built dynamically from actual client data + if (cities.isNotEmpty) ...[ + Text('FILTER BY CITY', + style: TextStyle( + fontSize: 10, + fontWeight: FontWeight.w800, + letterSpacing: 1.2, + color: AppColors.textSecondary)), + const SizedBox(height: 6), + SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: Row( + children: [ + _FilterChip( + label: 'All', + selected: _selectedCity == null, + activeColor: AppColors.primary, + onTap: () => setState(() => _selectedCity = null), + ), + ...cities.map((city) => _FilterChip( + label: city, + selected: _selectedCity == city, + activeColor: AppColors.primary, + onTap: () => + setState(() => _selectedCity = city), + )), + ], + ), + ), + const SizedBox(height: 12), + ], + + // Business type filter + Text('FILTER BY CLASSIFICATION', + style: TextStyle( + fontSize: 10, + fontWeight: FontWeight.w800, + letterSpacing: 1.2, + color: AppColors.textSecondary)), + const SizedBox(height: 6), + SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: Row( + children: [ + _FilterChip( + label: 'All', + selected: _selectedType == null, + activeColor: AppColors.green, + onTap: () => setState(() => _selectedType = null), + ), + ...BusinessType.values.map( + (t) => _FilterChip( + label: t.label, + selected: _selectedType == t, + activeColor: AppColors.green, + onTap: () => setState(() => _selectedType = t), + ), + ), + ], + ), + ), + const SizedBox(height: 16), + + // Results + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text('RESULTS (${filtered.length})', + style: TextStyle( + fontSize: 11, + fontWeight: FontWeight.w700, + color: AppColors.textSecondary)), + Text('CURRENT STACK', + style: TextStyle( + fontSize: 11, + fontWeight: FontWeight.w700, + color: AppColors.textSecondary)), + ], + ), + const SizedBox(height: 10), + + if (filtered.isEmpty) + _EmptyState(onNavigate: widget.onNavigate) + else + Column( + children: filtered + .map((c) => _ClientCard( + client: c, onTap: () => _openClient(c))) + .toList(), + ), + ], + ), + ); + } +} + +// ── Filter chip ─────────────────────────────────────────────────────────────── + +class _FilterChip extends StatelessWidget { + final String label; + final bool selected; + final Color activeColor; + final VoidCallback onTap; + + const _FilterChip({ + required this.label, + required this.selected, + required this.activeColor, + required this.onTap, + }); + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.only(right: 6), + child: GestureDetector( + onTap: onTap, + child: AnimatedContainer( + duration: const Duration(milliseconds: 150), + padding: + const EdgeInsets.symmetric(horizontal: 14, vertical: 7), + decoration: BoxDecoration( + color: selected ? activeColor : const Color(0xFFEFF4FF), + borderRadius: BorderRadius.circular(20), + ), + child: Text(label, + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w700, + color: selected + ? Colors.white + : AppColors.textSecondary)), + ), + ), + ); + } +} + +// ── Client card ─────────────────────────────────────────────────────────────── + +class _ClientCard extends StatelessWidget { + final Client client; + final VoidCallback onTap; + + const _ClientCard({required this.client, required this.onTap}); + + @override + Widget build(BuildContext context) { + Color typeBg; + Color typeFg; + switch (client.businessType) { + case BusinessType.ecommerce: + typeBg = const Color(0xFFFFDAD7); + typeFg = const Color(0xFF930013); + break; + case BusinessType.manufacturing: + typeBg = const Color(0xFFD8F9EE); + typeFg = const Color(0xFF00504A); + break; + case BusinessType.wholesale: + typeBg = const Color(0xFFD8E3FB); + typeFg = const Color(0xFF3C475A); + break; + case BusinessType.retail: + typeBg = const Color(0xFFEFF4FF); + typeFg = const Color(0xFF545F73); + break; + } + + final isBasic = client.dataConsent == DataConsent.basicOnly; + + return Padding( + padding: const EdgeInsets.only(bottom: 10), + child: GestureDetector( + onTap: onTap, + child: Container( + padding: const EdgeInsets.all(14), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(16), + border: Border.all( + color: isBasic + ? const Color(0xFFFFB800).withValues(alpha: 0.35) + : AppColors.border.withValues(alpha: 0.25), + ), + ), + child: Row( + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // Name + type badge + consent badge + Row(children: [ + Flexible( + child: Text(client.name, + style: const TextStyle( + fontSize: 13, + fontWeight: FontWeight.w700, + color: AppColors.darkBlue), + maxLines: 1, + overflow: TextOverflow.ellipsis), + ), + const SizedBox(width: 6), + Container( + padding: const EdgeInsets.symmetric( + horizontal: 6, vertical: 2), + decoration: BoxDecoration( + color: typeBg, + borderRadius: BorderRadius.circular(4)), + child: Text(client.businessType.label, + style: TextStyle( + fontSize: 9, + fontWeight: FontWeight.w700, + color: typeFg)), + ), + if (isBasic) ...[ + const SizedBox(width: 5), + const ConsentBadge(small: true), + ], + ]), + const SizedBox(height: 6), + // City + neighbourhood + route/provider row + Wrap(spacing: 10, runSpacing: 4, children: [ + if (client.city.isNotEmpty) + _CardMeta( + icon: Icons.location_on, + color: AppColors.primary, + text: client.neighbourhood.isNotEmpty + ? '${client.city} · ${client.neighbourhood}' + : client.city), + if (client.frequency.isNotEmpty) + _CardMeta( + icon: Icons.repeat, + color: AppColors.textSecondary, + text: client.frequency), + if (!isBasic) + _CardMeta( + icon: Icons.local_shipping, + color: AppColors.green, + text: client.provider), + if (isBasic) + _CardMeta( + icon: Icons.lock_outline, + color: const Color(0xFFE87C00), + text: 'Not disclosed'), + ]), + ], + ), + ), + const SizedBox(width: 10), + if (isBasic) + Container( + padding: const EdgeInsets.symmetric( + horizontal: 10, vertical: 8), + decoration: BoxDecoration( + color: const Color(0xFFFFF8ED), + borderRadius: BorderRadius.circular(10), + border: Border.all( + color: const Color(0xFFFFB800).withValues(alpha: 0.4)), + ), + child: const Column( + mainAxisSize: MainAxisSize.min, + children: [ + Icon(Icons.add_circle_outline, + size: 16, color: Color(0xFFE87C00)), + SizedBox(height: 2), + Text('Complete', + style: TextStyle( + fontSize: 9, + fontWeight: FontWeight.w700, + color: Color(0xFFE87C00))), + ], + ), + ) + else + Column( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + RichText( + text: TextSpan(children: [ + TextSpan( + text: '${client.parcelVolume.round()}', + style: const TextStyle( + fontSize: 14, + fontWeight: FontWeight.w700, + color: AppColors.darkBlue, + fontFamily: 'monospace')), + TextSpan( + text: ' /wk', + style: TextStyle( + fontSize: 10, + color: AppColors.textSecondary)), + ]), + ), + Text('${client.activeContracts} contracts', + style: TextStyle( + fontSize: 10, + color: AppColors.textSecondary)), + ], + ), + ], + ), + ), + ), + ); + } +} + +class _CardMeta extends StatelessWidget { + final IconData icon; + final Color color; + final String text; + const _CardMeta( + {required this.icon, required this.color, required this.text}); + + @override + Widget build(BuildContext context) { + return Row( + mainAxisSize: MainAxisSize.min, + children: [ + Icon(icon, size: 12, color: color), + const SizedBox(width: 2), + Text(text, + style: TextStyle( + fontSize: 11, + fontWeight: FontWeight.w600, + color: color), + maxLines: 1, + overflow: TextOverflow.ellipsis), + ], + ); + } +} + +// ── Empty state ─────────────────────────────────────────────────────────────── + +class _EmptyState extends StatelessWidget { + final void Function(int) onNavigate; + const _EmptyState({required this.onNavigate}); + + @override + Widget build(BuildContext context) { + return Container( + width: double.infinity, + padding: const EdgeInsets.all(40), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(16), + border: Border.all(color: AppColors.border.withValues(alpha: 0.15)), + ), + child: Column(children: [ + Container( + width: 48, + height: 48, + decoration: const BoxDecoration( + color: Color(0xFFEFF4FF), shape: BoxShape.circle), + child: + Icon(Icons.filter_list, size: 24, color: AppColors.primary), + ), + const SizedBox(height: 12), + const Text('No matching clients found', + style: TextStyle( + fontWeight: FontWeight.w700, color: AppColors.darkBlue)), + const SizedBox(height: 4), + Text('Try adjusting search or filters.', + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 12, color: AppColors.textSecondary)), + const SizedBox(height: 14), + ElevatedButton( + onPressed: () => onNavigate(2), + style: ElevatedButton.styleFrom( + backgroundColor: AppColors.primary, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10)), + ), + child: const Text('Add New Client', + style: TextStyle( + color: Colors.white, + fontSize: 12, + fontWeight: FontWeight.w700)), + ), + ]), + ); + } +} + +// ── Detail bottom sheet ─────────────────────────────────────────────────────── + +class _ClientDetailSheet extends StatefulWidget { + final Client client; + final void Function(String notes) onSaveNotes; + final void Function(double vol, int contracts, String provider, String notes) + onCompleteProfile; + + const _ClientDetailSheet({ + required this.client, + required this.onSaveNotes, + required this.onCompleteProfile, + }); + + @override + State<_ClientDetailSheet> createState() => _ClientDetailSheetState(); +} + +class _ClientDetailSheetState extends State<_ClientDetailSheet> { + late final TextEditingController _notesCtrl; + + // Complete-profile form (basicOnly clients) + bool _showCompleteForm = false; + double _upgradeVolume = 450; + final _upgradeContractsCtrl = TextEditingController(text: '12'); + String _upgradeProvider = 'DTDC Express'; + final _upgradeCustomProviderCtrl = TextEditingController(); + final _upgradeNotesCtrl = TextEditingController(); + + @override + void initState() { + super.initState(); + _notesCtrl = TextEditingController(text: widget.client.notes); + } + + @override + void dispose() { + _notesCtrl.dispose(); + _upgradeContractsCtrl.dispose(); + _upgradeCustomProviderCtrl.dispose(); + _upgradeNotesCtrl.dispose(); + super.dispose(); + } + + Color get _typeColor { + switch (widget.client.businessType) { + case BusinessType.ecommerce: + return const Color(0xFF930013); + case BusinessType.manufacturing: + return const Color(0xFF00504A); + case BusinessType.wholesale: + return const Color(0xFF3C475A); + case BusinessType.retail: + return const Color(0xFF545F73); + } + } + + Color get _typeBg { + switch (widget.client.businessType) { + case BusinessType.ecommerce: + return const Color(0xFFFFDAD7); + case BusinessType.manufacturing: + return const Color(0xFFD8F9EE); + case BusinessType.wholesale: + return const Color(0xFFD8E3FB); + case BusinessType.retail: + return const Color(0xFFEFF4FF); + } + } + + @override + Widget build(BuildContext context) { + final client = widget.client; + final isBasic = client.dataConsent == DataConsent.basicOnly; + + return DraggableScrollableSheet( + initialChildSize: 0.88, + minChildSize: 0.5, + maxChildSize: 0.97, + builder: (_, scrollCtrl) => Container( + decoration: const BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.vertical(top: Radius.circular(24)), + ), + child: Column( + children: [ + const SizedBox(height: 10), + Container( + width: 40, + height: 4, + decoration: BoxDecoration( + color: AppColors.muted.withValues(alpha: 0.3), + borderRadius: BorderRadius.circular(2), + ), + ), + const SizedBox(height: 12), + // Header + Padding( + padding: const EdgeInsets.symmetric(horizontal: 20), + child: Row(children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row(children: [ + Container( + padding: const EdgeInsets.symmetric( + horizontal: 8, vertical: 3), + decoration: BoxDecoration( + color: _typeBg, + borderRadius: BorderRadius.circular(4)), + child: Text( + client.businessType.label.toUpperCase(), + style: TextStyle( + fontSize: 9, + fontWeight: FontWeight.w800, + letterSpacing: 1, + color: _typeColor), + ), + ), + if (isBasic) ...[ + const SizedBox(width: 6), + const ConsentBadge(), + ], + ]), + const SizedBox(height: 6), + Text(client.name, + style: const TextStyle( + fontSize: 18, + fontWeight: FontWeight.w700, + color: AppColors.darkBlue)), + ], + ), + ), + GestureDetector( + onTap: () => Navigator.pop(context), + child: Container( + width: 32, + height: 32, + decoration: const BoxDecoration( + color: Color(0xFFF8F9FF), shape: BoxShape.circle), + child: Icon(Icons.close, + size: 16, color: AppColors.textSecondary), + ), + ), + ]), + ), + Divider( + height: 20, + color: AppColors.border.withValues(alpha: 0.15)), + Expanded( + child: ListView( + controller: scrollCtrl, + padding: + const EdgeInsets.symmetric(horizontal: 20), + children: [ + // Partial info banner + if (isBasic) _buildBasicOnlyBanner(), + + // ── Contact & Identity ─────────────────────────────── + _sectionLabel('CONTACT & IDENTITY'), + const SizedBox(height: 8), + Row(children: [ + Expanded( + child: _InfoTile( + icon: Icons.location_city_outlined, + label: 'CITY', + value: client.city.isNotEmpty + ? client.city + : '—')), + const SizedBox(width: 10), + Expanded( + child: _InfoTile( + icon: Icons.map_outlined, + label: 'NEIGHBOURHOOD', + value: client.neighbourhood.isNotEmpty + ? client.neighbourhood + : '—')), + ]), + const SizedBox(height: 10), + Row(children: [ + Expanded( + child: _InfoTile( + icon: Icons.phone_outlined, + label: 'PHONE', + value: client.phone.isNotEmpty + ? client.phone + : '—')), + const SizedBox(width: 10), + Expanded( + child: _InfoTile( + icon: Icons.repeat, + label: 'FREQUENCY', + value: client.frequency.isNotEmpty + ? client.frequency + : '—')), + ]), + if (client.logisticsSegment.isNotEmpty) ...[ + const SizedBox(height: 10), + Row( + children: [ + Expanded( + child: _InfoTile( + icon: client.logisticsSegment == 'First Mile' + ? Icons.warehouse_outlined + : client.logisticsSegment == 'Middle Mile' + ? Icons.local_shipping_outlined + : client.logisticsSegment == 'Last Mile' + ? Icons.markunread_mailbox_outlined + : Icons.category_outlined, + label: 'LOGISTICS SEGMENT', + value: client.logisticsSegment, + ), + ), + ], + ), + ], + + // ── Transit route ──────────────────────────────────── + if (client.transitFrom.isNotEmpty || + client.transitTo.isNotEmpty) ...[ + const SizedBox(height: 10), + Container( + padding: const EdgeInsets.all(14), + decoration: BoxDecoration( + color: const Color(0xFFF8F9FF), + borderRadius: BorderRadius.circular(12), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row(children: [ + Icon(Icons.route, + size: 12, color: AppColors.primary), + const SizedBox(width: 4), + Text('USUAL TRANSIT ROUTE', + style: TextStyle( + fontSize: 10, + fontWeight: FontWeight.w700, + color: AppColors.darkBlue)), + ]), + const SizedBox(height: 8), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: _RouteStop( + icon: Icons.flight_takeoff, + label: 'FROM', + value: client.transitFrom.isNotEmpty + ? client.transitFrom + : '—'), + ), + Container( + width: 24, + height: 1, + margin: const EdgeInsets.only(top: 14, left: 8, right: 8), + color: AppColors.border.withValues(alpha: 0.3), + ), + Expanded( + child: _RouteStop( + icon: Icons.flight_land, + label: 'TO', + value: client.transitTo.isNotEmpty + ? client.transitTo + : '—'), + ), + ], + ), + ], + ), + ), + ], + + // ── Logistics details ──────────────────────────────── + const SizedBox(height: 14), + _sectionLabel('LOGISTICS DETAILS'), + const SizedBox(height: 8), + Row(children: [ + Expanded( + child: isBasic + ? _LockedTile(label: 'WEEKLY VOLUME') + : _InfoTile( + icon: Icons.inventory_2_outlined, + label: 'WEEKLY VOLUME', + value: '${client.parcelVolume.round()} /wk')), + const SizedBox(width: 10), + Expanded( + child: isBasic + ? _LockedTile(label: 'CONTRACTS') + : _InfoTile( + icon: Icons.description_outlined, + label: 'CONTRACTS', + value: + '${client.activeContracts} active')), + ]), + const SizedBox(height: 10), + + // Provider tile + if (isBasic) + Container( + padding: const EdgeInsets.all(14), + decoration: BoxDecoration( + color: const Color(0xFFFFF8ED), + borderRadius: BorderRadius.circular(12), + border: Border.all( + color: const Color(0xFFFFB800) + .withValues(alpha: 0.3)), + ), + child: Row(children: [ + const Icon(Icons.lock_outline, + size: 16, color: Color(0xFFE87C00)), + const SizedBox(width: 10), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text('LOGISTICS PROVIDER', + style: TextStyle( + fontSize: 9, + fontWeight: FontWeight.w700, + color: AppColors.textSecondary)), + const SizedBox(height: 4), + const Text('Not disclosed by client', + style: TextStyle( + fontSize: 13, + fontWeight: FontWeight.w600, + color: Color(0xFFE87C00))), + ], + ), + ]), + ) + else + Container( + padding: const EdgeInsets.all(14), + decoration: BoxDecoration( + color: const Color(0xFFEFF4FF), + borderRadius: BorderRadius.circular(12), + ), + child: Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text('LOGISTICS PARTNER PROVIDER', + style: TextStyle( + fontSize: 9, + fontWeight: FontWeight.w700, + color: AppColors.textSecondary)), + const SizedBox(height: 4), + Text(client.provider, + style: const TextStyle( + fontSize: 14, + fontWeight: FontWeight.w700, + color: AppColors.darkBlue)), + ], + ), + Container( + padding: const EdgeInsets.symmetric( + horizontal: 8, vertical: 4), + decoration: BoxDecoration( + color: const Color(0xFFFFE4E6), + borderRadius: BorderRadius.circular(20), + ), + child: Text(client.efficiency, + style: const TextStyle( + fontSize: 9, + fontWeight: FontWeight.w800, + color: AppColors.primary)), + ), + ], + ), + ), + const SizedBox(height: 10), + + // Status matrix + Container( + padding: const EdgeInsets.all(14), + decoration: BoxDecoration( + color: const Color(0xFFF8F9FF), + borderRadius: BorderRadius.circular(12), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row(children: [ + Icon(Icons.auto_awesome, + size: 12, color: AppColors.primary), + const SizedBox(width: 4), + Text('STATUS MATRIX', + style: TextStyle( + fontSize: 10, + fontWeight: FontWeight.w700, + color: AppColors.darkBlue)), + ]), + const SizedBox(height: 8), + _StatusRow( + label: 'Survey status', + value: 'SUBMITTED', + valueColor: AppColors.green), + _StatusRow( + label: 'Last checked', + value: client.lastUpdated), + ], + ), + ), + + // Complete profile section (basicOnly) + if (isBasic) ...[ + const SizedBox(height: 14), + _buildCompleteProfileSection(context), + ], + + // Notes (full clients only) + if (!isBasic) ...[ + const SizedBox(height: 14), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + const Text('CRM REMARKS', + style: TextStyle( + fontSize: 11, + fontWeight: FontWeight.w700, + color: AppColors.darkBlue)), + Text('Auto-saved', + style: TextStyle( + fontSize: 10, + color: AppColors.textSecondary)), + ], + ), + const SizedBox(height: 6), + TextField( + controller: _notesCtrl, + maxLines: 4, + decoration: const InputDecoration( + hintText: + 'e.g. Needs immediate review or transit optimisation…', + ), + ), + ], + const SizedBox(height: 80), + ], + ), + ), + + // Bottom action bar + Container( + padding: + const EdgeInsets.fromLTRB(16, 12, 16, 28), + decoration: BoxDecoration( + color: const Color(0xFFF8F9FF), + border: Border( + top: BorderSide( + color: AppColors.border.withValues(alpha: 0.15))), + ), + child: Row(children: [ + Expanded( + child: OutlinedButton( + onPressed: () => Navigator.pop(context), + style: OutlinedButton.styleFrom( + side: BorderSide(color: AppColors.border), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12)), + minimumSize: const Size.fromHeight(44), + ), + child: Text('Close', + style: TextStyle( + color: AppColors.textSecondary, + fontWeight: FontWeight.w700, + fontSize: 12)), + ), + ), + if (!isBasic) ...[ + const SizedBox(width: 10), + Expanded( + child: ElevatedButton.icon( + onPressed: () { + widget.onSaveNotes(_notesCtrl.text); + Navigator.pop(context); + if (mounted) { + SnackbarUtils.showSuccess(context, 'Remarks saved!'); + } + }, + icon: const Icon(Icons.save, + size: 14, color: Colors.white), + label: const Text('Save Notes', + style: TextStyle( + color: Colors.white, + fontWeight: FontWeight.w700, + fontSize: 12)), + style: ElevatedButton.styleFrom( + backgroundColor: AppColors.primary, + shape: RoundedRectangleBorder( + borderRadius: + BorderRadius.circular(12)), + minimumSize: const Size.fromHeight(44), + elevation: 1, + ), + ), + ), + ], + ]), + ), + ], + ), + ), + ); + } + + Widget _buildBasicOnlyBanner() { + return Container( + margin: const EdgeInsets.only(bottom: 14), + padding: + const EdgeInsets.symmetric(horizontal: 14, vertical: 12), + decoration: BoxDecoration( + color: const Color(0xFFFFF8ED), + borderRadius: BorderRadius.circular(12), + border: Border.all( + color: const Color(0xFFFFB800).withValues(alpha: 0.5)), + ), + child: Row(children: [ + const Icon(Icons.lock_outline, + size: 16, color: Color(0xFFE87C00)), + const SizedBox(width: 10), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text('Partial Information', + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w700, + color: Color(0xFFE87C00))), + Text( + 'Commercial logistics details not yet shared. Use "Complete Profile" below.', + style: TextStyle( + fontSize: 11, color: AppColors.textSecondary), + ), + ], + ), + ), + ]), + ); + } + + Future _showUpgradeProviderSelectorSheet() async { + final picked = await showModalBottomSheet( + context: context, + isScrollControlled: true, + backgroundColor: Colors.transparent, + builder: (_) => ProviderPickerSheet( + initialProvider: _upgradeProvider, + ), + ); + if (picked != null) { + setState(() { + _upgradeProvider = picked; + }); + } + } + + Widget _buildCompleteProfileSection(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + GestureDetector( + onTap: () => + setState(() => _showCompleteForm = !_showCompleteForm), + child: Container( + padding: const EdgeInsets.all(16), + decoration: BoxDecoration( + gradient: const LinearGradient( + colors: [Color(0xFF0B1C30), Color(0xFF1E3A5F)]), + borderRadius: BorderRadius.circular(14), + ), + child: Row(children: [ + Container( + width: 38, + height: 38, + decoration: BoxDecoration( + color: Colors.white.withValues(alpha: 0.12), + borderRadius: BorderRadius.circular(10)), + child: Icon( + _showCompleteForm + ? Icons.keyboard_arrow_up + : Icons.add_circle_outline, + size: 20, + color: Colors.white, + ), + ), + const SizedBox(width: 12), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text('Complete Profile', + style: TextStyle( + fontSize: 13, + fontWeight: FontWeight.w700, + color: Colors.white)), + Text( + _showCompleteForm + ? 'Tap to collapse' + : 'Collect volume, provider & notes', + style: TextStyle( + fontSize: 11, + color: Colors.white.withValues(alpha: 0.65)), + ), + ], + ), + ), + Icon( + _showCompleteForm + ? Icons.expand_less + : Icons.expand_more, + color: Colors.white.withValues(alpha: 0.7)), + ]), + ), + ), + if (_showCompleteForm) + Container( + margin: const EdgeInsets.only(top: 2), + padding: const EdgeInsets.all(16), + decoration: BoxDecoration( + color: const Color(0xFFF8F9FF), + borderRadius: const BorderRadius.vertical( + bottom: Radius.circular(14)), + border: Border.all( + color: AppColors.border.withValues(alpha: 0.2)), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // Volume + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + const Text('Weekly Parcel Volume', + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w700, + color: AppColors.darkBlue)), + Text('${_upgradeVolume.round()} /wk', + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w700, + fontFamily: 'monospace', + color: AppColors.primary)), + ], + ), + const SizedBox(height: 6), + SliderTheme( + data: SliderTheme.of(context).copyWith( + activeTrackColor: AppColors.primary, + inactiveTrackColor: const Color(0xFFE8EEFF), + thumbColor: AppColors.primary, + overlayColor: AppColors.primary.withValues(alpha: 0.1), + thumbShape: const RoundSliderThumbShape( + enabledThumbRadius: 9), + ), + child: Slider( + value: _upgradeVolume, + min: 50, + max: 1200, + divisions: 115, + onChanged: (v) => + setState(() => _upgradeVolume = v), + ), + ), + const SizedBox(height: 12), + + // Contracts + const Text('Active Service Contracts', + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w700, + color: AppColors.darkBlue)), + const SizedBox(height: 6), + TextField( + controller: _upgradeContractsCtrl, + keyboardType: TextInputType.number, + decoration: const InputDecoration( + prefixIcon: Icon(Icons.description_outlined, + size: 16), + ), + ), + const SizedBox(height: 12), + + // Provider + const Text('Primary Service Provider', + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w700, + color: AppColors.darkBlue)), + const SizedBox(height: 6), + InkWell( + onTap: _showUpgradeProviderSelectorSheet, + child: Container( + padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 14), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(12), + border: Border.all(color: AppColors.border.withValues(alpha: 0.5)), + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Expanded( + child: Text( + _upgradeProvider, + style: const TextStyle( + fontSize: 13, + color: AppColors.darkBlue, + fontWeight: FontWeight.w600, + ), + overflow: TextOverflow.ellipsis, + ), + ), + Icon(Icons.arrow_drop_down, color: AppColors.textSecondary), + ], + ), + ), + ), + if (_upgradeProvider == 'Others') ...[ + const SizedBox(height: 12), + const Text('Specify Other Provider', + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w700, + color: AppColors.darkBlue)), + const SizedBox(height: 6), + TextField( + controller: _upgradeCustomProviderCtrl, + textCapitalization: TextCapitalization.words, + decoration: const InputDecoration( + hintText: 'e.g. My Local Logistics Operator', + prefixIcon: Icon(Icons.edit_note, size: 18), + ), + ), + ], + const SizedBox(height: 12), + + // Notes + const Text('Survey Remarks', + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w700, + color: AppColors.darkBlue)), + const SizedBox(height: 6), + TextField( + controller: _upgradeNotesCtrl, + maxLines: 3, + decoration: const InputDecoration( + hintText: 'Additional observations…', + ), + ), + const SizedBox(height: 16), + + SizedBox( + width: double.infinity, + height: 44, + child: ElevatedButton.icon( + onPressed: () { + String providerName = _upgradeProvider == 'Others' + ? _upgradeCustomProviderCtrl.text.trim() + : _upgradeProvider; + if (providerName.isEmpty) providerName = 'Others'; + + widget.onCompleteProfile( + _upgradeVolume, + int.tryParse( + _upgradeContractsCtrl.text) ?? + 12, + providerName, + _upgradeNotesCtrl.text.trim(), + ); + Navigator.pop(context); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: const Text( + 'Profile upgraded to full details!'), + backgroundColor: AppColors.green, + behavior: SnackBarBehavior.floating, + shape: RoundedRectangleBorder( + borderRadius: + BorderRadius.circular(10)), + ), + ); + }, + icon: const Icon(Icons.lock_open, + size: 14, color: Colors.white), + label: const Text('Save Full Profile', + style: TextStyle( + color: Colors.white, + fontWeight: FontWeight.w700)), + style: ElevatedButton.styleFrom( + backgroundColor: const Color(0xFF0B1C30), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12)), + elevation: 1, + ), + ), + ), + ], + ), + ), + ], + ); + } + + Widget _sectionLabel(String text) => Text(text, + style: TextStyle( + fontSize: 10, + fontWeight: FontWeight.w800, + letterSpacing: 1.2, + color: AppColors.textSecondary)); +} + +// ── Info tiles ──────────────────────────────────────────────────────────────── + +class _InfoTile extends StatelessWidget { + final IconData icon; + final String label; + final String value; + const _InfoTile( + {required this.icon, required this.label, required this.value}); + + @override + Widget build(BuildContext context) { + return Container( + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: const Color(0xFFEFF4FF), + borderRadius: BorderRadius.circular(12), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row(children: [ + Icon(icon, size: 10, color: AppColors.textSecondary), + const SizedBox(width: 4), + Text(label, + style: TextStyle( + fontSize: 9, + fontWeight: FontWeight.w700, + color: AppColors.textSecondary)), + ]), + const SizedBox(height: 4), + Text(value, + style: const TextStyle( + fontSize: 13, + fontWeight: FontWeight.w700, + color: AppColors.darkBlue), + maxLines: 1, + overflow: TextOverflow.ellipsis), + ], + ), + ); + } +} + +class _LockedTile extends StatelessWidget { + final String label; + const _LockedTile({required this.label}); + + @override + Widget build(BuildContext context) { + return Container( + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: const Color(0xFFFFF8ED), + borderRadius: BorderRadius.circular(12), + border: + Border.all(color: const Color(0xFFFFB800).withValues(alpha: 0.3)), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(label, + style: TextStyle( + fontSize: 9, + fontWeight: FontWeight.w700, + color: AppColors.textSecondary)), + const SizedBox(height: 4), + Row(children: [ + const Icon(Icons.lock_outline, + size: 12, color: Color(0xFFE87C00)), + const SizedBox(width: 4), + const Text('Hidden', + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w700, + color: Color(0xFFE87C00))), + ]), + ], + ), + ); + } +} + +class _RouteStop extends StatelessWidget { + final IconData icon; + final String label; + final String value; + const _RouteStop( + {required this.icon, required this.label, required this.value}); + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row(children: [ + Icon(icon, size: 10, color: AppColors.primary), + const SizedBox(width: 3), + Text(label, + style: TextStyle( + fontSize: 9, + fontWeight: FontWeight.w700, + color: AppColors.textSecondary)), + ]), + const SizedBox(height: 2), + Text(value, + style: const TextStyle( + fontSize: 13, + fontWeight: FontWeight.w700, + color: AppColors.darkBlue)), + ], + ); + } +} + +class _StatusRow extends StatelessWidget { + final String label; + final String value; + final Color? valueColor; + const _StatusRow( + {required this.label, required this.value, this.valueColor}); + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.only(bottom: 6), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text(label, + style: TextStyle( + fontSize: 11, color: AppColors.textSecondary)), + Text(value, + style: TextStyle( + fontSize: 11, + fontWeight: FontWeight.w600, + color: valueColor ?? AppColors.darkBlue)), + ], + ), + ); + } +} diff --git a/lib/screens/dashboard_screen.dart b/lib/screens/dashboard_screen.dart new file mode 100644 index 0000000..3126de9 --- /dev/null +++ b/lib/screens/dashboard_screen.dart @@ -0,0 +1,709 @@ +import 'package:flutter/material.dart'; +import '../models/client.dart'; +import '../models/activity.dart'; +import '../models/app_stats.dart'; +import '../theme/app_theme.dart'; +import 'surveys_list_screen.dart'; + +class DashboardScreen extends StatefulWidget { + final AppStats stats; + final List activities; + final List clients; + final List surveys; + final List pricing; + final void Function(int) onNavigate; + final VoidCallback onDataChanged; + final bool backendReady; + final VoidCallback onLogout; + final bool isActive; + + const DashboardScreen({ + super.key, + required this.stats, + required this.activities, + required this.clients, + this.surveys = const [], + this.pricing = const [], + required this.onNavigate, + required this.onDataChanged, + required this.backendReady, + required this.onLogout, + this.isActive = false, + }); + + @override + State createState() => _DashboardScreenState(); +} + +class _DashboardScreenState extends State { + final ScrollController _scrollController = ScrollController(); + + @override + void didUpdateWidget(covariant DashboardScreen oldWidget) { + super.didUpdateWidget(oldWidget); + if (widget.isActive && !oldWidget.isActive) { + if (_scrollController.hasClients) { + _scrollController.animateTo(0, duration: const Duration(milliseconds: 300), curve: Curves.easeOut); + } + } + } + + @override + void dispose() { + _scrollController.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return SingleChildScrollView( + controller: _scrollController, + padding: const EdgeInsets.fromLTRB(16, 20, 16, 100), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + WideTopBanner( + backendReady: widget.backendReady, + subtitle: 'DASHBOARD', + onLogout: widget.onLogout, + ), + const SizedBox(height: 20), + _WelcomeHeader(), + const SizedBox(height: 20), + _BentoGrid(stats: widget.stats), + const SizedBox(height: 20), + _QuickActions(onNavigate: widget.onNavigate), + const SizedBox(height: 20), + _MarketInsights(surveys: widget.surveys, pricing: widget.pricing, onNavigate: widget.onNavigate, onDataChanged: widget.onDataChanged), + const SizedBox(height: 20), + _RecentActivity( + activities: widget.activities, + clients: widget.clients, + onNavigate: widget.onNavigate, + ), + const SizedBox(height: 20), + _InsightCard(), + ], + ), + ); + } +} + +class _WelcomeHeader extends StatelessWidget { + static String get _greeting { + final h = DateTime.now().hour; + if (h < 12) return 'Good Morning'; + if (h < 17) return 'Good Afternoon'; + if (h < 21) return 'Good Evening'; + return 'Good Night'; + } + + static String get _subtext { + final h = DateTime.now().hour; + if (h < 12) return 'Start your day with a fresh logistics survey.'; + if (h < 17) return 'Keep the momentum log your field visits.'; + if (h < 21) return 'Wrap up the day any pending surveys to log?'; + return 'Late session active your data is synced.'; + } + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + _greeting, + style: Theme.of(context).textTheme.headlineSmall?.copyWith( + fontWeight: FontWeight.w800, + color: AppColors.darkBlue, + ), + ), + const SizedBox(height: 4), + Text( + _subtext, + style: Theme.of(context).textTheme.bodySmall?.copyWith( + color: AppColors.textSecondary, + ), + ), + ], + ); + } +} + +class _BentoGrid extends StatelessWidget { + final AppStats stats; + const _BentoGrid({required this.stats}); + + @override + Widget build(BuildContext context) { + return Column( + children: [ + // Large card spanning full width + Container( + width: double.infinity, + padding: const EdgeInsets.all(20), + decoration: BoxDecoration( + color: const Color(0xFFD3E4FE), + borderRadius: BorderRadius.circular(16), + border: Border.all(color: const Color(0xFFA6C8FF).withValues(alpha: 0.3)), + ), + child: Stack( + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'TOTAL CLIENTS', + style: TextStyle( + fontSize: 11, + fontWeight: FontWeight.w700, + letterSpacing: 1.5, + color: AppColors.primary, + ), + ), + const SizedBox(height: 8), + Text( + stats.totalClients.toString().replaceAllMapped( + RegExp(r'(\d{1,3})(?=(\d{3})+(?!\d))'), + (m) => '${m[1]},', + ), + style: const TextStyle( + fontSize: 36, + fontWeight: FontWeight.w900, + color: AppColors.darkBlue, + ), + ), + const SizedBox(height: 12), + Row( + children: [ + Icon(Icons.arrow_upward, + size: 14, color: AppColors.greenDark), + const SizedBox(width: 4), + Text( + '+12% from last month', + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w500, + color: AppColors.greenDark, + ), + ), + ], + ), + ], + ), + Positioned( + right: -20, + bottom: -20, + child: Container( + width: 100, + height: 100, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: AppColors.primary.withValues(alpha: 0.06), + ), + ), + ), + ], + ), + ), + const SizedBox(height: 12), + Row( + children: [ + Expanded( + child: _SmallStatCard( + icon: Icons.calendar_today, + iconColor: AppColors.primary, + value: stats.todayEntries.toString(), + label: "Today's Entries", + ), + ), + const SizedBox(width: 12), + Expanded( + child: _SmallStatCard( + icon: Icons.access_time, + iconColor: const Color(0xFF004D47), + value: stats.pendingFollowups.toString(), + label: 'Pending Follow-ups', + ), + ), + ], + ), + ], + ); + } +} + +class _SmallStatCard extends StatelessWidget { + final IconData icon; + final Color iconColor; + final String value; + final String label; + + const _SmallStatCard({ + required this.icon, + required this.iconColor, + required this.value, + required this.label, + }); + + @override + Widget build(BuildContext context) { + return Container( + padding: const EdgeInsets.all(16), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(16), + border: Border.all(color: AppColors.border.withValues(alpha: 0.35)), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Icon(icon, size: 24, color: iconColor), + const SizedBox(height: 10), + Text( + value, + style: const TextStyle( + fontSize: 26, + fontWeight: FontWeight.w700, + color: AppColors.darkBlue, + ), + ), + const SizedBox(height: 2), + Text( + label, + style: TextStyle( + fontSize: 11, + fontWeight: FontWeight.w600, + color: AppColors.textSecondary, + ), + ), + ], + ), + ); + } +} + +class _QuickActions extends StatelessWidget { + final void Function(int) onNavigate; + const _QuickActions({required this.onNavigate}); + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'QUICK ACTIONS', + style: TextStyle( + fontSize: 11, + fontWeight: FontWeight.w700, + letterSpacing: 1.2, + color: AppColors.textSecondary, + ), + ), + const SizedBox(height: 10), + SizedBox( + width: double.infinity, + height: 48, + child: ElevatedButton.icon( + onPressed: () => onNavigate(4), + icon: const Icon(Icons.add, size: 18, color: Colors.white), + label: const Text( + 'Quick Add Client', + style: TextStyle( + fontWeight: FontWeight.w600, + color: Colors.white, + fontSize: 14, + ), + ), + style: ElevatedButton.styleFrom( + backgroundColor: AppColors.primary, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(14), + ), + elevation: 1, + ), + ), + ), + const SizedBox(height: 10), + SizedBox( + width: double.infinity, + height: 48, + child: ElevatedButton.icon( + onPressed: () => onNavigate(1), + icon: Icon(Icons.search, size: 18, color: AppColors.darkBlue), + label: Text( + 'Search Client Database', + style: TextStyle( + fontWeight: FontWeight.w600, + color: AppColors.darkBlue, + fontSize: 14, + ), + ), + style: ElevatedButton.styleFrom( + backgroundColor: const Color(0xFFD3E4FE), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(14), + side: const BorderSide(color: Color(0xFFA6C8FF)), + ), + elevation: 0, + ), + ), + ), + ], + ); + } +} + +class _MarketInsights extends StatelessWidget { + final List surveys; + final List pricing; + final void Function(int) onNavigate; + final VoidCallback onDataChanged; + + const _MarketInsights({required this.surveys, required this.pricing, required this.onNavigate, required this.onDataChanged}); + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'MARKET DATA', + style: TextStyle( + fontSize: 11, + fontWeight: FontWeight.w700, + letterSpacing: 1.2, + color: AppColors.textSecondary, + ), + ), + const SizedBox(height: 10), + Row( + children: [ + Expanded( + child: GestureDetector( + onTap: () { + Navigator.push(context, MaterialPageRoute( + builder: (ctx) => SurveysListScreen( + surveys: surveys, + onDataChanged: onDataChanged, + ), + )); + }, + child: _SmallStatCard( + icon: Icons.storefront_outlined, + iconColor: const Color(0xFFE87C00), + value: surveys.length.toString(), + label: 'Competitor Surveys', + ), + ), + ), + const SizedBox(width: 12), + Expanded( + child: GestureDetector( + onTap: () => onNavigate(3), + child: _SmallStatCard( + icon: Icons.price_change_outlined, + iconColor: const Color(0xFF15803D), + value: pricing.length.toString(), + label: 'Carrier Pricing', + ), + ), + ), + ], + ), + ], + ); + } +} + +class _RecentActivity extends StatelessWidget { + final List activities; + final List clients; + final void Function(int) onNavigate; + + const _RecentActivity({ + required this.activities, + required this.clients, + required this.onNavigate, + }); + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + 'RECENT ACTIVITY', + style: TextStyle( + fontSize: 11, + fontWeight: FontWeight.w700, + letterSpacing: 1.2, + color: AppColors.textSecondary, + ), + ), + GestureDetector( + onTap: () => onNavigate(1), + child: Text( + 'View all', + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w600, + color: AppColors.primary, + ), + ), + ), + ], + ), + const SizedBox(height: 10), + Container( + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(16), + border: Border.all(color: AppColors.border.withValues(alpha: 0.2)), + ), + child: Column( + children: activities + .take(5) + .map((activity) => _ActivityTile( + activity: activity, + onTap: () => onNavigate(1), + isLast: activity == activities.last, + )) + .toList(), + ), + ), + ], + ); + } +} + +class _ActivityTile extends StatelessWidget { + final Activity activity; + final VoidCallback onTap; + final bool isLast; + + const _ActivityTile({ + required this.activity, + required this.onTap, + required this.isLast, + }); + + @override + Widget build(BuildContext context) { + Color iconBg; + Color iconColor; + IconData iconData; + + switch (activity.icon) { + case ActivityIcon.shipping: + iconBg = const Color(0xFFD5E0F8); + iconColor = const Color(0xFF1E3A8A); + iconData = Icons.local_shipping; + break; + case ActivityIcon.call: + iconBg = const Color(0xFFFFE4E6); + iconColor = AppColors.primary; + iconData = Icons.phone; + break; + case ActivityIcon.edit: + iconBg = const Color(0xFFDCFCE7); + iconColor = const Color(0xFF15803D); + iconData = Icons.edit; + break; + } + + Widget? badge; + if (activity.status == ActivityStatus.newStatus) { + badge = _Badge(label: 'NEW', bg: const Color(0xFFFFDAD7), fg: const Color(0xFF930013)); + } else if (activity.status == ActivityStatus.pending) { + badge = _Badge(label: 'PENDING', bg: const Color(0xFFD8E3FB), fg: const Color(0xFF3C475A)); + } else if (activity.status == ActivityStatus.completed) { + badge = _Badge(label: 'DONE', bg: const Color(0xFFD8F9EE), fg: const Color(0xFF115E59)); + } + + return InkWell( + onTap: onTap, + borderRadius: isLast + ? const BorderRadius.only( + bottomLeft: Radius.circular(16), + bottomRight: Radius.circular(16), + ) + : null, + child: Container( + padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 12), + decoration: BoxDecoration( + border: isLast + ? null + : Border( + bottom: BorderSide( + color: AppColors.border.withValues(alpha: 0.15), + ), + ), + ), + child: Row( + children: [ + Container( + width: 40, + height: 40, + decoration: BoxDecoration( + color: iconBg, + shape: BoxShape.circle, + ), + child: Icon(iconData, size: 18, color: iconColor), + ), + const SizedBox(width: 14), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + activity.clientName, + style: const TextStyle( + fontSize: 13, + fontWeight: FontWeight.w700, + color: AppColors.darkBlue, + ), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + const SizedBox(height: 2), + Text( + activity.action, + style: TextStyle( + fontSize: 11, + color: AppColors.textSecondary, + ), + ), + ], + ), + ), + ?badge, + ], + ), + ), + ); + } +} + +class _Badge extends StatelessWidget { + final String label; + final Color bg; + final Color fg; + + const _Badge({required this.label, required this.bg, required this.fg}); + + @override + Widget build(BuildContext context) { + return Container( + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 3), + decoration: BoxDecoration( + color: bg, + borderRadius: BorderRadius.circular(20), + ), + child: Text( + label, + style: TextStyle( + fontSize: 9, + fontWeight: FontWeight.w700, + color: fg, + ), + ), + ); + } +} + +class _InsightCard extends StatelessWidget { + @override + Widget build(BuildContext context) { + return ClipRRect( + borderRadius: BorderRadius.circular(20), + child: SizedBox( + width: double.infinity, + height: 160, + child: Stack( + fit: StackFit.expand, + children: [ + Container( + decoration: const BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topLeft, + end: Alignment.bottomRight, + colors: [Color(0xFF0B1C30), Color(0xFF8D0012)], + ), + ), + ), + Positioned.fill( + child: CustomPaint(painter: _GridPainter()), + ), + Padding( + padding: const EdgeInsets.all(20), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Row( + children: [ + Icon(Icons.auto_awesome, + size: 12, color: const Color(0xFFFFDAD7)), + const SizedBox(width: 4), + Text( + 'INSIGHT OF THE WEEK', + style: TextStyle( + fontSize: 9, + fontWeight: FontWeight.w700, + letterSpacing: 1.2, + color: const Color(0xFFFFDAD7), + ), + ), + ], + ), + const SizedBox(height: 6), + const Text( + 'Weekly Performance Report', + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.w700, + color: Colors.white, + ), + ), + const SizedBox(height: 4), + Text( + "Analyze your team's survey conversion rates.", + style: TextStyle( + fontSize: 11, + color: Colors.white.withValues(alpha: 0.8), + fontWeight: FontWeight.w300, + ), + ), + ], + ), + ), + ], + ), + ), + ); + } +} + +class _GridPainter extends CustomPainter { + @override + void paint(Canvas canvas, Size size) { + final paint = Paint() + ..color = Colors.white.withValues(alpha: 0.04) + ..strokeWidth = 1; + const spacing = 30.0; + for (double x = 0; x < size.width; x += spacing) { + canvas.drawLine(Offset(x, 0), Offset(x, size.height), paint); + } + for (double y = 0; y < size.height; y += spacing) { + canvas.drawLine(Offset(0, y), Offset(size.width, y), paint); + } + } + + @override + bool shouldRepaint(_GridPainter oldDelegate) => false; +} diff --git a/lib/screens/login_screen.dart b/lib/screens/login_screen.dart new file mode 100644 index 0000000..264958c --- /dev/null +++ b/lib/screens/login_screen.dart @@ -0,0 +1,266 @@ +import 'package:flutter/material.dart'; +import '../services/auth_service.dart'; +import '../theme/app_theme.dart'; +import '../utils/snackbar_utils.dart'; + +class LoginScreen extends StatefulWidget { + final void Function(AuthUser user) onLoggedIn; + + const LoginScreen({super.key, required this.onLoggedIn}); + + @override + State createState() => _LoginScreenState(); +} + +class _LoginScreenState extends State { + final _auth = AuthService(); + + final _emailCtrl = TextEditingController(); + final _passwordCtrl = TextEditingController(); + + bool _busy = false; + + @override + void dispose() { + _emailCtrl.dispose(); + _passwordCtrl.dispose(); + super.dispose(); + } + + Future _login() async { + final email = _emailCtrl.text.trim(); + final password = _passwordCtrl.text; + + if (email.isEmpty || password.isEmpty) { + SnackbarUtils.showError(context, 'Enter your email and password'); + return; + } + + setState(() { + _busy = true; + }); + + try { + final user = await _auth.login(email, password); + if (!mounted) return; + if (user == null) { + setState(() { + _busy = false; + }); + SnackbarUtils.showError(context, 'Invalid email or password'); + return; + } + + widget.onLoggedIn(user); + } catch (_) { + if (!mounted) return; + setState(() { + _busy = false; + }); + SnackbarUtils.showError(context, 'Could not reach server. Check your connection.'); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: AppColors.primary, + body: SafeArea( + child: Align( + alignment: const Alignment(0, -0.4), + child: SingleChildScrollView( + padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 32), + child: ConstrainedBox( + constraints: const BoxConstraints(maxWidth: 420), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + _logo(), + const SizedBox(height: 20), + const Text( + 'Doormile CRM', + style: TextStyle( + fontSize: 24, + fontWeight: FontWeight.w800, + color: Colors.white, + letterSpacing: 0.2, + ), + ), + const SizedBox(height: 6), + Text( + 'FIELD SALES PORTAL', + style: TextStyle( + fontSize: 10, + fontWeight: FontWeight.w700, + letterSpacing: 2, + color: Colors.white.withValues(alpha: 0.7), + ), + ), + const SizedBox(height: 28), + _card(), + ], + ), + ), + ), + ), + ), + ); + } + + Widget _logo() { + return Container( + width: 92, + height: 92, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(24), + boxShadow: [ + BoxShadow( + color: Colors.black.withValues(alpha: 0.18), + blurRadius: 24, + offset: const Offset(0, 10), + ), + ], + ), + child: Padding( + padding: const EdgeInsets.all(14), + child: Image.asset('assets/doormilelogoround.png', fit: BoxFit.contain), + ), + ); + } + + Widget _card() { + return Container( + width: double.infinity, + padding: const EdgeInsets.all(22), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(20), + boxShadow: [ + BoxShadow( + color: Colors.black.withValues(alpha: 0.12), + blurRadius: 30, + offset: const Offset(0, 12), + ), + ], + ), + child: _loginForm(), + ); + } + + Widget _loginForm() { + return Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const Text( + 'Sign In', + style: TextStyle( + fontSize: 22, + fontWeight: FontWeight.w800, + color: AppColors.darkBlue, + ), + ), + const SizedBox(height: 6), + const Text( + 'Welcome back! Please enter your details.', + textAlign: TextAlign.center, + style: TextStyle(fontSize: 13, color: AppColors.textSecondary), + ), + const SizedBox(height: 24), + TextField( + controller: _emailCtrl, + keyboardType: TextInputType.emailAddress, + autocorrect: false, + textInputAction: TextInputAction.next, + decoration: InputDecoration( + hintText: 'Email', + prefixIcon: const Icon(Icons.email_outlined, color: AppColors.muted), + filled: true, + fillColor: Colors.grey.shade50, + contentPadding: const EdgeInsets.symmetric(vertical: 16), + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: BorderSide(color: Colors.grey.shade200), + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: BorderSide(color: Colors.grey.shade200), + ), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: const BorderSide(color: AppColors.primary, width: 2), + ), + ), + ), + const SizedBox(height: 16), + TextField( + controller: _passwordCtrl, + obscureText: true, + textInputAction: TextInputAction.go, + onSubmitted: (_) => _login(), + decoration: InputDecoration( + hintText: 'Password', + prefixIcon: const Icon(Icons.lock_outline, color: AppColors.muted), + filled: true, + fillColor: Colors.grey.shade50, + contentPadding: const EdgeInsets.symmetric(vertical: 16), + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: BorderSide(color: Colors.grey.shade200), + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: BorderSide(color: Colors.grey.shade200), + ), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: const BorderSide(color: AppColors.primary, width: 2), + ), + ), + ), + const SizedBox(height: 24), + _primaryButton( + label: 'Continue', + onPressed: _busy ? null : _login, + ), + ], + ); + } + Widget _primaryButton({ + required String label, + required VoidCallback? onPressed, + }) { + return SizedBox( + width: double.infinity, + height: 50, + child: ElevatedButton( + onPressed: onPressed, + style: ElevatedButton.styleFrom( + backgroundColor: AppColors.primary, + foregroundColor: Colors.white, + disabledBackgroundColor: AppColors.primary.withValues(alpha: 0.5), + elevation: 0, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + ), + ), + child: _busy + ? const SizedBox( + width: 20, + height: 20, + child: CircularProgressIndicator( + strokeWidth: 2.2, + color: Colors.white, + ), + ) + : Text( + label, + style: const TextStyle( + fontSize: 15, + fontWeight: FontWeight.w800, + ), + ), + ), + ); + } +} diff --git a/lib/screens/pricing_screen.dart b/lib/screens/pricing_screen.dart new file mode 100644 index 0000000..9cf3fca --- /dev/null +++ b/lib/screens/pricing_screen.dart @@ -0,0 +1,538 @@ +import 'package:flutter/material.dart'; +import '../services/crm_api_service.dart'; +import '../theme/app_theme.dart'; +import '../utils/snackbar_utils.dart'; + +class PricingScreen extends StatefulWidget { + final List pricing; + final bool backendReady; + final bool isActive; + final VoidCallback onDataChanged; + + const PricingScreen({ + super.key, + required this.pricing, + required this.backendReady, + required this.onDataChanged, + this.isActive = false, + }); + + @override + State createState() => _PricingScreenState(); +} + +class _PricingScreenState extends State { + final CrmApiService _api = CrmApiService(); + + bool _isSaving = false; + + // Group pricing by company + Map> get groupedPricing { + final Map> map = {}; + for (var p in widget.pricing) { + final company = p['company']?.toString() ?? 'Unknown'; + if (!map.containsKey(company)) { + map[company] = []; + } + map[company]!.add(p); + } + return map; + } + + void _showAddPricingDialog([String? defaultProvider]) { + _showPricingFormDialog(defaultProvider: defaultProvider); + } + + void _showEditPricingDialog(Map rateData) { + _showPricingFormDialog(rateData: rateData); + } + + void _showPricingFormDialog({Map? rateData, String? defaultProvider}) { + final isEditing = rateData != null; + final companyCtrl = TextEditingController(text: rateData?['company']?.toString() ?? defaultProvider ?? ''); + final slabCtrl = TextEditingController(text: rateData?['weight_slab']?.toString() ?? ''); + final zoneCtrl = TextEditingController(text: rateData?['zone']?.toString().isNotEmpty == true ? rateData!['zone'] : rateData?['service_type'] ?? ''); + final rateCtrl = TextEditingController(text: rateData?['rate']?.toString() ?? ''); + final String id = rateData?['id']?.toString() ?? ''; + + showDialog( + context: context, + barrierDismissible: false, + builder: (ctx) { + return Dialog( + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(24)), + child: SingleChildScrollView( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + // Header + Container( + padding: const EdgeInsets.fromLTRB(24, 24, 24, 20), + decoration: const BoxDecoration( + color: AppColors.blueLight, + borderRadius: BorderRadius.vertical(top: Radius.circular(24)), + ), + child: Row( + children: [ + Container( + padding: const EdgeInsets.all(10), + decoration: const BoxDecoration(color: Colors.white, shape: BoxShape.circle), + child: Icon(isEditing ? Icons.edit_outlined : Icons.add_circle_outline, color: AppColors.primary, size: 24), + ), + const SizedBox(width: 16), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(isEditing ? 'Edit Rate' : 'Add New Rate', style: const TextStyle(fontWeight: FontWeight.w800, color: AppColors.darkBlue, fontSize: 18)), + const SizedBox(height: 2), + Text(isEditing ? 'Update pricing information' : 'Add to provider pricing slab', style: const TextStyle(fontSize: 12, color: AppColors.textSecondary)), + ], + ), + ), + ], + ), + ), + // Form Fields + Padding( + padding: const EdgeInsets.all(24), + child: Column( + children: [ + _buildModernTextField( + controller: companyCtrl, + label: 'Provider Name', + hint: 'e.g. DTDC, Delhivery', + icon: Icons.storefront_outlined, + ), + const SizedBox(height: 16), + _buildModernTextField( + controller: slabCtrl, + label: 'Weight Slab', + hint: 'e.g. 500g, 1kg-2kg', + icon: Icons.scale_outlined, + ), + const SizedBox(height: 16), + _buildModernTextField( + controller: zoneCtrl, + label: 'Zone / Service', + hint: 'e.g. LOCAL, SOUTH', + icon: Icons.place_outlined, + ), + const SizedBox(height: 16), + _buildModernTextField( + controller: rateCtrl, + label: 'Rate (₹)', + hint: '0.00', + icon: Icons.currency_rupee, + keyboardType: TextInputType.number, + ), + ], + ), + ), + // Actions + Container( + padding: const EdgeInsets.fromLTRB(24, 0, 24, 24), + child: Row( + children: [ + Expanded( + child: TextButton( + onPressed: () => Navigator.pop(ctx), + style: TextButton.styleFrom( + padding: const EdgeInsets.symmetric(vertical: 16), + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), + ), + child: const Text('Cancel', style: TextStyle(color: AppColors.textSecondary, fontWeight: FontWeight.w700)), + ), + ), + const SizedBox(width: 12), + Expanded( + child: ElevatedButton( + onPressed: () async { + if (companyCtrl.text.isEmpty || slabCtrl.text.isEmpty || rateCtrl.text.isEmpty) { + SnackbarUtils.showError(ctx, 'Please fill in required fields'); + return; + } + + setState(() => _isSaving = true); + Navigator.pop(ctx); + + final payload = { + 'company': companyCtrl.text, + 'weight_slab': slabCtrl.text, + 'zone': zoneCtrl.text, + 'service_type': '', + 'rate': rateCtrl.text, + }; + + final success = isEditing + ? await _api.updatePricing(id, payload) + : await _api.createPricing(payload); + + setState(() => _isSaving = false); + + if (success) { + widget.onDataChanged(); + if (mounted) { + SnackbarUtils.showSuccess(context, isEditing ? 'Rate updated!' : 'Rate added!'); + } + } else { + if (mounted) { + SnackbarUtils.showError(context, isEditing ? 'Update failed.' : 'Failed to add rate.'); + } + } + }, + style: ElevatedButton.styleFrom( + backgroundColor: AppColors.primary, + elevation: 0, + padding: const EdgeInsets.symmetric(vertical: 16), + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), + ), + child: Text(isEditing ? 'Save Changes' : 'Add Rate', style: const TextStyle(color: Colors.white, fontWeight: FontWeight.w700)), + ), + ), + ], + ), + ), + ], + ), + ), + ); + }, + ); + } + + Widget _buildModernTextField({ + required TextEditingController controller, + required String label, + required String hint, + required IconData icon, + TextInputType keyboardType = TextInputType.text, + }) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + label, + style: const TextStyle(fontSize: 11, fontWeight: FontWeight.w800, color: AppColors.darkBlue, letterSpacing: 0.5), + ), + const SizedBox(height: 8), + TextField( + controller: controller, + keyboardType: keyboardType, + style: const TextStyle(fontWeight: FontWeight.w600, color: AppColors.darkBlue, fontSize: 14), + decoration: InputDecoration( + hintText: hint, + hintStyle: TextStyle(color: AppColors.textSecondary.withValues(alpha: 0.5)), + prefixIcon: Icon(icon, size: 18, color: AppColors.textSecondary), + filled: true, + fillColor: const Color(0xFFF8F9FA), + contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 16), + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: BorderSide.none, + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: BorderSide(color: Colors.grey.shade200), + ), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: const BorderSide(color: AppColors.primary), + ), + ), + ), + ], + ); + } + + void _deletePricing(String id) async { + final confirm = await showDialog( + context: context, + builder: (ctx) => Dialog( + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)), + child: Padding( + padding: const EdgeInsets.all(24), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + padding: const EdgeInsets.all(16), + decoration: BoxDecoration(color: AppColors.primary.withValues(alpha: 0.1), shape: BoxShape.circle), + child: const Icon(Icons.warning_amber_rounded, color: AppColors.primary, size: 32), + ), + const SizedBox(height: 16), + const Text('Delete Pricing Rate?', style: TextStyle(fontSize: 20, fontWeight: FontWeight.w800, color: AppColors.darkBlue)), + const SizedBox(height: 8), + const Text('This action cannot be undone. Are you sure you want to delete this rate?', textAlign: TextAlign.center, style: TextStyle(fontSize: 14, color: AppColors.textSecondary)), + const SizedBox(height: 24), + Row( + children: [ + Expanded( + child: TextButton( + onPressed: () => Navigator.pop(ctx, false), + style: TextButton.styleFrom(padding: const EdgeInsets.symmetric(vertical: 16), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12))), + child: const Text('Cancel', style: TextStyle(color: AppColors.textSecondary, fontWeight: FontWeight.w700)), + ), + ), + const SizedBox(width: 12), + Expanded( + child: ElevatedButton( + onPressed: () => Navigator.pop(ctx, true), + style: ElevatedButton.styleFrom( + backgroundColor: AppColors.primary, + elevation: 0, + padding: const EdgeInsets.symmetric(vertical: 16), + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), + ), + child: const Text('Delete', style: TextStyle(color: Colors.white, fontWeight: FontWeight.w700)), + ), + ), + ], + ), + ], + ), + ), + ), + ); + + if (confirm != true) return; + + setState(() => _isSaving = true); + final success = await _api.deletePricing(id); + setState(() => _isSaving = false); + + if (success) { + widget.onDataChanged(); + if (mounted) { + SnackbarUtils.showSuccess(context, 'Pricing rate deleted.'); + } + } else { + if (mounted) { + SnackbarUtils.showError(context, 'Failed to delete pricing rate.'); + } + } + } + + @override + Widget build(BuildContext context) { + final groups = groupedPricing; + final companies = groups.keys.toList()..sort(); + + return Scaffold( + backgroundColor: AppColors.scaffold, + body: CustomScrollView( + slivers: [ + SliverToBoxAdapter( + child: Padding( + padding: const EdgeInsets.fromLTRB(16, 20, 16, 10), + child: WideTopBanner( + backendReady: widget.backendReady, + subtitle: 'CARRIER PRICING', + ), + ), + ), + SliverToBoxAdapter( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + const Text( + 'All Providers', + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.w800, + color: AppColors.darkBlue, + ), + ), + ElevatedButton.icon( + onPressed: _isSaving ? null : () => _showAddPricingDialog(), + icon: const Icon(Icons.add, size: 18, color: Colors.white), + label: const Text('Add Provider / Rate', style: TextStyle(color: Colors.white, fontWeight: FontWeight.w700)), + style: ElevatedButton.styleFrom( + backgroundColor: AppColors.primary, + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), + ), + ), + ], + ), + ), + ), + if (_isSaving) + const SliverToBoxAdapter( + child: Padding( + padding: EdgeInsets.all(20.0), + child: Center(child: CircularProgressIndicator()), + ), + ), + if (companies.isEmpty && !_isSaving) + SliverToBoxAdapter( + child: Padding( + padding: const EdgeInsets.all(40.0), + child: Center( + child: Text( + 'No pricing data available.\nAdd a provider to get started.', + textAlign: TextAlign.center, + style: TextStyle(color: AppColors.textSecondary, fontSize: 16), + ), + ), + ), + ), + SliverList( + delegate: SliverChildBuilderDelegate( + (context, index) { + final company = companies[index]; + final rates = groups[company] ?? []; + + final zones = rates.map((r) => r['zone']?.toString().toUpperCase() ?? 'LOCAL').toSet().toList()..sort(); + final slabs = rates.map((r) => r['weight_slab']?.toString() ?? '').toSet().toList()..sort(); + final initial = company.isNotEmpty ? company.substring(0, 1).toUpperCase() : 'P'; + + return Card( + margin: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(16), + side: BorderSide(color: Colors.grey.shade200, width: 1), + ), + elevation: 0, + color: Colors.white, + child: ExpansionTile( + shape: const Border(), + tilePadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), + leading: Container( + width: 48, + height: 48, + decoration: BoxDecoration( + color: const Color(0xFFFDECEE), + borderRadius: BorderRadius.circular(12), + ), + alignment: Alignment.center, + child: Text( + initial, + style: const TextStyle(color: AppColors.primary, fontSize: 20, fontWeight: FontWeight.w800), + ), + ), + title: Text( + company, + style: const TextStyle(fontWeight: FontWeight.w800, color: AppColors.darkBlue, fontSize: 16), + ), + subtitle: Row( + children: [ + const Icon(Icons.place_outlined, size: 14, color: AppColors.primary), + const SizedBox(width: 4), + Text('${rates.length} Registered Rates', style: const TextStyle(color: AppColors.textSecondary, fontSize: 13)), + ], + ), + children: [ + Container( + width: double.infinity, + decoration: BoxDecoration( + color: Colors.white, + border: Border(top: BorderSide(color: Colors.grey.shade200)), + borderRadius: const BorderRadius.vertical(bottom: Radius.circular(16)), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: DataTable( + headingRowColor: WidgetStateProperty.all(Colors.grey.shade50), + dataRowMinHeight: 56, + dataRowMaxHeight: 56, + columnSpacing: 32, + horizontalMargin: 24, + columns: [ + const DataColumn(label: Text('WEIGHT SLAB', style: TextStyle(fontSize: 11, fontWeight: FontWeight.w800, color: AppColors.textSecondary))), + ...zones.map((z) => DataColumn(label: Text(z, style: const TextStyle(fontSize: 11, fontWeight: FontWeight.w800, color: AppColors.textSecondary)))), + ], + rows: slabs.map((slab) { + return DataRow( + cells: [ + DataCell(Text(slab, style: const TextStyle(fontWeight: FontWeight.w700, color: AppColors.darkBlue, fontSize: 13))), + ...zones.map((zone) { + final matchingRate = rates.firstWhere( + (r) => (r['weight_slab'] == slab) && ((r['zone']?.toString().toUpperCase() ?? 'LOCAL') == zone), + orElse: () => null, + ); + if (matchingRate == null) { + return const DataCell(Center(child: Text('—', style: TextStyle(color: Colors.grey)))); + } + return DataCell( + InkWell( + onTap: () { + // Show options to edit or delete + showModalBottomSheet( + context: context, + shape: const RoundedRectangleBorder(borderRadius: BorderRadius.vertical(top: Radius.circular(20))), + builder: (ctx) => SafeArea( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + ListTile( + leading: const Icon(Icons.edit_outlined, color: AppColors.textSecondary), + title: const Text('Edit Rate'), + onTap: () { + Navigator.pop(ctx); + _showEditPricingDialog(matchingRate as Map); + }, + ), + ListTile( + leading: const Icon(Icons.delete_outline, color: AppColors.primary), + title: const Text('Delete Rate', style: TextStyle(color: AppColors.primary)), + onTap: () { + Navigator.pop(ctx); + _deletePricing(matchingRate['id'].toString()); + }, + ), + ], + ), + ), + ); + }, + child: Container( + padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 6), + decoration: BoxDecoration( + color: AppColors.green.withValues(alpha: 0.1), + borderRadius: BorderRadius.circular(8), + ), + child: Text( + '₹${matchingRate['rate']}', + style: const TextStyle(fontWeight: FontWeight.w800, color: AppColors.greenDark, fontSize: 14), + ), + ), + ), + ); + }), + ], + ); + }).toList(), + ), + ), + Padding( + padding: const EdgeInsets.all(16), + child: Align( + alignment: Alignment.centerRight, + child: TextButton.icon( + onPressed: () => _showAddPricingDialog(company), + icon: const Icon(Icons.add, size: 16, color: AppColors.primary), + label: const Text('Add Rate', style: TextStyle(color: AppColors.primary, fontWeight: FontWeight.w700)), + ), + ), + ), + ], + ), + ), + ], + ), + ); + }, + childCount: companies.length, + ), + ), + const SliverToBoxAdapter(child: SizedBox(height: 100)), + ], + ), + ); + } +} diff --git a/lib/screens/survey_screen.dart b/lib/screens/survey_screen.dart new file mode 100644 index 0000000..3799b83 --- /dev/null +++ b/lib/screens/survey_screen.dart @@ -0,0 +1,2843 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:geolocator/geolocator.dart'; +import '../data/india_cities.dart'; +import '../data/india_locations.dart'; +import '../models/client.dart'; +import '../services/location_service.dart'; +import '../theme/app_theme.dart'; +import '../utils/snackbar_utils.dart'; + +class SurveyScreen extends StatefulWidget { + final List clients; + final void Function(Client) onAddClient; + final void Function(int) onNavigate; + final bool backendReady; + final bool isActive; + + const SurveyScreen({ + super.key, + required this.clients, + required this.onAddClient, + required this.onNavigate, + required this.backendReady, + this.isActive = false, + }); + + @override + State createState() => _SurveyScreenState(); +} + +enum _SurveyState { idle, surveying, success } + +class _SurveyScreenState extends State + with SingleTickerProviderStateMixin { + _SurveyState _state = _SurveyState.idle; + + int _step = 1; + bool _onConsentStep = false; + bool _capturingLocation = false; + DataConsent _chosenConsent = DataConsent.full; + + // Step 1 — basic identity + contact + routing + final _nameCtrl = TextEditingController(); + final _phoneCtrl = TextEditingController(); + final _neighbourhoodCtrl = TextEditingController(); + final _pincodeCtrl = TextEditingController(); + final _customProviderCtrl = TextEditingController(); + IndiaCity? _businessCity; // origin — auto-detected from GPS or picked + List _destCities = []; // transiting destination cities (multi-select) + SurveyLocation? _capturedLocation; // GPS captured during Step 1 (reused at submit) + final bool _detectingLocation = false; + String _frequency = ''; + BusinessType _businessType = BusinessType.ecommerce; + List _selectedSegments = ['First Mile']; + + // Step 2 — logistics metrics + double _parcelVolume = 450; + final _contractsCtrl = TextEditingController(text: '12'); + + // Step 3 — provider & notes + String _provider = 'DTDC Express'; + final _notesCtrl = TextEditingController(); + + late AnimationController _animCtrl; + late Animation _fadeAnim; + final ScrollController _scrollController = ScrollController(); + + static const _frequencyOptions = [ + 'Daily', + 'Weekly', + 'Bi-weekly', + 'Monthly', + 'On-demand', + ]; + + @override + void initState() { + super.initState(); + _animCtrl = AnimationController( + vsync: this, duration: const Duration(milliseconds: 300)); + _fadeAnim = CurvedAnimation(parent: _animCtrl, curve: Curves.easeOut); + _animCtrl.forward(); + } + + @override + void didUpdateWidget(covariant SurveyScreen oldWidget) { + super.didUpdateWidget(oldWidget); + if (widget.isActive && !oldWidget.isActive) { + if (_scrollController.hasClients) { + _scrollController.animateTo(0, duration: const Duration(milliseconds: 300), curve: Curves.easeOut); + } + } + } + + @override + void dispose() { + _scrollController.dispose(); + _nameCtrl.dispose(); + _phoneCtrl.dispose(); + _neighbourhoodCtrl.dispose(); + _pincodeCtrl.dispose(); + _customProviderCtrl.dispose(); + _contractsCtrl.dispose(); + _notesCtrl.dispose(); + _animCtrl.dispose(); + super.dispose(); + } + + List get _lastSurveyed => + widget.clients.where((c) => c.surveySubmitted).take(3).toList(); + + + + /// Average parcel volume across clients with the same business type. + int get _avgVolumeForType { + final peers = widget.clients + .where((c) => c.businessType == _businessType && c.parcelVolume > 0) + .toList(); + if (peers.isEmpty) return 0; + return (peers.fold(0.0, (s, c) => s + c.parcelVolume) / peers.length).round(); + } + + // ── Location ────────────────────────────────────────────────────────────── + + Future _showProminentLocationDisclosure() async { + final result = await showDialog( + context: context, + barrierDismissible: false, + builder: (ctx) => Dialog( + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)), + child: Padding( + padding: const EdgeInsets.fromLTRB(24, 28, 24, 20), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + width: 56, + height: 56, + decoration: const BoxDecoration( + color: AppColors.blueLight, + shape: BoxShape.circle, + ), + child: const Icon(Icons.location_on, size: 28, color: AppColors.primary), + ), + const SizedBox(height: 16), + const Text( + 'Location Disclosure', + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w700, + color: AppColors.darkBlue, + ), + ), + const SizedBox(height: 8), + const Text( + 'DoorMile CRM collects location data to record the GPS coordinates of your client visit when you submit a survey, enabling verification of field visits. This data is collected only when you explicitly press the submit survey button, even when the app is in use.', + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 12.5, + color: AppColors.textSecondary, + height: 1.4, + ), + ), + const SizedBox(height: 24), + SizedBox( + width: double.infinity, + height: 44, + child: ElevatedButton( + onPressed: () => Navigator.pop(ctx, true), + style: ElevatedButton.styleFrom( + backgroundColor: AppColors.primary, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + ), + elevation: 0, + ), + child: const Text( + 'Agree & Continue', + style: TextStyle( + color: Colors.white, + fontWeight: FontWeight.w700, + ), + ), + ), + ), + const SizedBox(height: 10), + SizedBox( + width: double.infinity, + height: 44, + child: TextButton( + onPressed: () => Navigator.pop(ctx, false), + style: TextButton.styleFrom( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + ), + ), + child: const Text( + 'Cancel', + style: TextStyle( + fontSize: 13, + color: AppColors.textSecondary, + fontWeight: FontWeight.w600, + ), + ), + ), + ), + ], + ), + ), + ), + ); + return result ?? false; + } + + /// Checks service + permission (showing alerts as needed), then captures GPS. + /// Returns [SurveyLocation.empty] if unavailable / declined. + Future _acquireLocation() async { + final status = await LocationService.checkStatus(); + if (!mounted) return SurveyLocation.empty(); + + if (status == LocationCheckResult.serviceDisabled) { + final proceed = await _showLocationAlert( + icon: Icons.location_off_outlined, + title: 'Location is Turned Off', + message: + 'Enable location on your device so the client visit can be ' + 'logged with GPS coordinates.', + primaryLabel: 'Turn On Location', + onPrimary: LocationService.openLocationSettings, + ); + if (!proceed || !mounted) return SurveyLocation.empty(); + } else if (status == LocationCheckResult.permissionDenied) { + final agreed = await _showProminentLocationDisclosure(); + if (!agreed || !mounted) return SurveyLocation.empty(); + + final perm = await Geolocator.requestPermission(); + if (!mounted) return SurveyLocation.empty(); + if (perm == LocationPermission.denied || + perm == LocationPermission.deniedForever) { + final proceed = await _showLocationAlert( + icon: Icons.lock_outline, + title: 'Location Permission Needed', + message: + 'Allow DoorMile to access your location so the business ' + 'location can be detected automatically.', + primaryLabel: 'Open App Settings', + onPrimary: LocationService.openAppSettings, + ); + if (!proceed || !mounted) return SurveyLocation.empty(); + } + } else if (status == LocationCheckResult.permissionPermanentlyDenied) { + final proceed = await _showLocationAlert( + icon: Icons.lock_outline, + title: 'Location Permission Blocked', + message: + 'Location access was blocked. Open App Settings and allow ' + '"Location" for DoorMile to detect the business location.', + primaryLabel: 'Open App Settings', + onPrimary: LocationService.openAppSettings, + ); + if (!proceed || !mounted) return SurveyLocation.empty(); + } + + setState(() => _capturingLocation = true); + SurveyLocation loc = SurveyLocation.empty(); + try { + loc = await LocationService.capture(); + } catch (_) {} + if (!mounted) return loc; + setState(() => _capturingLocation = false); + return loc; + } + + /// Step 1 action — detect the business location from the device GPS and + /// auto-fill the business city (and neighbourhood, if empty). + Future _detectLocation() async { + final loc = await _acquireLocation(); + if (!mounted) return; + if (!loc.hasFix) { + SnackbarUtils.showError(context, "Couldn't get GPS. Pick the business city manually below."); + return; + } + setState(() { + _capturedLocation = loc; + final matched = findCityByName(loc.city); + _businessCity = matched ?? + (loc.city.isNotEmpty + ? IndiaCity(loc.city, '—', loc.state) + : _businessCity); + if (loc.zone.isNotEmpty && _neighbourhoodCtrl.text.trim().isEmpty) { + _neighbourhoodCtrl.text = loc.zone; + } + // Pre-fill the optional pincode from GPS, if the agent hasn't typed one. + if (loc.pincode.isNotEmpty && _pincodeCtrl.text.trim().isEmpty) { + _pincodeCtrl.text = loc.pincode; + } + }); + } + + /// Submit entry point — reuses the GPS captured during Step 1 if available, + /// otherwise acquires it now. + Future _captureAndSubmit({required bool basicOnly}) async { + if (!basicOnly && _nameCtrl.text.trim().isEmpty) return; + + SurveyLocation loc; + if (_capturedLocation != null && _capturedLocation!.hasFix) { + loc = _capturedLocation!; + } else { + loc = await _acquireLocation(); + if (!mounted) return; + } + + if (basicOnly) { + _doSubmitBasicOnly(loc); + } else { + _doSubmitFull(loc); + } + } + + /// Shows a styled location alert. + /// + /// Returns `true` → user chose "Submit Without Location" (proceed). + /// Returns `false` → user chose the settings action (don't submit now). + Future _showLocationAlert({ + required IconData icon, + required String title, + required String message, + required String primaryLabel, + required Future Function() onPrimary, + }) async { + final result = await showDialog( + context: context, + barrierDismissible: false, + builder: (ctx) => Dialog( + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)), + child: Padding( + padding: const EdgeInsets.fromLTRB(24, 28, 24, 20), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + width: 56, + height: 56, + decoration: BoxDecoration( + color: const Color(0xFFFFF8ED), + shape: BoxShape.circle, + ), + child: Icon(icon, size: 26, color: const Color(0xFFE87C00)), + ), + const SizedBox(height: 16), + Text(title, + textAlign: TextAlign.center, + style: const TextStyle( + fontSize: 16, + fontWeight: FontWeight.w700, + color: AppColors.darkBlue)), + const SizedBox(height: 8), + Text(message, + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 13, color: AppColors.textSecondary)), + const SizedBox(height: 24), + SizedBox( + width: double.infinity, + height: 44, + child: ElevatedButton( + onPressed: () { + Navigator.pop(ctx, false); + onPrimary(); + }, + style: ElevatedButton.styleFrom( + backgroundColor: AppColors.primary, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12)), + elevation: 0, + ), + child: Text(primaryLabel, + style: const TextStyle( + color: Colors.white, fontWeight: FontWeight.w700)), + ), + ), + const SizedBox(height: 10), + SizedBox( + width: double.infinity, + height: 44, + child: TextButton( + onPressed: () => Navigator.pop(ctx, true), + style: TextButton.styleFrom( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12)), + ), + child: Text('Submit Without Location', + style: TextStyle( + fontSize: 13, + color: AppColors.textSecondary, + fontWeight: FontWeight.w600)), + ), + ), + ], + ), + ), + ), + ); + return result ?? true; + } + + void _doSubmitBasicOnly(SurveyLocation loc) { + _chosenConsent = DataConsent.basicOnly; + widget.onAddClient(Client( + id: 'client_${DateTime.now().millisecondsSinceEpoch}', + name: _nameCtrl.text.trim(), + city: _businessCity?.name ?? '', + businessType: _businessType, + parcelVolume: 0.0, + activeContracts: 0, + provider: 'Not disclosed', + efficiency: 'Not disclosed', + status: ClientStatus.newClient, + lastUpdated: 'Just now', + surveySubmitted: true, + notes: '', + dataConsent: DataConsent.basicOnly, + phone: _phoneCtrl.text.trim(), + frequency: _frequency, + businessState: _businessCity?.state ?? '', + transitType: '', + transitFrom: _businessCity?.name ?? '', + transitTo: _destCities.map((c) => c.name).join(', '), + neighbourhood: _neighbourhoodCtrl.text.trim(), + logisticsSegment: _selectedSegments.join(', '), + pincode: _pincodeCtrl.text.trim(), + surveyLat: loc.lat, + surveyLng: loc.lng, + surveyAddress: loc.address, + surveyZone: loc.zone, + surveyPincode: loc.pincode, + )); + _transition(_SurveyState.success); + } + + void _doSubmitFull(SurveyLocation loc) { + _chosenConsent = DataConsent.full; + String providerName = _provider == 'Others' ? _customProviderCtrl.text.trim() : _provider; + if (providerName.isEmpty) providerName = 'Others'; + + String efficiency = 'High Efficiency'; + if (providerName == 'Blue Dart') efficiency = 'Premium Service'; + if (providerName == 'Gati-KWE') efficiency = 'Cost Leader'; + if (providerName == 'Delhivery') efficiency = 'Local Last Mile'; + + widget.onAddClient(Client( + id: 'client_${DateTime.now().millisecondsSinceEpoch}', + name: _nameCtrl.text.trim(), + city: _businessCity?.name ?? '', + businessType: _businessType, + parcelVolume: _parcelVolume, + activeContracts: int.tryParse(_contractsCtrl.text) ?? 12, + provider: providerName, + efficiency: efficiency, + status: ClientStatus.newClient, + lastUpdated: 'Just now', + surveySubmitted: true, + notes: _notesCtrl.text.trim(), + dataConsent: DataConsent.full, + phone: _phoneCtrl.text.trim(), + frequency: _frequency, + businessState: _businessCity?.state ?? '', + transitType: '', + transitFrom: _businessCity?.name ?? '', + transitTo: _destCities.map((c) => c.name).join(', '), + neighbourhood: _neighbourhoodCtrl.text.trim(), + logisticsSegment: _selectedSegments.join(', '), + pincode: _pincodeCtrl.text.trim(), + surveyLat: loc.lat, + surveyLng: loc.lng, + surveyAddress: loc.address, + surveyZone: loc.zone, + surveyPincode: loc.pincode, + )); + _transition(_SurveyState.success); + } + + void _transition(_SurveyState next) { + _animCtrl.reset(); + setState(() => _state = next); + _animCtrl.forward(); + } + + void _reset() { + _nameCtrl.clear(); + _phoneCtrl.clear(); + _neighbourhoodCtrl.clear(); + _pincodeCtrl.clear(); + _customProviderCtrl.clear(); + _contractsCtrl.text = '12'; + _notesCtrl.clear(); + setState(() { + _businessCity = null; + _destCities = []; + _capturedLocation = null; + _businessType = BusinessType.ecommerce; + _selectedSegments = ['First Mile']; + _frequency = ''; + _parcelVolume = 450; + _provider = 'DTDC Express'; + _step = 1; + _onConsentStep = false; + }); + _transition(_SurveyState.idle); + } + + @override + Widget build(BuildContext context) { + return Stack( + children: [ + FadeTransition( + opacity: _fadeAnim, + child: SingleChildScrollView( + controller: _scrollController, + padding: const EdgeInsets.fromLTRB(16, 20, 16, 100), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + WideTopBanner( + backendReady: widget.backendReady, + subtitle: 'SURVEY CONSOLE', + ), + const SizedBox(height: 20), + _buildBody(), + ], + ), + ), + ), + if (_capturingLocation) _buildLocationOverlay(), + ], + ); + } + + Widget _buildLocationOverlay() { + return Container( + color: Colors.black.withValues(alpha: 0.55), + child: Center( + child: Container( + margin: const EdgeInsets.symmetric(horizontal: 48), + padding: const EdgeInsets.symmetric(horizontal: 28, vertical: 28), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(20), + boxShadow: [ + BoxShadow( + color: Colors.black.withValues(alpha: 0.15), blurRadius: 24) + ], + ), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + width: 56, + height: 56, + decoration: BoxDecoration( + color: const Color(0xFFEFF4FF), + shape: BoxShape.circle, + ), + child: Icon(Icons.location_searching, + size: 28, color: AppColors.primary), + ), + const SizedBox(height: 16), + const Text('Getting Location', + style: TextStyle( + fontSize: 15, + fontWeight: FontWeight.w700, + color: AppColors.darkBlue)), + const SizedBox(height: 6), + Text( + 'Capturing GPS for field visit log…', + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 12, color: AppColors.textSecondary), + ), + const SizedBox(height: 18), + SizedBox( + width: 28, + height: 28, + child: CircularProgressIndicator( + strokeWidth: 3, + valueColor: + AlwaysStoppedAnimation(AppColors.primary), + ), + ), + ], + ), + ), + ), + ); + } + + Widget _buildBody() { + switch (_state) { + case _SurveyState.idle: + return _buildIdle(); + case _SurveyState.surveying: + return _buildForm(); + case _SurveyState.success: + return _buildSuccess(); + } + } + + // ── Idle ────────────────────────────────────────────────────────────────── + + Widget _buildIdle() { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + width: double.infinity, + padding: const EdgeInsets.all(24), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(20), + border: Border.all(color: AppColors.border.withValues(alpha: 0.25)), + ), + child: Column( + children: [ + Container( + width: 56, + height: 56, + decoration: const BoxDecoration( + color: Color(0xFFFFDAD7), shape: BoxShape.circle), + child: Icon(Icons.assignment_turned_in_outlined, + size: 28, color: AppColors.primary), + ), + const SizedBox(height: 14), + const Text('Welcome back', + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w800, + color: AppColors.darkBlue)), + const SizedBox(height: 4), + Text('Ready to start your next logistics survey?', + style: TextStyle( + fontSize: 13, color: AppColors.textSecondary), + textAlign: TextAlign.center), + const SizedBox(height: 20), + SizedBox( + width: double.infinity, + height: 52, + child: ElevatedButton.icon( + onPressed: () => _transition(_SurveyState.surveying), + icon: const Icon(Icons.insert_drive_file_outlined, + size: 18, color: Colors.white), + label: const Text('Start New Survey', + style: TextStyle( + color: Colors.white, + fontWeight: FontWeight.w700, + fontSize: 15)), + style: ElevatedButton.styleFrom( + backgroundColor: AppColors.primary, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(14)), + elevation: 2, + ), + ), + ), + ], + ), + ), + const SizedBox(height: 20), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text('LAST 3 SURVEYED CLIENTS', + style: TextStyle( + fontSize: 11, + fontWeight: FontWeight.w700, + letterSpacing: 1.2, + color: AppColors.textSecondary)), + GestureDetector( + onTap: () => widget.onNavigate(1), + child: Text('View all', + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w600, + color: AppColors.primary)), + ), + ], + ), + const SizedBox(height: 10), + Container( + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(16), + border: Border.all(color: AppColors.border.withValues(alpha: 0.15)), + ), + child: Column( + children: _lastSurveyed.isEmpty + ? [ + Padding( + padding: const EdgeInsets.all(20), + child: Text('No surveys yet', + style: + TextStyle(color: AppColors.textSecondary)), + ) + ] + : _lastSurveyed.asMap().entries.map((e) { + final isLast = e.key == _lastSurveyed.length - 1; + final client = e.value; + return InkWell( + onTap: () => widget.onNavigate(1), + borderRadius: isLast + ? const BorderRadius.only( + bottomLeft: Radius.circular(16), + bottomRight: Radius.circular(16)) + : null, + child: Container( + padding: const EdgeInsets.symmetric( + horizontal: 16, vertical: 14), + decoration: BoxDecoration( + border: isLast + ? null + : Border( + bottom: BorderSide( + color: AppColors.border + .withValues(alpha: 0.1))), + ), + child: Row( + children: [ + Container( + width: 40, + height: 40, + decoration: const BoxDecoration( + color: Color(0xFFEFF4FF), + shape: BoxShape.circle), + child: Icon(Icons.business, + size: 20, color: AppColors.primary), + ), + const SizedBox(width: 12), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row(children: [ + Flexible( + child: Text(client.name, + style: const TextStyle( + fontSize: 13, + fontWeight: FontWeight.w700, + color: AppColors.darkBlue)), + ), + if (client.dataConsent == + DataConsent.basicOnly) ...[ + const SizedBox(width: 6), + const ConsentBadge(small: true), + ], + ]), + Text( + '${client.city.isNotEmpty ? client.city : "—"} · Submitted ${client.lastUpdated}', + style: TextStyle( + fontSize: 11, + color: AppColors.textSecondary)), + ], + ), + ), + Icon(Icons.chevron_right, + size: 20, color: AppColors.muted), + ], + ), + ), + ); + }).toList(), + ), + ), + const SizedBox(height: 20), + _SurveyBanner(), + ], + ); + } + + // ── Form wrapper ────────────────────────────────────────────────────────── + + Widget _buildForm() { + return Container( + padding: const EdgeInsets.all(20), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(20), + border: Border.all(color: AppColors.border.withValues(alpha: 0.3)), + boxShadow: [ + BoxShadow(color: Colors.black.withValues(alpha: 0.04), blurRadius: 10) + ], + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // Header + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Material( + color: Colors.transparent, + borderRadius: BorderRadius.circular(8), + child: InkWell( + borderRadius: BorderRadius.circular(8), + onTap: () { + if (_onConsentStep) { + setState(() => _onConsentStep = false); + } else if (_step > 1) { + setState(() => _step--); + } else { + _transition(_SurveyState.idle); + } + }, + child: Padding( + padding: const EdgeInsets.symmetric( + horizontal: 8, vertical: 6), + child: Row(children: [ + Icon(Icons.arrow_back_ios, + size: 14, color: AppColors.textSecondary), + const SizedBox(width: 4), + Text('Back', + style: TextStyle( + fontSize: 13, + fontWeight: FontWeight.w600, + color: AppColors.textSecondary)), + ]), + ), + ), + ), + Text( + _onConsentStep ? 'DATA SHARING' : 'STEP $_step OF 3', + style: TextStyle( + fontSize: 11, + fontWeight: FontWeight.w700, + letterSpacing: 1.5, + color: _onConsentStep + ? const Color(0xFFE87C00) + : AppColors.primary), + ), + ], + ), + const SizedBox(height: 14), + + // Progress + ClipRRect( + borderRadius: BorderRadius.circular(4), + child: LinearProgressIndicator( + value: _onConsentStep ? 1 / 3 : _step / 3, + minHeight: 6, + backgroundColor: const Color(0xFFF8F9FF), + valueColor: AlwaysStoppedAnimation( + _onConsentStep + ? const Color(0xFFFFB800) + : AppColors.primary, + ), + ), + ), + const SizedBox(height: 20), + + // Content + AnimatedSwitcher( + duration: const Duration(milliseconds: 200), + child: KeyedSubtree( + key: ValueKey(_onConsentStep ? 'consent' : 'step$_step'), + child: _onConsentStep + ? _buildConsentStep() + : _step == 1 + ? _buildStep1() + : _step == 2 + ? _buildStep2() + : _buildStep3(), + ), + ), + + // Nav buttons (hidden on consent step — cards act as buttons) + if (!_onConsentStep) ...[ + const SizedBox(height: 20), + Divider(height: 1, color: AppColors.border.withValues(alpha: 0.15)), + const SizedBox(height: 16), + Row(children: [ + if (_step > 1) + Expanded( + child: OutlinedButton.icon( + onPressed: () => setState(() => _step--), + icon: const Icon(Icons.arrow_back_ios, size: 14), + label: const Text('Back'), + style: OutlinedButton.styleFrom( + foregroundColor: AppColors.textSecondary, + side: BorderSide(color: AppColors.border), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12)), + minimumSize: const Size.fromHeight(44), + ), + ), + ), + if (_step > 1) const SizedBox(width: 10), + Expanded( + child: _step < 3 + ? ElevatedButton.icon( + onPressed: () { + if (_step == 1) { + if (_nameCtrl.text.trim().isEmpty) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: const Text( + 'Please enter a Client Name first.'), + backgroundColor: AppColors.primary, + behavior: SnackBarBehavior.floating, + shape: RoundedRectangleBorder( + borderRadius: + BorderRadius.circular(10)), + ), + ); + return; + } + setState(() => _onConsentStep = true); + } else { + setState(() => _step++); + } + }, + icon: const Icon(Icons.arrow_forward_ios, + size: 14, color: AppColors.darkBlue), + label: const Text('Continue', + style: TextStyle( + color: AppColors.darkBlue, + fontWeight: FontWeight.w700)), + style: ElevatedButton.styleFrom( + backgroundColor: const Color(0xFFD3E4FE), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12)), + minimumSize: const Size.fromHeight(44), + elevation: 0, + ), + ) + : ElevatedButton.icon( + onPressed: () => _captureAndSubmit(basicOnly: false), + icon: const Icon(Icons.send, + size: 14, color: Colors.white), + label: const Text('Submit Survey', + style: TextStyle( + color: Colors.white, + fontWeight: FontWeight.w700)), + style: ElevatedButton.styleFrom( + backgroundColor: AppColors.primary, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12)), + minimumSize: const Size.fromHeight(44), + elevation: 1, + ), + ), + ), + ]), + ], + ], + ), + ); + } + + // ── Step 1: client identity + contact + routing ─────────────────────────── + + Widget _buildStep1() { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text('Basic Details', + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w700, + color: AppColors.darkBlue)), + const SizedBox(height: 4), + Text("Client identity and transit preferences.", + style: TextStyle(fontSize: 12, color: AppColors.textSecondary)), + const SizedBox(height: 18), + + // Company name + _fieldLabel('Client Name'), + const SizedBox(height: 6), + TextField( + controller: _nameCtrl, + textCapitalization: TextCapitalization.words, + decoration: const InputDecoration( + hintText: 'e.g. Murugan Transports', + prefixIcon: Icon(Icons.business, size: 18), + ), + ), + const SizedBox(height: 14), + + // Phone + _fieldLabel('Phone Number'), + const SizedBox(height: 6), + TextField( + controller: _phoneCtrl, + keyboardType: TextInputType.phone, + decoration: const InputDecoration( + hintText: '+91 98400-12345', + prefixIcon: Icon(Icons.phone_outlined, size: 18), + ), + ), + const SizedBox(height: 14), + + // Business Location — auto-detected from device GPS + _fieldLabel('Business Location'), + const SizedBox(height: 6), + _LocationDetectCard( + detecting: _detectingLocation || _capturingLocation, + city: _businessCity, + detectedAddress: _capturedLocation?.address ?? '', + onDetect: _detectLocation, + onPickManually: () => _openCityPicker( + title: 'Select Business City', + onPicked: (c) => setState(() => _businessCity = c), + ), + ), + const SizedBox(height: 14), + + // Neighbourhood + _fieldLabel('Neighbourhood'), + const SizedBox(height: 6), + TextField( + controller: _neighbourhoodCtrl, + textCapitalization: TextCapitalization.words, + decoration: const InputDecoration( + hintText: 'e.g. T. Nagar, Anna Nagar...', + prefixIcon: Icon(Icons.map_outlined, size: 18), + ), + ), + const SizedBox(height: 14), + + // Pincode — optional; auto-filled from GPS but editable. + _fieldLabel('PIN Code (optional)'), + const SizedBox(height: 6), + TextField( + controller: _pincodeCtrl, + keyboardType: TextInputType.number, + maxLength: 6, + inputFormatters: [FilteringTextInputFormatter.digitsOnly], + decoration: const InputDecoration( + counterText: '', + hintText: 'e.g. 641001', + prefixIcon: Icon(Icons.local_post_office_outlined, size: 18), + ), + ), + const SizedBox(height: 14), + + // Shipping route — origin is the GPS-detected business location, + // destination is picked flight-booking style. + _fieldLabel('Primary Shipping Route'), + const SizedBox(height: 6), + Container( + padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 12), + decoration: BoxDecoration( + color: const Color(0xFFF8F9FF), + borderRadius: BorderRadius.circular(12), + border: Border.all(color: AppColors.border.withValues(alpha: 0.4)), + ), + child: Row(children: [ + Expanded( + child: _RouteEndpoint( + icon: Icons.flight_takeoff, + label: 'FROM', + code: _businessCity?.code ?? '—', + name: _businessCity?.name ?? 'Business location', + ), + ), + const Padding( + padding: EdgeInsets.symmetric(horizontal: 6), + child: Icon(Icons.arrow_forward, + size: 18, color: AppColors.primary), + ), + Expanded( + child: GestureDetector( + onTap: () => _openMultiCityPicker( + title: 'Select Destination Cities', + initialSelected: _destCities, + onPicked: (cities) => setState(() => _destCities = cities), + ), + child: _RouteEndpoint( + icon: Icons.flight_land, + label: 'TO', + code: _destCities.isEmpty + ? 'Tap' + : _destCities.length == 1 + ? _destCities.first.code + : '${_destCities.length} cities', + name: _destCities.isEmpty + ? 'Choose city' + : _destCities.map((c) => c.name).join(', '), + highlight: true, + ), + ), + ), + ]), + ), + const SizedBox(height: 14), + + // Frequency + _fieldLabel('Shipment Frequency'), + const SizedBox(height: 8), + Wrap( + spacing: 6, + runSpacing: 6, + children: _frequencyOptions.map((f) { + final selected = _frequency == f; + return GestureDetector( + onTap: () => setState(() => _frequency = f), + child: AnimatedContainer( + duration: const Duration(milliseconds: 150), + padding: const EdgeInsets.symmetric( + horizontal: 14, vertical: 8), + decoration: BoxDecoration( + color: selected ? AppColors.primary : Colors.white, + borderRadius: BorderRadius.circular(20), + border: Border.all( + color: selected + ? AppColors.primary + : AppColors.border.withValues(alpha: 0.6), + ), + ), + child: Text(f, + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w700, + color: selected + ? Colors.white + : AppColors.textSecondary, + )), + ), + ); + }).toList(), + ), + const SizedBox(height: 14), + + // Business type + _fieldLabel('Business Type'), + const SizedBox(height: 8), + GridView.count( + crossAxisCount: 2, + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + crossAxisSpacing: 8, + mainAxisSpacing: 8, + childAspectRatio: 3.5, + children: BusinessType.values.map((t) { + final selected = _businessType == t; + return GestureDetector( + onTap: () => setState(() => _businessType = t), + child: AnimatedContainer( + duration: const Duration(milliseconds: 150), + decoration: BoxDecoration( + color: selected + ? const Color(0xFFD3E4FE) + : Colors.white, + borderRadius: BorderRadius.circular(10), + border: Border.all( + color: selected + ? const Color(0xFFA6C8FF) + : AppColors.border.withValues(alpha: 0.5), + ), + ), + child: Center( + child: Text(t.label, + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w700, + color: selected + ? AppColors.darkBlue + : AppColors.textSecondary, + )), + ), + ), + ); + }).toList(), + ), + + // Logistics Segment + const SizedBox(height: 14), + _fieldLabel('Logistics Segment'), + const SizedBox(height: 8), + Row( + children: ['First Mile', 'Middle Mile', 'Last Mile'].map((segment) { + final selected = _selectedSegments.contains(segment); + IconData iconData; + switch (segment) { + case 'First Mile': + iconData = Icons.warehouse_outlined; + break; + case 'Middle Mile': + iconData = Icons.local_shipping_outlined; + break; + default: + iconData = Icons.markunread_mailbox_outlined; + break; + } + return Expanded( + child: Padding( + padding: EdgeInsets.only( + left: segment == 'First Mile' ? 0 : 4, + right: segment == 'Last Mile' ? 0 : 4, + ), + child: GestureDetector( + onTap: () { + setState(() { + if (selected) { + _selectedSegments.remove(segment); + } else { + _selectedSegments.add(segment); + } + }); + }, + child: AnimatedContainer( + duration: const Duration(milliseconds: 150), + padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 8), + decoration: BoxDecoration( + color: selected + ? const Color(0xFFEFF4FF) + : Colors.white, + borderRadius: BorderRadius.circular(12), + border: Border.all( + color: selected + ? AppColors.primary + : AppColors.border.withValues(alpha: 0.5), + width: selected ? 1.5 : 1.0, + ), + boxShadow: selected + ? [ + BoxShadow( + color: AppColors.primary.withValues(alpha: 0.08), + blurRadius: 8, + offset: const Offset(0, 4), + ) + ] + : null, + ), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Icon( + iconData, + size: 20, + color: selected ? AppColors.primary : AppColors.textSecondary, + ), + const SizedBox(height: 6), + Text( + segment, + style: TextStyle( + fontSize: 11, + fontWeight: FontWeight.w700, + color: selected + ? AppColors.darkBlue + : AppColors.textSecondary, + ), + textAlign: TextAlign.center, + ), + const SizedBox(height: 8), + // Custom premium checkbox + Container( + width: 16, + height: 16, + decoration: BoxDecoration( + color: selected ? AppColors.primary : Colors.transparent, + borderRadius: BorderRadius.circular(4), + border: Border.all( + color: selected ? AppColors.primary : AppColors.border, + width: 1.5, + ), + ), + child: Center( + child: AnimatedScale( + duration: const Duration(milliseconds: 150), + scale: selected ? 1.0 : 0.0, + child: const Icon( + Icons.check, + size: 11, + color: Colors.white, + ), + ), + ), + ), + ], + ), + ), + ), + ), + ); + }).toList(), + ), + ], + ); + } + + // ── Step 2: logistics metrics (volume with peer avg hint) ──────────────── + + Widget _buildStep2() { + final avg = _avgVolumeForType; + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text('Volume & Metrics', + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w700, + color: AppColors.darkBlue)), + const SizedBox(height: 4), + Text('Estimate their weekly shipments.', + style: TextStyle(fontSize: 12, color: AppColors.textSecondary)), + const SizedBox(height: 16), + + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + _fieldLabel('Weekly Parcel Volume'), + Text('${_parcelVolume.round()} /wk', + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w700, + fontFamily: 'monospace', + color: AppColors.primary)), + ], + ), + const SizedBox(height: 8), + SliderTheme( + data: SliderTheme.of(context).copyWith( + activeTrackColor: AppColors.primary, + inactiveTrackColor: const Color(0xFFF0F4FF), + thumbColor: AppColors.primary, + overlayColor: AppColors.primary.withValues(alpha: 0.1), + thumbShape: const RoundSliderThumbShape(enabledThumbRadius: 10), + ), + child: Slider( + value: _parcelVolume, + min: 50, + max: 1200, + divisions: 115, + onChanged: (v) => setState(() => _parcelVolume = v), + ), + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text('50 (Low)', + style: TextStyle( + fontSize: 10, color: AppColors.textSecondary)), + Text('1,200 (Extreme)', + style: TextStyle( + fontSize: 10, color: AppColors.textSecondary)), + ], + ), + + // peer average hint (computed from local client list) + if (avg > 0) ...[ + const SizedBox(height: 10), + GestureDetector( + onTap: () => + setState(() => _parcelVolume = avg.toDouble()), + child: Container( + padding: const EdgeInsets.symmetric( + horizontal: 12, vertical: 8), + decoration: BoxDecoration( + color: const Color(0xFFEFF4FF), + borderRadius: BorderRadius.circular(10), + border: Border.all( + color: AppColors.primary.withValues(alpha: 0.25)), + ), + child: Row(children: [ + Icon(Icons.insights, + size: 14, color: AppColors.primary), + const SizedBox(width: 8), + Expanded( + child: Text( + 'Avg for ${_businessType.label} clients in your database: $avg /wk — tap to apply', + style: TextStyle( + fontSize: 11, color: AppColors.primary), + ), + ), + ]), + ), + ), + ], + + const SizedBox(height: 20), + _fieldLabel('Active Contracts'), + const SizedBox(height: 6), + TextField( + controller: _contractsCtrl, + keyboardType: TextInputType.number, + decoration: const InputDecoration( + prefixIcon: Icon(Icons.description_outlined, size: 18), + ), + ), + ], + ); + } + + // ── Step 3: provider & notes ────────────────────────────────────────────── + + Widget _buildStep3() { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text('Provider & Notes', + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w700, + color: AppColors.darkBlue)), + const SizedBox(height: 4), + Text('Current logistics setup and extra details.', + style: TextStyle(fontSize: 12, color: AppColors.textSecondary)), + const SizedBox(height: 16), + _fieldLabel('Current Provider'), + const SizedBox(height: 6), + InkWell( + onTap: _showProviderSelectorSheet, + child: Container( + padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 12), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(12), + border: Border.all(color: AppColors.border.withValues(alpha: 0.5)), + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Expanded( + child: Text( + _provider, + style: const TextStyle( + fontSize: 13, + color: AppColors.darkBlue, + fontWeight: FontWeight.w600, + ), + overflow: TextOverflow.ellipsis, + ), + ), + Icon(Icons.arrow_drop_down, color: AppColors.textSecondary), + ], + ), + ), + ), + if (_provider == 'Others') ...[ + const SizedBox(height: 12), + _fieldLabel('Specify Other Provider'), + const SizedBox(height: 6), + TextField( + controller: _customProviderCtrl, + textCapitalization: TextCapitalization.words, + decoration: const InputDecoration( + hintText: 'e.g. My Local Logistics Operator', + prefixIcon: Icon(Icons.edit_note, size: 18), + ), + ), + ], + const SizedBox(height: 16), + _fieldLabel('Additional Notes'), + const SizedBox(height: 6), + TextField( + controller: _notesCtrl, + maxLines: 4, + decoration: const InputDecoration( + hintText: 'e.g. Planning to expand to Tamil Nadu soon...', + ), + ), + ], + ); + } + + // ── Consent step ────────────────────────────────────────────────────────── + + Widget _buildConsentStep() { + final clientName = _nameCtrl.text.trim(); + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text('Data Sharing Preference', + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w700, + color: AppColors.darkBlue)), + const SizedBox(height: 4), + Text( + 'Is ${clientName.isEmpty ? "the client" : clientName} comfortable sharing full logistics details?', + style: TextStyle(fontSize: 12, color: AppColors.textSecondary), + ), + const SizedBox(height: 20), + + // Basic only + GestureDetector( + onTap: () => _captureAndSubmit(basicOnly: true), + child: Container( + padding: const EdgeInsets.all(18), + decoration: BoxDecoration( + color: const Color(0xFFFFF8ED), + borderRadius: BorderRadius.circular(16), + border: Border.all( + color: const Color(0xFFFFB800).withValues(alpha: 0.5)), + ), + child: Row(children: [ + Container( + width: 44, + height: 44, + decoration: BoxDecoration( + color: const Color(0xFFFFEDC2), + borderRadius: BorderRadius.circular(12)), + child: const Icon(Icons.lock_outline, + size: 22, color: Color(0xFFE87C00)), + ), + const SizedBox(width: 14), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text('Basic Info Only', + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w700, + color: AppColors.darkBlue)), + const SizedBox(height: 2), + Text( + 'Save identity & routing only. Commercial details can be added later.', + style: TextStyle( + fontSize: 11, color: AppColors.textSecondary), + ), + ], + ), + ), + Icon(Icons.chevron_right, size: 18, color: AppColors.muted), + ]), + ), + ), + const SizedBox(height: 12), + + // Full details + GestureDetector( + onTap: () => setState(() { + _onConsentStep = false; + _step = 2; + }), + child: Container( + padding: const EdgeInsets.all(18), + decoration: BoxDecoration( + color: const Color(0xFFEFF4FF), + borderRadius: BorderRadius.circular(16), + border: Border.all( + color: AppColors.primary.withValues(alpha: 0.35)), + ), + child: Row(children: [ + Container( + width: 44, + height: 44, + decoration: BoxDecoration( + color: const Color(0xFFD3E4FE), + borderRadius: BorderRadius.circular(12)), + child: Icon(Icons.lock_open_outlined, + size: 22, color: AppColors.primary), + ), + const SizedBox(width: 14), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text('Share Full Details', + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w700, + color: AppColors.darkBlue)), + const SizedBox(height: 2), + Text('Include volume, contracts, provider & notes.', + style: TextStyle( + fontSize: 11, + color: AppColors.textSecondary)), + ], + ), + ), + Icon(Icons.chevron_right, + size: 18, color: AppColors.primary), + ]), + ), + ), + const SizedBox(height: 16), + Container( + padding: + const EdgeInsets.symmetric(horizontal: 14, vertical: 10), + decoration: BoxDecoration( + color: const Color(0xFFF8F9FF), + borderRadius: BorderRadius.circular(10), + border: Border.all(color: AppColors.border.withValues(alpha: 0.2)), + ), + child: Row(children: [ + Icon(Icons.info_outline, + size: 14, color: AppColors.textSecondary), + const SizedBox(width: 8), + Expanded( + child: Text( + 'Basic-only clients can be upgraded to full profile at any time from the Client Database.', + style: TextStyle( + fontSize: 10, color: AppColors.textSecondary), + ), + ), + ]), + ), + ], + ); + } + + // ── Success ─────────────────────────────────────────────────────────────── + + Widget _buildSuccess() { + final isBasic = _chosenConsent == DataConsent.basicOnly; + return Container( + width: double.infinity, + padding: const EdgeInsets.all(32), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(20), + border: Border.all(color: AppColors.border.withValues(alpha: 0.2)), + ), + child: Column( + children: [ + Container( + width: 64, + height: 64, + decoration: BoxDecoration( + color: isBasic + ? const Color(0xFFFFF8ED) + : const Color(0xFFECFDF5), + shape: BoxShape.circle, + ), + child: Icon( + isBasic ? Icons.lock_outline : Icons.check_circle, + size: 40, + color: isBasic + ? const Color(0xFFE87C00) + : const Color(0xFF10B981), + ), + ), + const SizedBox(height: 20), + Text( + isBasic ? 'Basic Info Saved!' : 'Survey Submitted!', + style: const TextStyle( + fontSize: 20, + fontWeight: FontWeight.w800, + color: AppColors.darkBlue), + ), + const SizedBox(height: 8), + Text( + isBasic + ? 'Client recorded with identity & routing. Collect commercial details later from the Client Database.' + : 'Full profile saved and metrics recalculated.', + textAlign: TextAlign.center, + style: TextStyle(fontSize: 13, color: AppColors.textSecondary), + ), + const SizedBox(height: 20), + Container( + width: double.infinity, + padding: const EdgeInsets.all(16), + decoration: BoxDecoration( + color: const Color(0xFFF8F9FF), + borderRadius: BorderRadius.circular(14), + border: + Border.all(color: AppColors.border.withValues(alpha: 0.1)), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + const Text('ENTRY SUMMARY', + style: TextStyle( + fontSize: 10, + fontWeight: FontWeight.w700, + color: AppColors.darkBlue)), + Container( + padding: const EdgeInsets.symmetric( + horizontal: 8, vertical: 2), + decoration: BoxDecoration( + color: isBasic + ? const Color(0xFFFFEDC2) + : const Color(0xFFD8F9EE), + borderRadius: BorderRadius.circular(20), + ), + child: Text( + isBasic ? 'BASIC ONLY' : 'COMPLETE', + style: TextStyle( + fontSize: 9, + fontWeight: FontWeight.w700, + color: isBasic + ? const Color(0xFFE87C00) + : AppColors.green), + ), + ), + ], + ), + Divider( + height: 14, + color: AppColors.border.withValues(alpha: 0.15)), + _summaryRow('Client Name', _nameCtrl.text), + if (_phoneCtrl.text.isNotEmpty) + _summaryRow('Phone', _phoneCtrl.text), + if (_pincodeCtrl.text.isNotEmpty) + _summaryRow('PIN Code', _pincodeCtrl.text), + _summaryRow( + 'Location', + [ + if (_businessCity != null) _businessCity!.name, + if (_businessCity != null) _businessCity!.state, + if (_neighbourhoodCtrl.text.isNotEmpty) + _neighbourhoodCtrl.text, + ].join(', ').ifEmpty('—')), + if (_businessCity != null || _destCities.isNotEmpty) + _summaryRow('Route', + '${_businessCity?.code ?? "—"} → ${_destCities.isEmpty ? "—" : _destCities.map((c) => c.code).join(", ")}'), + if (_frequency.isNotEmpty) + _summaryRow('Frequency', _frequency), + if (_selectedSegments.isNotEmpty) + _summaryRow('Segment', _selectedSegments.join(', ')), + if (!isBasic) ...[ + _summaryRow( + 'Volume', '${_parcelVolume.round()} /wk'), + _summaryRow('Provider', _provider), + ], + ], + ), + ), + const SizedBox(height: 20), + SizedBox( + width: double.infinity, + height: 44, + child: ElevatedButton( + onPressed: () { widget.onNavigate(0); _reset(); }, + style: ElevatedButton.styleFrom( + backgroundColor: AppColors.primary, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12)), + ), + child: const Text('Go to Dashboard', + style: TextStyle( + color: Colors.white, + fontWeight: FontWeight.w700)), + ), + ), + const SizedBox(height: 10), + SizedBox( + width: double.infinity, + height: 44, + child: OutlinedButton( + onPressed: _reset, + style: OutlinedButton.styleFrom( + side: BorderSide(color: AppColors.border), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12)), + ), + child: Text('Log Another Survey', + style: TextStyle( + color: AppColors.textSecondary, + fontWeight: FontWeight.w600)), + ), + ), + ], + ), + ); + } + + Widget _fieldLabel(String text) => Text(text, + style: const TextStyle( + fontSize: 12, + fontWeight: FontWeight.w700, + color: AppColors.darkBlue)); + + /// Opens the searchable city picker bottom sheet. + Future _openCityPicker({ + required String title, + required void Function(IndiaCity) onPicked, + }) async { + final picked = await showModalBottomSheet( + context: context, + isScrollControlled: true, + backgroundColor: Colors.transparent, + builder: (_) => _CityPickerSheet(title: title), + ); + if (picked != null) onPicked(picked); + } + + // ── Searchable multi-city picker bottom sheet ──────────────────────────────── + Future _openMultiCityPicker({ + required String title, + required List initialSelected, + required void Function(List) onPicked, + }) async { + final picked = await showModalBottomSheet>( + context: context, + isScrollControlled: true, + backgroundColor: Colors.transparent, + builder: (_) => _MultiCityPickerSheet( + title: title, + initialSelected: initialSelected, + ), + ); + if (picked != null) { + onPicked(picked); + } + } + + Future _showProviderSelectorSheet() async { + final picked = await showModalBottomSheet( + context: context, + isScrollControlled: true, + backgroundColor: Colors.transparent, + builder: (_) => ProviderPickerSheet( + initialProvider: _provider, + ), + ); + if (picked != null) { + setState(() { + _provider = picked; + }); + } + } +} + +// ── GPS business-location detect card ──────────────────────────────────────── + +class _LocationDetectCard extends StatelessWidget { + final bool detecting; + final IndiaCity? city; + final String detectedAddress; + final VoidCallback onDetect; + final VoidCallback onPickManually; + + const _LocationDetectCard({ + required this.detecting, + required this.city, + required this.detectedAddress, + required this.onDetect, + required this.onPickManually, + }); + + @override + Widget build(BuildContext context) { + final hasCity = city != null; + return Container( + padding: const EdgeInsets.all(14), + decoration: BoxDecoration( + color: hasCity ? const Color(0xFFEFF4FF) : const Color(0xFFF8F9FF), + borderRadius: BorderRadius.circular(14), + border: Border.all( + color: hasCity + ? AppColors.primary.withValues(alpha: 0.4) + : AppColors.border.withValues(alpha: 0.5), + ), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Container( + width: 42, + height: 42, + decoration: BoxDecoration( + color: hasCity + ? AppColors.primary + : AppColors.primary.withValues(alpha: 0.12), + borderRadius: BorderRadius.circular(12), + ), + child: Icon( + hasCity ? Icons.location_on : Icons.my_location, + size: 20, + color: hasCity ? Colors.white : AppColors.primary, + ), + ), + const SizedBox(width: 12), + Expanded( + child: hasCity + ? Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row(children: [ + Flexible( + child: Text(city!.name, + style: const TextStyle( + fontSize: 15, + fontWeight: FontWeight.w800, + color: AppColors.darkBlue), + overflow: TextOverflow.ellipsis), + ), + const SizedBox(width: 6), + Container( + padding: const EdgeInsets.symmetric( + horizontal: 6, vertical: 2), + decoration: BoxDecoration( + color: AppColors.primary, + borderRadius: BorderRadius.circular(4), + ), + child: Text(city!.code, + style: const TextStyle( + fontSize: 10, + fontWeight: FontWeight.w800, + color: Colors.white)), + ), + ]), + if (city!.state.isNotEmpty) + Text(city!.state, + style: TextStyle( + fontSize: 11, + color: AppColors.textSecondary)), + ], + ) + : Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text('Detect from GPS', + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w700, + color: AppColors.darkBlue)), + Text('Auto-fill the client\'s business city', + style: TextStyle( + fontSize: 11, + color: AppColors.textSecondary)), + ], + ), + ), + if (detecting) + const SizedBox( + width: 22, + height: 22, + child: CircularProgressIndicator(strokeWidth: 2.5), + ) + else + IconButton( + onPressed: onDetect, + icon: Icon(Icons.gps_fixed, color: AppColors.primary), + tooltip: 'Detect via GPS', + ), + ], + ), + if (hasCity && detectedAddress.isNotEmpty) ...[ + const SizedBox(height: 8), + Text(detectedAddress, + maxLines: 2, + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontSize: 10.5, color: AppColors.textSecondary)), + ], + const SizedBox(height: 10), + Row(children: [ + if (!detecting) + Expanded( + child: OutlinedButton.icon( + onPressed: onDetect, + icon: const Icon(Icons.my_location, size: 14), + label: Text(hasCity ? 'Re-detect' : 'Use GPS Location', + style: const TextStyle( + fontSize: 12, fontWeight: FontWeight.w700)), + style: OutlinedButton.styleFrom( + foregroundColor: AppColors.primary, + side: BorderSide(color: AppColors.primary.withValues(alpha: 0.5)), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10)), + minimumSize: const Size.fromHeight(38), + ), + ), + ), + if (!detecting) const SizedBox(width: 8), + Expanded( + child: TextButton.icon( + onPressed: onPickManually, + icon: const Icon(Icons.search, size: 14), + label: const Text('Choose City', + style: TextStyle( + fontSize: 12, fontWeight: FontWeight.w700)), + style: TextButton.styleFrom( + foregroundColor: AppColors.textSecondary, + backgroundColor: Colors.white, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10), + side: BorderSide(color: AppColors.border.withValues(alpha: 0.5)), + ), + minimumSize: const Size.fromHeight(38), + ), + ), + ), + ]), + ], + ), + ); + } +} + +// ── Flight-style route endpoint ─────────────────────────────────────────────── + +class _RouteEndpoint extends StatelessWidget { + final IconData icon; + final String label; + final String code; + final String name; + final bool highlight; + + const _RouteEndpoint({ + required this.icon, + required this.label, + required this.code, + required this.name, + this.highlight = false, + }); + + @override + Widget build(BuildContext context) { + final color = highlight ? AppColors.primary : AppColors.darkBlue; + return Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Row(mainAxisSize: MainAxisSize.min, children: [ + Icon(icon, size: 11, color: AppColors.textSecondary), + const SizedBox(width: 3), + Text(label, + style: TextStyle( + fontSize: 9, + fontWeight: FontWeight.w700, + letterSpacing: 0.5, + color: AppColors.textSecondary)), + ]), + const SizedBox(height: 3), + Text(code, + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.w900, + color: color), + maxLines: 1, + overflow: TextOverflow.ellipsis), + Text(name, + style: TextStyle( + fontSize: 10, + color: AppColors.textSecondary), + maxLines: 1, + overflow: TextOverflow.ellipsis), + ], + ); + } +} + +// ── Searchable city picker bottom sheet ─────────────────────────────────────── + +class _CityPickerSheet extends StatefulWidget { + final String title; + const _CityPickerSheet({required this.title}); + + @override + State<_CityPickerSheet> createState() => _CityPickerSheetState(); +} + +class _CityPickerSheetState extends State<_CityPickerSheet> { + final _searchCtrl = TextEditingController(); + String _query = ''; + + @override + void dispose() { + _searchCtrl.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + final results = + indiaCities.where((c) => c.matches(_query)).toList(); + + return DraggableScrollableSheet( + initialChildSize: 0.85, + minChildSize: 0.5, + maxChildSize: 0.95, + expand: false, + builder: (_, scrollCtrl) => Container( + decoration: const BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.vertical(top: Radius.circular(24)), + ), + child: Column( + children: [ + const SizedBox(height: 10), + Container( + width: 40, + height: 4, + decoration: BoxDecoration( + color: AppColors.muted.withValues(alpha: 0.3), + borderRadius: BorderRadius.circular(2), + ), + ), + Padding( + padding: const EdgeInsets.fromLTRB(20, 14, 20, 8), + child: Row(children: [ + Expanded( + child: Text(widget.title, + style: const TextStyle( + fontSize: 16, + fontWeight: FontWeight.w800, + color: AppColors.darkBlue)), + ), + GestureDetector( + onTap: () => Navigator.pop(context), + child: Container( + width: 32, + height: 32, + decoration: const BoxDecoration( + color: Color(0xFFF8F9FF), shape: BoxShape.circle), + child: Icon(Icons.close, + size: 16, color: AppColors.textSecondary), + ), + ), + ]), + ), + // Search bar + Padding( + padding: const EdgeInsets.symmetric(horizontal: 20), + child: TextField( + controller: _searchCtrl, + autofocus: true, + onChanged: (v) => setState(() => _query = v), + decoration: InputDecoration( + hintText: 'Search city, code or state…', + hintStyle: + TextStyle(color: AppColors.muted, fontSize: 13), + prefixIcon: + Icon(Icons.search, color: AppColors.muted, size: 20), + suffixIcon: _query.isEmpty + ? null + : IconButton( + icon: Icon(Icons.clear, + size: 18, color: AppColors.muted), + onPressed: () { + _searchCtrl.clear(); + setState(() => _query = ''); + }, + ), + ), + ), + ), + const SizedBox(height: 8), + Expanded( + child: results.isEmpty + ? Center( + child: Text('No cities match "$_query"', + style: + TextStyle(color: AppColors.textSecondary)), + ) + : ListView.builder( + controller: scrollCtrl, + padding: const EdgeInsets.symmetric(horizontal: 12), + itemCount: results.length, + itemBuilder: (_, i) { + final c = results[i]; + return ListTile( + onTap: () => Navigator.pop(context, c), + leading: Container( + width: 46, + height: 34, + decoration: BoxDecoration( + color: const Color(0xFFEFF4FF), + borderRadius: BorderRadius.circular(8), + ), + alignment: Alignment.center, + child: Text(c.code, + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w800, + color: AppColors.primary)), + ), + title: Text(c.name, + style: const TextStyle( + fontSize: 14, + fontWeight: FontWeight.w700, + color: AppColors.darkBlue)), + subtitle: Text(c.state, + style: TextStyle( + fontSize: 11, + color: AppColors.textSecondary)), + trailing: Icon(Icons.chevron_right, + size: 18, color: AppColors.muted), + ); + }, + ), + ), + ], + ), + ), + ); + } +} + +// ── Survey banner (enhanced) ────────────────────────────────────────────────── + +class _SurveyBanner extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Container( + height: 150, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(24), + gradient: const LinearGradient( + begin: Alignment.topLeft, + end: Alignment.bottomRight, + colors: [ + Color(0xFF0B1C30), // Dark Blue + Color(0xFF450A0A), // Dark Red/Burgundy + ], + ), + boxShadow: [ + BoxShadow( + color: const Color(0xFF0B1C30).withValues(alpha: 0.15), + blurRadius: 16, + offset: const Offset(0, 8), + ), + ], + ), + child: ClipRRect( + borderRadius: BorderRadius.circular(24), + child: Stack( + children: [ + // Glow orb 1 (Red Accent) + Positioned( + right: -30, + top: -30, + child: Container( + width: 140, + height: 140, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: AppColors.primary.withValues(alpha: 0.25), + ), + ), + ), + // Glow orb 2 (Blue Accent) + Positioned( + left: 80, + bottom: -40, + child: Container( + width: 100, + height: 100, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: AppColors.blueAccent.withValues(alpha: 0.15), + ), + ), + ), + // Dot Grid overlay + Positioned.fill( + child: ClipRRect( + borderRadius: BorderRadius.circular(24), + child: CustomPaint(painter: _DotGridPainter()), + ), + ), + // Main content + Padding( + padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 20), + child: Row( + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + // Tag/Badge + Container( + padding: const EdgeInsets.symmetric( + horizontal: 8, + vertical: 3, + ), + decoration: BoxDecoration( + color: Colors.white.withValues(alpha: 0.12), + borderRadius: BorderRadius.circular(6), + border: Border.all( + color: Colors.white.withValues(alpha: 0.15), + ), + ), + child: const Text( + 'SMART CRM CORE', + style: TextStyle( + fontSize: 8, + fontWeight: FontWeight.w800, + color: Color(0xFFFFF0F1), + letterSpacing: 1.0, + ), + ), + ), + const SizedBox(height: 10), + const Text( + 'Streamlined Surveys', + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w800, + color: Colors.white, + letterSpacing: 0.4, + ), + ), + const SizedBox(height: 4), + Text( + 'Capturing field data has never been easier. Syncs automatically.', + style: TextStyle( + fontSize: 11, + color: Colors.white.withValues(alpha: 0.85), + height: 1.3, + ), + ), + ], + ), + ), + const SizedBox(width: 16), + // Glassmorphic circular icon container + Container( + width: 52, + height: 52, + decoration: BoxDecoration( + color: Colors.white.withValues(alpha: 0.1), + shape: BoxShape.circle, + border: Border.all( + color: Colors.white.withValues(alpha: 0.2), + width: 1.5, + ), + ), + child: const Center( + child: Icon( + Icons.rocket_launch_rounded, + size: 24, + color: Colors.white, + ), + ), + ), + ], + ), + ), + ], + ), + ), + ); + } +} + +// ── Consent badge (reused by clients_screen) ────────────────────────────────── + +class ConsentBadge extends StatelessWidget { + final bool small; + const ConsentBadge({super.key, this.small = false}); + + @override + Widget build(BuildContext context) { + return Container( + padding: EdgeInsets.symmetric( + horizontal: small ? 5 : 7, vertical: small ? 2 : 3), + decoration: BoxDecoration( + color: const Color(0xFFFFEDC2), + borderRadius: BorderRadius.circular(4), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Icon(Icons.lock_outline, + size: small ? 8 : 10, color: const Color(0xFFE87C00)), + SizedBox(width: small ? 2 : 3), + Text('BASIC', + style: TextStyle( + fontSize: small ? 8 : 9, + fontWeight: FontWeight.w800, + color: const Color(0xFFE87C00))), + ], + ), + ); + } +} + +// ── Helpers ─────────────────────────────────────────────────────────────────── + +Widget _summaryRow(String label, String value) { + return Padding( + padding: const EdgeInsets.only(bottom: 6), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text(label, + style: TextStyle( + fontSize: 11, color: AppColors.textSecondary)), + Flexible( + child: Text(value, + textAlign: TextAlign.end, + style: const TextStyle( + fontSize: 11, + fontWeight: FontWeight.w600, + color: AppColors.darkBlue)), + ), + ], + ), + ); +} + +extension _StringX on String { + String ifEmpty(String fallback) => isEmpty ? fallback : this; +} + +// ── Dot grid painter ────────────────────────────────────────────────────────── + +class _DotGridPainter extends CustomPainter { + @override + void paint(Canvas canvas, Size size) { + final paint = Paint() + ..color = Colors.white.withValues(alpha: 0.06) + ..strokeWidth = 1; + const spacing = 28.0; + for (double x = 0; x < size.width; x += spacing) { + for (double y = 0; y < size.height; y += spacing) { + canvas.drawCircle(Offset(x, y), 1.5, paint); + } + } + } + + @override + bool shouldRepaint(_DotGridPainter oldDelegate) => false; +} + + + +class _MultiCityPickerSheet extends StatefulWidget { + final String title; + final List initialSelected; + + const _MultiCityPickerSheet({ + required this.title, + required this.initialSelected, + }); + + @override + State<_MultiCityPickerSheet> createState() => _MultiCityPickerSheetState(); +} + +class _MultiCityPickerSheetState extends State<_MultiCityPickerSheet> { + final _searchCtrl = TextEditingController(); + String _query = ''; + late List _selectedCities; + + @override + void initState() { + super.initState(); + _selectedCities = List.from(widget.initialSelected); + } + + @override + void dispose() { + _searchCtrl.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + final results = indiaCities.where((c) => c.matches(_query)).toList(); + + return DraggableScrollableSheet( + initialChildSize: 0.85, + minChildSize: 0.5, + maxChildSize: 0.95, + expand: false, + builder: (_, scrollCtrl) => Container( + decoration: const BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.vertical(top: Radius.circular(24)), + ), + child: Column( + children: [ + const SizedBox(height: 10), + Container( + width: 40, + height: 4, + decoration: BoxDecoration( + color: AppColors.muted.withValues(alpha: 0.3), + borderRadius: BorderRadius.circular(2), + ), + ), + Padding( + padding: const EdgeInsets.fromLTRB(20, 14, 20, 8), + child: Row( + children: [ + Expanded( + child: Text(widget.title, + style: const TextStyle( + fontSize: 16, + fontWeight: FontWeight.w800, + color: AppColors.darkBlue)), + ), + if (_selectedCities.isNotEmpty) + TextButton( + onPressed: () => setState(() => _selectedCities.clear()), + style: TextButton.styleFrom( + foregroundColor: AppColors.primary, + padding: const EdgeInsets.symmetric(horizontal: 8), + ), + child: const Text('Clear All', + style: TextStyle( + fontSize: 13, fontWeight: FontWeight.bold)), + ), + const SizedBox(width: 8), + GestureDetector( + onTap: () => Navigator.pop(context), + child: Container( + width: 32, + height: 32, + decoration: const BoxDecoration( + color: Color(0xFFF8F9FF), shape: BoxShape.circle), + child: Icon(Icons.close, + size: 16, color: AppColors.textSecondary), + ), + ), + ], + ), + ), + // Search bar + Padding( + padding: const EdgeInsets.symmetric(horizontal: 20), + child: TextField( + controller: _searchCtrl, + autofocus: true, + onChanged: (v) => setState(() => _query = v), + decoration: InputDecoration( + hintText: 'Search city, code or state…', + hintStyle: + TextStyle(color: AppColors.muted, fontSize: 13), + prefixIcon: + Icon(Icons.search, color: AppColors.muted, size: 20), + suffixIcon: _query.isEmpty + ? null + : IconButton( + icon: Icon(Icons.clear, + size: 18, color: AppColors.muted), + onPressed: () { + _searchCtrl.clear(); + setState(() => _query = ''); + }, + ), + ), + ), + ), + const SizedBox(height: 8), + Expanded( + child: results.isEmpty + ? Center( + child: Text('No cities match "$_query"', + style: + TextStyle(color: AppColors.textSecondary)), + ) + : ListView.builder( + controller: scrollCtrl, + padding: const EdgeInsets.symmetric(horizontal: 12), + itemCount: results.length, + itemBuilder: (_, i) { + final c = results[i]; + final isSelected = _selectedCities.any((x) => x.name == c.name); + return CheckboxListTile( + value: isSelected, + onChanged: (val) { + setState(() { + if (val == true) { + if (!_selectedCities.any((x) => x.name == c.name)) { + _selectedCities.add(c); + } + } else { + _selectedCities.removeWhere((x) => x.name == c.name); + } + }); + }, + activeColor: AppColors.primary, + checkboxShape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(4), + ), + title: Text(c.name, + style: const TextStyle( + fontSize: 14, + fontWeight: FontWeight.w700, + color: AppColors.darkBlue)), + subtitle: Text(c.state, + style: TextStyle( + fontSize: 11, + color: AppColors.textSecondary)), + secondary: Container( + width: 46, + height: 34, + decoration: BoxDecoration( + color: const Color(0xFFEFF4FF), + borderRadius: BorderRadius.circular(8), + ), + alignment: Alignment.center, + child: Text(c.code, + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w800, + color: AppColors.primary)), + ), + ); + }, + ), + ), + SafeArea( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 12), + child: SizedBox( + width: double.infinity, + height: 48, + child: ElevatedButton( + onPressed: () => Navigator.pop(context, _selectedCities), + style: ElevatedButton.styleFrom( + backgroundColor: AppColors.primary, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12)), + elevation: 1, + ), + child: Text( + _selectedCities.isEmpty + ? 'Apply' + : 'Apply (${_selectedCities.length} Selected)', + style: const TextStyle( + color: Colors.white, + fontSize: 15, + fontWeight: FontWeight.w700), + ), + ), + ), + ), + ), + ], + ), + ), + ); + } +} + +class ProviderPickerSheet extends StatefulWidget { + final String initialProvider; + + const ProviderPickerSheet({ + super.key, + required this.initialProvider, + }); + + @override + State createState() => _ProviderPickerSheetState(); +} + +class _ProviderPickerSheetState extends State { + final _searchCtrl = TextEditingController(); + String _query = ''; + + @override + void dispose() { + _searchCtrl.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + final lowercaseQuery = _query.toLowerCase(); + + // Build grouped results based on the search query + final Map> filteredGroups = {}; + + categorisedProviders.forEach((category, providers) { + final matches = providers.where((p) => p.toLowerCase().contains(lowercaseQuery)).toList(); + if (matches.isNotEmpty) { + filteredGroups[category] = matches; + } + }); + + final showOthers = _query.isEmpty || 'others'.contains(lowercaseQuery); + + return DraggableScrollableSheet( + initialChildSize: 0.85, + minChildSize: 0.5, + maxChildSize: 0.95, + expand: false, + builder: (_, scrollCtrl) => Container( + decoration: const BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.vertical(top: Radius.circular(24)), + ), + child: Column( + children: [ + const SizedBox(height: 10), + Container( + width: 40, + height: 4, + decoration: BoxDecoration( + color: AppColors.muted.withValues(alpha: 0.3), + borderRadius: BorderRadius.circular(2), + ), + ), + Padding( + padding: const EdgeInsets.fromLTRB(20, 14, 20, 8), + child: Row( + children: [ + const Expanded( + child: Text('Select Service Provider', + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w800, + color: AppColors.darkBlue)), + ), + GestureDetector( + onTap: () => Navigator.pop(context), + child: Container( + width: 32, + height: 32, + decoration: const BoxDecoration( + color: Color(0xFFF8F9FF), shape: BoxShape.circle), + child: Icon(Icons.close, + size: 16, color: AppColors.textSecondary), + ), + ), + ], + ), + ), + // Search bar + Padding( + padding: const EdgeInsets.symmetric(horizontal: 20), + child: TextField( + controller: _searchCtrl, + autofocus: true, + onChanged: (v) => setState(() => _query = v), + decoration: InputDecoration( + hintText: 'Search service provider...', + hintStyle: + TextStyle(color: AppColors.muted, fontSize: 13), + prefixIcon: + Icon(Icons.search, color: AppColors.muted, size: 20), + suffixIcon: _query.isEmpty + ? null + : IconButton( + icon: Icon(Icons.clear, + size: 18, color: AppColors.muted), + onPressed: () { + _searchCtrl.clear(); + setState(() => _query = ''); + }, + ), + ), + ), + ), + const SizedBox(height: 8), + Expanded( + child: (filteredGroups.isEmpty && !showOthers) + ? Center( + child: Text('No providers match "$_query"', + style: + TextStyle(color: AppColors.textSecondary)), + ) + : ListView.builder( + controller: scrollCtrl, + padding: const EdgeInsets.symmetric(horizontal: 16), + itemCount: (showOthers ? 1 : 0) + filteredGroups.length * 2, // category title + items + itemBuilder: (context, index) { + if (showOthers && index == 0) { + // Render "Others" option + return Padding( + padding: const EdgeInsets.only(top: 8.0), + child: ListTile( + onTap: () => Navigator.pop(context, 'Others'), + contentPadding: const EdgeInsets.symmetric(horizontal: 12), + leading: Container( + width: 36, + height: 36, + decoration: const BoxDecoration( + color: Color(0xFFFFF8ED), + shape: BoxShape.circle, + ), + child: const Icon(Icons.add, color: Color(0xFFE87C00), size: 18), + ), + title: const Text( + 'Others', + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w700, + color: AppColors.darkBlue, + ), + ), + subtitle: const Text( + 'Manually enter custom provider', + style: TextStyle( + fontSize: 11, + color: Color(0xFFE87C00), + fontWeight: FontWeight.w500, + ), + ), + trailing: widget.initialProvider == 'Others' + ? const Icon(Icons.check_circle, color: AppColors.primary, size: 20) + : null, + ), + ); + } + + // Calculate the actual index in the groups + int groupIndex = showOthers ? index - 1 : index; + int mapIndex = groupIndex ~/ 2; + bool isHeader = groupIndex % 2 == 0; + + final keys = filteredGroups.keys.toList(); + final category = keys[mapIndex]; + final providers = filteredGroups[category]!; + + if (isHeader) { + return Padding( + padding: const EdgeInsets.only(top: 20.0, bottom: 8.0, left: 12.0), + child: Text( + category.toUpperCase(), + style: const TextStyle( + fontSize: 11, + fontWeight: FontWeight.w800, + letterSpacing: 1.0, + color: AppColors.primary, + ), + ), + ); + } else { + return Column( + children: providers.map((provider) { + final isSelected = widget.initialProvider == provider; + return ListTile( + onTap: () => Navigator.pop(context, provider), + contentPadding: const EdgeInsets.symmetric(horizontal: 12), + title: Text( + provider, + style: const TextStyle( + fontSize: 14, + fontWeight: FontWeight.w700, + color: AppColors.darkBlue, + ), + ), + trailing: isSelected + ? const Icon(Icons.check_circle, color: AppColors.primary, size: 20) + : null, + ); + }).toList(), + ); + } + }, + ), + ), + ], + ), + ), + ); + } +} diff --git a/lib/screens/surveys_list_screen.dart b/lib/screens/surveys_list_screen.dart new file mode 100644 index 0000000..cfbe96f --- /dev/null +++ b/lib/screens/surveys_list_screen.dart @@ -0,0 +1,843 @@ +import 'package:flutter/material.dart'; +import '../services/crm_api_service.dart'; +import '../theme/app_theme.dart'; +import '../utils/snackbar_utils.dart'; + +class SurveysListScreen extends StatefulWidget { + final List surveys; + final VoidCallback onDataChanged; + final bool isActive; + + const SurveysListScreen({ + super.key, + required this.surveys, + required this.onDataChanged, + this.isActive = false, + }); + + @override + State createState() => _SurveysListScreenState(); +} + +class _SurveysListScreenState extends State { + final CrmApiService _api = CrmApiService(); + bool _isSaving = false; + + void _deleteSurvey(String id) async { + final confirm = await showDialog( + context: context, + builder: (ctx) => Dialog( + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)), + child: Padding( + padding: const EdgeInsets.all(24), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + padding: const EdgeInsets.all(16), + decoration: BoxDecoration(color: AppColors.primary.withValues(alpha: 0.1), shape: BoxShape.circle), + child: const Icon(Icons.warning_amber_rounded, color: AppColors.primary, size: 32), + ), + const SizedBox(height: 16), + const Text('Delete Survey?', style: TextStyle(fontSize: 20, fontWeight: FontWeight.w800, color: AppColors.darkBlue)), + const SizedBox(height: 8), + const Text('This action cannot be undone. Are you sure you want to delete this record?', textAlign: TextAlign.center, style: TextStyle(fontSize: 14, color: AppColors.textSecondary)), + const SizedBox(height: 24), + Row( + children: [ + Expanded( + child: TextButton( + onPressed: () => Navigator.pop(ctx, false), + style: TextButton.styleFrom(padding: const EdgeInsets.symmetric(vertical: 16), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12))), + child: const Text('Cancel', style: TextStyle(color: AppColors.textSecondary, fontWeight: FontWeight.w700)), + ), + ), + const SizedBox(width: 12), + Expanded( + child: ElevatedButton( + onPressed: () => Navigator.pop(ctx, true), + style: ElevatedButton.styleFrom( + backgroundColor: AppColors.primary, + elevation: 0, + padding: const EdgeInsets.symmetric(vertical: 16), + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), + ), + child: const Text('Delete', style: TextStyle(color: Colors.white, fontWeight: FontWeight.w700)), + ), + ), + ], + ), + ], + ), + ), + ), + ); + + if (confirm != true) return; + + setState(() => _isSaving = true); + final success = await _api.deleteSurvey(id); + setState(() => _isSaving = false); + + if (success) { + widget.onDataChanged(); + if (mounted) { + SnackbarUtils.showSuccess(context, 'Survey deleted successfully.'); + Navigator.pop(context); // Optional: close screen or refresh + } + } else { + if (mounted) { + SnackbarUtils.showError(context, 'Failed to delete survey.'); + } + } + } + + void _showEditSurveyDialog(Map survey) { + _showSurveyFormDialog(survey: survey); + } + + void _showAddSurveyDialog() { + _showSurveyFormDialog(); + } + + void _showSurveyFormDialog({Map? survey}) { + final isEditing = survey != null; + final companyCtrl = TextEditingController(text: survey?['company']?.toString() ?? ''); + final areaCtrl = TextEditingController(text: survey?['area']?.toString() ?? ''); + final phoneCtrl = TextEditingController(text: survey?['phone']?.toString() ?? ''); + final rateCtrl = TextEditingController(text: survey?['rate_per_kg']?.toString() ?? ''); + final addressCtrl = TextEditingController(text: survey?['address']?.toString() ?? ''); + final id = survey?['id']?.toString() ?? ''; + + showDialog( + context: context, + barrierDismissible: false, + builder: (ctx) { + return Dialog( + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(24)), + child: SingleChildScrollView( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + // Header + Container( + padding: const EdgeInsets.fromLTRB(24, 24, 24, 20), + decoration: const BoxDecoration( + color: AppColors.blueLight, + borderRadius: BorderRadius.vertical(top: Radius.circular(24)), + ), + child: Row( + children: [ + Container( + padding: const EdgeInsets.all(10), + decoration: const BoxDecoration(color: Colors.white, shape: BoxShape.circle), + child: Icon(isEditing ? Icons.edit_outlined : Icons.add_circle_outline, color: AppColors.primary, size: 24), + ), + const SizedBox(width: 16), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(isEditing ? 'Edit Survey' : 'Add Competitor Survey', style: const TextStyle(fontWeight: FontWeight.w800, color: AppColors.darkBlue, fontSize: 18)), + const SizedBox(height: 2), + Text(isEditing ? 'Update competitor details' : 'Log a new provider survey', style: const TextStyle(fontSize: 12, color: AppColors.textSecondary)), + ], + ), + ), + ], + ), + ), + // Form Fields + Padding( + padding: const EdgeInsets.all(24), + child: Column( + children: [ + _buildModernTextField( + controller: companyCtrl, + label: 'Company / Provider', + hint: 'e.g. DTDC, Delhivery', + icon: Icons.storefront_outlined, + ), + const SizedBox(height: 16), + _buildModernTextField( + controller: areaCtrl, + label: 'Area / Zone', + hint: 'e.g. SOUTH ZONE', + icon: Icons.place_outlined, + ), + const SizedBox(height: 16), + Row( + children: [ + Expanded( + child: _buildModernTextField( + controller: phoneCtrl, + label: 'Contact Number', + hint: 'Optional', + icon: Icons.phone_outlined, + keyboardType: TextInputType.phone, + ), + ), + const SizedBox(width: 16), + Expanded( + child: _buildModernTextField( + controller: rateCtrl, + label: 'Rate / KG', + hint: '0.00', + icon: Icons.currency_rupee, + keyboardType: TextInputType.number, + ), + ), + ], + ), + const SizedBox(height: 16), + _buildModernTextField( + controller: addressCtrl, + label: 'Full Address', + hint: 'Optional physical address', + icon: Icons.map_outlined, + maxLines: 2, + ), + ], + ), + ), + // Actions + Container( + padding: const EdgeInsets.fromLTRB(24, 0, 24, 24), + child: Row( + children: [ + Expanded( + child: TextButton( + onPressed: () => Navigator.pop(ctx), + style: TextButton.styleFrom( + padding: const EdgeInsets.symmetric(vertical: 16), + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), + ), + child: const Text('Cancel', style: TextStyle(color: AppColors.textSecondary, fontWeight: FontWeight.w700)), + ), + ), + const SizedBox(width: 12), + Expanded( + child: ElevatedButton( + onPressed: () async { + if (companyCtrl.text.isEmpty || areaCtrl.text.isEmpty) { + SnackbarUtils.showError(ctx, 'Company and Area are required'); + return; + } + + setState(() => _isSaving = true); + Navigator.pop(ctx); + + final payload = { + 'company': companyCtrl.text, + 'area': areaCtrl.text, + 'phone': phoneCtrl.text, + 'rate_per_kg': rateCtrl.text, + 'address': addressCtrl.text, + 'offers_pickup': survey?['offers_pickup'] ?? 'no', + 'offers_drop': survey?['offers_drop'] ?? 'no', + 'packing_charge': survey?['packing_charge'] ?? '', + 'time_in_days': survey?['time_in_days'] ?? '', + 'plus_code': survey?['plus_code'] ?? '', + 'frequency': survey?['frequency'] ?? 'Daily', + 'pincodes': survey?['pincodes'] ?? '', + }; + + final success = isEditing + ? await _api.updateSurvey(id, payload) + : await _api.createSurvey(payload); + + setState(() => _isSaving = false); + + if (success) { + widget.onDataChanged(); + if (mounted) { + SnackbarUtils.showSuccess(context, isEditing ? 'Survey updated!' : 'Survey added!'); + } + } else { + if (mounted) { + SnackbarUtils.showError(context, isEditing ? 'Update failed.' : 'Failed to add survey.'); + } + } + }, + style: ElevatedButton.styleFrom( + backgroundColor: AppColors.primary, + elevation: 0, + padding: const EdgeInsets.symmetric(vertical: 16), + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), + ), + child: Text(isEditing ? 'Save Changes' : 'Add Survey', style: const TextStyle(color: Colors.white, fontWeight: FontWeight.w700)), + ), + ), + ], + ), + ), + ], + ), + ), + ); + }, + ); + } + + Widget _buildModernTextField({ + required TextEditingController controller, + required String label, + required String hint, + required IconData icon, + TextInputType keyboardType = TextInputType.text, + int maxLines = 1, + }) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + label, + style: const TextStyle(fontSize: 11, fontWeight: FontWeight.w800, color: AppColors.darkBlue, letterSpacing: 0.5), + ), + const SizedBox(height: 8), + TextField( + controller: controller, + keyboardType: keyboardType, + maxLines: maxLines, + style: const TextStyle(fontWeight: FontWeight.w600, color: AppColors.darkBlue, fontSize: 14), + decoration: InputDecoration( + hintText: hint, + hintStyle: TextStyle(color: AppColors.textSecondary.withValues(alpha: 0.5)), + prefixIcon: maxLines == 1 ? Icon(icon, size: 18, color: AppColors.textSecondary) : null, + filled: true, + fillColor: const Color(0xFFF8F9FA), + contentPadding: EdgeInsets.symmetric(horizontal: 16, vertical: maxLines == 1 ? 16 : 12), + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: BorderSide.none, + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: BorderSide(color: Colors.grey.shade200), + ), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: const BorderSide(color: AppColors.primary), + ), + ), + ), + ], + ); + } + + Widget _buildStatCard(String label, String value, IconData icon) { + return Container( + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(12), + border: Border.all(color: Colors.grey.shade200), + boxShadow: [ + BoxShadow(color: Colors.black.withValues(alpha: 0.02), blurRadius: 4, offset: const Offset(0, 2)), + ], + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Icon(icon, size: 16, color: AppColors.primary), + const SizedBox(height: 8), + Text(value, style: const TextStyle(fontSize: 20, fontWeight: FontWeight.w800, color: AppColors.darkBlue)), + const SizedBox(height: 2), + Text(label, style: const TextStyle(fontSize: 11, fontWeight: FontWeight.w600, color: AppColors.textSecondary)), + ], + ), + ); + } + + // Group surveys by company + Map> get groupedSurveys { + final Map> map = {}; + for (var s in widget.surveys) { + final company = s['company']?.toString().trim(); + final key = (company == null || company.isEmpty) ? 'Unknown' : company; + if (!map.containsKey(key)) { + map[key] = []; + } + map[key]!.add(s); + } + return map; + } + + @override + Widget build(BuildContext context) { + final groups = groupedSurveys; + final companies = groups.keys.toList()..sort(); + + return Scaffold( + backgroundColor: AppColors.scaffold, + appBar: AppBar( + title: const Text('Competitor Intelligence', style: TextStyle(color: AppColors.darkBlue, fontWeight: FontWeight.w800)), + backgroundColor: Colors.white, + iconTheme: const IconThemeData(color: AppColors.darkBlue), + elevation: 0, + ), + floatingActionButton: FloatingActionButton.extended( + onPressed: _isSaving ? null : _showAddSurveyDialog, + backgroundColor: AppColors.primary, + icon: const Icon(Icons.add, color: Colors.white), + label: const Text('Add Provider', style: TextStyle(color: Colors.white, fontWeight: FontWeight.w700)), + ), + body: _isSaving + ? const Center(child: CircularProgressIndicator()) + : widget.surveys.isEmpty + ? const Center(child: Text('No surveys available.', style: TextStyle(color: AppColors.textSecondary))) + : CustomScrollView( + slivers: [ + SliverToBoxAdapter( + child: Container( + margin: const EdgeInsets.fromLTRB(16, 16, 16, 4), + padding: const EdgeInsets.all(20), + decoration: BoxDecoration( + gradient: const LinearGradient( + colors: [AppColors.blueLight, Colors.white], + begin: Alignment.topLeft, + end: Alignment.bottomRight, + ), + borderRadius: BorderRadius.circular(20), + border: Border.all(color: AppColors.primary.withValues(alpha: 0.1)), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Container( + padding: const EdgeInsets.all(10), + decoration: BoxDecoration( + color: AppColors.primary.withValues(alpha: 0.1), + shape: BoxShape.circle, + ), + child: const Icon(Icons.radar_outlined, color: AppColors.primary, size: 24), + ), + const SizedBox(width: 16), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text('Market Overview', style: TextStyle(fontWeight: FontWeight.w800, fontSize: 18, color: AppColors.darkBlue)), + const SizedBox(height: 2), + Text('Tracking ${widget.surveys.length} surveys across ${companies.length} providers', style: const TextStyle(fontSize: 13, color: AppColors.textSecondary)), + ], + ), + ), + ], + ), + const SizedBox(height: 16), + Row( + children: [ + Expanded( + child: _buildStatCard('Active Providers', companies.length.toString(), Icons.storefront), + ), + const SizedBox(width: 12), + Expanded( + child: _buildStatCard('Total Branches', widget.surveys.length.toString(), Icons.location_on_outlined), + ), + ], + ), + ], + ), + ), + ), + SliverPadding( + padding: const EdgeInsets.all(16), + sliver: SliverList( + delegate: SliverChildBuilderDelegate( + (context, index) { + final company = companies[index]; + final locations = groups[company] ?? []; + final initial = company.isNotEmpty ? company.substring(0, 1).toUpperCase() : 'U'; + + return Card( + margin: const EdgeInsets.only(bottom: 16), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(16), + side: BorderSide(color: Colors.grey.shade200, width: 1), + ), + elevation: 0, + color: Colors.white, + child: ExpansionTile( + shape: const Border(), + tilePadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), + leading: Container( + width: 48, + height: 48, + decoration: BoxDecoration( + color: AppColors.primary.withValues(alpha: 0.1), + borderRadius: BorderRadius.circular(12), + ), + alignment: Alignment.center, + child: Text( + initial, + style: const TextStyle(color: AppColors.primary, fontSize: 20, fontWeight: FontWeight.w800), + ), + ), + title: Text( + company, + style: const TextStyle(fontWeight: FontWeight.w800, color: AppColors.darkBlue, fontSize: 16), + ), + subtitle: Row( + children: [ + const Icon(Icons.storefront, size: 14, color: AppColors.textSecondary), + const SizedBox(width: 4), + Text('${locations.length} Locations Surveyed', style: const TextStyle(color: AppColors.textSecondary, fontSize: 13)), + ], + ), + children: [ + Container( + decoration: BoxDecoration( + color: Colors.grey.shade50, + border: Border(top: BorderSide(color: Colors.grey.shade200)), + borderRadius: const BorderRadius.vertical(bottom: Radius.circular(16)), + ), + padding: const EdgeInsets.all(16), + child: Column( + children: locations.map((survey) { + return _SurveyLocationCard( + survey: survey as Map, + onEdit: () => _showEditSurveyDialog(survey), + onDelete: () => _deleteSurvey(survey['id'].toString()), + ); + }).toList(), + ), + ), + ], + ), + ); + }, + childCount: companies.length, + ), + ), + ), + const SliverToBoxAdapter(child: SizedBox(height: 80)), + ], + ), + ); + } +} + +class _SurveyLocationCard extends StatefulWidget { + final Map survey; + final VoidCallback onEdit; + final VoidCallback onDelete; + + const _SurveyLocationCard({ + required this.survey, + required this.onEdit, + required this.onDelete, + }); + + @override + State<_SurveyLocationCard> createState() => _SurveyLocationCardState(); +} + +class _SurveyLocationCardState extends State<_SurveyLocationCard> { + bool _isExpanded = false; + + @override + Widget build(BuildContext context) { + final survey = widget.survey; + final address = survey['address']?.toString() ?? survey['area']?.toString() ?? 'No address'; + final area = survey['area']?.toString() ?? 'Unknown'; + final phone = survey['phone']?.toString() ?? 'N/A'; + final rate = survey['rate_per_kg']?.toString() ?? ''; + final hasRate = rate.isNotEmpty; + + final pickup = survey['offers_pickup']?.toString().toLowerCase() == 'yes' ? 'Yes' : '—'; + final drop = survey['offers_drop']?.toString().toLowerCase() == 'yes' ? 'Yes' : '—'; + final packing = survey['packing_charge']?.toString() ?? '—'; + final time = survey['time_in_days']?.toString() ?? '—'; + final freq = survey['frequency']?.toString() ?? '—'; + final plusCode = survey['plus_code']?.toString() ?? '—'; + final pincodes = survey['pincodes']?.toString() ?? '—'; + final company = survey['company']?.toString() ?? '—'; + + return Container( + margin: const EdgeInsets.only(bottom: 12), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(12), + border: Border.all(color: Colors.grey.shade200), + ), + child: Column( + children: [ + // Header Row + InkWell( + onTap: () => setState(() => _isExpanded = !_isExpanded), + borderRadius: BorderRadius.circular(12), + child: Padding( + padding: const EdgeInsets.all(12), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Icon(Icons.place_outlined, color: AppColors.primary, size: 20), + const SizedBox(width: 8), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + area, + style: const TextStyle(fontWeight: FontWeight.w700, color: AppColors.darkBlue, fontSize: 14), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + const SizedBox(height: 2), + FittedBox( + fit: BoxFit.scaleDown, + alignment: Alignment.centerLeft, + child: Row( + children: [ + const Icon(Icons.phone, size: 12, color: AppColors.textSecondary), + const SizedBox(width: 4), + Text(phone, style: const TextStyle(color: AppColors.textSecondary, fontSize: 12)), + ], + ), + ), + ], + ), + ), + Column( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + const Text('RATE PER KG', style: TextStyle(fontSize: 10, fontWeight: FontWeight.w800, color: AppColors.textSecondary)), + const SizedBox(height: 4), + Container( + padding: const EdgeInsets.symmetric(horizontal: 6, vertical: 2), + decoration: BoxDecoration( + color: hasRate ? AppColors.green.withValues(alpha: 0.1) : Colors.grey.shade100, + borderRadius: BorderRadius.circular(4), + ), + child: Text( + hasRate ? '₹$rate' : 'Not Answered', + style: TextStyle( + fontSize: 11, + fontWeight: FontWeight.w700, + color: hasRate ? AppColors.greenDark : AppColors.textSecondary + ), + ), + ), + ], + ), + ], + ), + ), + ), + + if (!_isExpanded) + Padding( + padding: const EdgeInsets.fromLTRB(12, 0, 12, 12), + child: Column( + children: [ + const Divider(height: 1), + const SizedBox(height: 8), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + const Text('LOGISTICS', style: TextStyle(fontSize: 10, fontWeight: FontWeight.w800, color: AppColors.textSecondary)), + Row( + children: [ + TextButton( + onPressed: () => setState(() => _isExpanded = true), + style: TextButton.styleFrom( + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 0), + minimumSize: const Size(0, 30), + ), + child: const Text('More Info', style: TextStyle(fontSize: 12, fontWeight: FontWeight.w700, color: AppColors.darkBlue)), + ), + const SizedBox(width: 8), + InkWell( + onTap: widget.onEdit, + child: const Padding(padding: EdgeInsets.all(4.0), child: Icon(Icons.edit_outlined, size: 18, color: AppColors.textSecondary)), + ), + const SizedBox(width: 4), + InkWell( + onTap: widget.onDelete, + child: const Padding(padding: EdgeInsets.all(4.0), child: Icon(Icons.delete_outline, size: 18, color: AppColors.primaryDark)), + ), + ], + ), + ], + ), + ], + ), + ), + + if (_isExpanded) + Container( + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: const BorderRadius.vertical(bottom: Radius.circular(12)), + border: Border(top: BorderSide(color: Colors.grey.shade200)), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + TextButton.icon( + onPressed: () => setState(() => _isExpanded = false), + style: TextButton.styleFrom( + backgroundColor: AppColors.primary.withValues(alpha: 0.05), + padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 6), + minimumSize: const Size(0, 30), + ), + icon: const Text('Hide Info', style: TextStyle(fontSize: 12, fontWeight: FontWeight.w700, color: AppColors.primary)), + label: const Icon(Icons.expand_less, size: 16, color: AppColors.primary), + ), + const SizedBox(width: 12), + InkWell( + onTap: widget.onEdit, + child: const Padding(padding: EdgeInsets.all(4.0), child: Icon(Icons.edit_outlined, size: 18, color: AppColors.textSecondary)), + ), + const SizedBox(width: 4), + InkWell( + onTap: widget.onDelete, + child: const Padding(padding: EdgeInsets.all(4.0), child: Icon(Icons.delete_outline, size: 18, color: AppColors.primaryDark)), + ), + ], + ), + const SizedBox(height: 12), + // Grid of Details + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: _buildDetailSection( + icon: Icons.assignment_outlined, + title: 'ENQUIRY DETAILS', + items: [ + _buildInfoItem('RATE PER KG', hasRate ? '₹$rate' : 'Not Answered', isHighlight: hasRate), + _buildInfoItem('PICKUP', pickup), + _buildInfoItem('DROP', drop), + _buildInfoItem('PACKING', packing), + ], + ), + ), + const SizedBox(width: 12), + Expanded( + child: _buildDetailSection( + icon: Icons.local_shipping_outlined, + title: 'LOGISTICS & OPS', + items: [ + _buildInfoItem('TIME IN DAYS', time), + _buildInfoItem('COMPANY', company), + _buildInfoItem('FREQUENCY', freq), + _buildInfoItem('CONTACT NUMBER', phone), + ], + ), + ), + ], + ), + const SizedBox(height: 12), + _buildDetailSection( + icon: Icons.place_outlined, + title: 'LOCATION & PINCODE', + items: [ + Row( + children: [ + Expanded(child: _buildInfoItem('AREA / ZONE', area)), + Expanded(child: _buildInfoItem('PLUS CODE', plusCode)), + ], + ), + _buildInfoItem('SERVICEABLE PINCODES', pincodes), + _buildInfoItem('FULL ADDRESS', address), + const SizedBox(height: 8), + TextButton.icon( + onPressed: () {}, + icon: const Icon(Icons.map_outlined, size: 14, color: AppColors.primary), + label: const Text('View On Map', style: TextStyle(color: AppColors.primary, fontSize: 12, fontWeight: FontWeight.w700)), + style: TextButton.styleFrom( + padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8), side: const BorderSide(color: AppColors.primary)), + ), + ) + ], + ), + const SizedBox(height: 12), + _buildDetailSection( + icon: Icons.list_alt, + title: 'RECORD METADATA', + items: [ + Row( + children: [ + Expanded(child: _buildInfoItem('CREATED BY', 'System')), + Expanded(child: _buildInfoItem('LAST EDITED BY', '—')), + ], + ), + ], + ), + ], + ), + ), + ], + ), + ); + } + + Widget _buildDetailSection({required IconData icon, required String title, required List items}) { + return Container( + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(8), + border: Border.all(color: Colors.grey.shade200), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Container( + padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), + decoration: const BoxDecoration( + color: Color(0xFFFDECEE), + borderRadius: BorderRadius.vertical(top: Radius.circular(8)), + ), + child: Row( + children: [ + Icon(icon, size: 14, color: AppColors.primary), + const SizedBox(width: 6), + Expanded( + child: FittedBox( + alignment: Alignment.centerLeft, + fit: BoxFit.scaleDown, + child: Text(title, style: const TextStyle(fontSize: 10, fontWeight: FontWeight.w800, color: AppColors.darkBlue, letterSpacing: 0.5)), + ), + ), + ], + ), + ), + Padding( + padding: const EdgeInsets.all(12), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: items.expand((w) => [w, const SizedBox(height: 12)]).toList()..removeLast(), + ), + ), + ], + ), + ); + } + + Widget _buildInfoItem(String label, String value, {bool isHighlight = false}) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(label, style: const TextStyle(fontSize: 9, fontWeight: FontWeight.w800, color: AppColors.textSecondary, letterSpacing: 0.5)), + const SizedBox(height: 4), + if (isHighlight) + Container( + padding: const EdgeInsets.symmetric(horizontal: 6, vertical: 2), + decoration: BoxDecoration(color: AppColors.green.withValues(alpha: 0.1), borderRadius: BorderRadius.circular(4)), + child: Text(value, style: const TextStyle(fontSize: 11, fontWeight: FontWeight.w700, color: AppColors.greenDark)), + ) + else + Text(value, style: const TextStyle(fontSize: 12, color: AppColors.darkBlue, fontWeight: FontWeight.w600)), + ], + ); + } +} diff --git a/lib/screens/update_screen.dart b/lib/screens/update_screen.dart new file mode 100644 index 0000000..1e565bd --- /dev/null +++ b/lib/screens/update_screen.dart @@ -0,0 +1,93 @@ +import 'package:flutter/material.dart'; +import 'package:in_app_update/in_app_update.dart'; +import 'dart:io'; +import '../theme/app_theme.dart'; + +class UpdateRequiredScreen extends StatelessWidget { + const UpdateRequiredScreen({super.key}); + + Future _triggerNativeUpdate() async { + try { + if (Platform.isAndroid) { + await InAppUpdate.performImmediateUpdate(); + } + } catch (_) {} + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: AppColors.scaffold, + body: SafeArea( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 24.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + // Illustration or Icon + Container( + width: 120, + height: 120, + decoration: BoxDecoration( + color: const Color(0xFFEFF4FF), + shape: BoxShape.circle, + ), + child: const Icon( + Icons.system_update_rounded, + size: 50, + color: AppColors.primary, + ), + ), + const SizedBox(height: 32), + + // Text Content + const Text( + 'Update Required', + style: TextStyle( + fontSize: 24, + fontWeight: FontWeight.w800, + color: AppColors.darkBlue, + ), + ), + const SizedBox(height: 16), + const Text( + 'A new version of Doormile CRM is available. You must update to the latest version to continue using the app securely.', + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 14, + height: 1.5, + color: AppColors.textSecondary, + ), + ), + const SizedBox(height: 48), + + // Update Button + SizedBox( + width: double.infinity, + height: 54, + child: ElevatedButton( + onPressed: _triggerNativeUpdate, + style: ElevatedButton.styleFrom( + backgroundColor: AppColors.primary, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + ), + elevation: 0, + ), + child: const Text( + 'Update Now', + style: TextStyle( + color: Colors.white, + fontSize: 15, + fontWeight: FontWeight.w700, + ), + ), + ), + ), + ], + ), + ), + ), + ); + } +} diff --git a/lib/services/auth_service.dart b/lib/services/auth_service.dart new file mode 100644 index 0000000..2431fc7 --- /dev/null +++ b/lib/services/auth_service.dart @@ -0,0 +1,85 @@ +import 'dart:convert'; +import 'package:http/http.dart' as http; +import 'package:shared_preferences/shared_preferences.dart'; + +/// A single authenticated user. +class AuthUser { + final String email; + final String name; + final String role; + final String token; + + const AuthUser({ + required this.email, + required this.name, + required this.role, + required this.token, + }); + + Map toJson() => { + 'email': email, + 'name': name, + 'role': role, + 'token': token, + }; + + factory AuthUser.fromJson(Map json) => AuthUser( + email: json['email'] as String? ?? '', + name: json['name'] as String? ?? '', + role: json['role'] as String? ?? '', + token: json['token'] as String? ?? '', + ); +} + +class AuthService { + static const String _base = 'https://api.doormile.com/api/v1'; + + /// Login with real backend API + Future login(String email, String password) async { + try { + final res = await http.post( + Uri.parse('$_base/admin/login'), + headers: {'Content-Type': 'application/json'}, + body: jsonEncode({'email': email, 'password': password}), + ).timeout(const Duration(seconds: 15)); + + if (res.statusCode == 200) { + final data = jsonDecode(res.body); + final token = data['token'] ?? ''; + final userObj = data['user'] ?? {}; + + // Sometimes APIs return user inside 'data' or directly. Adjusting based on typical JWT responses. + final emailStr = userObj['email'] ?? email; + final nameStr = userObj['name'] ?? userObj['first_name'] ?? 'Admin'; + final roleStr = userObj['role'] ?? 'admin'; + + final user = AuthUser( + email: emailStr, + name: nameStr, + role: roleStr, + token: token, + ); + + final prefs = await SharedPreferences.getInstance(); + await prefs.setString('auth_user_data', jsonEncode(user.toJson())); + + return user; + } + return null; + } catch (_) { + return null; + } + } + + /// Restore user from local storage + Future getSavedUser() async { + try { + final prefs = await SharedPreferences.getInstance(); + final userData = prefs.getString('auth_user_data'); + if (userData != null && userData.isNotEmpty) { + return AuthUser.fromJson(jsonDecode(userData)); + } + } catch (_) {} + return null; + } +} diff --git a/lib/services/crm_api_service.dart b/lib/services/crm_api_service.dart new file mode 100644 index 0000000..d16e461 --- /dev/null +++ b/lib/services/crm_api_service.dart @@ -0,0 +1,380 @@ +import 'dart:convert'; +import 'package:flutter/foundation.dart'; +import 'package:http/http.dart' as http; +import 'package:shared_preferences/shared_preferences.dart'; +import '../models/client.dart'; + +class CrmApiService { + static const String _base = 'https://api.doormile.com/api/v1'; + + final http.Client _http; + String? _authToken; + + CrmApiService({http.Client? client}) : _http = client ?? http.Client(); + + void setToken(String token) { + _authToken = token; + } + + Future> _getHeaders() async { + final Map headers = { + 'Content-Type': 'application/json', + }; + if (_authToken != null && _authToken!.isNotEmpty) { + headers['Authorization'] = 'Bearer $_authToken'; + } else { + // Fallback to shared preferences just in case + try { + final prefs = await SharedPreferences.getInstance(); + final userData = prefs.getString('auth_user_data'); + if (userData != null && userData.isNotEmpty) { + final token = jsonDecode(userData)['token']?.toString(); + if (token != null && token.isNotEmpty) { + headers['Authorization'] = 'Bearer $token'; + } + } + } catch (_) {} + } + return headers; + } + + // ── Public API ────────────────────────────────────────────────────────────── + + /// Fetch all clients from the backend. + /// Throws on network failure so the caller can distinguish "backend down" + /// from "backend returned an empty list". + Future> loadClients() async { + try { + final res = await _http + .get(Uri.parse('$_base/crm/clients?limit=1000'), headers: await _getHeaders()) + .timeout(const Duration(seconds: 10)); + if (res.statusCode != 200) { + debugPrint('loadClients failed: ${res.statusCode} ${res.body}'); + return []; + } + final decoded = jsonDecode(res.body); + List body = []; + if (decoded is List) { + body = decoded; + } else if (decoded is Map && decoded['data'] is List) { + body = decoded['data']; + } + return body.map((j) => _fromJson(j as Map)).toList(); + } catch (e) { + debugPrint('loadClients exception: $e'); + return []; + } + } + + /// Create a new client on the backend. Returns the server-assigned record, + /// or null if the call fails (caller keeps the locally-created record). + Future createClient(Client client) async { + try { + final res = await _http + .post( + Uri.parse('$_base/crm/clients'), + headers: await _getHeaders(), + body: jsonEncode(_toCreatePayload(client)), + ) + .timeout(const Duration(seconds: 10)); + if (res.statusCode != 201) return null; + return _fromJson(jsonDecode(res.body) as Map); + } catch (_) { + return null; + } + } + + /// Update an existing client. `client.id` must be a valid numeric backend ID. + Future updateClient(Client client) async { + final numId = int.tryParse(client.id); + if (numId == null) return null; // temp local ID — not yet persisted + try { + final res = await _http + .put( + Uri.parse('$_base/crm/clients/$numId'), + headers: await _getHeaders(), + body: jsonEncode(_toUpdatePayload(client)), + ) + .timeout(const Duration(seconds: 10)); + if (res.statusCode != 200) return null; + return _fromJson(jsonDecode(res.body) as Map); + } catch (_) { + return null; + } + } + + /// Delete a client by ID. Returns true if successful. + Future deleteClient(String clientId) async { + final numId = int.tryParse(clientId); + if (numId == null) return false; + try { + final res = await _http + .delete( + Uri.parse('$_base/crm/clients/$numId'), + headers: await _getHeaders(), + ) + .timeout(const Duration(seconds: 10)); + return res.statusCode == 200; + } catch (_) { + return false; + } + } + + /// Fetch all competitor branch surveys + Future> fetchSurveys() async { + try { + final res = await _http + .get(Uri.parse('$_base/admin/competitor-branches?limit=1000'), headers: await _getHeaders()) + .timeout(const Duration(seconds: 10)); + if (res.statusCode != 200) return []; + final data = jsonDecode(res.body); + if (data is List) return data; + if (data is Map && data['data'] is List) return data['data']; + return []; + } catch (_) { + return []; + } + } + + /// Fetch carrier pricing + Future> fetchPricing() async { + try { + final res = await _http + .get(Uri.parse('$_base/admin/carrier-pricing?limit=1000'), headers: await _getHeaders()) + .timeout(const Duration(seconds: 10)); + if (res.statusCode != 200) return []; + final data = jsonDecode(res.body); + if (data is List) return data; + if (data is Map && data['data'] is List) return data['data']; + return []; + } catch (_) { + return []; + } + } + + /// Create carrier pricing + Future createPricing(Map data) async { + try { + final res = await _http + .post( + Uri.parse('$_base/admin/carrier-pricing'), + headers: await _getHeaders(), + body: jsonEncode({ + 'company': data['company'], + 'weight_slab': data['weight_slab'], + 'zone': data['zone'] ?? '', + 'service_type': data['service_type'] ?? '', + 'rate': data['rate'].toString(), + }), + ) + .timeout(const Duration(seconds: 10)); + return res.statusCode == 200 || res.statusCode == 201 || res.statusCode == 204; + } catch (_) { + return false; + } + } + + /// Update carrier pricing + Future updatePricing(String id, Map data) async { + try { + final res = await _http + .put( + Uri.parse('$_base/admin/carrier-pricing/$id'), + headers: await _getHeaders(), + body: jsonEncode({ + 'company': data['company'], + 'weight_slab': data['weight_slab'], + 'zone': data['zone'] ?? '', + 'service_type': data['service_type'] ?? '', + 'rate': data['rate'].toString(), + }), + ) + .timeout(const Duration(seconds: 10)); + return res.statusCode == 200 || res.statusCode == 204; + } catch (_) { + return false; + } + } + + /// Delete carrier pricing + Future deletePricing(String id) async { + try { + final res = await _http + .delete( + Uri.parse('$_base/admin/carrier-pricing/$id'), + headers: await _getHeaders(), + ) + .timeout(const Duration(seconds: 10)); + return res.statusCode == 200 || res.statusCode == 204; + } catch (_) { + return false; + } + } + + /// Create competitor branch (survey) + Future createSurvey(Map data) async { + try { + final res = await _http + .post( + Uri.parse('$_base/admin/competitor-branches'), + headers: await _getHeaders(), + body: jsonEncode(data), + ) + .timeout(const Duration(seconds: 10)); + return res.statusCode == 200 || res.statusCode == 201 || res.statusCode == 204; + } catch (_) { + return false; + } + } + + /// Update competitor branch (survey) + Future updateSurvey(String id, Map data) async { + try { + final res = await _http + .put( + Uri.parse('$_base/admin/competitor-branches/$id'), + headers: await _getHeaders(), + body: jsonEncode(data), + ) + .timeout(const Duration(seconds: 10)); + return res.statusCode == 200 || res.statusCode == 204; + } catch (_) { + return false; + } + } + + /// Delete competitor branch (survey) + Future deleteSurvey(String id) async { + try { + final res = await _http + .delete( + Uri.parse('$_base/admin/competitor-branches/$id'), + headers: await _getHeaders(), + ) + .timeout(const Duration(seconds: 10)); + return res.statusCode == 200 || res.statusCode == 204; + } catch (_) { + return false; + } + } + + // ── Serialisation ─────────────────────────────────────────────────────────── + + Client _fromJson(Map j) => Client( + id: j['id'].toString(), + name: _joinName(j['first_name'], j['last_name']), + city: j['city'] as String? ?? '', + businessType: _parseBusinessType(j['businessType'] as String?), + parcelVolume: (j['parcelVolume'] as num?)?.toDouble() ?? 0.0, + activeContracts: j['activeContracts'] as int? ?? 0, + provider: j['provider'] as String? ?? '', + efficiency: j['efficiency'] as String? ?? '', + status: _parseStatus(j['status'] as String?), + lastUpdated: j['lastUpdated'] as String? ?? '', + surveySubmitted: true, // in DB = was submitted + notes: j['notes'] as String? ?? '', + dataConsent: _parseConsent(j['dataConsent'] as String?), + phone: j['phone'] as String? ?? '', + frequency: j['frequency'] as String? ?? '', + businessState: j['businessState'] as String? ?? '', + transitFrom: j['transitFrom'] as String? ?? '', + transitTo: j['transitTo'] as String? ?? '', + neighbourhood: j['neighbourhood'] as String? ?? '', + logisticsSegment: j['logisticsSegment'] as String? ?? '', + pincode: j['pincode'] as String? ?? '', + surveyLat: (j['survey_lat'] as num?)?.toDouble() ?? 0.0, + surveyLng: (j['survey_long'] as num?)?.toDouble() ?? 0.0, + surveyAddress: j['surveyAddress'] as String? ?? '', + surveyZone: j['surveyZone'] as String? ?? '', + surveyPincode: j['surveyPincode'] as String? ?? '', + recordedByName: '', + recordedByEmail: j['email'] as String? ?? '', + recordedByRole: j['role'] as String? ?? '', + ); + + Map _toCreatePayload(Client c) => { + 'first_name': c.name, + 'phone': c.phone, + 'city': c.city, + 'businessState': c.businessState, + 'businessType': c.businessType.name, + 'status': c.status.name, + 'frequency': c.frequency, + 'parcelVolume': c.parcelVolume, + 'activeContracts': c.activeContracts, + 'provider': c.provider, + 'efficiency': c.efficiency, + 'logisticsSegment': c.logisticsSegment, + 'transitFrom': c.transitFrom, + 'transitTo': c.transitTo, + 'neighbourhood': c.neighbourhood, + 'pincode': c.pincode, + 'surveyAddress': c.surveyAddress, + 'surveyZone': c.surveyZone, + 'surveyPincode': c.surveyPincode, + 'survey_lat': c.surveyLat, + 'survey_long': c.surveyLng, + 'notes': c.notes, + 'dataConsent': c.dataConsent.name, + 'registration_source': 'mobile', + }; + + Map _toUpdatePayload(Client c) => { + 'first_name': c.name, + 'phone': c.phone, + 'city': c.city, + 'businessState': c.businessState, + 'businessType': c.businessType.name, + 'status': c.status.name, + 'frequency': c.frequency, + 'parcelVolume': c.parcelVolume, + 'activeContracts': c.activeContracts, + 'provider': c.provider, + 'efficiency': c.efficiency, + 'logisticsSegment': c.logisticsSegment, + 'transitFrom': c.transitFrom, + 'transitTo': c.transitTo, + 'neighbourhood': c.neighbourhood, + 'pincode': c.pincode, + 'surveyAddress': c.surveyAddress, + 'surveyZone': c.surveyZone, + 'surveyPincode': c.surveyPincode, + 'survey_lat': c.surveyLat, + 'survey_long': c.surveyLng, + 'notes': c.notes, + 'dataConsent': c.dataConsent.name, + }; + + // ── Helpers ───────────────────────────────────────────────────────────────── + + String _joinName(dynamic first, dynamic last) { + final f = (first as String?) ?? ''; + final l = (last as String?) ?? ''; + final joined = [f, l].where((s) => s.isNotEmpty).join(' '); + return joined.isEmpty ? '—' : joined; + } + + BusinessType _parseBusinessType(String? s) { + if (s == null) return BusinessType.retail; + return BusinessType.values.firstWhere( + (b) => b.name == s, + orElse: () => BusinessType.retail, + ); + } + + ClientStatus _parseStatus(String? s) { + if (s == null) return ClientStatus.newClient; + return ClientStatus.values.firstWhere( + (st) => st.name == s, + orElse: () => ClientStatus.newClient, + ); + } + + DataConsent _parseConsent(String? s) { + if (s == null) return DataConsent.full; + return DataConsent.values.firstWhere( + (d) => d.name == s, + orElse: () => DataConsent.full, + ); + } +} diff --git a/lib/services/location_service.dart b/lib/services/location_service.dart new file mode 100644 index 0000000..217e47c --- /dev/null +++ b/lib/services/location_service.dart @@ -0,0 +1,146 @@ +import 'dart:convert'; +import 'package:geolocator/geolocator.dart'; +import 'package:http/http.dart' as http; + +/// Why location cannot be captured (used to show the right alert). +enum LocationCheckResult { + ready, + serviceDisabled, // device GPS/location is switched off + permissionDenied, // user denied — can ask again + permissionPermanentlyDenied, // "Don't ask again" was checked +} + +/// GPS coordinates + reverse-geocoded details captured at survey submission. +class SurveyLocation { + final double lat; + final double lng; + final String address; + final String zone; // suburb / neighbourhood + final String city; // detected city / town + final String state; // detected state + final String pincode; // postal code from reverse-geocode + + const SurveyLocation({ + required this.lat, + required this.lng, + required this.address, + required this.zone, + this.city = '', + this.state = '', + this.pincode = '', + }); + + factory SurveyLocation.empty() => + const SurveyLocation(lat: 0.0, lng: 0.0, address: '', zone: ''); + + bool get hasFix => lat != 0.0 || lng != 0.0; +} + +class LocationService { + /// Checks service + permission WITHOUT triggering a system prompt. + /// Use this to decide whether to show an in-app alert before capturing. + static Future checkStatus() async { + if (!await Geolocator.isLocationServiceEnabled()) { + return LocationCheckResult.serviceDisabled; + } + final perm = await Geolocator.checkPermission(); + if (perm == LocationPermission.deniedForever) { + return LocationCheckResult.permissionPermanentlyDenied; + } + if (perm == LocationPermission.denied) { + return LocationCheckResult.permissionDenied; + } + return LocationCheckResult.ready; + } + + /// Requests permission (one-shot OS prompt) then captures GPS + address. + /// Never throws — returns [SurveyLocation.empty] on any failure. + static Future capture() async { + try { + if (!await Geolocator.isLocationServiceEnabled()) { + return SurveyLocation.empty(); + } + + var perm = await Geolocator.checkPermission(); + if (perm == LocationPermission.denied) { + perm = await Geolocator.requestPermission(); + } + if (perm == LocationPermission.denied || + perm == LocationPermission.deniedForever) { + return SurveyLocation.empty(); + } + + final position = await Geolocator.getCurrentPosition( + locationSettings: const LocationSettings( + accuracy: LocationAccuracy.high, + ), + ).timeout(const Duration(seconds: 10)); + + final geo = await _reverseGeocode(position.latitude, position.longitude); + + return SurveyLocation( + lat: position.latitude, + lng: position.longitude, + address: geo['display_name'] ?? '', + zone: geo['zone'] ?? '', + city: geo['city'] ?? '', + state: geo['state'] ?? '', + pincode: geo['pincode'] ?? '', + ); + } catch (_) { + return SurveyLocation.empty(); + } + } + + /// Opens the device's Location / GPS settings page. + static Future openLocationSettings() => + Geolocator.openLocationSettings(); + + /// Opens this app's permission settings page (for permanently-denied case). + static Future openAppSettings() => Geolocator.openAppSettings(); + + static Future> _reverseGeocode( + double lat, double lng) async { + try { + final uri = Uri.parse( + 'https://nominatim.openstreetmap.org/reverse' + '?lat=$lat&lon=$lng&format=json&addressdetails=1', + ); + final res = await http + .get(uri, headers: {'User-Agent': 'DoorMile-CRM/1.0'}) + .timeout(const Duration(seconds: 6)); + + if (res.statusCode != 200) return {}; + + final body = jsonDecode(res.body) as Map; + final addr = (body['address'] as Map?) ?? {}; + + final zone = (addr['suburb'] ?? + addr['neighbourhood'] ?? + addr['quarter'] ?? + addr['village'] ?? + '') as String; + + final city = (addr['city'] ?? + addr['town'] ?? + addr['municipality'] ?? + addr['county'] ?? + addr['state_district'] ?? + '') as String; + + final state = (addr['state'] ?? '') as String; + + final pincode = (addr['postcode'] ?? '') as String; + + return { + 'display_name': (body['display_name'] as String?) ?? '', + 'zone': zone, + 'city': city, + 'state': state, + 'pincode': pincode, + }; + } catch (_) { + return {}; + } + } +} diff --git a/lib/services/qdrant_service.dart b/lib/services/qdrant_service.dart new file mode 100644 index 0000000..3b51a0b --- /dev/null +++ b/lib/services/qdrant_service.dart @@ -0,0 +1,235 @@ +import 'dart:convert'; +import 'package:http/http.dart' as http; +import '../models/client.dart'; + +class QdrantService { + static const String _baseUrl = 'http://66.116.207.225:6333'; + static const String _apiKey = 'Package@321#'; + + static const String collectionName = 'doormile_clients'; + + // 16-dim feature vector (city-agnostic — city stored in payload only) + // + // [0] parcelVolume (normalised 0–1 over max 1 200) + // [1] activeContracts (normalised 0–1 over max 40) + // [2–5] businessType one-hot (ecommerce, manufacturing, wholesale, retail) + // [6–9] status one-hot (newClient, pending, completed, updated) + // [10] surveySubmitted (0 / 1) + // [11] dataConsent basicOnly=0, full=1 + // [12] hasPhone (0 / 1) + // [13] hasTransitRoute both from+to non-empty (0 / 1) + // [14] frequencyScore none=0, monthly=0.25, biweekly=0.5, weekly=0.75, daily=1 + // [15] hasNeighbourhood (0 / 1) + static const int _vectorSize = 16; + + final http.Client _http; + QdrantService({http.Client? client}) : _http = client ?? http.Client(); + + Map get _headers => { + 'Content-Type': 'application/json', + 'api-key': _apiKey, + 'Cache-Control': 'no-cache, no-store, must-revalidate', + 'Pragma': 'no-cache', + 'Expires': '0', + }; + + /// Creates the collection if it does not already exist. + Future ensureCollection() async { + final res = await _http.get( + Uri.parse('$_baseUrl/collections/$collectionName'), + headers: _headers, + ); + if (res.statusCode == 200) return; + + await _http.put( + Uri.parse('$_baseUrl/collections/$collectionName'), + headers: _headers, + body: jsonEncode({ + 'vectors': {'size': _vectorSize, 'distance': 'Cosine'}, + }), + ); + } + + /// Upsert (insert or update) a single client. + Future upsertClient(Client client) async { + await _http.put( + Uri.parse('$_baseUrl/collections/$collectionName/points'), + headers: _headers, + body: jsonEncode({ + 'points': [_toPoint(client)], + }), + ); + } + + /// Batch upsert a list of clients. + Future upsertClients(List clients) async { + if (clients.isEmpty) return; + await _http.put( + Uri.parse('$_baseUrl/collections/$collectionName/points'), + headers: _headers, + body: jsonEncode({ + 'points': clients.map(_toPoint).toList(), + }), + ); + } + + /// Fetch all stored clients from Qdrant (up to 500). + Future> loadClients() async { + final res = await _http.post( + Uri.parse('$_baseUrl/collections/$collectionName/points/scroll'), + headers: _headers, + body: jsonEncode({ + 'limit': 500, + 'with_payload': true, + 'with_vector': false, + }), + ); + if (res.statusCode != 200) return []; + final body = jsonDecode(res.body) as Map; + final points = (body['result']?['points'] as List?) ?? []; + return points.map((p) => _fromPoint(p as Map)).toList(); + } + + /// Drop and recreate the collection — used for staging resets. + Future deleteCollection() async { + await _http.delete( + Uri.parse('$_baseUrl/collections/$collectionName'), + headers: _headers, + ); + } + + /// Delete a client by its string ID. + Future deleteClient(String clientId) async { + await _http.post( + Uri.parse('$_baseUrl/collections/$collectionName/points/delete'), + headers: _headers, + body: jsonEncode({ + 'points': [_stableId(clientId)], + }), + ); + } + + // ── Helpers ─────────────────────────────────────────────────────────────── + + int _stableId(String id) { + int h = 0; + for (final c in id.codeUnits) { + h = (h * 31 + c) & 0x7FFFFFFF; + } + return h == 0 ? 1 : h; + } + + Map _toPoint(Client client) => { + 'id': _stableId(client.id), + 'vector': _toVector(client), + 'payload': { + 'clientId': client.id, + 'name': client.name, + 'city': client.city, + 'businessType': client.businessType.name, + 'parcelVolume': client.parcelVolume, + 'activeContracts': client.activeContracts, + 'provider': client.provider, + 'efficiency': client.efficiency, + 'status': client.status.name, + 'lastUpdated': client.lastUpdated, + 'surveySubmitted': client.surveySubmitted, + 'notes': client.notes, + 'dataConsent': client.dataConsent.name, + 'phone': client.phone, + 'frequency': client.frequency, + 'businessState': client.businessState, + 'transitType': client.transitType, + 'transitFrom': client.transitFrom, + 'transitTo': client.transitTo, + 'neighbourhood': client.neighbourhood, + 'logisticsSegment': client.logisticsSegment, + 'pincode': client.pincode, + // GPS captured at submission — not shown in app, stored for field audit + 'surveyLat': client.surveyLat, + 'surveyLng': client.surveyLng, + 'surveyAddress': client.surveyAddress, + 'surveyZone': client.surveyZone, + 'surveyPincode': client.surveyPincode, + // Field-agent attribution — who collected this survey (login session) + 'recordedByName': client.recordedByName, + 'recordedByEmail': client.recordedByEmail, + 'recordedByRole': client.recordedByRole, + // Qdrant geo payload — enables geo-radius queries later + if (client.surveyLat != 0.0 || client.surveyLng != 0.0) + 'surveyGeo': {'lat': client.surveyLat, 'lon': client.surveyLng}, + }, + }; + + List _toVector(Client client) { + final v = List.filled(_vectorSize, 0.0); + v[0] = (client.parcelVolume / 1200.0).clamp(0.0, 1.0); + v[1] = (client.activeContracts / 40.0).clamp(0.0, 1.0); + v[2 + client.businessType.index] = 1.0; + v[6 + client.status.index] = 1.0; + v[10] = client.surveySubmitted ? 1.0 : 0.0; + v[11] = client.dataConsent == DataConsent.full ? 1.0 : 0.0; + v[12] = client.phone.isNotEmpty ? 1.0 : 0.0; + v[13] = (client.transitFrom.isNotEmpty && client.transitTo.isNotEmpty) + ? 1.0 + : 0.0; + v[14] = _frequencyScore(client.frequency); + v[15] = client.neighbourhood.isNotEmpty ? 1.0 : 0.0; + return v; + } + + double _frequencyScore(String freq) { + switch (freq.toLowerCase()) { + case 'daily': + return 1.0; + case 'weekly': + return 0.75; + case 'bi-weekly': + return 0.5; + case 'monthly': + return 0.25; + default: + return 0.0; + } + } + + Client _fromPoint(Map point) { + final p = point['payload'] as Map; + return Client( + id: p['clientId'] as String, + name: p['name'] as String, + city: p['city'] as String, + businessType: + BusinessType.values.firstWhere((b) => b.name == p['businessType']), + parcelVolume: (p['parcelVolume'] as num?)?.toDouble() ?? 0.0, + activeContracts: p['activeContracts'] as int, + provider: p['provider'] as String, + efficiency: p['efficiency'] as String, + status: ClientStatus.values.firstWhere((s) => s.name == p['status']), + lastUpdated: p['lastUpdated'] as String, + surveySubmitted: p['surveySubmitted'] as bool, + notes: (p['notes'] as String?) ?? '', + dataConsent: DataConsent.values.firstWhere( + (d) => d.name == (p['dataConsent'] as String? ?? 'full'), + orElse: () => DataConsent.full, + ), + phone: (p['phone'] as String?) ?? '', + frequency: (p['frequency'] as String?) ?? '', + businessState: (p['businessState'] as String?) ?? '', + transitType: (p['transitType'] as String?) ?? '', + transitFrom: (p['transitFrom'] as String?) ?? '', + transitTo: (p['transitTo'] as String?) ?? '', + neighbourhood: (p['neighbourhood'] as String?) ?? '', + logisticsSegment: (p['logisticsSegment'] as String?) ?? '', + pincode: (p['pincode'] as String?) ?? '', + surveyLat: (p['surveyLat'] as num?)?.toDouble() ?? 0.0, + surveyLng: (p['surveyLng'] as num?)?.toDouble() ?? 0.0, + surveyAddress: (p['surveyAddress'] as String?) ?? '', + surveyZone: (p['surveyZone'] as String?) ?? '', + surveyPincode: (p['surveyPincode'] as String?) ?? '', + recordedByName: (p['recordedByName'] as String?) ?? '', + recordedByEmail: (p['recordedByEmail'] as String?) ?? '', + recordedByRole: (p['recordedByRole'] as String?) ?? '', + ); + } +} diff --git a/lib/theme/app_theme.dart b/lib/theme/app_theme.dart new file mode 100644 index 0000000..fe2a4ca --- /dev/null +++ b/lib/theme/app_theme.dart @@ -0,0 +1,361 @@ +import 'package:flutter/material.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +class AppColors { + static const primary = Color(0xFF8D0012); + static const primaryDark = Color(0xFFB51621); + static const darkBlue = Color(0xFF0B1C30); + static const lightBg = Color(0xFFF8F9FF); + static const border = Color(0xFFE4BEBA); + static const textSecondary = Color(0xFF5B403E); + static const green = Color(0xFF006760); + static const greenDark = Color(0xFF00504A); + static const blueAccent = Color(0xFFD3E4FE); + static const blueLight = Color(0xFFEFF4FF); + static const muted = Color(0xFF8F6F6D); + static const surface = Color(0xFFFFFFFF); + static const scaffold = Color(0xFFF1F5F9); +} + +ThemeData buildAppTheme() { + return ThemeData( + useMaterial3: true, + colorScheme: ColorScheme.fromSeed( + seedColor: AppColors.primary, + primary: AppColors.primary, + surface: AppColors.lightBg, + ), + scaffoldBackgroundColor: AppColors.scaffold, + textTheme: GoogleFonts.interTextTheme().copyWith( + displayLarge: GoogleFonts.inter( + fontWeight: FontWeight.w800, + color: AppColors.darkBlue, + ), + bodyMedium: GoogleFonts.inter(color: AppColors.darkBlue), + ), + appBarTheme: AppBarTheme( + backgroundColor: AppColors.surface, + surfaceTintColor: Colors.transparent, + elevation: 0, + shadowColor: Colors.black12, + scrolledUnderElevation: 1, + titleTextStyle: GoogleFonts.inter( + fontWeight: FontWeight.w800, + fontSize: 16, + color: AppColors.darkBlue, + ), + ), + navigationBarTheme: NavigationBarThemeData( + backgroundColor: AppColors.surface, + indicatorColor: AppColors.primaryDark, + labelTextStyle: WidgetStateProperty.resolveWith((states) { + final active = states.contains(WidgetState.selected); + return GoogleFonts.inter( + fontSize: 10, + fontWeight: FontWeight.w700, + color: active ? AppColors.primary : AppColors.muted, + ); + }), + iconTheme: WidgetStateProperty.resolveWith((states) { + final active = states.contains(WidgetState.selected); + return IconThemeData( + color: active ? Colors.white : AppColors.muted, + size: 18, + ); + }), + ), + inputDecorationTheme: InputDecorationTheme( + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: const BorderSide(color: AppColors.border), + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: const BorderSide(color: AppColors.border), + ), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: const BorderSide(color: AppColors.primary, width: 1.5), + ), + filled: true, + fillColor: AppColors.surface, + contentPadding: const EdgeInsets.symmetric(horizontal: 14, vertical: 12), + ), + ); +} + +class WideTopBanner extends StatefulWidget { + final bool backendReady; + final String subtitle; + final VoidCallback? onLogout; + + const WideTopBanner({ + super.key, + required this.backendReady, + required this.subtitle, + this.onLogout, + }); + + @override + State createState() => _WideTopBannerState(); +} + +class _WideTopBannerState extends State { + String _title = 'Doormile CRM'; + + @override + void initState() { + super.initState(); + _loadUser(); + } + + Future _loadUser() async { + try { + final prefs = await SharedPreferences.getInstance(); + final name = prefs.getString('user_name'); + if (name != null && name.isNotEmpty && mounted) { + setState(() => _title = 'Hi, $name 👋'); + } + } catch (_) {} + } + + @override + Widget build(BuildContext context) { + return Container( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 14), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(20), + gradient: const LinearGradient( + begin: Alignment.topLeft, + end: Alignment.bottomRight, + colors: [ + Colors.white, + Color(0xFFF8FAFC), + ], + ), + border: Border.all(color: Colors.white, width: 2), + boxShadow: [ + BoxShadow( + color: AppColors.darkBlue.withValues(alpha: 0.03), + blurRadius: 10, + offset: const Offset(0, 4), + ), + BoxShadow( + color: AppColors.primary.withValues(alpha: 0.04), + blurRadius: 20, + offset: const Offset(0, 10), + spreadRadius: -5, + ), + ], + ), + child: Row( + children: [ + Container( + padding: const EdgeInsets.all(2.5), + decoration: BoxDecoration( + shape: BoxShape.circle, + gradient: LinearGradient( + colors: [ + AppColors.primary.withValues(alpha: 0.8), + AppColors.border, + ], + begin: Alignment.topLeft, + end: Alignment.bottomRight, + ), + boxShadow: [ + BoxShadow( + color: AppColors.primary.withValues(alpha: 0.2), + blurRadius: 8, + offset: const Offset(0, 3), + ), + ], + ), + child: Container( + padding: const EdgeInsets.all(2), + decoration: const BoxDecoration( + color: Colors.white, + shape: BoxShape.circle, + ), + child: ClipOval( + child: Image.asset( + 'assets/doormilelogoround.png', + width: 38, + height: 38, + fit: BoxFit.cover, + ), + ), + ), + ), + const SizedBox(width: 14), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + _title, + style: const TextStyle( + fontSize: 16, + fontWeight: FontWeight.w800, + color: AppColors.darkBlue, + letterSpacing: -0.3, + ), + ), + const SizedBox(height: 3), + Container( + padding: const EdgeInsets.symmetric(horizontal: 6, vertical: 2), + decoration: BoxDecoration( + color: AppColors.primary.withValues(alpha: 0.08), + borderRadius: BorderRadius.circular(6), + ), + child: Text( + widget.subtitle.toUpperCase(), + style: const TextStyle( + fontSize: 9, + fontWeight: FontWeight.w800, + letterSpacing: 1.2, + color: AppColors.primary, + ), + ), + ), + ], + ), + ), + _SyncStatusBadge(ready: widget.backendReady), + if (widget.onLogout != null) ...[ + const SizedBox(width: 8), + GestureDetector( + onTap: widget.onLogout, + child: Container( + padding: const EdgeInsets.all(8), + decoration: BoxDecoration( + color: Colors.white, + shape: BoxShape.circle, + border: Border.all(color: AppColors.border.withValues(alpha: 0.2)), + boxShadow: [ + BoxShadow( + color: Colors.black.withValues(alpha: 0.02), + blurRadius: 4, + offset: const Offset(0, 2), + ) + ], + ), + child: const Icon( + Icons.logout_rounded, + size: 20, + color: AppColors.primary, + ), + ), + ), + ], + ], + ), + ); + } +} + +class _SyncStatusBadge extends StatelessWidget { + final bool ready; + const _SyncStatusBadge({required this.ready}); + + @override + Widget build(BuildContext context) { + return Container( + padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 6), + decoration: BoxDecoration( + color: ready ? const Color(0xFFECFDF5) : const Color(0xFFFFFBEB), + borderRadius: BorderRadius.circular(20), + border: Border.all( + color: ready ? const Color(0xA110B981) : const Color(0xA1FBBF24), + width: 1, + ), + boxShadow: [ + BoxShadow( + color: ready + ? const Color(0xFF10B981).withValues(alpha: 0.1) + : const Color(0xFFF59E0B).withValues(alpha: 0.1), + blurRadius: 4, + offset: const Offset(0, 2), + ), + ], + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + _PulsingDot( + color: ready ? const Color(0xFF10B981) : const Color(0xFFF59E0B), + ), + const SizedBox(width: 6), + Text( + ready ? 'SYNCED' : 'CACHED', + style: TextStyle( + fontSize: 9, + fontWeight: FontWeight.w800, + color: ready ? const Color(0xFF065F46) : const Color(0xFF92400E), + letterSpacing: 0.5, + ), + ), + ], + ), + ); + } +} + +class _PulsingDot extends StatefulWidget { + final Color color; + const _PulsingDot({required this.color}); + + @override + State<_PulsingDot> createState() => _PulsingDotState(); +} + +class _PulsingDotState extends State<_PulsingDot> with SingleTickerProviderStateMixin { + late AnimationController _controller; + late Animation _animation; + + @override + void initState() { + super.initState(); + _controller = AnimationController( + vsync: this, + duration: const Duration(milliseconds: 1500), + )..repeat(reverse: true); + + _animation = CurvedAnimation( + parent: _controller, + curve: Curves.easeInOut, + ); + } + + @override + void dispose() { + _controller.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return AnimatedBuilder( + animation: _animation, + builder: (context, child) { + return Container( + width: 6, + height: 6, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: widget.color, + boxShadow: [ + BoxShadow( + color: widget.color.withValues(alpha: 0.6 * _animation.value), + blurRadius: 6 * _animation.value, + spreadRadius: 2 * _animation.value, + ), + ], + ), + ); + }, + ); + } +} diff --git a/lib/utils/snackbar_utils.dart b/lib/utils/snackbar_utils.dart new file mode 100644 index 0000000..0d16cf2 --- /dev/null +++ b/lib/utils/snackbar_utils.dart @@ -0,0 +1,83 @@ +import 'package:flutter/material.dart'; +import '../theme/app_theme.dart'; + +class SnackbarUtils { + static void showSuccess(BuildContext context, String message) { + _showSnackBar( + context, + message, + icon: Icons.check_circle_outline, + backgroundColor: AppColors.greenDark, + ); + } + + static void showError(BuildContext context, String message) { + _showSnackBar( + context, + message, + icon: Icons.error_outline, + backgroundColor: AppColors.primaryDark, + ); + } + + static void showWarning(BuildContext context, String message) { + _showSnackBar( + context, + message, + icon: Icons.warning_amber_rounded, + backgroundColor: const Color(0xFFE87C00), // Orange + ); + } + + static void _showSnackBar( + BuildContext context, + String message, { + required IconData icon, + required Color backgroundColor, + }) { + if (!context.mounted) return; + + final snackBar = SnackBar( + elevation: 0, + behavior: SnackBarBehavior.floating, + backgroundColor: Colors.transparent, + padding: EdgeInsets.zero, + content: Container( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 14), + decoration: BoxDecoration( + color: backgroundColor, + borderRadius: BorderRadius.circular(12), + boxShadow: [ + BoxShadow( + color: backgroundColor.withValues(alpha: 0.3), + blurRadius: 10, + offset: const Offset(0, 4), + ) + ], + ), + child: Row( + children: [ + Icon(icon, color: Colors.white, size: 22), + const SizedBox(width: 12), + Expanded( + child: Text( + message, + style: const TextStyle( + color: Colors.white, + fontWeight: FontWeight.w600, + fontSize: 14, + ), + ), + ), + ], + ), + ), + duration: const Duration(seconds: 3), + margin: const EdgeInsets.only(bottom: 24, left: 16, right: 16), + ); + + ScaffoldMessenger.of(context) + ..hideCurrentSnackBar() + ..showSnackBar(snackBar); + } +} diff --git a/linux/.gitignore b/linux/.gitignore new file mode 100644 index 0000000..d3896c9 --- /dev/null +++ b/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/linux/CMakeLists.txt b/linux/CMakeLists.txt new file mode 100644 index 0000000..19fbe3d --- /dev/null +++ b/linux/CMakeLists.txt @@ -0,0 +1,128 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "doormile_flutter") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.doormile.doormile_flutter") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/linux/flutter/CMakeLists.txt b/linux/flutter/CMakeLists.txt new file mode 100644 index 0000000..d5bd016 --- /dev/null +++ b/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000..e71a16d --- /dev/null +++ b/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void fl_register_plugins(FlPluginRegistry* registry) { +} diff --git a/linux/flutter/generated_plugin_registrant.h b/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000..e0f0a47 --- /dev/null +++ b/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake new file mode 100644 index 0000000..be1ee3e --- /dev/null +++ b/linux/flutter/generated_plugins.cmake @@ -0,0 +1,24 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST + jni +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/linux/runner/CMakeLists.txt b/linux/runner/CMakeLists.txt new file mode 100644 index 0000000..e97dabc --- /dev/null +++ b/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/linux/runner/main.cc b/linux/runner/main.cc new file mode 100644 index 0000000..e7c5c54 --- /dev/null +++ b/linux/runner/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/linux/runner/my_application.cc b/linux/runner/my_application.cc new file mode 100644 index 0000000..4843d35 --- /dev/null +++ b/linux/runner/my_application.cc @@ -0,0 +1,148 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Called when first Flutter frame received. +static void first_frame_cb(MyApplication* self, FlView* view) { + gtk_widget_show(gtk_widget_get_toplevel(GTK_WIDGET(view))); +} + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "doormile_flutter"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "doormile_flutter"); + } + + gtk_window_set_default_size(window, 1280, 720); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments( + project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + GdkRGBA background_color; + // Background defaults to black, override it here if necessary, e.g. #00000000 + // for transparent. + gdk_rgba_parse(&background_color, "#000000"); + fl_view_set_background_color(view, &background_color); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + // Show the window when Flutter renders. + // Requires the view to be realized so we can start rendering. + g_signal_connect_swapped(view, "first-frame", G_CALLBACK(first_frame_cb), + self); + gtk_widget_realize(GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, + gchar*** arguments, + int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + // MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + // MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = + my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, "flags", + G_APPLICATION_NON_UNIQUE, nullptr)); +} diff --git a/linux/runner/my_application.h b/linux/runner/my_application.h new file mode 100644 index 0000000..db16367 --- /dev/null +++ b/linux/runner/my_application.h @@ -0,0 +1,21 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, + my_application, + MY, + APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/macos/.gitignore b/macos/.gitignore new file mode 100644 index 0000000..746adbb --- /dev/null +++ b/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/macos/Flutter/Flutter-Debug.xcconfig b/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 0000000..c2efd0b --- /dev/null +++ b/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/macos/Flutter/Flutter-Release.xcconfig b/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 0000000..c2efd0b --- /dev/null +++ b/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 0000000..de906b1 --- /dev/null +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,14 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + +import geolocator_apple +import shared_preferences_foundation + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin")) + SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) +} diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..8388313 --- /dev/null +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,705 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* doormile_flutter.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "doormile_flutter.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* doormile_flutter.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* doormile_flutter.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.doormile.doormileFlutter.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/doormile_flutter.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/doormile_flutter"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.doormile.doormileFlutter.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/doormile_flutter.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/doormile_flutter"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.doormile.doormileFlutter.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/doormile_flutter.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/doormile_flutter"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..e679f76 --- /dev/null +++ b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/macos/Runner.xcworkspace/contents.xcworkspacedata b/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/macos/Runner/AppDelegate.swift b/macos/Runner/AppDelegate.swift new file mode 100644 index 0000000..b3c1761 --- /dev/null +++ b/macos/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Cocoa +import FlutterMacOS + +@main +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } +} diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..a2ec33f --- /dev/null +++ b/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..82b6f9d9a33e198f5747104729e1fcef999772a5 GIT binary patch literal 102994 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ⅅ8MglG&ER{i5lN315cO?EdHNLrg? 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 z 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 Pe7HEdAEg|=c=LY&YVNkY literal 0 HcmV?d00001 diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..13b35eba55c6dabc3aac36f33d859266c18fa0d0 GIT binary patch literal 5680 zcmaiYXH?Tqu=Xz`p-L#B_gI#0we$cm_HcmYFP$?wjD#BaCN4mzC5#`>w9y6=ThxrYZc0WPXprg zYjB`UsV}0=eUtY$(P6YW}npdd;%9pi?zS3k-nqCob zSX_AQEf|=wYT3r?f!*Yt)ar^;l3Sro{z(7deUBPd2~(SzZ-s@0r&~Km2S?8r##9-< z)2UOSVaHqq6}%sA9Ww;V2LG=PnNAh6mA2iWOuV7T_lRDR z&N8-eN=U)-T|;wo^Wv=34wtV0g}sAAe}`Ph@~!|<;z7*K8(qkX0}o=!(+N*UWrkEja*$_H6mhK1u{P!AC39} z|3+Z(mAOq#XRYS)TLoHv<)d%$$I@+x+2)V{@o~~J-!YUI-Q9%!Ldi4Op&Lw&B>jj* zwAgC#Y>gbIqv!d|J5f!$dbCXoq(l3GR(S>(rtZ~Z*agXMMKN!@mWT_vmCbSd3dUUm z4M&+gz?@^#RRGal%G3dDvj7C5QTb@9+!MG+>0dcjtZEB45c+qx*c?)d<%htn1o!#1 zpIGonh>P1LHu3s)fGFF-qS}AXjW|M*2Xjkh7(~r(lN=o#mBD9?jt74=Rz85I4Nfx_ z7Z)q?!};>IUjMNM6ee2Thq7))a>My?iWFxQ&}WvsFP5LP+iGz+QiYek+K1`bZiTV- zHHYng?ct@Uw5!gquJ(tEv1wTrRR7cemI>aSzLI^$PxW`wL_zt@RSfZ1M3c2sbebM* ze0=;sy^!90gL~YKISz*x;*^~hcCoO&CRD)zjT(A2b_uRue=QXFe5|!cf0z1m!iwv5GUnLw9Dr*Ux z)3Lc!J@Ei;&&yxGpf2kn@2wJ2?t6~obUg;?tBiD#uo$SkFIasu+^~h33W~`r82rSa ztyE;ehFjC2hjpJ-e__EH&z?!~>UBb=&%DS>NT)1O3Isn-!SElBV2!~m6v0$vx^a<@ISutdTk1@?;i z<8w#b-%|a#?e5(n@7>M|v<<0Kpg?BiHYMRe!3Z{wYc2hN{2`6(;q`9BtXIhVq6t~KMH~J0~XtUuT06hL8c1BYZWhN zk4F2I;|za*R{ToHH2L?MfRAm5(i1Ijw;f+0&J}pZ=A0;A4M`|10ZskA!a4VibFKn^ zdVH4OlsFV{R}vFlD~aA4xxSCTTMW@Gws4bFWI@xume%smAnuJ0b91QIF?ZV!%VSRJ zO7FmG!swKO{xuH{DYZ^##gGrXsUwYfD0dxXX3>QmD&`mSi;k)YvEQX?UyfIjQeIm! z0ME3gmQ`qRZ;{qYOWt}$-mW*>D~SPZKOgP)T-Sg%d;cw^#$>3A9I(%#vsTRQe%moT zU`geRJ16l>FV^HKX1GG7fR9AT((jaVb~E|0(c-WYQscVl(z?W!rJp`etF$dBXP|EG z=WXbcZ8mI)WBN>3<@%4eD597FD5nlZajwh8(c$lum>yP)F}=(D5g1-WVZRc)(!E3} z-6jy(x$OZOwE=~{EQS(Tp`yV2&t;KBpG*XWX!yG+>tc4aoxbXi7u@O*8WWFOxUjcq z^uV_|*818$+@_{|d~VOP{NcNi+FpJ9)aA2So<7sB%j`$Prje&auIiTBb{oD7q~3g0 z>QNIwcz(V-y{Ona?L&=JaV5`o71nIsWUMA~HOdCs10H+Irew#Kr(2cn>orG2J!jvP zqcVX0OiF}c<)+5&p}a>_Uuv)L_j}nqnJ5a?RPBNi8k$R~zpZ33AA4=xJ@Z($s3pG9 zkURJY5ZI=cZGRt_;`hs$kE@B0FrRx(6K{`i1^*TY;Vn?|IAv9|NrN*KnJqO|8$e1& zb?OgMV&q5|w7PNlHLHF) zB+AK#?EtCgCvwvZ6*u|TDhJcCO+%I^@Td8CR}+nz;OZ*4Dn?mSi97m*CXXc=};!P`B?}X`F-B5v-%ACa8fo0W++j&ztmqK z;&A)cT4ob9&MxpQU41agyMU8jFq~RzXOAsy>}hBQdFVL%aTn~M>5t9go2j$i9=(rZ zADmVj;Qntcr3NIPPTggpUxL_z#5~C!Gk2Rk^3jSiDqsbpOXf^f&|h^jT4|l2ehPat zb$<*B+x^qO8Po2+DAmrQ$Zqc`1%?gp*mDk>ERf6I|42^tjR6>}4`F_Mo^N(~Spjcg z_uY$}zui*PuDJjrpP0Pd+x^5ds3TG#f?57dFL{auS_W8|G*o}gcnsKYjS6*t8VI<) zcjqTzW(Hk*t-Qhq`Xe+x%}sxXRerScbPGv8hlJ;CnU-!Nl=# zR=iTFf9`EItr9iAlAGi}i&~nJ-&+)Y| zMZigh{LXe)uR+4D_Yb+1?I93mHQ5{pId2Fq%DBr7`?ipi;CT!Q&|EO3gH~7g?8>~l zT@%*5BbetH)~%TrAF1!-!=)`FIS{^EVA4WlXYtEy^|@y@yr!C~gX+cp2;|O4x1_Ol z4fPOE^nj(}KPQasY#U{m)}TZt1C5O}vz`A|1J!-D)bR%^+=J-yJsQXDzFiqb+PT0! zIaDWWU(AfOKlSBMS};3xBN*1F2j1-_=%o($ETm8@oR_NvtMDVIv_k zlnNBiHU&h8425{MCa=`vb2YP5KM7**!{1O>5Khzu+5OVGY;V=Vl+24fOE;tMfujoF z0M``}MNnTg3f%Uy6hZi$#g%PUA_-W>uVCYpE*1j>U8cYP6m(>KAVCmbsDf39Lqv0^ zt}V6FWjOU@AbruB7MH2XqtnwiXS2scgjVMH&aF~AIduh#^aT1>*V>-st8%=Kk*{bL zzbQcK(l2~)*A8gvfX=RPsNnjfkRZ@3DZ*ff5rmx{@iYJV+a@&++}ZW+za2fU>&(4y`6wgMpQGG5Ah(9oGcJ^P(H< zvYn5JE$2B`Z7F6ihy>_49!6}(-)oZ(zryIXt=*a$bpIw^k?>RJ2 zQYr>-D#T`2ZWDU$pM89Cl+C<;J!EzHwn(NNnWpYFqDDZ_*FZ{9KQRcSrl5T>dj+eA zi|okW;6)6LR5zebZJtZ%6Gx8^=2d9>_670!8Qm$wd+?zc4RAfV!ZZ$jV0qrv(D`db zm_T*KGCh3CJGb(*X6nXzh!h9@BZ-NO8py|wG8Qv^N*g?kouH4%QkPU~Vizh-D3<@% zGomx%q42B7B}?MVdv1DFb!axQ73AUxqr!yTyFlp%Z1IAgG49usqaEbI_RnbweR;Xs zpJq7GKL_iqi8Md?f>cR?^0CA+Uk(#mTlGdZbuC*$PrdB$+EGiW**=$A3X&^lM^K2s zzwc3LtEs5|ho z2>U(-GL`}eNgL-nv3h7E<*<>C%O^=mmmX0`jQb6$mP7jUKaY4je&dCG{x$`0=_s$+ zSpgn!8f~ya&U@c%{HyrmiW2&Wzc#Sw@+14sCpTWReYpF9EQ|7vF*g|sqG3hx67g}9 zwUj5QP2Q-(KxovRtL|-62_QsHLD4Mu&qS|iDp%!rs(~ah8FcrGb?Uv^Qub5ZT_kn%I^U2rxo1DDpmN@8uejxik`DK2~IDi1d?%~pR7i#KTS zA78XRx<(RYO0_uKnw~vBKi9zX8VnjZEi?vD?YAw}y+)wIjIVg&5(=%rjx3xQ_vGCy z*&$A+bT#9%ZjI;0w(k$|*x{I1c!ECMus|TEA#QE%#&LxfGvijl7Ih!B2 z6((F_gwkV;+oSKrtr&pX&fKo3s3`TG@ye+k3Ov)<#J|p8?vKh@<$YE@YIU1~@7{f+ zydTna#zv?)6&s=1gqH<-piG>E6XW8ZI7&b@-+Yk0Oan_CW!~Q2R{QvMm8_W1IV8<+ zQTyy=(Wf*qcQubRK)$B;QF}Y>V6d_NM#=-ydM?%EPo$Q+jkf}*UrzR?Nsf?~pzIj$ z<$wN;7c!WDZ(G_7N@YgZ``l;_eAd3+;omNjlpfn;0(B7L)^;;1SsI6Le+c^ULe;O@ zl+Z@OOAr4$a;=I~R0w4jO`*PKBp?3K+uJ+Tu8^%i<_~bU!p%so z^sjol^slR`W@jiqn!M~eClIIl+`A5%lGT{z^mRbpv}~AyO%R*jmG_Wrng{B9TwIuS z0!@fsM~!57K1l0%{yy(#no}roy#r!?0wm~HT!vLDfEBs9x#`9yCKgufm0MjVRfZ=f z4*ZRc2Lgr(P+j2zQE_JzYmP0*;trl7{*N341Cq}%^M^VC3gKG-hY zmPT>ECyrhIoFhnMB^qpdbiuI}pk{qPbK^}0?Rf7^{98+95zNq6!RuV_zAe&nDk0;f zez~oXlE5%ve^TmBEt*x_X#fs(-En$jXr-R4sb$b~`nS=iOy|OVrph(U&cVS!IhmZ~ zKIRA9X%Wp1J=vTvHZ~SDe_JXOe9*fa zgEPf;gD^|qE=dl>Qkx3(80#SE7oxXQ(n4qQ#by{uppSKoDbaq`U+fRqk0BwI>IXV3 zD#K%ASkzd7u>@|pA=)Z>rQr@dLH}*r7r0ng zxa^eME+l*s7{5TNu!+bD{Pp@2)v%g6^>yj{XP&mShhg9GszNu4ITW=XCIUp2Xro&1 zg_D=J3r)6hp$8+94?D$Yn2@Kp-3LDsci)<-H!wCeQt$e9Jk)K86hvV^*Nj-Ea*o;G zsuhRw$H{$o>8qByz1V!(yV{p_0X?Kmy%g#1oSmlHsw;FQ%j9S#}ha zm0Nx09@jmOtP8Q+onN^BAgd8QI^(y!n;-APUpo5WVdmp8!`yKTlF>cqn>ag`4;o>i zl!M0G-(S*fm6VjYy}J}0nX7nJ$h`|b&KuW4d&W5IhbR;-)*9Y0(Jj|@j`$xoPQ=Cl literal 0 HcmV?d00001 diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3f5fa40fb3d1e0710331a48de5d256da3f275d GIT binary patch literal 520 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 literal 0 HcmV?d00001 diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1632cfddf3d9dade342351e627a0a75609fb46 GIT binary patch literal 2218 zcmV;b2vzrqP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuE6iGxuRCodHTWf3-RTMruyW6Fu zQYeUM04eX6D5c0FCjKKPrco1(K`<0SL=crI{PC3-^hZU0kQie$gh-5!7z6SH6Q0J% zqot*`H1q{R5fHFYS}dje@;kG=v$L0(yY0?wY2%*c?A&{2?!D*x?m71{of2gv!$5|C z3>qG_BW}7K_yUcT3A5C6QD<+{aq?x;MAUyAiJn#Jv8_zZtQ{P zTRzbL3U9!qVuZzS$xKU10KiW~Bgdcv1-!uAhQxf3a7q+dU6lj?yoO4Lq4TUN4}h{N z*fIM=SS8|C2$(T>w$`t@3Tka!(r!7W`x z-isCVgQD^mG-MJ;XtJuK3V{Vy72GQ83KRWsHU?e*wrhKk=ApIYeDqLi;JI1e zuvv}5^Dc=k7F7?nm3nIw$NVmU-+R>> zyqOR$-2SDpJ}Pt;^RkJytDVXNTsu|mI1`~G7yw`EJR?VkGfNdqK9^^8P`JdtTV&tX4CNcV4 z&N06nZa??Fw1AgQOUSE2AmPE@WO(Fvo`%m`cDgiv(fAeRA%3AGXUbsGw{7Q`cY;1BI#ac3iN$$Hw z0LT0;xc%=q)me?Y*$xI@GRAw?+}>=9D+KTk??-HJ4=A>`V&vKFS75@MKdSF1JTq{S zc1!^8?YA|t+uKigaq!sT;Z!&0F2=k7F0PIU;F$leJLaw2UI6FL^w}OG&!;+b%ya1c z1n+6-inU<0VM-Y_s5iTElq)ThyF?StVcebpGI znw#+zLx2@ah{$_2jn+@}(zJZ{+}_N9BM;z)0yr|gF-4=Iyu@hI*Lk=-A8f#bAzc9f z`Kd6K--x@t04swJVC3JK1cHY-Hq+=|PN-VO;?^_C#;coU6TDP7Bt`;{JTG;!+jj(` zw5cLQ-(Cz-Tlb`A^w7|R56Ce;Wmr0)$KWOUZ6ai0PhzPeHwdl0H(etP zUV`va_i0s-4#DkNM8lUlqI7>YQLf)(lz9Q3Uw`)nc(z3{m5ZE77Ul$V%m)E}3&8L0 z-XaU|eB~Is08eORPk;=<>!1w)Kf}FOVS2l&9~A+@R#koFJ$Czd%Y(ENTV&A~U(IPI z;UY+gf+&6ioZ=roly<0Yst8ck>(M=S?B-ys3mLdM&)ex!hbt+ol|T6CTS+Sc0jv(& z7ijdvFwBq;0a{%3GGwkDKTeG`b+lyj0jjS1OMkYnepCdoosNY`*zmBIo*981BU%%U z@~$z0V`OVtIbEx5pa|Tct|Lg#ZQf5OYMUMRD>Wdxm5SAqV2}3!ceE-M2 z@O~lQ0OiKQp}o9I;?uxCgYVV?FH|?Riri*U$Zi_`V2eiA>l zdSm6;SEm6#T+SpcE8Ro_f2AwxzI z44hfe^WE3!h@W3RDyA_H440cpmYkv*)6m1XazTqw%=E5Xv7^@^^T7Q2wxr+Z2kVYr + + + + + + + + + + + + + + + + + + + + + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/macos/Runner/Configs/AppInfo.xcconfig b/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 0000000..b6ccdb3 --- /dev/null +++ b/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = doormile_flutter + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.doormile.doormileFlutter + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2026 com.doormile. All rights reserved. diff --git a/macos/Runner/Configs/Debug.xcconfig b/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 0000000..36b0fd9 --- /dev/null +++ b/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/macos/Runner/Configs/Release.xcconfig b/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 0000000..dff4f49 --- /dev/null +++ b/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/macos/Runner/Configs/Warnings.xcconfig b/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 0000000..42bcbf4 --- /dev/null +++ b/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/macos/Runner/DebugProfile.entitlements b/macos/Runner/DebugProfile.entitlements new file mode 100644 index 0000000..dddb8a3 --- /dev/null +++ b/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/macos/Runner/Info.plist b/macos/Runner/Info.plist new file mode 100644 index 0000000..4789daa --- /dev/null +++ b/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/macos/Runner/MainFlutterWindow.swift b/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 0000000..3cc05eb --- /dev/null +++ b/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/macos/Runner/Release.entitlements b/macos/Runner/Release.entitlements new file mode 100644 index 0000000..852fa1a --- /dev/null +++ b/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/macos/RunnerTests/RunnerTests.swift b/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000..61f3bd1 --- /dev/null +++ b/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Cocoa +import FlutterMacOS +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/pubspec.lock b/pubspec.lock new file mode 100644 index 0000000..2ed89b4 --- /dev/null +++ b/pubspec.lock @@ -0,0 +1,642 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + archive: + dependency: transitive + description: + name: archive + sha256: a96e8b390886ee8abb49b7bd3ac8df6f451c621619f52a26e815fdcf568959ff + url: "https://pub.dev" + source: hosted + version: "4.0.9" + args: + dependency: transitive + description: + name: args + sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 + url: "https://pub.dev" + source: hosted + version: "2.7.0" + async: + dependency: transitive + description: + name: async + sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37 + url: "https://pub.dev" + source: hosted + version: "2.13.1" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + characters: + dependency: transitive + description: + name: characters + sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 + url: "https://pub.dev" + source: hosted + version: "1.4.0" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f" + url: "https://pub.dev" + source: hosted + version: "2.0.4" + cli_util: + dependency: transitive + description: + name: cli_util + sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c + url: "https://pub.dev" + source: hosted + version: "0.4.2" + clock: + dependency: transitive + description: + name: clock + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b + url: "https://pub.dev" + source: hosted + version: "1.1.2" + code_assets: + dependency: transitive + description: + name: code_assets + sha256: bf394f466ba9205f1812a0433b392d6af280f155f56651eda7c18cc32ed493b8 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + collection: + dependency: transitive + description: + name: collection + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" + url: "https://pub.dev" + source: hosted + version: "1.19.1" + crypto: + dependency: transitive + description: + name: crypto + sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf + url: "https://pub.dev" + source: hosted + version: "3.0.7" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + sha256: "41e005c33bd814be4d3096aff55b1908d419fde52ca656c8c47719ec745873cd" + url: "https://pub.dev" + source: hosted + version: "1.0.9" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" + url: "https://pub.dev" + source: hosted + version: "1.3.3" + ffi: + dependency: transitive + description: + name: ffi + sha256: "6d7fd89431262d8f3125e81b50d3847a091d846eafcd4fdb88dd06f36d705a45" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + file: + dependency: transitive + description: + name: file + sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 + url: "https://pub.dev" + source: hosted + version: "7.0.1" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be + url: "https://pub.dev" + source: hosted + version: "1.1.1" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_launcher_icons: + dependency: "direct dev" + description: + name: flutter_launcher_icons + sha256: "526faf84284b86a4cb36d20a5e45147747b7563d921373d4ee0559c54fcdbcea" + url: "https://pub.dev" + source: hosted + version: "0.13.1" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: "3105dc8492f6183fb076ccf1f351ac3d60564bff92e20bfc4af9cc1651f4e7e1" + url: "https://pub.dev" + source: hosted + version: "6.0.0" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + geolocator: + dependency: "direct main" + description: + name: geolocator + sha256: f62bcd90459e63210bbf9c35deb6a51c521f992a78de19a1fe5c11704f9530e2 + url: "https://pub.dev" + source: hosted + version: "13.0.4" + geolocator_android: + dependency: transitive + description: + name: geolocator_android + sha256: fcb1760a50d7500deca37c9a666785c047139b5f9ee15aa5469fae7dbbe3170d + url: "https://pub.dev" + source: hosted + version: "4.6.2" + geolocator_apple: + dependency: transitive + description: + name: geolocator_apple + sha256: dbdd8789d5aaf14cf69f74d4925ad1336b4433a6efdf2fce91e8955dc921bf22 + url: "https://pub.dev" + source: hosted + version: "2.3.13" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + sha256: "30cb64f0b9adcc0fb36f628b4ebf4f731a2961a0ebd849f4b56200205056fe67" + url: "https://pub.dev" + source: hosted + version: "4.2.6" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + sha256: b1ae9bdfd90f861fde8fd4f209c37b953d65e92823cb73c7dee1fa021b06f172 + url: "https://pub.dev" + source: hosted + version: "4.1.3" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + sha256: "175435404d20278ffd220de83c2ca293b73db95eafbdc8131fe8609be1421eb6" + url: "https://pub.dev" + source: hosted + version: "0.2.5" + google_fonts: + dependency: "direct main" + description: + name: google_fonts + sha256: ba03d03bcaa2f6cb7bd920e3b5027181db75ab524f8891c8bc3aa603885b8055 + url: "https://pub.dev" + source: hosted + version: "6.3.3" + hooks: + dependency: transitive + description: + name: hooks + sha256: "62ae9bb76d02526c7c2110a19b6e6ad788fe28d35e553e35efb02a41a46ab43a" + url: "https://pub.dev" + source: hosted + version: "2.0.1" + http: + dependency: "direct main" + description: + name: http + sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412" + url: "https://pub.dev" + source: hosted + version: "1.6.0" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" + url: "https://pub.dev" + source: hosted + version: "4.1.2" + image: + dependency: transitive + description: + name: image + sha256: f9881ff4998044947ec38d098bc7c8316ae1186fa786eddffdb867b9bc94dfce + url: "https://pub.dev" + source: hosted + version: "4.8.0" + in_app_update: + dependency: "direct main" + description: + name: in_app_update + sha256: "9924a3efe592e1c0ec89dda3683b3cfec3d4cd02d908e6de00c24b759038ddb1" + url: "https://pub.dev" + source: hosted + version: "4.2.5" + jni: + dependency: transitive + description: + name: jni + sha256: c2230682d5bc2362c1c9e8d3c7f406d9cbba23ab3f2e203a025dd47e0fb2e68f + url: "https://pub.dev" + source: hosted + version: "1.0.0" + jni_flutter: + dependency: transitive + description: + name: jni_flutter + sha256: "8b59e590786050b1cd866677dddaf76b1ade5e7bc751abe04b86e84d379d3ba6" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: "2a743920d81b7910627f68ee2c9ac1fc0bfee32b9fc3403587d7c6791ca12f80" + url: "https://pub.dev" + source: hosted + version: "4.12.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" + url: "https://pub.dev" + source: hosted + version: "11.0.2" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" + url: "https://pub.dev" + source: hosted + version: "3.0.10" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + lints: + dependency: transitive + description: + name: lints + sha256: "12f842a479589fea194fe5c5a3095abc7be0c1f2ddfa9a0e76aed1dbd26a87df" + url: "https://pub.dev" + source: hosted + version: "6.1.0" + logging: + dependency: transitive + description: + name: logging + sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 + url: "https://pub.dev" + source: hosted + version: "1.3.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 + url: "https://pub.dev" + source: hosted + version: "0.12.17" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec + url: "https://pub.dev" + source: hosted + version: "0.11.1" + meta: + dependency: transitive + description: + name: meta + sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394" + url: "https://pub.dev" + source: hosted + version: "1.17.0" + objective_c: + dependency: transitive + description: + name: objective_c + sha256: "6cb691c686fa2838c6deb34980d426145c2a5d537491cb83d463c33cdbc726ed" + url: "https://pub.dev" + source: hosted + version: "9.4.1" + package_config: + dependency: transitive + description: + name: package_config + sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc + url: "https://pub.dev" + source: hosted + version: "2.2.0" + path: + dependency: transitive + description: + name: path + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" + url: "https://pub.dev" + source: hosted + version: "1.9.1" + path_provider: + dependency: transitive + description: + name: path_provider + sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd" + url: "https://pub.dev" + source: hosted + version: "2.1.5" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: "69cbd515a62b94d32a7944f086b2f82b4ac40a1d45bebfc00813a430ab2dabcd" + url: "https://pub.dev" + source: hosted + version: "2.3.1" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: "2a376b7d6392d80cd3705782d2caa734ca4727776db0b6ec36ef3f1855197699" + url: "https://pub.dev" + source: hosted + version: "2.6.0" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 + url: "https://pub.dev" + source: hosted + version: "2.2.1" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 + url: "https://pub.dev" + source: hosted + version: "2.3.0" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: "91bd59303e9f769f108f8df05e371341b15d59e995e6806aefab827b58336675" + url: "https://pub.dev" + source: hosted + version: "7.0.2" + platform: + dependency: transitive + description: + name: platform + sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984" + url: "https://pub.dev" + source: hosted + version: "3.1.6" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.dev" + source: hosted + version: "2.1.8" + posix: + dependency: transitive + description: + name: posix + sha256: "185ef7606574f789b40f289c233efa52e96dead518aed988e040a10737febb07" + url: "https://pub.dev" + source: hosted + version: "6.5.0" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + record_use: + dependency: transitive + description: + name: record_use + sha256: "2551bd8eecfe95d14ae75f6021ad0248be5c27f138c2ec12fcb52b500b3ba1ed" + url: "https://pub.dev" + source: hosted + version: "0.6.0" + shared_preferences: + dependency: "direct main" + description: + name: shared_preferences + sha256: c3025c5534b01739267eb7d76959bbc25a6d10f6988e1c2a3036940133dd10bf + url: "https://pub.dev" + source: hosted + version: "2.5.5" + shared_preferences_android: + dependency: transitive + description: + name: shared_preferences_android + sha256: e8d4762b1e2e8578fc4d0fd548cebf24afd24f49719c08974df92834565e2c53 + url: "https://pub.dev" + source: hosted + version: "2.4.23" + shared_preferences_foundation: + dependency: transitive + description: + name: shared_preferences_foundation + sha256: "4e7eaffc2b17ba398759f1151415869a34771ba11ebbccd1b0145472a619a64f" + url: "https://pub.dev" + source: hosted + version: "2.5.6" + shared_preferences_linux: + dependency: transitive + description: + name: shared_preferences_linux + sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + shared_preferences_platform_interface: + dependency: transitive + description: + name: shared_preferences_platform_interface + sha256: "649dc798a33931919ea356c4305c2d1f81619ea6e92244070b520187b5140ef9" + url: "https://pub.dev" + source: hosted + version: "2.4.2" + shared_preferences_web: + dependency: transitive + description: + name: shared_preferences_web + sha256: c49bd060261c9a3f0ff445892695d6212ff603ef3115edbb448509d407600019 + url: "https://pub.dev" + source: hosted + version: "2.4.3" + shared_preferences_windows: + dependency: transitive + description: + name: shared_preferences_windows + sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + source_span: + dependency: transitive + description: + name: source_span + sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab" + url: "https://pub.dev" + source: hosted + version: "1.10.2" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" + url: "https://pub.dev" + source: hosted + version: "1.12.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" + url: "https://pub.dev" + source: hosted + version: "1.4.1" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" + url: "https://pub.dev" + source: hosted + version: "1.2.2" + test_api: + dependency: transitive + description: + name: test_api + sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55 + url: "https://pub.dev" + source: hosted + version: "0.7.7" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 + url: "https://pub.dev" + source: hosted + version: "1.4.0" + uuid: + dependency: transitive + description: + name: uuid + sha256: "1fef9e8e11e2991bb773070d4656b7bd5d850967a2456cfc83cf47925ba79489" + url: "https://pub.dev" + source: hosted + version: "4.5.3" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b + url: "https://pub.dev" + source: hosted + version: "2.2.0" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360" + url: "https://pub.dev" + source: hosted + version: "15.2.0" + web: + dependency: transitive + description: + name: web + sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" + url: "https://pub.dev" + source: hosted + version: "1.1.1" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + xml: + dependency: transitive + description: + name: xml + sha256: "971043b3a0d3da28727e40ed3e0b5d18b742fa5a68665cca88e74b7876d5e025" + url: "https://pub.dev" + source: hosted + version: "6.6.1" + yaml: + dependency: transitive + description: + name: yaml + sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce + url: "https://pub.dev" + source: hosted + version: "3.1.3" +sdks: + dart: ">=3.10.7 <4.0.0" + flutter: ">=3.38.4" diff --git a/pubspec.yaml b/pubspec.yaml new file mode 100644 index 0000000..24313a8 --- /dev/null +++ b/pubspec.yaml @@ -0,0 +1,39 @@ +name: doormile_flutter +description: "Doormile CRM - Flutter App" +publish_to: 'none' +version: 1.0.7+8 + +environment: + sdk: ^3.10.7 + +dependencies: + flutter: + sdk: flutter + cupertino_icons: ^1.0.8 + google_fonts: ^6.2.1 + http: ^1.2.0 + geolocator: ^13.0.0 + shared_preferences: ^2.5.5 + in_app_update: ^4.2.5 + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^6.0.0 + flutter_launcher_icons: ^0.13.1 + +flutter_launcher_icons: + android: "launcher_icon" + ios: true + remove_alpha_ios: true + background_color_ios: "#FFFFFF" + image_path: "assets/doormilelogoround.png" + adaptive_icon_background: "#FFFFFF" + adaptive_icon_foreground: "assets/doormile_round_fg.png" + +flutter: + uses-material-design: true + assets: + - assets/preloader.png + - assets/doormilelogo512512.png + - assets/doormilelogoround.png diff --git a/qdrant/README.md b/qdrant/README.md new file mode 100644 index 0000000..7b4efc9 --- /dev/null +++ b/qdrant/README.md @@ -0,0 +1,28 @@ +# Qdrant Production Setup Guide + +## 1. How to run this on your Ubuntu VPS +1. Copy this entire `qdrant` folder to your Ubuntu server. +2. SSH into your server and navigate to this folder. +3. Run the following command to start the database in the background: + ```bash + docker compose up -d + ``` + +## 2. Accessing the UI Dashboard +Qdrant comes with a built-in, beautiful dashboard. +Once the container is running, open your web browser and go to: +`http://:6333/dashboard` + +Here you can: +- See all your Collections. +- View clusters and nodes. +- Visually inspect your vector payloads and data. + +## 3. Data Persistence +We have configured two persistent volumes: +- `./storage`: This is where the live database lives. Even if the server restarts, data is safe here. +- `./snapshots`: Use this folder to store manual database backups. + +## 4. Security Warning (Crucial) +By default, port `6333` is open. You **must** configure your Ubuntu UFW firewall so that only your backend server (e.g., your Node.js or Python API server) can access this port. +Do NOT leave it fully open to the public internet, or anyone can access your vectors. diff --git a/qdrant/docker-compose.yml b/qdrant/docker-compose.yml new file mode 100644 index 0000000..f6c7a51 --- /dev/null +++ b/qdrant/docker-compose.yml @@ -0,0 +1,32 @@ +version: '3.8' + +services: + qdrant: + image: qdrant/qdrant:latest + container_name: qdrant_production + restart: unless-stopped + ports: + # REST API & Web Dashboard (Accessible at http://:6333/dashboard) + - "6333:6333" + # gRPC API (For faster, low-latency communication with backends) + - "6334:6334" + volumes: + # Persistent Volume: Ensures data is never lost on restarts + - ./storage:/qdrant/storage + # Snapshots Volume: Dedicated folder for backups + - ./snapshots:/qdrant/snapshots + environment: + # Disable telemetry for privacy + - QDRANT__TELEMETRY_DISABLED=true + - QDRANT__SERVICE__API_KEY=Package@321# + ulimits: + # Professional tuning: Vector DBs need high open file limits for disk I/O + nofile: + soft: 65535 + hard: 65535 + deploy: + resources: + limits: + # Memory Limit: Prevents Qdrant from taking 100% of your VPS RAM. + # Adjust '4G' based on your actual VPS specs. + memory: 4G diff --git a/qdrant/migrate.py b/qdrant/migrate.py new file mode 100644 index 0000000..9fca122 --- /dev/null +++ b/qdrant/migrate.py @@ -0,0 +1,84 @@ +import os +from qdrant_client import QdrantClient +from qdrant_client.models import PointStruct + +# ========================================== +# 1. SETUP YOUR CONNECTIONS +# ========================================== +# Connect to your old Qdrant Cloud (Source) +cloud_client = QdrantClient( + url="https://369d1a18-9eaa-4bf9-be05-115c9f188387.us-west-1-0.aws.cloud.qdrant.io:6333", + api_key="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2Nlc3MiOiJtIiwic3ViamVjdCI6ImFwaS1rZXk6MDY3MmFiZDktOTRhZi00NWMyLWJhZDctNWZlNmI2MTRiZDBkIn0.z_En6ORE7oHyGRxBAAjkho8-b-cqTXbWOPUassDfbYw" +) + +# Connect to your new VPS Server (Destination) +vps_client = QdrantClient(url="http://66.116.207.225:6333") + +# We will loop through both of your collections! +COLLECTIONS_TO_MIGRATE = ["doormile_clients", "doormile_auth"] + +for collection_name in COLLECTIONS_TO_MIGRATE: + print(f"\n==========================================") + print(f"🚀 Starting migration for: {collection_name}") + print(f"==========================================") + + # ========================================== + # 2. RECREATE COLLECTION ON VPS + # ========================================== + try: + collection_info = cloud_client.get_collection(collection_name=collection_name) + except Exception as e: + print(f"Could not find collection '{collection_name}' on cloud. Skipping...") + continue + + print(f"Recreating '{collection_name}' on your VPS with identical settings...") + vps_client.recreate_collection( + collection_name=collection_name, + vectors_config=collection_info.config.params.vectors, + ) + + # ========================================== + # 3. TRANSFER THE DATA IN BATCHES + # ========================================== + batch_size = 100 + offset = None + total_migrated = 0 + + print("Starting data transfer...") + + while True: + # Fetch a batch of points from the cloud + records, offset = cloud_client.scroll( + collection_name=collection_name, + limit=batch_size, + offset=offset, + with_payload=True, + with_vectors=True + ) + + if not records: + break + + # Convert records to PointStruct format + points = [ + PointStruct( + id=record.id, + vector=record.vector, + payload=record.payload + ) + for record in records + ] + + # Upload the batch to your VPS + vps_client.upsert( + collection_name=collection_name, + points=points + ) + + total_migrated += len(points) + print(f" -> Copied {total_migrated} vectors...") + + if offset is None: + break + +print("\n✅ Migration Complete! Both collections are safely on your VPS.") diff --git a/qdrant/qdrant_to_postgres.py b/qdrant/qdrant_to_postgres.py new file mode 100644 index 0000000..05b9d5a --- /dev/null +++ b/qdrant/qdrant_to_postgres.py @@ -0,0 +1,126 @@ +import psycopg2 +from qdrant_client import QdrantClient +from psycopg2.extras import execute_values +import json + +# ========================================== +# 1. SETUP YOUR CONNECTIONS +# ========================================== + +# Connect to your Qdrant (using your Cloud connection details with API Key) +print("🔌 Connecting to Qdrant...") +qdrant_client = QdrantClient( + url="https://369d1a18-9eaa-4bf9-be05-115c9f188387.us-west-1-0.aws.cloud.qdrant.io:6333", + api_key="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2Nlc3MiOiJtIiwic3ViamVjdCI6ImFwaS1rZXk6MDY3MmFiZDktOTRhZi00NWMyLWJhZDctNWZlNmI2MTRiZDBkIn0.z_En6ORE7oHyGRxBAAjkho8-b-cqTXbWOPUassDfbYw" +) + +# Connect to your PostgreSQL Database (Credentials from your .env) +print("🔌 Connecting to PostgreSQL...") +try: + pg_conn = psycopg2.connect( + host="31.97.228.132", + port="5433", + dbname="logistics", + user="admin", + password="Package@321#" + ) + pg_cursor = pg_conn.cursor() + print("✅ PostgreSQL Connected!") +except Exception as e: + print(f"❌ Failed to connect to Postgres: {e}") + exit(1) + +# ========================================== +# 2. MIGRATION FUNCTIONS +# ========================================== + +def migrate_clients(): + print("\n🚀 Starting migration for: doormile_clients") + collection_name = "doormile_clients" + + # Scroll through all points in Qdrant + offset = None + batch_size = 100 + total_migrated = 0 + + while True: + records, offset = qdrant_client.scroll( + collection_name=collection_name, + limit=batch_size, + offset=offset, + with_payload=True, + with_vectors=False # We don't need vectors for Postgres! + ) + + if not records: + break + + for record in records: + payload = record.payload + + # Extract fields safely from payload (Fallback to empty string if missing) + first_name = payload.get("first_name", payload.get("name", "Unknown")) + last_name = payload.get("last_name", "") + phone = payload.get("phone", "") + address = payload.get("address", "") + + # We skip survey_lat/long here because old data likely doesn't have it, + # but we can add default 0.0 values if required by the database schema. + survey_lat = payload.get("survey_lat", 0.0) + survey_long = payload.get("survey_long", 0.0) + pincode = payload.get("pincode", "") + registration_source = payload.get("registration_source", "legacy_qdrant") + + # Insert into PostgreSQL + try: + pg_cursor.execute(""" + INSERT INTO doormile_clients + (first_name, last_name, phone, address, surveylat, surveylong, pincode, registration_source, created_at, updated_at) + VALUES (%s, %s, %s, %s, %s, %s, %s, %s, NOW(), NOW()) + RETURNING id; + """, (first_name, last_name, phone, address, survey_lat, survey_long, pincode, registration_source)) + + # Fetch the newly generated Postgres ID + new_client_id = pg_cursor.fetchone()[0] + + # Now we check if there's an email/password in this same payload, + # if so, we migrate it to the auth table simultaneously! + email = payload.get("email") + password = payload.get("password") # Note: You should hash this in Go, but here we preserve legacy passwords + + if email and password: + pg_cursor.execute(""" + INSERT INTO doormile_auth + (client_id, email, password_hash, role, created_at, updated_at) + VALUES (%s, %s, %s, 'user', NOW(), NOW()) + ON CONFLICT (email) DO NOTHING; + """, (new_client_id, email, password)) + + pg_conn.commit() + total_migrated += 1 + + except Exception as e: + pg_conn.rollback() + print(f"⚠️ Error inserting record {record.id}: {e}") + + print(f" -> Migrated {total_migrated} clients to Postgres...") + + if offset is None: + break + +# ========================================== +# 3. RUN THE MIGRATION +# ========================================== + +print("\n==========================================") +print("📦 MIGRATION INITIALIZED") +print("==========================================") + +# Execute the migration +migrate_clients() + +# Close connections +pg_cursor.close() +pg_conn.close() + +print("\n✅ Migration Complete! All legacy data is now strictly relational in PostgreSQL.") diff --git a/test/widget_test.dart b/test/widget_test.dart new file mode 100644 index 0000000..597cb4c --- /dev/null +++ b/test/widget_test.dart @@ -0,0 +1,9 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:doormile_flutter/main.dart'; + +void main() { + testWidgets('App smoke test', (WidgetTester tester) async { + await tester.pumpWidget(const DoorMileApp()); + expect(find.text('Doormile CRM'), findsWidgets); + }); +} diff --git a/web/favicon.png b/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/web/icons/Icon-192.png b/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 literal 0 HcmV?d00001 diff --git a/web/icons/Icon-512.png b/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 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 literal 0 HcmV?d00001 diff --git a/web/icons/Icon-maskable-192.png b/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/web/icons/Icon-maskable-512.png b/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 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 MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000..e93ccaa --- /dev/null +++ b/web/index.html @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + Doormile CRM + + + + + + diff --git a/web/manifest.json b/web/manifest.json new file mode 100644 index 0000000..433b090 --- /dev/null +++ b/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "Doormile CRM", + "short_name": "Doormile CRM", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "Doormile CRM - Flutter App", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/windows/.gitignore b/windows/.gitignore new file mode 100644 index 0000000..d492d0d --- /dev/null +++ b/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/windows/CMakeLists.txt b/windows/CMakeLists.txt new file mode 100644 index 0000000..f5825f0 --- /dev/null +++ b/windows/CMakeLists.txt @@ -0,0 +1,108 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(doormile_flutter LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "doormile_flutter") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(VERSION 3.14...3.25) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/windows/flutter/CMakeLists.txt b/windows/flutter/CMakeLists.txt new file mode 100644 index 0000000..903f489 --- /dev/null +++ b/windows/flutter/CMakeLists.txt @@ -0,0 +1,109 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + ${FLUTTER_TARGET_PLATFORM} $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000..1ece8f2 --- /dev/null +++ b/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,14 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + +#include + +void RegisterPlugins(flutter::PluginRegistry* registry) { + GeolocatorWindowsRegisterWithRegistrar( + registry->GetRegistrarForPlugin("GeolocatorWindows")); +} diff --git a/windows/flutter/generated_plugin_registrant.h b/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000..dc139d8 --- /dev/null +++ b/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake new file mode 100644 index 0000000..a49b9f6 --- /dev/null +++ b/windows/flutter/generated_plugins.cmake @@ -0,0 +1,25 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST + geolocator_windows +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST + jni +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/windows/runner/CMakeLists.txt b/windows/runner/CMakeLists.txt new file mode 100644 index 0000000..394917c --- /dev/null +++ b/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/windows/runner/Runner.rc b/windows/runner/Runner.rc new file mode 100644 index 0000000..7aeb5e1 --- /dev/null +++ b/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.doormile" "\0" + VALUE "FileDescription", "doormile_flutter" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "doormile_flutter" "\0" + VALUE "LegalCopyright", "Copyright (C) 2026 com.doormile. All rights reserved." "\0" + VALUE "OriginalFilename", "doormile_flutter.exe" "\0" + VALUE "ProductName", "doormile_flutter" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/windows/runner/flutter_window.cpp b/windows/runner/flutter_window.cpp new file mode 100644 index 0000000..955ee30 --- /dev/null +++ b/windows/runner/flutter_window.cpp @@ -0,0 +1,71 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/windows/runner/flutter_window.h b/windows/runner/flutter_window.h new file mode 100644 index 0000000..6da0652 --- /dev/null +++ b/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/windows/runner/main.cpp b/windows/runner/main.cpp new file mode 100644 index 0000000..737778d --- /dev/null +++ b/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"doormile_flutter", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/windows/runner/resource.h b/windows/runner/resource.h new file mode 100644 index 0000000..66a65d1 --- /dev/null +++ b/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/windows/runner/resources/app_icon.ico b/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04e20caf6370ebb9253ad831cc31de4a9c965f6 GIT binary patch literal 33772 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 literal 0 HcmV?d00001 diff --git a/windows/runner/runner.exe.manifest b/windows/runner/runner.exe.manifest new file mode 100644 index 0000000..153653e --- /dev/null +++ b/windows/runner/runner.exe.manifest @@ -0,0 +1,14 @@ + + + + + PerMonitorV2 + + + + + + + + + diff --git a/windows/runner/utils.cpp b/windows/runner/utils.cpp new file mode 100644 index 0000000..3a0b465 --- /dev/null +++ b/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + unsigned int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length == 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + input_length, utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/windows/runner/utils.h b/windows/runner/utils.h new file mode 100644 index 0000000..3879d54 --- /dev/null +++ b/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/windows/runner/win32_window.cpp b/windows/runner/win32_window.cpp new file mode 100644 index 0000000..60608d0 --- /dev/null +++ b/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/windows/runner/win32_window.h b/windows/runner/win32_window.h new file mode 100644 index 0000000..e901dde --- /dev/null +++ b/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_

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ℑLH^vV6!ltU%*7=%^zH&!eaFX1 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 V!zj{wQHMGNsHWkAiu;al{txy&3PS(@ literal 0 HcmV?d00001 diff --git a/assets/doormile_d_only.png b/assets/doormile_d_only.png new file mode 100644 index 0000000000000000000000000000000000000000..2020742e1c9300dc7b6445a746dc5b532f249528 GIT binary patch literal 102084 zcmeFYFyr7k&$#uz4|qS`=fmcF0M6cPulTLCek)2tO&$-M92)=tJVgarEdW46zM=tO4CIeMD)vwS z1OSS%(%N3x`%9jFlv7`Yj#i$#zVT?XY1~co6)K(0FpGTlUkUuL1pZe7|0{w2mB9b65-7Y^qTHsS5t-$v%&~ZMCJrH>B8&yWf@&YX zR*iEiQxDEjlV)0vjI)(ZQL*f!mJoU`e8=N=5V0b8?JL=~Tb|xhOwT|Aph_uVu`)LB z9)+$xz6y$rjFb~{&v*R$(kom=@Mu%>-9i-2rj)Rtl0AHkcL6@zMs@H~nb&n=GltvM z7JK4VWXUASC#|GUiZZ2yBCiaY;o%0A`kzbTYZ2535p(`a=7d4SC_zEB40KfmmtLX- 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 literal 0 HcmV?d00001 diff --git a/assets/doormile_round_fg.png b/assets/doormile_round_fg.png new file mode 100644 index 0000000000000000000000000000000000000000..fe08dc80b40ceae8abd737cdfd0a74a15bcae8de GIT binary patch literal 83771 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 literal 0 HcmV?d00001 diff --git a/assets/doormilelogo512512.png b/assets/doormilelogo512512.png new file mode 100644 index 0000000000000000000000000000000000000000..9d311920ed8231eb6d8efe3528c1a6e3691b94db GIT binary patch literal 22445 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