Commit 10fc2e7b authored by Sai Srinivas's avatar Sai Srinivas
Browse files

24-11 ios changes by srinivas

parent 1e949108
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "gen_services",
"request": "launch",
"type": "dart"
},
{
"name": "gen_services (profile mode)",
"request": "launch",
"type": "dart",
"flutterMode": "profile"
},
{
"name": "gen_services (release mode)",
"request": "launch",
"type": "dart",
"flutterMode": "release"
}
]
}
\ No newline at end of file
......@@ -21,6 +21,6 @@
<key>CFBundleVersion</key>
<string>1.0</string>
<key>MinimumOSVersion</key>
<string>12.0</string>
<string>13.0</string>
</dict>
</plist>
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "Generated.xcconfig"
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Generated.xcconfig"
# Uncomment this line to define a global platform for your project
platform :ios, '15.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
project 'Runner', {
'Debug' => :debug,
'Profile' => :release,
'Release' => :release,
}
def flutter_root
generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
unless File.exist?(generated_xcode_build_settings_path)
raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
end
File.foreach(generated_xcode_build_settings_path) do |line|
matches = line.match(/FLUTTER_ROOT\=(.*)/)
return matches[1].strip if matches
end
raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
end
require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
flutter_ios_podfile_setup
target 'Runner' do
use_frameworks!
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
target 'RunnerTests' do
inherit! :search_paths
end
end
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
end
end
PODS:
- connectivity_plus (0.0.1):
- Flutter
- device_info_plus (0.0.1):
- Flutter
- Flutter (1.0.0)
- flutter_inappwebview_ios (0.0.1):
- Flutter
- flutter_inappwebview_ios/Core (= 0.0.1)
- OrderedSet (~> 5.0.0)
- flutter_inappwebview_ios/Core (0.0.1):
- Flutter
- OrderedSet (~> 5.0.0)
- flutter_local_notifications (0.0.1):
- Flutter
- flutter_pdfview (1.0.2):
- Flutter
- fluttertoast (0.0.2):
- Flutter
- geocoding_ios (1.0.5):
- Flutter
- geolocator_apple (1.2.0):
- Flutter
- FlutterMacOS
- Google-Maps-iOS-Utils (6.1.0):
- GoogleMaps (~> 9.0)
- google_maps_flutter_ios (0.0.1):
- Flutter
- Google-Maps-iOS-Utils (< 7.0, >= 5.0)
- GoogleMaps (< 10.0, >= 8.4)
- GoogleMaps (9.4.0):
- GoogleMaps/Maps (= 9.4.0)
- GoogleMaps/Maps (9.4.0)
- location (0.0.1):
- Flutter
- open_filex (0.0.2):
- Flutter
- OrderedSet (5.0.0)
- package_info_plus (0.4.5):
- Flutter
- path_provider_foundation (0.0.1):
- Flutter
- FlutterMacOS
- permission_handler_apple (9.3.0):
- Flutter
- razorpay-core-pod (1.0.1)
- razorpay-pod (1.5.0):
- razorpay-core-pod
- razorpay_flutter (1.1.10):
- Flutter
- razorpay-pod
- shared_preferences_foundation (0.0.1):
- Flutter
- FlutterMacOS
- sqflite_darwin (0.0.4):
- Flutter
- FlutterMacOS
- syncfusion_flutter_pdfviewer (0.0.1):
- Flutter
- url_launcher_ios (0.0.1):
- Flutter
DEPENDENCIES:
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`)
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
- Flutter (from `Flutter`)
- flutter_inappwebview_ios (from `.symlinks/plugins/flutter_inappwebview_ios/ios`)
- flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`)
- flutter_pdfview (from `.symlinks/plugins/flutter_pdfview/ios`)
- fluttertoast (from `.symlinks/plugins/fluttertoast/ios`)
- geocoding_ios (from `.symlinks/plugins/geocoding_ios/ios`)
- geolocator_apple (from `.symlinks/plugins/geolocator_apple/darwin`)
- google_maps_flutter_ios (from `.symlinks/plugins/google_maps_flutter_ios/ios`)
- location (from `.symlinks/plugins/location/ios`)
- open_filex (from `.symlinks/plugins/open_filex/ios`)
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
- permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`)
- razorpay_flutter (from `.symlinks/plugins/razorpay_flutter/ios`)
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
- sqflite_darwin (from `.symlinks/plugins/sqflite_darwin/darwin`)
- syncfusion_flutter_pdfviewer (from `.symlinks/plugins/syncfusion_flutter_pdfviewer/ios`)
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
SPEC REPOS:
trunk:
- Google-Maps-iOS-Utils
- GoogleMaps
- OrderedSet
- razorpay-core-pod
- razorpay-pod
EXTERNAL SOURCES:
connectivity_plus:
:path: ".symlinks/plugins/connectivity_plus/ios"
device_info_plus:
:path: ".symlinks/plugins/device_info_plus/ios"
Flutter:
:path: Flutter
flutter_inappwebview_ios:
:path: ".symlinks/plugins/flutter_inappwebview_ios/ios"
flutter_local_notifications:
:path: ".symlinks/plugins/flutter_local_notifications/ios"
flutter_pdfview:
:path: ".symlinks/plugins/flutter_pdfview/ios"
fluttertoast:
:path: ".symlinks/plugins/fluttertoast/ios"
geocoding_ios:
:path: ".symlinks/plugins/geocoding_ios/ios"
geolocator_apple:
:path: ".symlinks/plugins/geolocator_apple/darwin"
google_maps_flutter_ios:
:path: ".symlinks/plugins/google_maps_flutter_ios/ios"
location:
:path: ".symlinks/plugins/location/ios"
open_filex:
:path: ".symlinks/plugins/open_filex/ios"
package_info_plus:
:path: ".symlinks/plugins/package_info_plus/ios"
path_provider_foundation:
:path: ".symlinks/plugins/path_provider_foundation/darwin"
permission_handler_apple:
:path: ".symlinks/plugins/permission_handler_apple/ios"
razorpay_flutter:
:path: ".symlinks/plugins/razorpay_flutter/ios"
shared_preferences_foundation:
:path: ".symlinks/plugins/shared_preferences_foundation/darwin"
sqflite_darwin:
:path: ".symlinks/plugins/sqflite_darwin/darwin"
syncfusion_flutter_pdfviewer:
:path: ".symlinks/plugins/syncfusion_flutter_pdfviewer/ios"
url_launcher_ios:
:path: ".symlinks/plugins/url_launcher_ios/ios"
SPEC CHECKSUMS:
connectivity_plus: 2a701ffec2c0ae28a48cf7540e279787e77c447d
device_info_plus: bf2e3232933866d73fe290f2942f2156cdd10342
Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467
flutter_inappwebview_ios: 8d8d2c6290a3c4787cad303603662fac9a788f75
flutter_local_notifications: ff50f8405aaa0ccdc7dcfb9022ca192e8ad9688f
flutter_pdfview: 2e4d13ffb774858562ffbdfdb61b40744b191adc
fluttertoast: 21eecd6935e7064cc1fcb733a4c5a428f3f24f0f
geocoding_ios: eafacae6ad11a1eb56681f7d11df602a5fd49416
geolocator_apple: 66b711889fd333205763b83c9dcf0a57a28c7afd
Google-Maps-iOS-Utils: 0a484b05ed21d88c9f9ebbacb007956edd508a96
google_maps_flutter_ios: e31555a04d1986ab130f2b9f24b6cdc861acc6d3
GoogleMaps: 0608099d4870cac8754bdba9b6953db543432438
location: d5cf8598915965547c3f36761ae9cc4f4e87d22e
open_filex: 6e26e659846ec990262224a12ef1c528bb4edbe4
OrderedSet: aaeb196f7fef5a9edf55d89760da9176ad40b93c
package_info_plus: c0502532a26c7662a62a356cebe2692ec5fe4ec4
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2
razorpay-core-pod: 42dadbbcef5a65abd02d7bac3e6bf76041934fdd
razorpay-pod: f634f1b8397eb54d547f25d35291f679545ddf17
razorpay_flutter: 84b3bfd206ae9c9c2a9ba585524a1b3d8102b6c1
shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78
sqflite_darwin: 5a7236e3b501866c1c9befc6771dfd73ffb8702d
syncfusion_flutter_pdfviewer: cfcf23c03816192575902e615fa50adc9f95b724
url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe
PODFILE CHECKSUM: 53a6aebc29ccee84c41f92f409fc20cd4ca011f1
COCOAPODS: 1.16.2
......@@ -10,10 +10,12 @@
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 */; };
47ED2C95F03C18A8823804C1 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BA3C70AC9614A88C2DE28A88 /* Pods_RunnerTests.framework */; };
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 */; };
CABCF338FF451E3585D448C9 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABEFC3EBFF0B7650E4FAA097 /* Pods_Runner.framework */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
......@@ -40,14 +42,17 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
0E039C6163CE7D6C12729126 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
32C3B06040D5A243739B7A4E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = "<group>"; };
331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; };
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 = "<group>"; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
8957A2CB7E0CE87635CFDC42 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
......@@ -55,13 +60,27 @@
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
ABEFC3EBFF0B7650E4FAA097 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
BA3C70AC9614A88C2DE28A88 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
C950D4300517912BEC221804 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = "<group>"; };
D2D49739FC2D6DDBA4658914 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
D97AD0AE38B67FAA1C6476DB /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
5D146B3AB0F4C47F68190048 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
47ED2C95F03C18A8823804C1 /* Pods_RunnerTests.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
97C146EB1CF9000F007C117D /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
CABCF338FF451E3585D448C9 /* Pods_Runner.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
......@@ -76,6 +95,15 @@
path = RunnerTests;
sourceTree = "<group>";
};
3779F469BBABB51AE865A249 /* Frameworks */ = {
isa = PBXGroup;
children = (
ABEFC3EBFF0B7650E4FAA097 /* Pods_Runner.framework */,
BA3C70AC9614A88C2DE28A88 /* Pods_RunnerTests.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
9740EEB11CF90186004384FC /* Flutter */ = {
isa = PBXGroup;
children = (
......@@ -94,6 +122,8 @@
97C146F01CF9000F007C117D /* Runner */,
97C146EF1CF9000F007C117D /* Products */,
331C8082294A63A400263BE5 /* RunnerTests */,
97FA775E5B3B3F7A0F5261EC /* Pods */,
3779F469BBABB51AE865A249 /* Frameworks */,
);
sourceTree = "<group>";
};
......@@ -121,6 +151,19 @@
path = Runner;
sourceTree = "<group>";
};
97FA775E5B3B3F7A0F5261EC /* Pods */ = {
isa = PBXGroup;
children = (
0E039C6163CE7D6C12729126 /* Pods-Runner.debug.xcconfig */,
8957A2CB7E0CE87635CFDC42 /* Pods-Runner.release.xcconfig */,
D2D49739FC2D6DDBA4658914 /* Pods-Runner.profile.xcconfig */,
D97AD0AE38B67FAA1C6476DB /* Pods-RunnerTests.debug.xcconfig */,
32C3B06040D5A243739B7A4E /* Pods-RunnerTests.release.xcconfig */,
C950D4300517912BEC221804 /* Pods-RunnerTests.profile.xcconfig */,
);
path = Pods;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
......@@ -128,8 +171,10 @@
isa = PBXNativeTarget;
buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
buildPhases = (
D4813F842AD7CFE97AB661B3 /* [CP] Check Pods Manifest.lock */,
331C807D294A63A400263BE5 /* Sources */,
331C807F294A63A400263BE5 /* Resources */,
5D146B3AB0F4C47F68190048 /* Frameworks */,
);
buildRules = (
);
......@@ -145,12 +190,15 @@
isa = PBXNativeTarget;
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
D78FEB7382DD0BA2196F05F3 /* [CP] Check Pods Manifest.lock */,
9740EEB61CF901F6004384FC /* Run Script */,
97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */,
97C146EC1CF9000F007C117D /* Resources */,
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
78D12A815D3B0D2AA035174F /* [CP] Embed Pods Frameworks */,
4B86921D761924C5FA2593A4 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
......@@ -238,6 +286,40 @@
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
};
4B86921D761924C5FA2593A4 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
showEnvVarsInLog = 0;
};
78D12A815D3B0D2AA035174F /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
......@@ -253,6 +335,50 @@
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
};
D4813F842AD7CFE97AB661B3 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
D78FEB7382DD0BA2196F05F3 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
......@@ -346,7 +472,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
......@@ -362,22 +488,29 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = 72BV93K9AR;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.genService;
PRODUCT_BUNDLE_IDENTIFIER = in.webgrid.genservices;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;
VERSIONING_SYSTEM = "apple-generic";
};
name = Profile;
};
331C8088294A63A400263BE5 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = D97AD0AE38B67FAA1C6476DB /* Pods-RunnerTests.debug.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
......@@ -395,6 +528,7 @@
};
331C8089294A63A400263BE5 /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 32C3B06040D5A243739B7A4E /* Pods-RunnerTests.release.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
......@@ -410,6 +544,7 @@
};
331C808A294A63A400263BE5 /* Profile */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = C950D4300517912BEC221804 /* Pods-RunnerTests.profile.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
......@@ -472,7 +607,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
......@@ -523,7 +658,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
......@@ -541,17 +676,23 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = 72BV93K9AR;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.genService;
PRODUCT_BUNDLE_IDENTIFIER = in.webgrid.genservices;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;
VERSIONING_SYSTEM = "apple-generic";
};
name = Debug;
......@@ -563,16 +704,22 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = 72BV93K9AR;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.genService;
PRODUCT_BUNDLE_IDENTIFIER = in.webgrid.genservices;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;
VERSIONING_SYSTEM = "apple-generic";
};
name = Release;
......
......@@ -26,6 +26,7 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
shouldUseLaunchSchemeArgsEnv = "YES">
<MacroExpansion>
<BuildableReference
......@@ -51,9 +52,10 @@
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
buildConfiguration = "Release"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
......
......@@ -4,4 +4,7 @@
<FileRef
location = "group:Runner.xcodeproj">
</FileRef>
<FileRef
location = "group:Pods/Pods.xcodeproj">
</FileRef>
</Workspace>
import Flutter
import UIKit
import GoogleMaps
@main
@objc class AppDelegate: FlutterAppDelegate {
......@@ -7,6 +8,7 @@ import UIKit
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GMSServices.provideAPIKey("AIzaSyCA06NWEP5D-z8WpebENgd4mSOqV-uXIUE")
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
......
......@@ -2,10 +2,12 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CADisableMinimumFrameDurationOnPhone</key>
<true/>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
<string>Gen Service</string>
<string>My Gen</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
......@@ -24,6 +26,16 @@
<string>$(FLUTTER_BUILD_NUMBER)</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSPhotoLibraryUsageDescription</key>
<string>This app needs photo access to attach images to tickets</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>This app needs to access your location to show nearby service locations.</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>This app needs to access location in background.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>This app needs to access your location to show nearby service locations.</string>
<key>UIApplicationSupportsIndirectInputEvents</key>
<true/>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
......@@ -41,9 +53,5 @@
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>CADisableMinimumFrameDurationOnPhone</key>
<true/>
<key>UIApplicationSupportsIndirectInputEvents</key>
<true/>
</dict>
</plist>
......@@ -37,7 +37,6 @@ class MapProvider extends ChangeNotifier {
Timer? _debounceTimer;
LatLng? _mapCenter;
GetInTouchListResponse? get response => _response;
List<GetInTouchList> get locationsList => _locationsList;
String get googleAPIKey => _googleApikey;
......@@ -53,8 +52,6 @@ class MapProvider extends ChangeNotifier {
bool get isLoading => _isLoading;
Timer? get timer => _timer;
set markers(List<Marker> value) {
_markers = value;
if (value.isNotEmpty) {
......@@ -87,13 +84,16 @@ class MapProvider extends ChangeNotifier {
notifyListeners();
}
Future<void> getLocationPermission(BuildContext context, empId,
session,) async {
Future<void> getLocationPermission(
BuildContext context,
empId,
session,
) async {
_isLocationEnabled = await Geolocator.isLocationServiceEnabled();
LocationPermission permission = await Geolocator.checkPermission();
_hasLocationPermission =
permission == LocationPermission.always ||
permission == LocationPermission.whileInUse;
permission == LocationPermission.whileInUse;
final Location.Location location = Location.Location();
bool serviceEnabled;
......@@ -125,22 +125,24 @@ class MapProvider extends ChangeNotifier {
_currentLocation!.longitude!,
);
_latlongs =
'${_currentLocation!.latitude},${_currentLocation!.longitude}';
'${_currentLocation!.latitude},${_currentLocation!.longitude}';
_mapController?.animateCamera(CameraUpdate.newLatLng(_mapCenter!));
await nearbyServiceLocations(context, empId,
session,);
await nearbyServiceLocations(context, empId, session);
}
notifyListeners();
}
void onCameraMove(BuildContext context, CameraPosition position, empId,
session) {
void onCameraMove(
BuildContext context,
CameraPosition position,
empId,
session,
) {
_timer?.cancel();
_mapCenter = position.target;
_latlongs = '${_mapCenter!.latitude},${_mapCenter!.longitude}';
_timer = Timer(Duration(seconds: 1), () {
nearbyServiceLocations(context, empId,
session,);
nearbyServiceLocations(context, empId, session);
});
notifyListeners();
}
......@@ -150,30 +152,27 @@ class MapProvider extends ChangeNotifier {
_debounceTimer = Timer(duration, callback);
}
Future<void> nearbyServiceLocations(
BuildContext context,
empId,
session,
) async {
BuildContext context,
empId,
session,
) async {
try {
final data = await ApiCalling.fetchGetInTouchListApi(
empId,
session,
);
final data = await ApiCalling.fetchGetInTouchListApi(empId, session);
if (data != null) {
if (data.error == "0") {
_isLoading = false;
_response = data;
_locationsList = data.getInTouchList ?? [];
await updateMarkersFromApiResponse(context, data.getInTouchList??[]);
await updateMarkersFromApiResponse(
context,
data.getInTouchList ?? [],
);
if (_locationsList.isEmpty) {
// toast(context, 'No leads found within the selected radius.');
}
}
else {
} else {
// toast(context, data.message ?? 'Failed to load leads.');
_isLoading = false;
notifyListeners();
......@@ -192,67 +191,72 @@ class MapProvider extends ChangeNotifier {
}
Future<void> updateMarkersFromApiResponse(
BuildContext context,
List<GetInTouchList> locationsList,
) async {
BuildContext context,
List<GetInTouchList> locationsList,
) async {
print("markers updating");
_markers = await createMarkersFromApiResponse(context, locationsList);
_addresses.clear();
await Future.forEach(locationsList, (store) async {
String address = await _getAddressFromLatLng(store.loc);
_addresses.add(address);
print(_addresses);
});
try {
_markers = await createMarkersFromApiResponse(context, locationsList);
_addresses.clear();
await Future.forEach(locationsList, (store) async {
String address = await _getAddressFromLatLng(store.loc);
_addresses.add(address);
});
} catch (e) {}
notifyListeners();
}
Future<List<Marker>> createMarkersFromApiResponse(
BuildContext context,
List<GetInTouchList> locationsList,
) async {
BuildContext context,
List<GetInTouchList> locationsList,
) async {
List<Marker> markers = [];
ByteData data = await rootBundle.load("assets/images/maps_ic.png");
Uint8List bytes = data.buffer.asUint8List();
await Future.forEach(locationsList, (leads) async {
if (leads.loc == null || leads.id == null || leads.branchName == null) {
print(
'Skipping invalid lead: id=${leads.id}, name=${leads.branchName}, loc=${leads.loc}',
);
return;
}
ui.Codec codec = await ui.instantiateImageCodec(bytes);
ui.FrameInfo fi = await codec.getNextFrame();
Uint8List resizedBytes =
(await fi.image.toByteData(
format: ui.ImageByteFormat.png,
))!.buffer.asUint8List();
try {
ui.Codec codec = await ui.instantiateImageCodec(bytes);
ui.FrameInfo fi = await codec.getNextFrame();
Uint8List resizedBytes =
(await fi.image.toByteData(
format: ui.ImageByteFormat.png,
))!.buffer.asUint8List();
if (leads.loc != null) {
if (leads.loc!.isNotEmpty) {
markers.add(
Marker(
markerId: MarkerId(leads.id.toString()),
position: parseLatLng(leads.loc),
icon: BitmapDescriptor.fromBytes(resizedBytes),
infoWindow: InfoWindow(
title: leads.branchName ?? 'Unknown Lead',
snippet: leads.address ?? 'No address available',
markers.add(
Marker(
markerId: MarkerId(leads.id.toString()),
position: _parseLatLng(leads.loc),
icon: BitmapDescriptor.fromBytes(resizedBytes),
infoWindow: InfoWindow(
title: leads.branchName ?? 'Unknown Lead',
snippet: leads.address ?? 'No address available',
anchor: const Offset(0.5, 1.0),
),
zIndex: 100,
onTap: () {
_mapController?.showMarkerInfoWindow(MarkerId(leads.id.toString()));
print('Marker tapped: id=${leads.id}, name=${leads.branchName}');
},
),
);
anchor: const Offset(0.5, 1.0),
),
zIndex: 100,
onTap: () {
_mapController?.showMarkerInfoWindow(
MarkerId(leads.id.toString()),
);
print(
'Marker tapped: id=${leads.id}, name=${leads.branchName}',
);
},
),
);
}
}
} catch (e) {
print("Exception at Markers: $e");
}
});
return markers;
}
LatLng _parseLatLng(String? location) {
LatLng parseLatLng(String? location) {
if (location != null) {
List<String> parts = location.split(',');
if (parts.length == 2) {
......
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:gen_service/Notifiers/AuthProvider.dart';
......@@ -17,7 +19,6 @@ class LoginScreen extends StatefulWidget {
}
class _LoginScreenState extends State<LoginScreen> {
final TextEditingController _mobileController = TextEditingController();
final _formKey = GlobalKey<FormState>();
......@@ -59,11 +60,14 @@ class _LoginScreenState extends State<LoginScreen> {
await authProvider.fetchMobile(mob);
// Handle response - Check if error is "0" (string comparison)
if (authProvider.mobileResponse != null && authProvider.mobileResponse!.error == "0") {
if (authProvider.mobileResponse != null &&
authProvider.mobileResponse!.error == "0") {
AnimatedSnackBar.success(
context: context,
title: "OTP Sent",
message: authProvider.mobileResponse?.message ?? "OTP sent to your registered mobile number!",
message:
authProvider.mobileResponse?.message ??
"OTP sent to your registered mobile number!",
);
// Navigate to OTP screen after a short delay
......@@ -71,53 +75,56 @@ class _LoginScreenState extends State<LoginScreen> {
if (mounted) {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => OtpScreen(mob: mob),
),
MaterialPageRoute(builder: (context) => OtpScreen(mob: mob)),
);
}
});
} else {
CustomSnackBar.showWarning(
context: context,
title: "Login Failed",
message: authProvider.mobileResponse?.message.toString() ??
message:
authProvider.mobileResponse?.message.toString() ??
"Mobile number not registered or invalid",
);
}
}
@override
Widget build(BuildContext context) {
final authProvider = Provider.of<AuthProvider>(context);
final size = MediaQuery.of(context).size;
return Scaffold(
resizeToAvoidBottomInset: true,
backgroundColor: Colors.blue,
body: Stack(
children: [
/// 🔹 Background image
Container(// here is fixed same we need to do for profile here
width: double.infinity,
height: double.infinity,
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/background_png.png"),
fit: BoxFit.cover,
return SafeArea(
top: false,
bottom: Platform.isAndroid,
child: Scaffold(
resizeToAvoidBottomInset: true,
backgroundColor: Colors.blue,
body: Stack(
children: [
/// 🔹 Background image
Container(
// here is fixed same we need to do for profile here
width: double.infinity,
height: double.infinity,
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/background_png.png"),
fit: BoxFit.cover,
),
),
),
),
/// 🔹 Main content (scrollable & keyboard-safe)
SafeArea(// here is scrollable
child: LayoutBuilder(
/// 🔹 Main content (scrollable & keyboard-safe)
LayoutBuilder(
builder: (context, constraints) {
return SingleChildScrollView(
padding: EdgeInsets.only(
bottom: MediaQuery.of(context).viewInsets.bottom, // moves up with keyboard
bottom:
MediaQuery.of(
context,
).viewInsets.bottom, // moves up with keyboard
),
child: ConstrainedBox(
constraints: BoxConstraints(
......@@ -133,26 +140,28 @@ class _LoginScreenState extends State<LoginScreen> {
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
SizedBox(width: 30,),
SizedBox(width: 30),
SvgPicture.asset(
"assets/svg/gensis_latest_logo.svg",
height: 50,
color: Colors.white,
),
]
],
),
const SizedBox(height: 12),
const Spacer(),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
SizedBox(width: 6,),
SizedBox(width: 6),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 30, vertical: 12),
padding: const EdgeInsets.symmetric(
horizontal: 30,
vertical: 12,
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
......@@ -186,7 +195,10 @@ class _LoginScreenState extends State<LoginScreen> {
/// 🔹 Bottom Sheet style area
Container(
width: double.infinity,
padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 30),
padding: const EdgeInsets.symmetric(
horizontal: 20,
vertical: 30,
),
decoration: const BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.only(
......@@ -216,15 +228,27 @@ class _LoginScreenState extends State<LoginScreen> {
keyboardType: TextInputType.phone,
onChanged: _validatePhone,
maxLength: 10,
style: const TextStyle(color: Colors.black, fontFamily: "Poppins",fontSize: 14),
style: const TextStyle(
color: Colors.black,
fontFamily: "Poppins",
fontSize: 14,
),
decoration: InputDecoration(
hintText: "Enter Mobile No.",
hintStyle: const TextStyle(color: Colors.grey,fontFamily: "Poppins", fontSize: 14),
hintStyle: const TextStyle(
color: Colors.grey,
fontFamily: "Poppins",
fontSize: 14,
),
filled: true,
fillColor: AppColors.backgroundRegular,
counterText: "", // Remove character counter
contentPadding: const EdgeInsets.symmetric(
vertical: 16, horizontal: 20),
counterText:
"", // Remove character counter
contentPadding:
const EdgeInsets.symmetric(
vertical: 16,
horizontal: 20,
),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(30),
borderSide: BorderSide(
......@@ -235,8 +259,11 @@ class _LoginScreenState extends State<LoginScreen> {
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(30),
borderSide: BorderSide(
color: _showError ? Colors.red : Colors.blue,
width: 1
color:
_showError
? Colors.red
: Colors.blue,
width: 1,
),
),
),
......@@ -245,7 +272,10 @@ class _LoginScreenState extends State<LoginScreen> {
// ⚠ Validation message - Only show after button press and if invalid
if (_showError)
const Padding(
padding: EdgeInsets.only(left: 12, top: 8),
padding: EdgeInsets.only(
left: 12,
top: 8,
),
child: Align(
alignment: Alignment.centerLeft,
child: Text(
......@@ -267,14 +297,19 @@ class _LoginScreenState extends State<LoginScreen> {
height: 50,
child: ElevatedButton(
style: ElevatedButton.styleFrom(
backgroundColor: const Color(0xFF0086F1),
backgroundColor: const Color(
0xFF0086F1,
),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(30),
borderRadius: BorderRadius.circular(
30,
),
),
),
onPressed: (authProvider.isLoading)
? null
: () => _login(context),
onPressed:
(authProvider.isLoading)
? null
: () => _login(context),
child: const Text(
"Continue",
style: TextStyle(
......@@ -296,8 +331,8 @@ class _LoginScreenState extends State<LoginScreen> {
);
},
),
),
],
],
),
),
);
}
......
import 'dart:async';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:gen_service/Notifiers/AuthProvider.dart';
......@@ -17,8 +18,10 @@ class OtpScreen extends StatefulWidget {
}
class _OtpScreenState extends State<OtpScreen> {
final List<TextEditingController> _controllers =
List.generate(4, (_) => TextEditingController());
final List<TextEditingController> _controllers = List.generate(
4,
(_) => TextEditingController(),
);
final List<FocusNode> _focusNodes = List.generate(4, (_) => FocusNode());
final prefs = SharedPreferencesService.instance;
......@@ -78,13 +81,18 @@ class _OtpScreenState extends State<OtpScreen> {
AnimatedSnackBar.success(
context: context,
title: "Success",
message: authProvider.otpResponse?.message ?? "OTP Verified Successfully!",
message:
authProvider.otpResponse?.message ??
"OTP Verified Successfully!",
);
// ✅ Save session and accId
if (authProvider.otpResponse?.accId != null) {
await prefs.saveString("accId", authProvider.otpResponse!.accId!);
await prefs.saveString("session_id", authProvider.otpResponse!.sessionId!);
await prefs.saveString(
"session_id",
authProvider.otpResponse!.sessionId!,
);
await prefs.saveString("mob_number", widget.mob);
}
......@@ -92,11 +100,12 @@ class _OtpScreenState extends State<OtpScreen> {
Navigator.pushReplacement(
context,
PageRouteBuilder(
pageBuilder: (_, __, ___) => HomeScreen(
accId: authProvider.otpResponse!.accId!,
sessionId: authProvider.otpResponse!.sessionId.toString(),
mobNumber: widget.mob,
),
pageBuilder:
(_, __, ___) => HomeScreen(
accId: authProvider.otpResponse!.accId!,
sessionId: authProvider.otpResponse!.sessionId.toString(),
mobNumber: widget.mob,
),
transitionsBuilder: (_, animation, __, child) {
return FadeTransition(opacity: animation, child: child);
},
......@@ -107,7 +116,9 @@ class _OtpScreenState extends State<OtpScreen> {
CustomSnackBar.showError(
context: context,
title: "Error",
message: authProvider.otpResponse?.message ?? "Invalid OTP. Please try again.",
message:
authProvider.otpResponse?.message ??
"Invalid OTP. Please try again.",
);
}
} else {
......@@ -134,11 +145,13 @@ class _OtpScreenState extends State<OtpScreen> {
final authProvider = Provider.of<AuthProvider>(context, listen: false);
await authProvider.fetchMobile(widget.mob);
if (authProvider.mobileResponse != null && authProvider.mobileResponse?.error == "0") {
if (authProvider.mobileResponse != null &&
authProvider.mobileResponse?.error == "0") {
AnimatedSnackBar.success(
context: context,
title: "OTP Sent",
message: authProvider.mobileResponse?.message ?? "OTP sent successfully.",
message:
authProvider.mobileResponse?.message ?? "OTP sent successfully.",
);
setState(() {
......@@ -158,7 +171,8 @@ class _OtpScreenState extends State<OtpScreen> {
CustomSnackBar.showWarning(
context: context,
title: "Error",
message: authProvider.mobileResponse?.message ?? "Failed to resend OTP",
message:
authProvider.mobileResponse?.message ?? "Failed to resend OTP",
);
}
} catch (e) {
......@@ -227,32 +241,36 @@ class _OtpScreenState extends State<OtpScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.blue,
resizeToAvoidBottomInset: true,
body: Stack(
children: [
/// 🔹 Background
Container(
width: double.infinity,
height: double.infinity,
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/background_png.png"),
fit: BoxFit.cover,
return SafeArea(
top: false,
bottom: Platform.isAndroid,
child: Scaffold(
backgroundColor: Colors.blue,
resizeToAvoidBottomInset: true,
body: Stack(
children: [
/// 🔹 Background
Container(
width: double.infinity,
height: double.infinity,
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/background_png.png"),
fit: BoxFit.cover,
),
),
),
),
SafeArea(
child: LayoutBuilder(
LayoutBuilder(
builder: (context, constraints) {
return SingleChildScrollView(
padding: EdgeInsets.only(
bottom: MediaQuery.of(context).viewInsets.bottom,
),
child: ConstrainedBox(
constraints: BoxConstraints(minHeight: constraints.maxHeight),
constraints: BoxConstraints(
minHeight: constraints.maxHeight,
),
child: IntrinsicHeight(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
......@@ -277,9 +295,12 @@ class _OtpScreenState extends State<OtpScreen> {
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
SizedBox(width: 6,),
SizedBox(width: 6),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 30, vertical: 12),
padding: const EdgeInsets.symmetric(
horizontal: 30,
vertical: 12,
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
......@@ -307,12 +328,15 @@ class _OtpScreenState extends State<OtpScreen> {
),
],
),
SizedBox(height: 20,),
SizedBox(height: 20),
/// 🔹 Bottom sheet area
Container(
width: double.infinity,
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 30),
padding: const EdgeInsets.symmetric(
horizontal: 24,
vertical: 30,
),
decoration: const BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.only(
......@@ -334,41 +358,51 @@ class _OtpScreenState extends State<OtpScreen> {
const SizedBox(height: 24),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: List.generate(4, (i) => _buildOtpBox(i)),
mainAxisAlignment:
MainAxisAlignment.spaceEvenly,
children: List.generate(
4,
(i) => _buildOtpBox(i),
),
),
const SizedBox(height: 16),
/// 🔹 Resend OTP
TextButton(
onPressed: _secondsRemaining == 0 && !_isResending
? () => _resendOtp(context)
: null,
child: _isResending
? const SizedBox(
width: 20,
height: 20,
child: CircularProgressIndicator(
strokeWidth: 2,
color: Colors.blue,
),
)
: Text(
_secondsRemaining == 0
? "Resend OTP"
: "Resend OTP in $_secondsRemaining s",
style: TextStyle(
color: _secondsRemaining == 0
? const Color(0xFF008CDE)
: Colors.black45,
fontSize: 14,
decorationColor: const Color(0xFF008CDE),
decoration: _secondsRemaining == 0
? TextDecoration.underline
: TextDecoration.none,
),
),
onPressed:
_secondsRemaining == 0 && !_isResending
? () => _resendOtp(context)
: null,
child:
_isResending
? const SizedBox(
width: 20,
height: 20,
child: CircularProgressIndicator(
strokeWidth: 2,
color: Colors.blue,
),
)
: Text(
_secondsRemaining == 0
? "Resend OTP"
: "Resend OTP in $_secondsRemaining s",
style: TextStyle(
color:
_secondsRemaining == 0
? const Color(0xFF008CDE)
: Colors.black45,
fontSize: 14,
decorationColor: const Color(
0xFF008CDE,
),
decoration:
_secondsRemaining == 0
? TextDecoration.underline
: TextDecoration.none,
),
),
),
const SizedBox(height: 4),
......@@ -385,19 +419,20 @@ class _OtpScreenState extends State<OtpScreen> {
),
),
onPressed: _isVerifying ? null : _verifyOtp,
child: _isVerifying
? const CircularProgressIndicator(
strokeWidth: 2,
color: Colors.white,
)
: const Text(
"Continue",
style: TextStyle(
color: Colors.white,
fontSize: 16,
fontWeight: FontWeight.w600,
),
),
child:
_isVerifying
? const CircularProgressIndicator(
strokeWidth: 2,
color: Colors.white,
)
: const Text(
"Continue",
style: TextStyle(
color: Colors.white,
fontSize: 16,
fontWeight: FontWeight.w600,
),
),
),
),
const SizedBox(height: 12),
......@@ -411,8 +446,8 @@ class _OtpScreenState extends State<OtpScreen> {
);
},
),
),
],
],
),
),
);
}
......
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "ephemeral/Flutter-Generated.xcconfig"
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "ephemeral/Flutter-Generated.xcconfig"
platform :osx, '10.15'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
project 'Runner', {
'Debug' => :debug,
'Profile' => :release,
'Release' => :release,
}
def flutter_root
generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__)
unless File.exist?(generated_xcode_build_settings_path)
raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first"
end
File.foreach(generated_xcode_build_settings_path) do |line|
matches = line.match(/FLUTTER_ROOT\=(.*)/)
return matches[1].strip if matches
end
raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\""
end
require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
flutter_macos_podfile_setup
target 'Runner' do
use_frameworks!
flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__))
target 'RunnerTests' do
inherit! :search_paths
end
end
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_macos_build_settings(target)
end
end
......@@ -21,10 +21,10 @@ packages:
dependency: transitive
description:
name: async
sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63
sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb"
url: "https://pub.dev"
source: hosted
version: "2.12.0"
version: "2.13.0"
boolean_selector:
dependency: transitive
description:
......@@ -189,10 +189,10 @@ packages:
dependency: transitive
description:
name: fake_async
sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc"
sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
url: "https://pub.dev"
source: hosted
version: "1.3.2"
version: "1.3.3"
ffi:
dependency: transitive
description:
......@@ -588,26 +588,26 @@ packages:
dependency: transitive
description:
name: leak_tracker
sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec
sha256: "8dcda04c3fc16c14f48a7bb586d4be1f0d1572731b6d81d51772ef47c02081e0"
url: "https://pub.dev"
source: hosted
version: "10.0.8"
version: "11.0.1"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
url: "https://pub.dev"
source: hosted
version: "3.0.9"
version: "3.0.10"
leak_tracker_testing:
dependency: transitive
description:
name: leak_tracker_testing
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
url: "https://pub.dev"
source: hosted
version: "3.0.1"
version: "3.0.2"
lints:
dependency: transitive
description:
......@@ -1257,10 +1257,10 @@ packages:
dependency: transitive
description:
name: vm_service
sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14"
sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02
url: "https://pub.dev"
source: hosted
version: "14.3.1"
version: "15.0.0"
web:
dependency: transitive
description:
......
......@@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
# In Windows, build-name is used as the major, minor, and patch parts
# of the product and file versions while build-number is used as the build suffix.
version: 1.0.1+2
version: 1.0.1+3
environment:
sdk: ^3.7.2
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment