Commit 25d9c72d by Ramesh Babu Puvvadi

added CameraScreen

parent dd5ac309
File mode changed from 100644 to 100755
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
# This file should be version controlled and should not be manually edited. # This file should be version controlled and should not be manually edited.
version: version:
revision: "ead455963c12b453cdb2358cad34969c76daf180" revision: "78666c8dc57e9f7548ca9f8dd0740fbf0c658dc9"
channel: "stable" channel: "stable"
project_type: app project_type: app
...@@ -13,26 +13,26 @@ project_type: app ...@@ -13,26 +13,26 @@ project_type: app
migration: migration:
platforms: platforms:
- platform: root - platform: root
create_revision: ead455963c12b453cdb2358cad34969c76daf180 create_revision: 78666c8dc57e9f7548ca9f8dd0740fbf0c658dc9
base_revision: ead455963c12b453cdb2358cad34969c76daf180 base_revision: 78666c8dc57e9f7548ca9f8dd0740fbf0c658dc9
- platform: android - platform: android
create_revision: ead455963c12b453cdb2358cad34969c76daf180 create_revision: 78666c8dc57e9f7548ca9f8dd0740fbf0c658dc9
base_revision: ead455963c12b453cdb2358cad34969c76daf180 base_revision: 78666c8dc57e9f7548ca9f8dd0740fbf0c658dc9
- platform: ios - platform: ios
create_revision: ead455963c12b453cdb2358cad34969c76daf180 create_revision: 78666c8dc57e9f7548ca9f8dd0740fbf0c658dc9
base_revision: ead455963c12b453cdb2358cad34969c76daf180 base_revision: 78666c8dc57e9f7548ca9f8dd0740fbf0c658dc9
- platform: linux - platform: linux
create_revision: ead455963c12b453cdb2358cad34969c76daf180 create_revision: 78666c8dc57e9f7548ca9f8dd0740fbf0c658dc9
base_revision: ead455963c12b453cdb2358cad34969c76daf180 base_revision: 78666c8dc57e9f7548ca9f8dd0740fbf0c658dc9
- platform: macos - platform: macos
create_revision: ead455963c12b453cdb2358cad34969c76daf180 create_revision: 78666c8dc57e9f7548ca9f8dd0740fbf0c658dc9
base_revision: ead455963c12b453cdb2358cad34969c76daf180 base_revision: 78666c8dc57e9f7548ca9f8dd0740fbf0c658dc9
- platform: web - platform: web
create_revision: ead455963c12b453cdb2358cad34969c76daf180 create_revision: 78666c8dc57e9f7548ca9f8dd0740fbf0c658dc9
base_revision: ead455963c12b453cdb2358cad34969c76daf180 base_revision: 78666c8dc57e9f7548ca9f8dd0740fbf0c658dc9
- platform: windows - platform: windows
create_revision: ead455963c12b453cdb2358cad34969c76daf180 create_revision: 78666c8dc57e9f7548ca9f8dd0740fbf0c658dc9
base_revision: ead455963c12b453cdb2358cad34969c76daf180 base_revision: 78666c8dc57e9f7548ca9f8dd0740fbf0c658dc9
# User provided section # User provided section
......
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
...@@ -45,7 +45,7 @@ android { ...@@ -45,7 +45,7 @@ android {
applicationId "com.sopt.vasthram" applicationId "com.sopt.vasthram"
// You can update the following values to match your application needs. // You can update the following values to match your application needs.
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
minSdkVersion 21 minSdkVersion 26
targetSdkVersion flutter.targetSdkVersion targetSdkVersion flutter.targetSdkVersion
versionCode flutterVersionCode.toInteger() versionCode flutterVersionCode.toInteger()
versionName flutterVersionName versionName flutterVersionName
...@@ -64,4 +64,9 @@ flutter { ...@@ -64,4 +64,9 @@ flutter {
source '../..' source '../..'
} }
dependencies {}
dependencies {
implementation 'org.tensorflow:tensorflow-lite:2.12.0'
implementation 'org.tensorflow:tensorflow-lite-gpu:2.12.0'
}
...@@ -4,4 +4,8 @@ ...@@ -4,4 +4,8 @@
to allow setting breakpoints, to provide hot reload, etc. to allow setting breakpoints, to provide hot reload, etc.
--> -->
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest> </manifest>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application <application
android:label="vasthram" android:label="vasthram"
android:name="${applicationName}" android:name="${applicationName}"
...@@ -11,8 +15,9 @@ ...@@ -11,8 +15,9 @@
android:exported="true" android:exported="true"
android:launchMode="singleTop" android:launchMode="singleTop"
android:theme="@style/LaunchTheme" android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:configChanges="orientation|screenSize|keyboardHidden"
android:hardwareAccelerated="true" android:hardwareAccelerated="true"
android:requestLegacyExternalStorage="true"
android:windowSoftInputMode="adjustResize"> android:windowSoftInputMode="adjustResize">
<!-- Specifies an Android theme to apply to this Activity as soon as <!-- Specifies an Android theme to apply to this Activity as soon as
...@@ -36,3 +41,4 @@ ...@@ -36,3 +41,4 @@
android:value="2" /> android:value="2" />
</application> </application>
</manifest> </manifest>
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
...@@ -4,4 +4,8 @@ ...@@ -4,4 +4,8 @@
to allow setting breakpoints, to provide hot reload, etc. to allow setting breakpoints, to provide hot reload, etc.
--> -->
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest> </manifest>
buildscript { buildscript {
ext.kotlin_version = '1.7.10' ext.kotlin_version = '1.8.10'
repositories { repositories {
google() google()
mavenCentral() mavenCentral()
......
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
assets/images/bg.png

1 MB | W: | H:

assets/images/bg.png

2.03 MB | W: | H:

assets/images/bg.png
assets/images/bg.png
assets/images/bg.png
assets/images/bg.png
  • 2-up
  • Swipe
  • Onion skin
assets/images/camera.png

8.93 KB | W: | H:

assets/images/camera.png

10 KB | W: | H:

assets/images/camera.png
assets/images/camera.png
assets/images/camera.png
assets/images/camera.png
  • 2-up
  • Swipe
  • Onion skin
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
assets/images/logo.png

53.4 KB | W: | H:

assets/images/logo.png

163 KB | W: | H:

assets/images/logo.png
assets/images/logo.png
assets/images/logo.png
assets/images/logo.png
  • 2-up
  • Swipe
  • Onion skin
assets/images/password.png

14.9 KB | W: | H:

assets/images/password.png

4.41 KB | W: | H:

assets/images/password.png
assets/images/password.png
assets/images/password.png
assets/images/password.png
  • 2-up
  • Swipe
  • Onion skin
assets/images/signin.png

8.49 KB | W: | H:

assets/images/signin.png

3.53 KB | W: | H:

assets/images/signin.png
assets/images/signin.png
assets/images/signin.png
assets/images/signin.png
  • 2-up
  • Swipe
  • Onion skin
assets/images/signout.png

3.32 KB | W: | H:

assets/images/signout.png

2.8 KB | W: | H:

assets/images/signout.png
assets/images/signout.png
assets/images/signout.png
assets/images/signout.png
  • 2-up
  • Swipe
  • Onion skin
assets/images/splash.png

1.05 MB | W: | H:

assets/images/splash.png

244 KB | W: | H:

assets/images/splash.png
assets/images/splash.png
assets/images/splash.png
assets/images/splash.png
  • 2-up
  • Swipe
  • Onion skin
assets/images/user.png

16.2 KB | W: | H:

assets/images/user.png

5.78 KB | W: | H:

assets/images/user.png
assets/images/user.png
assets/images/user.png
assets/images/user.png
  • 2-up
  • Swipe
  • Onion skin
File mode changed from 100644 to 100755
...@@ -21,6 +21,6 @@ ...@@ -21,6 +21,6 @@
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>1.0</string> <string>1.0</string>
<key>MinimumOSVersion</key> <key>MinimumOSVersion</key>
<string>11.0</string> <string>12.0</string>
</dict> </dict>
</plist> </plist>
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
# Uncomment this line to define a global platform for your project # Uncomment this line to define a global platform for your project
# platform :ios, '11.0' platform :ios, '12.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency. # CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true' ENV['COCOAPODS_DISABLE_STATS'] = 'true'
......
...@@ -11,6 +11,28 @@ PODS: ...@@ -11,6 +11,28 @@ PODS:
- shared_preferences_foundation (0.0.1): - shared_preferences_foundation (0.0.1):
- Flutter - Flutter
- FlutterMacOS - FlutterMacOS
- TensorFlowLiteC (2.12.0):
- TensorFlowLiteC/Core (= 2.12.0)
- TensorFlowLiteC/Core (2.12.0)
- TensorFlowLiteC/CoreML (2.12.0):
- TensorFlowLiteC/Core
- TensorFlowLiteC/Metal (2.12.0):
- TensorFlowLiteC/Core
- TensorFlowLiteSwift (2.12.0):
- TensorFlowLiteSwift/Core (= 2.12.0)
- TensorFlowLiteSwift/Core (2.12.0):
- TensorFlowLiteC (= 2.12.0)
- TensorFlowLiteSwift/CoreML (2.12.0):
- TensorFlowLiteC/CoreML (= 2.12.0)
- TensorFlowLiteSwift/Core (= 2.12.0)
- TensorFlowLiteSwift/Metal (2.12.0):
- TensorFlowLiteC/Metal (= 2.12.0)
- TensorFlowLiteSwift/Core (= 2.12.0)
- tflite_flutter (0.0.1):
- Flutter
- TensorFlowLiteSwift (= 2.12.0)
- TensorFlowLiteSwift/CoreML (= 2.12.0)
- TensorFlowLiteSwift/Metal (= 2.12.0)
DEPENDENCIES: DEPENDENCIES:
- camera_avfoundation (from `.symlinks/plugins/camera_avfoundation/ios`) - camera_avfoundation (from `.symlinks/plugins/camera_avfoundation/ios`)
...@@ -18,10 +40,13 @@ DEPENDENCIES: ...@@ -18,10 +40,13 @@ DEPENDENCIES:
- Flutter (from `Flutter`) - Flutter (from `Flutter`)
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
- tflite_flutter (from `.symlinks/plugins/tflite_flutter/ios`)
SPEC REPOS: SPEC REPOS:
trunk: trunk:
- Reachability - Reachability
- TensorFlowLiteC
- TensorFlowLiteSwift
EXTERNAL SOURCES: EXTERNAL SOURCES:
camera_avfoundation: camera_avfoundation:
...@@ -34,15 +59,20 @@ EXTERNAL SOURCES: ...@@ -34,15 +59,20 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/image_picker_ios/ios" :path: ".symlinks/plugins/image_picker_ios/ios"
shared_preferences_foundation: shared_preferences_foundation:
:path: ".symlinks/plugins/shared_preferences_foundation/darwin" :path: ".symlinks/plugins/shared_preferences_foundation/darwin"
tflite_flutter:
:path: ".symlinks/plugins/tflite_flutter/ios"
SPEC CHECKSUMS: SPEC CHECKSUMS:
camera_avfoundation: 3125e8cd1a4387f6f31c6c63abb8a55892a9eeeb camera_avfoundation: 759172d1a77ae7be0de08fc104cfb79738b8a59e
connectivity: c4130b2985d4ef6fd26f9702e886bd5260681467 connectivity: c4130b2985d4ef6fd26f9702e886bd5260681467
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
image_picker_ios: 4a8aadfbb6dc30ad5141a2ce3832af9214a705b5 image_picker_ios: c560581cceedb403a6ff17f2f816d7fea1421fc1
Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96 Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96
shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126 shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78
TensorFlowLiteC: 20785a69299185a379ba9852b6625f00afd7984a
TensorFlowLiteSwift: 3a4928286e9e35bdd3e17970f48e53c80d25e793
tflite_flutter: 9433d086a3060431bbc9f3c7c20d017db0e72d08
PODFILE CHECKSUM: 70d9d25280d0dd177a5f637cdb0f0b0b12c6a189 PODFILE CHECKSUM: 7be2f5f74864d463a8ad433546ed1de7e0f29aef
COCOAPODS: 1.13.0 COCOAPODS: 1.15.2
...@@ -215,7 +215,7 @@ ...@@ -215,7 +215,7 @@
isa = PBXProject; isa = PBXProject;
attributes = { attributes = {
BuildIndependentTargetsInParallel = YES; BuildIndependentTargetsInParallel = YES;
LastUpgradeCheck = 1430; LastUpgradeCheck = 1510;
ORGANIZATIONNAME = ""; ORGANIZATIONNAME = "";
TargetAttributes = { TargetAttributes = {
331C8080294A63A400263BE5 = { 331C8080294A63A400263BE5 = {
...@@ -434,6 +434,7 @@ ...@@ -434,6 +434,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES;
...@@ -444,6 +445,7 @@ ...@@ -444,6 +445,7 @@
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO; ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu99; GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES; GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
...@@ -452,7 +454,7 @@ ...@@ -452,7 +454,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0; IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO; MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos; SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos; SUPPORTED_PLATFORMS = iphoneos;
...@@ -470,6 +472,7 @@ ...@@ -470,6 +472,7 @@
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = 26J2TYD7PU; DEVELOPMENT_TEAM = 26J2TYD7PU;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
...@@ -490,6 +493,7 @@ ...@@ -490,6 +493,7 @@
BUNDLE_LOADER = "$(TEST_HOST)"; BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1; CURRENT_PROJECT_VERSION = 1;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0; MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.example.vasthram.RunnerTests; PRODUCT_BUNDLE_IDENTIFIER = com.example.vasthram.RunnerTests;
...@@ -508,6 +512,7 @@ ...@@ -508,6 +512,7 @@
BUNDLE_LOADER = "$(TEST_HOST)"; BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1; CURRENT_PROJECT_VERSION = 1;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0; MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.example.vasthram.RunnerTests; PRODUCT_BUNDLE_IDENTIFIER = com.example.vasthram.RunnerTests;
...@@ -524,6 +529,7 @@ ...@@ -524,6 +529,7 @@
BUNDLE_LOADER = "$(TEST_HOST)"; BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1; CURRENT_PROJECT_VERSION = 1;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0; MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.example.vasthram.RunnerTests; PRODUCT_BUNDLE_IDENTIFIER = com.example.vasthram.RunnerTests;
...@@ -556,6 +562,7 @@ ...@@ -556,6 +562,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES;
...@@ -566,6 +573,7 @@ ...@@ -566,6 +573,7 @@
DEBUG_INFORMATION_FORMAT = dwarf; DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES; ENABLE_TESTABILITY = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu99; GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO; GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES; GCC_NO_COMMON_BLOCKS = YES;
...@@ -580,7 +588,7 @@ ...@@ -580,7 +588,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0; IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = YES; MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES; ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos; SDKROOT = iphoneos;
...@@ -611,6 +619,7 @@ ...@@ -611,6 +619,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES;
...@@ -621,6 +630,7 @@ ...@@ -621,6 +630,7 @@
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO; ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu99; GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES; GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
...@@ -629,7 +639,7 @@ ...@@ -629,7 +639,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0; IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO; MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos; SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos; SUPPORTED_PLATFORMS = iphoneos;
...@@ -649,6 +659,7 @@ ...@@ -649,6 +659,7 @@
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = 26J2TYD7PU; DEVELOPMENT_TEAM = 26J2TYD7PU;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
...@@ -672,6 +683,7 @@ ...@@ -672,6 +683,7 @@
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = 26J2TYD7PU; DEVELOPMENT_TEAM = 26J2TYD7PU;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
......
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<Scheme <Scheme
LastUpgradeVersion = "1430" LastUpgradeVersion = "1510"
version = "1.3"> version = "1.3">
<BuildAction <BuildAction
parallelizeBuildables = "YES" parallelizeBuildables = "YES"
......
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
import UIKit import UIKit
import Flutter import Flutter
@UIApplicationMain @main
@objc class AppDelegate: FlutterAppDelegate { @objc class AppDelegate: FlutterAppDelegate {
override func application( override func application(
_ application: UIApplication, _ application: UIApplication,
......
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
...@@ -36,6 +36,9 @@ ...@@ -36,6 +36,9 @@
<key>NSMicrophoneUsageDescription</key> <key>NSMicrophoneUsageDescription</key>
<string>Microphone access is required to record audio for video content creation.</string> <string>Microphone access is required to record audio for video content creation.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Allow for Current Location</string>
<key>UIApplicationSupportsIndirectInputEvents</key> <key>UIApplicationSupportsIndirectInputEvents</key>
<true/> <true/>
<key>UILaunchStoryboardName</key> <key>UILaunchStoryboardName</key>
......
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
// import 'dart:io';
// import 'package:camera/camera.dart';
// import 'package:flutter/material.dart';
// class CameraScreen extends StatefulWidget {
// @override
// _CameraScreenState createState() => _CameraScreenState();
// }
// class _CameraScreenState extends State<CameraScreen> {
// late CameraController _controller;
// Future<void>? _initializeControllerFuture;
// List<CameraDescription> cameras = [];
// late CameraDescription firstCamera;
// bool _isCameraInitialized = false;
// File? imageFile;
// @override
// void initState() {
// super.initState();
// _initializeCamera();
// }
// Future<void> _initializeCamera() async {
// try {
// cameras = await availableCameras();
// if (cameras.isEmpty) {
// throw CameraException('No cameras available', '');
// }
// firstCamera = cameras.first;
// _controller = CameraController(
// firstCamera,
// ResolutionPreset.high,
// );
// _initializeControllerFuture = _controller.initialize();
// await _initializeControllerFuture;
// if (!mounted) return;
// setState(() {
// _isCameraInitialized = true;
// });
// // Uncomment this line if you want to take a picture automatically after 2 seconds
// Future.delayed(const Duration(seconds: 2), _takePictureAutomatically);
// } catch (e) {
// print('Error initializing camera: $e');
// // Handle initialization error
// }
// }
// Future<void> _takePictureAutomatically() async {
// if (_controller.value.isInitialized) {
// try {
// XFile picture = await _controller.takePicture();
// imageFile = File(picture.path);
// print(imageFile!.path);
// Navigator.pop(context, imageFile);
// } catch (e) {
// print('Error taking picture: $e');
// // Handle error taking picture
// }
// }
// }
// @override
// void dispose() {
// _controller.dispose();
// super.dispose();
// }
// @override
// Widget build(BuildContext context) {
// return Scaffold(
// body: FutureBuilder<void>(
// future: _initializeControllerFuture,
// builder: (context, snapshot) {
// if (snapshot.connectionState == ConnectionState.done &&
// _isCameraInitialized) {
// return CameraPreview(_controller);
// } else {
// return Center(child: CircularProgressIndicator());
// }
// },
// ),
// );
// }
// }
import 'dart:io';
import 'package:camera/camera.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
class CameraScreen extends StatefulWidget {
@override
_CameraScreenState createState() => _CameraScreenState();
}
class _CameraScreenState extends State<CameraScreen> {
late CameraController _controller;
Future<void>? _initializeControllerFuture;
List<CameraDescription> cameras = [];
late CameraDescription firstCamera;
bool _isCameraInitialized = false;
File? imageFile;
@override
void initState() {
super.initState();
_initializeCamera();
}
Future<void> _initializeCamera() async {
try {
cameras = await availableCameras();
if (cameras.isEmpty) {
throw CameraException('No cameras available', '');
}
firstCamera = cameras.first;
_controller = CameraController(
firstCamera,
ResolutionPreset.veryHigh,
);
_initializeControllerFuture = _controller.initialize();
await _initializeControllerFuture;
if (mounted) {
setState(() {
_isCameraInitialized = true;
});
}
Future.delayed(const Duration(seconds: 2), _takePicture);
} catch (e) {
if (kDebugMode) {
print('Error initializing camera: $e');
}
}
}
void _takePicture() async {
if (_controller.value.isInitialized) {
try {
XFile picture = await _controller.takePicture();
imageFile = File(picture.path);
Navigator.pop(context, imageFile);
} catch (e) {
if (kDebugMode) {
print('Error taking picture: $e');
}
}
}
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(
children: <Widget>[
_isCameraInitialized
? GestureDetector(
onTap: () {
_takePicture();
},
child: SizedBox(
width: double.infinity,
height: double.infinity,
child: AspectRatio(
aspectRatio: _controller.value.aspectRatio,
child: CameraPreview(_controller),
),
),
)
: const Center(child: CircularProgressIndicator()),
],
),
);
}
// @override
// Widget build(BuildContext context) {
// return Scaffold(
// body: Stack(
// children: <Widget>[
// _isCameraInitialized
// ? GestureDetector(
// onTap: () {
// _takePicture();
// },
// child: OverflowBox(
// maxWidth: double.infinity,
// maxHeight: double.infinity,
// child: AspectRatio(
// aspectRatio: _controller.value.aspectRatio,
// child: CameraPreview(_controller),
// ),
// ),
// )
// : Center(child: CircularProgressIndicator()),
// ],
// ),
// );
// }
}
import 'dart:convert'; import 'dart:convert';
import 'dart:io';
import 'package:connectivity/connectivity.dart'; import 'package:connectivity/connectivity.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
...@@ -19,8 +20,17 @@ class Constants { ...@@ -19,8 +20,17 @@ class Constants {
this.color = color; this.color = color;
} }
static TextStyle colorfontStyle = TextStyle(
fontFamily: 'Poppins',
fontSize: 18,
fontWeight: Platform.isAndroid ? FontWeight.normal : FontWeight.w600,
color: const Color.fromARGB(255, 69, 66, 121));
static const TextStyle fontStyle = TextStyle( static const TextStyle fontStyle = TextStyle(
fontFamily: 'Poppins', fontSize: 18, fontWeight: FontWeight.normal); fontFamily: 'Poppins',
fontSize: 18,
fontWeight: FontWeight.normal,
color: Colors.white);
static const TextStyle headerfontStyle = TextStyle( static const TextStyle headerfontStyle = TextStyle(
fontFamily: 'Poppins', fontSize: 16, fontWeight: FontWeight.w600); fontFamily: 'Poppins', fontSize: 16, fontWeight: FontWeight.w600);
...@@ -81,6 +91,11 @@ class Constants { ...@@ -81,6 +91,11 @@ class Constants {
fontSize: 16, fontSize: 16,
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
color: Colors.white); color: Colors.white);
static const TextStyle loginfontStyle = TextStyle(
fontFamily: 'Poppins',
fontSize: 16,
fontWeight: FontWeight.w600,
color: Color.fromARGB(255, 69, 66, 121));
static const TextStyle whitefontStyle = TextStyle( static const TextStyle whitefontStyle = TextStyle(
fontFamily: 'Poppins', fontFamily: 'Poppins',
...@@ -100,6 +115,12 @@ class Constants { ...@@ -100,6 +115,12 @@ class Constants {
fontWeight: FontWeight.normal, fontWeight: FontWeight.normal,
color: Colors.white); color: Colors.white);
static const TextStyle dialogbuttonstyle = TextStyle(
fontFamily: 'Poppins',
fontSize: 16,
fontWeight: FontWeight.normal,
color: Colors.black);
static const TextStyle reviewbuttonsfontStyle = TextStyle( static const TextStyle reviewbuttonsfontStyle = TextStyle(
fontFamily: 'Poppins', fontFamily: 'Poppins',
fontSize: 14, fontSize: 14,
...@@ -132,10 +153,11 @@ class Constants { ...@@ -132,10 +153,11 @@ class Constants {
static showLoader(BuildContext ctx) { static showLoader(BuildContext ctx) {
showDialog( showDialog(
context: ctx, context: ctx,
builder: (context) { builder: (context) {
return const Center(child: CircularProgressIndicator()); return const Center(child: CircularProgressIndicator());
}); }
);
} }
static Future<void> dismissAlertDialog1(BuildContext context) async { static Future<void> dismissAlertDialog1(BuildContext context) async {
...@@ -155,8 +177,8 @@ class Constants { ...@@ -155,8 +177,8 @@ class Constants {
const LinearGradient gradient = LinearGradient( const LinearGradient gradient = LinearGradient(
colors: [ colors: [
// Color(0xFF8c4756), // Color(0xFF8c4756),
Color(0xFF503b53), Color.fromARGB(255, 229, 227, 249),
Color(0xFF503b53), Color.fromARGB(255, 229, 227, 249),
//Color(0xFF7b32fe) //Color(0xFF7b32fe)
], ],
begin: Alignment.bottomLeft, begin: Alignment.bottomLeft,
...@@ -210,7 +232,8 @@ class Constants { ...@@ -210,7 +232,8 @@ class Constants {
child: const Text("Cancel"), child: const Text("Cancel"),
onPressed: () { onPressed: () {
Navigator.of(context).pop(); Navigator.of(context).pop();
}); }
);
AlertDialog alert = AlertDialog( AlertDialog alert = AlertDialog(
title: Text(title), title: Text(title),
content: Text(message), content: Text(message),
......
// import 'package:flutter/material.dart';
// import 'Constants.dart';
// class CustomAlertDialog extends StatelessWidget {
// final String titleText;
// final String contentText;
// final String buttonText;
// final VoidCallback onButtonPressed;
// final Widget icon;
// CustomAlertDialog({
// required this.titleText,
// required this.contentText,
// required this.buttonText,
// required this.onButtonPressed,
// required this.icon,
// });
// @override
// Widget build(BuildContext context) {
// return AlertDialog(
// shape: RoundedRectangleBorder(
// borderRadius: BorderRadius.circular(15.0),
// ),
// titlePadding: EdgeInsets.zero,
// contentPadding: EdgeInsets.zero,
// actionsPadding: EdgeInsets.zero,
// title: Container(
// decoration: const BoxDecoration(
// gradient: LinearGradient(
// colors: [
// Color.fromARGB(255, 227, 144, 214),
// Color.fromARGB(255, 125, 174, 251),
// ],
// begin: Alignment.topLeft,
// end: Alignment.bottomRight,
// ),
// borderRadius: BorderRadius.only(
// topLeft: Radius.circular(10.0),
// topRight: Radius.circular(10.0),
// ),
// ),
// padding: const EdgeInsets.all(10),
// child: Center(
// child: icon,
// ),
// ),
// content: Container(
// padding: const EdgeInsets.all(20),
// child: Column(
// mainAxisSize: MainAxisSize.min,
// children: [
// Text(
// titleText,
// style: Constants.colorfontStyle,
// ),
// const SizedBox(height: 10),
// Text(
// contentText,
// style: Constants.loginfontStyle,
// ),
// ],
// ),
// ),
// actions: [
// Center(
// child: Container(
// margin: const EdgeInsets.only(bottom: 10),
// child: ElevatedButton(
// style: ElevatedButton.styleFrom(
// backgroundColor: const Color.fromARGB(
// 255, 164, 164, 164), // Background color
// shape: RoundedRectangleBorder(
// borderRadius: BorderRadius.circular(50),
// ),
// ),
// onPressed: onButtonPressed,
// child: Text(
// buttonText,
// textAlign: TextAlign.center,
// style: const TextStyle(color: Colors.white), // Text color
// ),
// ),
// ),
// ),
// ],
// );
// }
// }
import 'package:flutter/material.dart';
import 'Constants.dart';
class CustomAlertDialog extends StatelessWidget {
final String titleText;
final String contentText;
final String buttonText;
final VoidCallback onButtonPressed;
final Widget icon;
final String? secondButtonText;
final VoidCallback? onSecondButtonPressed;
const CustomAlertDialog({
required this.titleText,
required this.contentText,
required this.buttonText,
required this.onButtonPressed,
required this.icon,
this.secondButtonText,
this.onSecondButtonPressed,
});
@override
Widget build(BuildContext context) {
return AlertDialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(15.0),
),
titlePadding: EdgeInsets.zero,
contentPadding: EdgeInsets.zero,
actionsPadding: EdgeInsets.zero,
title: Container(
decoration: const BoxDecoration(
gradient: LinearGradient(
colors: [
Color.fromARGB(255, 227, 144, 214),
Color.fromARGB(255, 125, 174, 251),
],
begin: Alignment.topLeft,
end: Alignment.bottomRight,
),
borderRadius: BorderRadius.only(
topLeft: Radius.circular(10.0),
topRight: Radius.circular(10.0),
),
),
padding: const EdgeInsets.all(10),
child: Center(
child: icon,
),
),
content: Container(
padding: const EdgeInsets.all(20),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text(
titleText,
style: Constants.colorfontStyle,
),
const SizedBox(height: 10),
Text(
contentText,
style: Constants.loginfontStyle,
),
],
),
),
actions: [
Center(
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
ElevatedButton(
style: ElevatedButton.styleFrom(
backgroundColor: const Color.fromARGB(
255, 164, 164, 164), // Background color
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(50),
),
),
onPressed: onButtonPressed,
child: Text(
buttonText,
textAlign: TextAlign.center,
style: const TextStyle(color: Colors.white), // Text color
),
),
if (secondButtonText != null && onSecondButtonPressed != null)
ElevatedButton(
style: ElevatedButton.styleFrom(
backgroundColor: const Color.fromARGB(
255, 164, 164, 164), // Background color
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(50),
),
),
onPressed: onSecondButtonPressed,
child: Text(
secondButtonText!,
textAlign: TextAlign.center,
style:
const TextStyle(color: Colors.white), // Text color
),
),
],
),
const SizedBox(height: 15), // Add spacing below the buttons
],
),
),
],
);
}
}
import 'dart:async';
import 'dart:convert'; import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart'; import 'package:image_picker/image_picker.dart';
import 'package:vasthram/Constants.dart'; import 'package:vasthram/Constants.dart';
import 'package:vasthram/RemoteData.dart'; import 'package:vasthram/Identifyproduct.dart';
import 'package:vasthram/Identifystylecode.dart';
import 'package:vasthram/Searchbybarcode.dart';
import 'package:vasthram/SignUp.dart'; import 'package:vasthram/SignUp.dart';
import 'package:vasthram/Uploadstylecode.dart';
class Home extends StatefulWidget { class Home extends StatefulWidget {
const Home({super.key}); const Home({super.key});
...@@ -15,90 +18,68 @@ class Home extends StatefulWidget { ...@@ -15,90 +18,68 @@ class Home extends StatefulWidget {
class _Home extends State<Home> { class _Home extends State<Home> {
File? imagefile; File? imagefile;
final ImagePicker _picker = ImagePicker();
late List<File> arraylist = []; late List<File> arraylist = [];
XFile? image; XFile? image;
bool isloading = false; bool isloading = false;
bool isVisible = true; bool isVisible = true;
bool isData = false; bool isData = false;
String? graph;
String? graph1;
Uint8List? bytes;
Uint8List? bytes1;
var bodycolor = ''; var bodycolor = '';
var bodydesigncolor = ''; var bodydesigncolor = '';
var bordercolor = ''; var bordercolor = '';
var bordersize = ''; var bordersize = '';
var borderworkcolor = ''; var borderworkcolor = '';
var stylecode = '';
var status = ''; var status = '';
final PageController _pageController = PageController(initialPage: 0); int similarsale = 0;
int similarstock = 0;
List<Widget> pages = []; List<Widget> pages = [];
Uint8List? imageBytes;
List<dynamic>? embedding;
String? locationMessage;
Future<void> _getImage(int index) async { // void getImage(File? imagefile) {
image = await _picker.pickImage(source: ImageSource.camera); // final imageData = File(imagefile!.path).readAsBytesSync();
if (image != null) { // final image = img.decodeImage(imageData);
setState(() { // final imageInput = img.copyResize(
imagefile = File(image!.path); // image!,
isVisible = true; // width: 300,
isData = false; // height: 300,
}); // );
} else { // if (kDebugMode) {
image = await _picker.pickImage(source: ImageSource.camera); // print(imageInput);
} // }
} // final imageMatrix = List.generate(
// imageInput.height,
// (y) => List.generate(
// imageInput.width,
// (x) {
// final pixel = imageInput.getPixel(x, y);
// final r = img.getRed(pixel);
// final g = img.getGreen(pixel);
// final b = img.getBlue(pixel);
// return [r, g, b];
// },
// ),
// );
// embedding = imageMatrix;
// if (kDebugMode) {
// print(imageMatrix);
// }
// }
@override @override
void initState() { void initState() {
super.initState(); super.initState();
//_getCurrentLocation();
} }
Widget buildPage2(String title) { @override
return Center( void dispose() {
child: Container( super.dispose();
color: const Color.fromRGBO(222, 221, 220, 1),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
if (bodycolor.isNotEmpty ||
bodydesigncolor.isNotEmpty ||
bordercolor.isNotEmpty ||
bordersize.isNotEmpty ||
borderworkcolor.isNotEmpty)
Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
const Padding(padding: EdgeInsets.only(left: 10, bottom: 30)),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text('Body Design Color: $bodydesigncolor\n'),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text('Border Color: $bordercolor\n'),
],
),
],
)
else
const SizedBox(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(padding: EdgeInsets.only(bottom: 30)),
Text('\n'),
Text('\n'),
],
),
),
],
),
),
);
}
Widget buildPage3(String title) {
return Container(
color: const Color.fromARGB(255, 240, 200, 159),
);
} }
Widget buildPage1(String title) { Widget buildPage1(String title) {
...@@ -120,22 +101,30 @@ class _Home extends State<Home> { ...@@ -120,22 +101,30 @@ class _Home extends State<Home> {
children: [ children: [
Expanded( Expanded(
child: Container( child: Container(
decoration: const BoxDecoration( decoration: BoxDecoration(
color: Color.fromARGB(255, 140, 71, 86), color: const Color.fromARGB(255, 80, 59, 83),
borderRadius: BorderRadius.only( borderRadius: const BorderRadius.only(
topLeft: Radius.circular(20), topLeft: Radius.circular(20),
bottomLeft: Radius.circular(20), bottomLeft: Radius.circular(20),
), ),
border: Border.all(
color: Colors.white, // Set border color to white
width: 1, // Set border width
),
), ),
padding: const EdgeInsets.all(10), padding: const EdgeInsets.all(12),
child: const Column( child: const Column(
mainAxisAlignment: MainAxisAlignment
.end, // Align content at the bottom
crossAxisAlignment: CrossAxisAlignment.end,
children: [ children: [
Text( Text(
'Body Color: ', '\tBODY COLOR: \t',
style: TextStyle( style: TextStyle(
fontSize: 16, fontSize: 15,
color: Colors.white, color: Colors.white,
), ),
textAlign: TextAlign.right,
), ),
], ],
), ),
...@@ -143,20 +132,24 @@ class _Home extends State<Home> { ...@@ -143,20 +132,24 @@ class _Home extends State<Home> {
), ),
Expanded( Expanded(
child: Container( child: Container(
decoration: const BoxDecoration( decoration: BoxDecoration(
color: Color.fromARGB(255, 255, 255, 255), color: const Color.fromARGB(255, 255, 255, 255),
borderRadius: BorderRadius.only( borderRadius: const BorderRadius.only(
topRight: Radius.circular(20), topRight: Radius.circular(20),
bottomRight: Radius.circular(20), bottomRight: Radius.circular(20),
), ),
border: Border.all(
color: Colors.white, // Set border color to white
width: 1, // Set border width
),
), ),
padding: const EdgeInsets.all(10), padding: const EdgeInsets.all(12),
child: Column( child: Column(
children: [ children: [
Text( Text(
bodycolor, bodycolor,
style: const TextStyle( style: const TextStyle(
fontSize: 16, fontSize: 15,
color: Color.fromARGB( color: Color.fromARGB(
255, 255,
140, 140,
...@@ -178,22 +171,30 @@ class _Home extends State<Home> { ...@@ -178,22 +171,30 @@ class _Home extends State<Home> {
children: [ children: [
Expanded( Expanded(
child: Container( child: Container(
decoration: const BoxDecoration( decoration: BoxDecoration(
color: Color.fromARGB(255, 140, 71, 86), color: const Color.fromARGB(255, 80, 59, 83),
borderRadius: BorderRadius.only( borderRadius: const BorderRadius.only(
topLeft: Radius.circular(20), topLeft: Radius.circular(20),
bottomLeft: Radius.circular(20), bottomLeft: Radius.circular(20),
), ),
border: Border.all(
color: Colors.white, // Set border color to white
width: 1, // Set border width
),
), ),
padding: const EdgeInsets.all(10), padding: const EdgeInsets.all(12),
child: const Column( child: const Column(
mainAxisAlignment: MainAxisAlignment
.end, // Align content at the bottom
crossAxisAlignment: CrossAxisAlignment.end,
children: [ children: [
Text( Text(
'Body Design Color: ', 'BODY DESIGN COLOR: ',
style: TextStyle( style: TextStyle(
fontSize: 16, fontSize: 15,
color: Colors.white, color: Colors.white,
), ),
textAlign: TextAlign.right,
), ),
], ],
), ),
...@@ -201,20 +202,24 @@ class _Home extends State<Home> { ...@@ -201,20 +202,24 @@ class _Home extends State<Home> {
), ),
Expanded( Expanded(
child: Container( child: Container(
decoration: const BoxDecoration( decoration: BoxDecoration(
color: Color.fromARGB(255, 255, 255, 255), color: const Color.fromARGB(255, 255, 255, 255),
borderRadius: BorderRadius.only( borderRadius: const BorderRadius.only(
topRight: Radius.circular(20), topRight: Radius.circular(20),
bottomRight: Radius.circular(20), bottomRight: Radius.circular(20),
), ),
border: Border.all(
color: Colors.white, // Set border color to white
width: 1, // Set border width
),
), ),
padding: const EdgeInsets.all(10), padding: const EdgeInsets.all(12),
child: Column( child: Column(
children: [ children: [
Text( Text(
bodydesigncolor, bodydesigncolor,
style: const TextStyle( style: const TextStyle(
fontSize: 16, fontSize: 15,
color: Color.fromARGB( color: Color.fromARGB(
255, 255,
140, 140,
...@@ -236,22 +241,30 @@ class _Home extends State<Home> { ...@@ -236,22 +241,30 @@ class _Home extends State<Home> {
children: [ children: [
Expanded( Expanded(
child: Container( child: Container(
decoration: const BoxDecoration( decoration: BoxDecoration(
color: Color.fromARGB(255, 140, 71, 86), color: const Color.fromARGB(255, 80, 59, 83),
borderRadius: BorderRadius.only( borderRadius: const BorderRadius.only(
topLeft: Radius.circular(20), topLeft: Radius.circular(20),
bottomLeft: Radius.circular(20), bottomLeft: Radius.circular(20),
), ),
border: Border.all(
color: Colors.white, // Set border color to white
width: 1, // Set border width
),
), ),
padding: const EdgeInsets.all(10), padding: const EdgeInsets.all(12),
child: const Column( child: const Column(
mainAxisAlignment: MainAxisAlignment
.end, // Align content at the bottom
crossAxisAlignment: CrossAxisAlignment.end,
children: [ children: [
Text( Text(
'Border Color: ', 'BORDER COLOR: ',
style: TextStyle( style: TextStyle(
fontSize: 16, fontSize: 15,
color: Colors.white, color: Colors.white,
), ),
textAlign: TextAlign.right,
), ),
], ],
), ),
...@@ -259,20 +272,95 @@ class _Home extends State<Home> { ...@@ -259,20 +272,95 @@ class _Home extends State<Home> {
), ),
Expanded( Expanded(
child: Container( child: Container(
decoration: const BoxDecoration( decoration: BoxDecoration(
color: Color.fromARGB(255, 255, 255, 255), color: const Color.fromARGB(255, 255, 255, 255),
borderRadius: BorderRadius.only( borderRadius: const BorderRadius.only(
topRight: Radius.circular(20), topRight: Radius.circular(20),
bottomRight: Radius.circular(20), bottomRight: Radius.circular(20),
), ),
border: Border.all(
color: Colors.white, // Set border color to white
width: 1, // Set border width
),
), ),
padding: const EdgeInsets.all(10), padding: const EdgeInsets.all(12),
child: Column( child: Column(
children: [ children: [
Text( Text(
bordercolor, bordercolor,
style: const TextStyle( style: const TextStyle(
fontSize: 16, fontSize: 15,
color: Color.fromARGB(
255,
140,
71,
86,
),
),
),
],
),
),
),
],
),
const Padding(padding: EdgeInsets.only(left: 10, bottom: 10)),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Expanded(
child: Container(
decoration: BoxDecoration(
color: const Color.fromARGB(255, 80, 59, 83),
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(20),
bottomLeft: Radius.circular(20),
),
border: Border.all(
color: Colors.white, // Set border color to white
width: 1, // Set border width
),
),
padding: const EdgeInsets.all(12),
child: const Column(
mainAxisAlignment: MainAxisAlignment
.end, // Align content at the bottom
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Text(
'BORDER WORK COLOR: ',
style: TextStyle(
fontSize: 14,
color: Colors.white,
),
textAlign: TextAlign.right,
softWrap: true,
),
],
),
),
),
Expanded(
child: Container(
decoration: BoxDecoration(
color: const Color.fromARGB(255, 255, 255, 255),
borderRadius: const BorderRadius.only(
topRight: Radius.circular(20),
bottomRight: Radius.circular(20),
),
border: Border.all(
color: Colors.white, // Set border color to white
width: 1, // Set border width
),
),
padding: const EdgeInsets.all(12),
child: Column(
children: [
Text(
borderworkcolor,
style: const TextStyle(
fontSize: 15,
color: Color.fromARGB( color: Color.fromARGB(
255, 255,
140, 140,
...@@ -287,32 +375,35 @@ class _Home extends State<Home> { ...@@ -287,32 +375,35 @@ class _Home extends State<Home> {
), ),
], ],
), ),
// Row(
// mainAxisAlignment: MainAxisAlignment.start,
// children: [
// Text('Body Design Color: $bodydesigncolor\n'),
// ],
// ),
const Padding(padding: EdgeInsets.only(left: 10, bottom: 10)), const Padding(padding: EdgeInsets.only(left: 10, bottom: 10)),
Row( Row(
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
children: [ children: [
Expanded( Expanded(
child: Container( child: Container(
decoration: const BoxDecoration( decoration: BoxDecoration(
color: Color.fromARGB(255, 140, 71, 86), color: const Color.fromARGB(255, 80, 59, 83),
borderRadius: BorderRadius.only( borderRadius: const BorderRadius.only(
topLeft: Radius.circular(20), topLeft: Radius.circular(20),
bottomLeft: Radius.circular(20), bottomLeft: Radius.circular(20),
), ),
border: Border.all(
color: Colors.white, // Set border color to white
width: 1, // Set border width
),
), ),
padding: const EdgeInsets.all(10), padding: const EdgeInsets.all(12),
child: const Column( child: const Column(
mainAxisAlignment: MainAxisAlignment
.end, // Align content at the bottom
crossAxisAlignment: CrossAxisAlignment
.end, // Align content to the right
children: [ children: [
Text( Text(
'Body Size: ', 'BORDER SIZE:',
style: TextStyle( style: TextStyle(
fontSize: 16, fontSize: 15,
color: Colors.white, color: Colors.white,
), ),
), ),
...@@ -322,20 +413,24 @@ class _Home extends State<Home> { ...@@ -322,20 +413,24 @@ class _Home extends State<Home> {
), ),
Expanded( Expanded(
child: Container( child: Container(
decoration: const BoxDecoration( decoration: BoxDecoration(
color: Color.fromARGB(255, 255, 255, 255), color: const Color.fromARGB(255, 255, 255, 255),
borderRadius: BorderRadius.only( borderRadius: const BorderRadius.only(
topRight: Radius.circular(20), topRight: Radius.circular(20),
bottomRight: Radius.circular(20), bottomRight: Radius.circular(20),
), ),
border: Border.all(
color: Colors.white, // Set border color to white
width: 1, // Set border width
),
), ),
padding: const EdgeInsets.all(10), padding: const EdgeInsets.all(12),
child: Column( child: Column(
children: [ children: [
Text( Text(
bordersize, bordersize,
style: const TextStyle( style: const TextStyle(
fontSize: 16, fontSize: 15,
color: Color.fromARGB( color: Color.fromARGB(
255, 255,
140, 140,
...@@ -351,26 +446,34 @@ class _Home extends State<Home> { ...@@ -351,26 +446,34 @@ class _Home extends State<Home> {
], ],
), ),
//stylecode.isNotEmpty
const Padding(padding: EdgeInsets.only(left: 10, bottom: 10)), const Padding(padding: EdgeInsets.only(left: 10, bottom: 10)),
Row( Row(
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
children: [ children: [
Expanded( Expanded(
child: Container( child: Container(
decoration: const BoxDecoration( decoration: BoxDecoration(
color: Color.fromARGB(255, 140, 71, 86), color: const Color.fromARGB(255, 80, 59, 83),
borderRadius: BorderRadius.only( borderRadius: const BorderRadius.only(
topLeft: Radius.circular(20), topLeft: Radius.circular(20),
bottomLeft: Radius.circular(20), bottomLeft: Radius.circular(20),
), ),
border: Border.all(
color: Colors.white, // Set border color to white
width: 1, // Set border width
),
), ),
padding: const EdgeInsets.all(10), padding: const EdgeInsets.all(12),
child: const Column( child: const Column(
mainAxisAlignment: MainAxisAlignment
.end, // Align content at the bottom
crossAxisAlignment: CrossAxisAlignment.end,
children: [ children: [
Text( Text(
'Body Work Color: ', 'STYLE CODE: ',
style: TextStyle( style: TextStyle(
fontSize: 16, fontSize: 15,
color: Colors.white, color: Colors.white,
), ),
), ),
...@@ -380,20 +483,24 @@ class _Home extends State<Home> { ...@@ -380,20 +483,24 @@ class _Home extends State<Home> {
), ),
Expanded( Expanded(
child: Container( child: Container(
decoration: const BoxDecoration( decoration: BoxDecoration(
color: Color.fromARGB(255, 255, 255, 255), color: const Color.fromARGB(255, 255, 255, 255),
borderRadius: BorderRadius.only( borderRadius: const BorderRadius.only(
topRight: Radius.circular(20), topRight: Radius.circular(20),
bottomRight: Radius.circular(20), bottomRight: Radius.circular(20),
), ),
border: Border.all(
color: Colors.white, // Set border color to white
width: 1, // Set border width
),
), ),
padding: const EdgeInsets.all(10), padding: const EdgeInsets.all(12),
child: Column( child: Column(
children: [ children: [
Text( Text(
borderworkcolor, stylecode,
style: const TextStyle( style: const TextStyle(
fontSize: 16, fontSize: 15,
color: Color.fromARGB( color: Color.fromARGB(
255, 255,
140, 140,
...@@ -429,19 +536,191 @@ class _Home extends State<Home> { ...@@ -429,19 +536,191 @@ class _Home extends State<Home> {
); );
} }
Widget buildPage2(String title) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
const Padding(padding: EdgeInsets.only(left: 10, bottom: 10)),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Expanded(
child: Container(
decoration: BoxDecoration(
color: const Color.fromARGB(255, 80, 59, 83),
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(20),
bottomLeft: Radius.circular(20),
),
border: Border.all(
color: Colors.white, // Set border color to white
width: 1, // Set border width
),
),
padding: const EdgeInsets.all(12),
child: const Column(
mainAxisAlignment:
MainAxisAlignment.end, // Align content at the bottom
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Text(
'SIMILAR STOCK: ',
style: TextStyle(
fontSize: 15,
color: Colors.white,
),
),
],
),
),
),
Expanded(
child: Container(
decoration: BoxDecoration(
color: const Color.fromARGB(255, 255, 255, 255),
borderRadius: const BorderRadius.only(
topRight: Radius.circular(20),
bottomRight: Radius.circular(20),
),
border: Border.all(
color: Colors.white, // Set border color to white
width: 1, // Set border width
),
),
padding: const EdgeInsets.all(12),
child: Column(
children: [
Text(
similarstock.toString(),
style: const TextStyle(
fontSize: 15,
color: Color.fromARGB(
255,
140,
71,
86,
),
),
),
],
),
),
),
],
),
const Padding(padding: EdgeInsets.only(left: 10, top: 10)),
Container(
color: const Color.fromRGBO(222, 221, 220, 1),
child: Image.memory(
bytes!,
fit: BoxFit.cover, // Adjust as needed
),
),
],
),
);
}
Widget buildPage3(String title) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
const Padding(padding: EdgeInsets.only(left: 10, bottom: 10)),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Expanded(
child: Container(
decoration: BoxDecoration(
color: const Color.fromARGB(255, 80, 59, 83),
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(20),
bottomLeft: Radius.circular(20),
),
border: Border.all(
color: Colors.white, // Set border color to white
width: 1, // Set border width
),
),
padding: const EdgeInsets.all(12),
child: const Column(
mainAxisAlignment:
MainAxisAlignment.end, // Align content at the bottom
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Text(
'SIMILAR SALE: ',
style: TextStyle(
fontSize: 15,
color: Colors.white,
),
),
],
),
),
),
Expanded(
child: Container(
decoration: BoxDecoration(
color: const Color.fromARGB(255, 255, 255, 255),
borderRadius: const BorderRadius.only(
topRight: Radius.circular(20),
bottomRight: Radius.circular(20),
),
border: Border.all(
color: Colors.white, // Set border color to white
width: 1, // Set border width
),
),
padding: const EdgeInsets.all(12),
child: Column(
children: [
Text(
similarsale.toString(),
style: const TextStyle(
fontSize: 15,
color: Color.fromARGB(
255,
140,
71,
86,
),
),
),
],
),
),
),
],
),
const Padding(padding: EdgeInsets.only(left: 10, top: 10)),
Container(
color: const Color.fromARGB(255, 240, 200, 159),
child: Image.memory(
bytes1!,
fit: BoxFit.cover, // Adjust as needed
),
),
],
));
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
resizeToAvoidBottomInset: false, resizeToAvoidBottomInset: false,
appBar: AppBar( appBar: AppBar(
title: const Text( title: Text(
'CAPTURE IMAGE', 'HOME',
style: Constants.fontStyle, style: Constants.colorfontStyle,
), ),
automaticallyImplyLeading: false,
actions: [ actions: [
IconButton( IconButton(
icon: Image.asset( icon: Image.asset(
"assets/images/signout.png", 'assets/images/signout.png',
width: 24, width: 24,
height: 24, height: 24,
), ),
...@@ -464,128 +743,233 @@ class _Home extends State<Home> { ...@@ -464,128 +743,233 @@ class _Home extends State<Home> {
), ),
), ),
), ),
body: Container( body: Stack(
decoration: const BoxDecoration( children: [
image: DecorationImage( Container(
image: AssetImage("assets/images/bg.png"), decoration: const BoxDecoration(
fit: BoxFit.cover, // Adjust as needed image: DecorationImage(
image: AssetImage(
'assets/images/bg.png'), // Path to your background image
fit: BoxFit.cover,
),
),
), ),
), SingleChildScrollView(
child: SingleChildScrollView( child: Container(
child: Container( margin: const EdgeInsets.fromLTRB(10, 20, 10, 10),
margin: const EdgeInsets.all(10.0), child: Column(
child: Column( mainAxisAlignment: MainAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [ children: [
Column( const Padding(padding: EdgeInsets.only(top: 20)),
children: [ Row(mainAxisAlignment: MainAxisAlignment.start, children: [
const Padding(padding: EdgeInsets.only(top: 5)), SizedBox(
GestureDetector( width: MediaQuery.of(context).size.width * 0.90,
child: GestureDetector(
onTap: () { onTap: () {
_getImage(0); Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
const Identifystylecode()),
);
}, },
child: SizedBox( child: Container(
width: MediaQuery.of(context).size.width * 0.94, margin: const EdgeInsets.only(
height: MediaQuery.of(context).size.height * 0.50, left: 20, top: 0, right: 2, bottom: 0),
child: imagefile != null width: MediaQuery.of(context).size.width * 0.100,
? Image.file( height: MediaQuery.of(context).size.width * 0.22,
imagefile!, padding: const EdgeInsets.all(5),
fit: BoxFit.cover, decoration: BoxDecoration(
) gradient: const LinearGradient(
: Image.asset( begin: Alignment.bottomLeft,
'assets/images/captureimage.png', end: Alignment.bottomRight,
width: MediaQuery.of(context).size.width * colors: [
0.80, Color.fromARGB(255, 227, 144, 214),
height: MediaQuery.of(context).size.height * //Color(0xFFC2185B),
0.60, Color.fromARGB(255, 125, 174, 251),
), ],
),
borderRadius: BorderRadius.circular(10),
),
child: Row(
children: [
const Text('\t\t\t\t\t\t'),
Image.asset(
'assets/images/identify.png',
width: 42,
height: 42,
), // replace with your image
const Text(
'\t\t\t\t\t\t IDENTIFY STYLE CODE',
style: Constants.buttonsfontStyle,
)
],
),
), ),
), ),
], ),
), ]),
], const Padding(padding: EdgeInsets.only(top: 20)),
), Row(mainAxisAlignment: MainAxisAlignment.start, children: [
if (isData) SizedBox(
SizedBox( width: MediaQuery.of(context).size.width * 0.90,
height: MediaQuery.of(context).size.height * 0.30, child: GestureDetector(
child: PageView( onTap: () {
controller: _pageController, Navigator.push(
children: pages = [ context,
buildPage1('Page 1'), MaterialPageRoute(
buildPage2('Page 2'), builder: (context) =>
buildPage3('Page 3'), const Uploadstylecode()),
], );
), },
), child: Container(
SizedBox( margin: const EdgeInsets.only(
height: MediaQuery.of(context).size.height * 0.30, left: 20, top: 0, right: 2, bottom: 0),
), width: MediaQuery.of(context).size.width * 0.100,
Visibility( height: MediaQuery.of(context).size.width * 0.22,
visible: isVisible, padding: const EdgeInsets.all(5),
child: ElevatedButton( decoration: BoxDecoration(
style: ButtonStyle( gradient: const LinearGradient(
shape: MaterialStateProperty.all<RoundedRectangleBorder>( begin: Alignment.bottomLeft,
RoundedRectangleBorder( end: Alignment.bottomRight,
borderRadius: BorderRadius.circular( colors: [
50.0), // Adjust the radius as needed Color.fromARGB(255, 244, 244, 254),
Color.fromARGB(255, 244, 244, 254),
],
),
borderRadius: BorderRadius.circular(7),
border: Border.all(
color: const Color.fromARGB(255, 255, 255,
255), // Your desired border color
width: 2, // Border width
),
),
child: Row(
children: [
const Text('\t\t\t\t\t\t'),
Image.asset(
'assets/images/register.png',
width: 42,
height: 42,
),
const Text(
'\t\t\t\t\t REGISTER STYLE CODE',
style: Constants.loginfontStyle,
),
],
),
),
), ),
), ),
minimumSize: MaterialStateProperty.all<Size>( ]),
const Size(double.infinity, 50), const Padding(padding: EdgeInsets.only(top: 20)),
Row(mainAxisAlignment: MainAxisAlignment.start, children: [
SizedBox(
width: MediaQuery.of(context).size.width * 0.90,
child: GestureDetector(
onTap: () {
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) =>
// const Identifyproduct()),
// );
},
child: Container(
margin: const EdgeInsets.only(
left: 20, top: 0, right: 2, bottom: 0),
width: MediaQuery.of(context).size.width * 0.100,
height: MediaQuery.of(context).size.width * 0.22,
padding: const EdgeInsets.all(5),
decoration: BoxDecoration(
gradient: const LinearGradient(
begin: Alignment.bottomLeft,
end: Alignment.bottomRight,
colors: [
Color.fromARGB(255, 227, 144, 214),
Color.fromARGB(255, 125, 174, 251),
],
),
borderRadius: BorderRadius.circular(10),
),
child: Row(
children: [
const Text('\t\t\t\t\t\t'),
Image.asset(
'assets/images/identify_product.png',
width: 42,
height: 42,
), // replace with your image
const Text(
'\t\t\t\t\t\t IDENTIFY PRODUCT',
style: Constants.buttonsfontStyle,
)
],
),
),
),
), ),
backgroundColor: MaterialStateProperty.all<Color>( ]),
const Color.fromARGB(255, 126, 69, const Padding(padding: EdgeInsets.only(top: 20)),
85), // Adjust the background color as needed Row(mainAxisAlignment: MainAxisAlignment.start, children: [
SizedBox(
width: MediaQuery.of(context).size.width * 0.90,
child: GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
const Searchbybarcode()),
);
},
child: Container(
margin: const EdgeInsets.only(
left: 20, top: 0, right: 2, bottom: 0),
width: MediaQuery.of(context).size.width * 0.100,
height: MediaQuery.of(context).size.width * 0.22,
padding: const EdgeInsets.all(5),
decoration: BoxDecoration(
gradient: const LinearGradient(
begin: Alignment.bottomLeft,
end: Alignment.bottomRight,
colors: [
Color.fromARGB(255, 244, 244, 254),
//Color(0xFFC2185B),
Color.fromARGB(255, 244, 244, 254),
],
),
borderRadius: BorderRadius.circular(7),
border: Border.all(
color: const Color.fromARGB(255, 255, 255,
255), // Your desired border color
width: 2, // Border width
),
),
child: Row(
children: [
const Text('\t\t\t\t\t\t'),
Image.asset(
'assets/images/search.png',
width: 42,
height: 42,
),
// replace with your image
const Text(
'\t\t\t\t\t SEARCH BY BARCODE',
style: Constants.loginfontStyle,
),
],
),
),
),
), ),
), ]),
onPressed: () async { ],
if (imagefile == null) { )),
Constants('Vasthram', 'Please Capture Image')
.showAlertDialog(context, true);
} else {
isloading = true;
bool isInternetConnected =
await Constants.checkInternetConnectivity();
if (isInternetConnected) {
showDialog(
context: context,
builder: (context) {
return const Center(
child: CircularProgressIndicator(),
);
},
);
var upload =
await RemoteData().uploadimage(imagefile!);
if (upload != null) {
setState(() {
isloading = false;
Navigator.of(context).pop();
});
var jsonResponse = jsonDecode(upload);
await Future.delayed(const Duration(seconds: 2));
updateUI(jsonResponse);
}
} else {
Constants(
'Vasthram', 'Check your internet connection')
.showAlertDialog(context, true);
}
}
},
child: const Text(
'UPLOAD IMAGE',
style: Constants.buttonsfontStyle,
),
),
),
],
),
), ),
), ],
), ),
); );
} }
...@@ -601,7 +985,12 @@ class _Home extends State<Home> { ...@@ -601,7 +985,12 @@ class _Home extends State<Home> {
bodydesigncolor = jsonResponse['body_design_color']; bodydesigncolor = jsonResponse['body_design_color'];
bordercolor = jsonResponse['border_color']; bordercolor = jsonResponse['border_color'];
bordersize = jsonResponse['border_size']; bordersize = jsonResponse['border_size'];
borderworkcolor = jsonResponse['border_work_color']; borderworkcolor = jsonResponse['border_design_color'];
stylecode = jsonResponse['stylecode'];
similarsale = jsonResponse['similarsale'];
similarstock = jsonResponse['similarstock'];
bytes = base64.decode(jsonResponse['similarstockgraph']);
bytes1 = base64.decode(jsonResponse['similarsalegraph']);
} else { } else {
Constants.dialogMessage(context, 'Vasthram', 'Could not found image'); Constants.dialogMessage(context, 'Vasthram', 'Could not found image');
bodycolor = ''; bodycolor = '';
...@@ -609,8 +998,11 @@ class _Home extends State<Home> { ...@@ -609,8 +998,11 @@ class _Home extends State<Home> {
bordercolor = ''; bordercolor = '';
bordersize = ''; bordersize = '';
borderworkcolor = ''; borderworkcolor = '';
stylecode = '';
bytes!.clear();
bytes1!.clear();
embedding!.clear();
} }
}); });
_pageController.jumpToPage(0);
} }
} }
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:vasthram/Constants.dart';
import 'package:vasthram/CustomAlertDialog.dart';
import 'package:vasthram/RemoteData.dart';
class Identifyproduct extends StatefulWidget {
const Identifyproduct({super.key});
@override
State<StatefulWidget> createState() => _Identifyproduct();
}
class _Identifyproduct extends State<Identifyproduct> {
File? imagefile;
final ImagePicker _picker = ImagePicker();
late List<File> arraylist = [];
XFile? image;
bool isloading = false;
bool isVisible = true;
bool isData = false;
String? graph;
String? graph1;
Uint8List? bytes;
Uint8List? bytes1;
var bodycolor = '';
var bodydesigncolor = '';
var bordercolor = '';
var bordersize = '';
var borderworkcolor = '';
var stylecode = '';
var status = '';
int similarsale = 0;
int similarstock = 0;
late PageController _pageController;
List<Widget> pages = [];
Uint8List? imageBytes;
List<dynamic>? embedding;
void _showPicker(BuildContext context) {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text(
'SELECT OPTION',
style: Constants.dialogbuttonstyle,
),
content: SingleChildScrollView(
child: ListBody(
children: <Widget>[
GestureDetector(
child: const Text(
'CAMERA',
style: Constants.dialogbuttonstyle,
),
onTap: () {
_getImageFromCamera(0);
Navigator.of(context).pop();
},
),
const Padding(padding: EdgeInsets.all(8.0)),
GestureDetector(
child: const Text(
'GALLERY',
style: Constants.dialogbuttonstyle,
),
onTap: () {
_getImageFromGallery(context);
Navigator.of(context).pop();
},
),
],
),
),
);
},
);
}
Future<void> _getImageFromCamera(int index) async {
image = await _picker.pickImage(source: ImageSource.camera);
if (image != null) {
setState(() {
imagefile = File(image!.path);
isVisible = true;
isData = false;
//getImage(imagefile);
});
} else {
image = await _picker.pickImage(source: ImageSource.camera);
}
}
Future<void> _getImageFromGallery(BuildContext context) async {
image = await _picker.pickImage(source: ImageSource.gallery);
if (image != null) {
if (kDebugMode) {
print('Picked image from gallery: ${image!.path}');
}
setState(() {
imagefile = File(image!.path);
isVisible = true;
isData = false;
});
}
}
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
_pageController = PageController(initialPage: 0);
});
}
@override
void dispose() {
_pageController.dispose();
super.dispose();
}
Widget buildPage2(String title) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
const Padding(
padding: EdgeInsets.only(left: 10, bottom: 10, top: 10)),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Expanded(
child: Container(
decoration: BoxDecoration(
color: const Color.fromARGB(255, 69, 66, 121),
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(10),
bottomLeft: Radius.circular(10),
),
border: Border.all(
color: Colors.white, // Set border color to white
width: 1, // Set border width
),
),
padding: const EdgeInsets.all(12),
child: const Column(
mainAxisAlignment:
MainAxisAlignment.end, // Align content at the bottom
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Text(
'SIMILAR STOCK: ',
style: TextStyle(
fontSize: 15,
color: Colors.white,
),
),
],
),
),
),
Expanded(
child: Container(
decoration: BoxDecoration(
color: const Color.fromARGB(255, 255, 255, 255),
borderRadius: const BorderRadius.only(
topRight: Radius.circular(10),
bottomRight: Radius.circular(10),
),
border: Border.all(
color: Colors.white, // Set border color to white
width: 1, // Set border width
),
),
padding: const EdgeInsets.all(12),
child: Column(
children: [
Text(
similarstock.toString(),
style: const TextStyle(
fontSize: 15,
color: Color.fromARGB(255, 69, 66, 121),
),
),
],
),
),
),
],
),
const Padding(padding: EdgeInsets.only(left: 10, top: 10)),
Container(
color: const Color.fromRGBO(222, 221, 220, 1),
child: Image.memory(
bytes!,
fit: BoxFit.cover, // Adjust as needed
),
),
],
),
);
}
Widget buildPage3(String title) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
const Padding(padding: EdgeInsets.only(left: 10, bottom: 10, top: 10)),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Expanded(
child: Container(
decoration: BoxDecoration(
color: const Color.fromARGB(255, 69, 66, 121),
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(10),
bottomLeft: Radius.circular(10),
),
border: Border.all(
color: Colors.white, // Set border color to white
width: 1, // Set border width
),
),
padding: const EdgeInsets.all(12),
child: const Column(
mainAxisAlignment:
MainAxisAlignment.end, // Align content at the bottom
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Text(
'SIMILAR SALE: ',
style: TextStyle(
fontSize: 15,
color: Colors.white,
),
),
],
),
),
),
Expanded(
child: Container(
decoration: BoxDecoration(
color: const Color.fromARGB(255, 255, 255, 255),
borderRadius: const BorderRadius.only(
topRight: Radius.circular(10),
bottomRight: Radius.circular(10),
),
border: Border.all(
color: Colors.white, // Set border color to white
width: 1, // Set border width
),
),
padding: const EdgeInsets.all(12),
child: Column(
children: [
Text(
similarsale.toString(),
style: const TextStyle(
fontSize: 15,
color: Color.fromARGB(255, 69, 66, 121),
),
),
],
),
),
),
],
),
const Padding(padding: EdgeInsets.only(left: 10, top: 10)),
Container(
color: const Color.fromARGB(255, 240, 200, 159),
child: Image.memory(
bytes1!,
fit: BoxFit.cover, // Adjust as needed
),
),
],
));
}
Widget buildPage1(String title) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
if (bodycolor.isNotEmpty ||
bodydesigncolor.isNotEmpty ||
bordercolor.isNotEmpty ||
bordersize.isNotEmpty ||
borderworkcolor.isNotEmpty)
Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
const Padding(
padding: EdgeInsets.only(left: 10, bottom: 10, top: 10)),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Flexible(
flex: 6, // 60% of the width
fit: FlexFit.tight,
child: Container(
decoration: BoxDecoration(
color: const Color.fromARGB(255, 69, 66, 121),
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(10),
bottomLeft: Radius.circular(10),
),
border: Border.all(
color: Colors.white, // Set border color to white
width: 1, // Set border width
),
),
padding: const EdgeInsets.all(12),
child: const Column(
mainAxisAlignment: MainAxisAlignment
.end, // Align content at the bottom
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Text(
'\tBODY COLOR: \t',
style: TextStyle(
fontSize: 14,
color: Colors.white,
),
textAlign: TextAlign.right,
),
],
),
),
),
Flexible(
flex: 4, // 40% of the width
fit: FlexFit.tight,
child: Container(
decoration: BoxDecoration(
color: const Color.fromARGB(255, 255, 255, 255),
borderRadius: const BorderRadius.only(
topRight: Radius.circular(10),
bottomRight: Radius.circular(10),
),
border: Border.all(
color: Colors.white, // Set border color to white
width: 1, // Set border width
),
),
padding: const EdgeInsets.all(12),
child: Column(
children: [
Text(
bodycolor,
style: const TextStyle(
fontSize: 15,
color: Color.fromARGB(255, 69, 66, 121),
),
),
],
),
),
),
],
),
const Padding(padding: EdgeInsets.only(left: 10, bottom: 8)),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Flexible(
flex: 6,
fit: FlexFit.tight,
child: Container(
decoration: BoxDecoration(
color: const Color.fromARGB(255, 69, 66, 121),
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(10),
bottomLeft: Radius.circular(10),
),
border: Border.all(
color: Colors.white,
width: 1,
),
),
padding: const EdgeInsets.all(12),
child: const Column(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Text(
'\t BODY DESIGN COLOR: \t',
style: TextStyle(
fontSize: 14,
color: Colors.white,
),
textAlign: TextAlign.right,
),
],
),
),
),
Flexible(
flex: 4,
fit: FlexFit.tight,
child: Container(
decoration: BoxDecoration(
color: const Color.fromARGB(255, 255, 255, 255),
borderRadius: const BorderRadius.only(
topRight: Radius.circular(10),
bottomRight: Radius.circular(10),
),
border: Border.all(
color: Colors.white,
),
),
padding: const EdgeInsets.all(12),
child: Column(
children: [
Text(
bodydesigncolor,
style: const TextStyle(
fontSize: 15,
color: Color.fromARGB(255, 69, 66, 121),
),
),
],
),
),
),
],
),
const Padding(padding: EdgeInsets.only(left: 10, bottom: 8)),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Flexible(
flex: 6,
fit: FlexFit.tight,
child: Container(
decoration: BoxDecoration(
color: const Color.fromARGB(255, 69, 66, 121),
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(10),
bottomLeft: Radius.circular(10),
),
border: Border.all(
color: Colors.white, // Set border color to white
width: 1, // Set border width
),
),
padding: const EdgeInsets.all(12),
child: const Column(
mainAxisAlignment: MainAxisAlignment
.end, // Align content at the bottom
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Text(
'\t BORDER COLOR: \t',
style: TextStyle(
fontSize: 14,
color: Colors.white,
),
textAlign: TextAlign.right,
),
],
),
),
),
Flexible(
flex: 4, // 40% of the width
fit: FlexFit.tight,
child: Container(
decoration: BoxDecoration(
color: const Color.fromARGB(255, 255, 255, 255),
borderRadius: const BorderRadius.only(
topRight: Radius.circular(10),
bottomRight: Radius.circular(10),
),
border: Border.all(
color: Colors.white, // Set border color to white
width: 1, // Set border width
),
),
padding: const EdgeInsets.all(12),
child: Column(
children: [
Text(
bordercolor,
style: const TextStyle(
fontSize: 15,
color: Color.fromARGB(255, 69, 66, 121),
),
),
],
),
),
),
],
),
const Padding(padding: EdgeInsets.only(left: 10, bottom: 8)),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Flexible(
flex: 6,
fit: FlexFit.tight,
child: Container(
decoration: BoxDecoration(
color: const Color.fromARGB(255, 69, 66, 121),
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(10),
bottomLeft: Radius.circular(10),
),
border: Border.all(
color: Colors.white,
width: 1,
),
),
padding: const EdgeInsets.all(12),
child: const Column(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Text(
'\t BORDER WORK COLOR: \t',
style: TextStyle(
fontSize: 14,
color: Colors.white,
),
textAlign: TextAlign.right,
),
],
),
),
),
Flexible(
flex: 4,
fit: FlexFit.tight,
child: Container(
decoration: BoxDecoration(
color: const Color.fromARGB(255, 255, 255, 255),
borderRadius: const BorderRadius.only(
topRight: Radius.circular(10),
bottomRight: Radius.circular(10),
),
border: Border.all(
color: Colors.white,
width: 1,
),
),
padding: const EdgeInsets.all(12),
child: Column(
children: [
Text(
borderworkcolor,
style: const TextStyle(
fontSize: 15,
color: Color.fromARGB(255, 69, 66, 121),
),
),
],
),
),
),
],
),
const Padding(padding: EdgeInsets.only(left: 10, bottom: 8)),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Flexible(
flex: 6, // 60% of the width
fit: FlexFit.tight,
child: Container(
decoration: BoxDecoration(
color: const Color.fromARGB(255, 69, 66, 121),
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(10),
bottomLeft: Radius.circular(10),
),
border: Border.all(
color: Colors.white, // Set border color to white
width: 1, // Set border width
),
),
padding: const EdgeInsets.all(12),
child: const Column(
mainAxisAlignment: MainAxisAlignment
.end, // Align content at the bottom
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Text(
'\t BORDER SIZE: \t',
style: TextStyle(
fontSize: 14,
color: Colors.white,
),
textAlign: TextAlign.right,
),
],
),
),
),
Flexible(
flex: 4, // 40% of the width
fit: FlexFit.tight,
child: Container(
decoration: BoxDecoration(
color: const Color.fromARGB(255, 255, 255, 255),
borderRadius: const BorderRadius.only(
topRight: Radius.circular(10),
bottomRight: Radius.circular(10),
),
border: Border.all(
color: Colors.white, // Set border color to white
width: 1, // Set border width
),
),
padding: const EdgeInsets.all(12),
child: Column(
children: [
Text(
bordersize,
style: const TextStyle(
fontSize: 15,
color: Color.fromARGB(255, 69, 66, 121),
),
),
],
),
),
),
],
),
//stylecode.isNotEmpty
const Padding(padding: EdgeInsets.only(left: 10, bottom: 8)),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Flexible(
flex: 6, // 60% of the width
fit: FlexFit.tight,
child: Container(
decoration: BoxDecoration(
color: const Color.fromARGB(255, 69, 66, 121),
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(10),
bottomLeft: Radius.circular(10),
),
border: Border.all(
color: Colors.white, // Set border color to white
width: 1, // Set border width
),
),
padding: const EdgeInsets.all(12),
child: const Column(
mainAxisAlignment: MainAxisAlignment
.end, // Align content at the bottom
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Text(
'\t STYLE CODE: \t',
style: TextStyle(
fontSize: 14,
color: Colors.white,
),
textAlign: TextAlign.right,
),
],
),
),
),
Flexible(
flex: 4, // 40% of the width
fit: FlexFit.tight,
child: Container(
decoration: BoxDecoration(
color: const Color.fromARGB(255, 255, 255, 255),
borderRadius: const BorderRadius.only(
topRight: Radius.circular(10),
bottomRight: Radius.circular(10),
),
border: Border.all(
color: Colors.white, // Set border color to white
width: 1, // Set border width
),
),
padding: const EdgeInsets.all(12),
child: Column(
children: [
Text(
stylecode,
style: const TextStyle(
fontSize: 15,
color: Color.fromARGB(255, 69, 66, 121),
),
),
],
),
),
),
],
),
],
)
else
const SizedBox(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(padding: EdgeInsets.only(bottom: 20)),
Text('\n'),
Text('\n'),
Text('\n'),
Text('\n'),
Text('\n'),
],
),
),
],
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
resizeToAvoidBottomInset: false,
appBar: AppBar(
title: Text(
'IDENTIFY PRODUCT',
style: Constants.colorfontStyle,
),
automaticallyImplyLeading: false,
leading: IconButton(
icon: const Icon(
Icons.arrow_back_ios,
color: Color.fromARGB(255, 69, 66, 121),
size: 24,
),
onPressed: () => Navigator.pop(context),
),
flexibleSpace: Container(
decoration: BoxDecoration(
gradient: Constants.getReturn(),
),
),
),
body: Stack(
children: [
Container(
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage(
"assets/images/bg.png"), // Path to your background image
fit: BoxFit.cover,
),
),
),
SingleChildScrollView(
child: Container(
margin: const EdgeInsets.all(20.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
Column(
children: [
const Padding(padding: EdgeInsets.only(top: 5)),
GestureDetector(
onTap: () {
_showPicker(context);
},
child: SizedBox(
width: MediaQuery.of(context).size.width * 0.88,
height: MediaQuery.of(context).size.height * 0.50,
child: imagefile != null
? Image.file(
imagefile!,
fit: BoxFit.cover,
)
: Center(
child: Image.asset(
'assets/images/camera.png',
width:
MediaQuery.of(context).size.width *
0.50, // Adjusted width
height:
MediaQuery.of(context).size.height *
0.35, // Adjusted height
),
),
),
),
],
),
],
),
if (isData)
SizedBox(
height: MediaQuery.of(context).size.height * 0.60,
child: PageView(
controller: _pageController,
children: pages = [
buildPage1('Page 1'),
buildPage2('Page 2'),
buildPage3('Page 3'),
],
),
),
SizedBox(
height: MediaQuery.of(context).size.height * 0.28,
),
Visibility(
visible: isVisible,
child: SizedBox(
width: MediaQuery.of(context).size.width * 0.90,
child: GestureDetector(
onTap: () async {
if (imagefile == null) {
setDialog('Please Capture Image');
} else {
setState(() {
isloading = true; // Set loading state to true
});
bool isInternetConnected =
await Constants.checkInternetConnectivity();
if (isInternetConnected) {
showDialog(
context: context,
barrierDismissible: false,
builder: (context) {
return const Center(
child: CircularProgressIndicator(
color: Color.fromARGB(255, 69, 66, 121),
),
);
});
var upload = await RemoteData()
.uploadimage(imagefile!, '');
if (upload != null) {
setState(() {
isloading = false;
});
var jsonResponse = jsonDecode(upload);
await Future.delayed(
const Duration(seconds: 1));
updateUI(jsonResponse);
}
if (Navigator.of(context).canPop()) {
if (kDebugMode) {
print('Testing =========>');
}
Navigator.of(context).pop();
}
} else {
setDialog('Check your internet connection');
}
}
},
child: Container(
margin: const EdgeInsets.only(
left: 10, top: 0, right: 2, bottom: 0),
width: MediaQuery.of(context).size.width * 0.100,
height: MediaQuery.of(context).size.width * 0.13,
padding: const EdgeInsets.all(5),
decoration: BoxDecoration(
gradient: const LinearGradient(
begin: Alignment.bottomLeft,
end: Alignment.bottomRight,
colors: [
Color.fromARGB(255, 227, 144, 214),
//Color(0xFFC2185B),
Color.fromARGB(255, 125, 174, 251),
],
),
borderRadius: BorderRadius.circular(50),
),
child: const Row(
children: [
Text('\t\t'),
Expanded(
child: Center(
child: Text(
'IDENTIFY PRODUCT',
style: Constants.buttonsfontStyle,
textAlign: TextAlign.center,
),
),
),
],
),
),
),
),
),
const Text('\n\n')
],
),
),
),
],
),
);
}
void updateUI(Map<String, dynamic> jsonResponse) {
setState(() {
isData = true;
isVisible = false;
status = jsonResponse['status'];
if (status == 'Success') {
bodycolor = jsonResponse['body_color'];
bodydesigncolor = jsonResponse['body_design_color'];
bordercolor = jsonResponse['border_color'];
bordersize = jsonResponse['border_size'];
borderworkcolor = jsonResponse['border_design_color'];
stylecode = jsonResponse['stylecode'];
similarsale = jsonResponse['similarsale'];
similarstock = jsonResponse['similarstock'];
bytes = base64.decode(jsonResponse['similarstockgraph']);
bytes1 = base64.decode(jsonResponse['similarsalegraph']);
} else {
setDialog('Could not found image');
bodycolor = '';
bodydesigncolor = '';
bordercolor = '';
bordersize = '';
borderworkcolor = '';
stylecode = '';
bytes!.clear();
bytes1!.clear();
embedding!.clear();
}
});
}
void setDialog(String text) {
showDialog(
context: context,
builder: (BuildContext context) {
return CustomAlertDialog(
titleText: 'WARNING ! \t',
contentText: text,
buttonText: '\t\t\tCANCEL\t\t\t',
onButtonPressed: () {
Navigator.of(context).pop();
},
icon: Image.asset(
'assets/images/error.png',
width: 58,
height: 58,
),
);
},
);
}
}
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:camera/camera.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:tflite_flutter/tflite_flutter.dart';
import 'package:vasthram/CameraScreen.dart';
import 'package:vasthram/Constants.dart';
import 'package:vasthram/RemoteData.dart';
import 'CustomAlertDialog.dart';
class Identifystylecode extends StatefulWidget {
const Identifystylecode({super.key});
@override
State<StatefulWidget> createState() => _Identifystylecode();
}
class _Identifystylecode extends State<Identifystylecode> {
File? imagefile;
final ImagePicker _picker = ImagePicker();
late List<File> arraylist = [];
XFile? image;
bool isloading = false;
bool isVisible = true;
bool isData = false;
String? graph;
String? graph1;
Uint8List? bytes;
Uint8List? bytes1;
var bodycolor = '';
var bodydesigncolor = '';
var bordercolor = '';
var bordersize = '';
var borderworkcolor = '';
var stylecode = '';
var status = '';
int similarsale = 0;
int similarstock = 0;
late PageController _pageController;
List<Widget> pages = [];
Uint8List? imageBytes;
List<dynamic>? embedding;
late Interpreter _interpreter;
bool _isCameraInitialized = false;
bool _isPictureTaken = false;
List<Stylecode>? closestStylecodes;
File? imagefile0;
CameraController? controller;
late Future<void> _initializeControllerFuture;
String? _base64Image;
// void getImage(File? imagefile) {
// // Reading image bytes from file
// final imageData = File(imagefile!.path).readAsBytesSync();
// // Decoding image
// final image = img.decodeImage(imageData);
// // Resizing image fpr model, [300, 300]
// final imageInput = img.copyResize(
// image!,
// width: 300,
// height: 300,
// );
// if (kDebugMode) {
// print(imageInput);
// }
// // Creating matrix representation, [300, 300, 3]
// final imageMatrix = List.generate(
// imageInput.height,
// (y) => List.generate(
// imageInput.width,
// (x) {
// final pixel = imageInput.getPixel(x, y);
// final r = img.getRed(pixel);
// final g = img.getGreen(pixel);
// final b = img.getBlue(pixel);
// return [r, g, b];
// },
// ),
// );
// embedding = imageMatrix;
// if (kDebugMode) {
// print(imageMatrix);
// }
// }
Future<void> initializeCamera() async {
final cameras = await availableCameras();
final frontCamera = cameras.firstWhere(
(camera) => camera.lensDirection == CameraLensDirection.back);
if (frontCamera == null) {
if (kDebugMode) {
print('No front camera found');
}
return;
}
controller = CameraController(frontCamera, ResolutionPreset.veryHigh);
await controller!.initialize();
}
Future<void> takePicture() async {
if (controller == null || !controller!.value.isInitialized) {
await initializeCamera();
}
// Take a picture
final XFile? picture = await controller!.takePicture();
if (picture != null) {
setState(() {
imagefile = File(picture.path);
_isPictureTaken = true;
});
}
print('Picture taken at: ${picture!.path}');
}
Future<void> _navigateToCameraScreen() async {
if (kDebugMode) {
print('Hitting or not');
}
try {
final imageFile1 = await Navigator.push<File>(
context,
MaterialPageRoute(builder: (context) => CameraScreen()),
);
if (imageFile1 != null) {
if (kDebugMode) {
print('Camera Capture ==========> $imageFile1');
}
imagefile = imageFile1;
final bytes = await imageFile1.readAsBytes();
final base64String1 = base64Encode(bytes);
setState(() {
_base64Image = base64String1;
});
getStatus(imagefile, 'camera');
}
} catch (e) {
if (kDebugMode) {
print('Error navigating to CameraScreen: $e');
}
}
}
//
void _showPicker(BuildContext context) {
showDialog(
context: context,
builder: (BuildContext dialogContext) {
return AlertDialog(
title: const Text(
'SELECT OPTION',
style: Constants.dialogbuttonstyle,
),
content: SingleChildScrollView(
child: ListBody(
children: <Widget>[
GestureDetector(
child: const Text(
'CAMERA',
style: Constants.dialogbuttonstyle,
),
onTap: () {
Navigator.of(dialogContext).pop();
_navigateToCameraScreen();
},
),
const Padding(padding: EdgeInsets.all(8.0)),
GestureDetector(
child: const Text(
'GALLERY',
style: Constants.dialogbuttonstyle,
),
onTap: () {
_getImageFromGallery(context);
Navigator.of(context).pop();
},
),
],
),
),
);
},
);
}
Future<void> _getImageFromCamera() async {
try {
final pickedFile = await _picker.pickImage(source: ImageSource.camera);
//Navigator.of(context).pop();
if (pickedFile != null) {
setState(() {
imagefile = File(pickedFile.path);
isVisible = true;
isData = false;
});
} else {
print("No image picked");
}
} catch (e) {
print("Error while picking image from camera: $e");
}
}
Future<void> _getImageFromGallery(BuildContext context) async {
image = await _picker.pickImage(source: ImageSource.gallery);
if (image != null) {
setState(() {
imagefile = File(image!.path);
isVisible = true;
isData = false;
});
getStatus(imagefile, 'gallery');
}
}
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
_pageController = PageController(initialPage: 0);
});
initializeCamera();
//loadModel();
}
Future<void> loadModel() async {
String? modelPath = 'assets/images/model.tflite';
if (kDebugMode) {
print('Loading interpreter options...');
}
final interpreterOptions = InterpreterOptions();
if (Platform.isAndroid) {
interpreterOptions.addDelegate(XNNPackDelegate());
}
if (Platform.isIOS) {
interpreterOptions.addDelegate(GpuDelegate());
}
if (kDebugMode) {
print('Loading interpreter...');
}
_interpreter =
await Interpreter.fromAsset(modelPath, options: interpreterOptions);
}
@override
void dispose() {
_pageController.dispose();
super.dispose();
}
Widget buildPage2(String title) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
const Padding(
padding: EdgeInsets.only(left: 10, bottom: 10, top: 10)),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Expanded(
child: Container(
decoration: BoxDecoration(
color: const Color.fromARGB(255, 69, 66, 121),
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(10),
bottomLeft: Radius.circular(10),
),
border: Border.all(
color: Colors.white, // Set border color to white
width: 1, // Set border width
),
),
padding: const EdgeInsets.all(12),
child: const Column(
mainAxisAlignment:
MainAxisAlignment.end, // Align content at the bottom
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Text(
'SIMILAR STOCK: ',
style: TextStyle(
fontSize: 15,
color: Colors.white,
),
),
],
),
),
),
Expanded(
child: Container(
decoration: BoxDecoration(
color: const Color.fromARGB(255, 255, 255, 255),
borderRadius: const BorderRadius.only(
topRight: Radius.circular(10),
bottomRight: Radius.circular(10),
),
border: Border.all(
color: Colors.white, // Set border color to white
width: 1, // Set border width
),
),
padding: const EdgeInsets.all(12),
child: Column(
children: [
Text(
similarstock.toString(),
style: const TextStyle(
fontSize: 15,
color: Color.fromARGB(255, 69, 66, 121),
),
),
],
),
),
),
],
),
const Padding(padding: EdgeInsets.only(left: 10, top: 10)),
Container(
color: const Color.fromRGBO(222, 221, 220, 1),
child: Image.memory(
bytes!,
fit: BoxFit.cover, // Adjust as needed
),
),
],
),
);
}
Widget buildPage3(String title) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
const Padding(padding: EdgeInsets.only(left: 10, bottom: 10, top: 10)),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Expanded(
child: Container(
decoration: BoxDecoration(
color: const Color.fromARGB(255, 69, 66, 121),
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(10),
bottomLeft: Radius.circular(10),
),
border: Border.all(
color: Colors.white, // Set border color to white
width: 1, // Set border width
),
),
padding: const EdgeInsets.all(12),
child: const Column(
mainAxisAlignment:
MainAxisAlignment.end, // Align content at the bottom
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Text(
'SIMILAR SALE: ',
style: TextStyle(
fontSize: 15,
color: Colors.white,
),
),
],
),
),
),
Expanded(
child: Container(
decoration: BoxDecoration(
color: const Color.fromARGB(255, 255, 255, 255),
borderRadius: const BorderRadius.only(
topRight: Radius.circular(10),
bottomRight: Radius.circular(10),
),
border: Border.all(
color: Colors.white, // Set border color to white
width: 1, // Set border width
),
),
padding: const EdgeInsets.all(12),
child: Column(
children: [
Text(
similarsale.toString(),
style: const TextStyle(
fontSize: 15,
color: Color.fromARGB(255, 69, 66, 121),
),
),
],
),
),
),
],
),
const Padding(padding: EdgeInsets.only(left: 10, top: 10)),
Container(
color: const Color.fromARGB(255, 240, 200, 159),
child: Image.memory(
bytes1!,
fit: BoxFit.cover, // Adjust as needed
),
),
],
));
}
Widget buildPage1(String title) {
return SizedBox(
height: MediaQuery.of(context).size.height * 0.60,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
if (closestStylecodes!.isNotEmpty)
ListView.builder(
shrinkWrap: true,
itemCount: closestStylecodes!.length,
itemBuilder: (context, index) {
return Card(
child: ListTile(
title: Text(
'Style Code \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: ${closestStylecodes![index].styleCode}',
style: Constants.headerfontStyle,
),
subtitle: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Similarity Percentage : ${closestStylecodes![index].SimilarityPercentage ?? 'None'}${closestStylecodes![index].SimilarityPercentage != 'None' ? '%' : ''}',
style: Constants.headerfontStyle,
),
],
),
onTap: () {
if (closestStylecodes![index].similarImagePath ==
'None') {
} else if (closestStylecodes![index].similarImagePath ==
'None') {
} else {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text('Style Code Details'),
content: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Style Code: ${closestStylecodes![index].styleCode}',
style: Constants.headerfontStyle,
),
Text(
'Similarity Percentage\t\t\t\t: ${closestStylecodes![index].SimilarityPercentage ?? 'None'}${closestStylecodes![index].SimilarityPercentage != 'None' ? '%' : ''}',
style: Constants.headerfontStyle,
),
Image.network(
closestStylecodes![index].similarImagePath!,
width: 200,
height: 200,
),
],
),
actions: [
TextButton(
child: const Text('Close'),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
},
);
}
},
),
);
},
)
else
const SizedBox(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(padding: EdgeInsets.only(bottom: 20)),
Text('\n'),
Text('\n'),
Text('\n'),
Text('\n'),
Text('\n'),
Text('\n'),
Text('\n'),
],
),
),
],
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
resizeToAvoidBottomInset: false,
appBar: AppBar(
title: Text(
'IDENTIFY STYLE CODE',
style: Constants.colorfontStyle,
),
automaticallyImplyLeading: false,
leading: IconButton(
icon: const Icon(
Icons.arrow_back_ios,
color: Color.fromARGB(255, 69, 66, 121),
size: 24,
),
onPressed: () => Navigator.pop(context),
),
flexibleSpace: Container(
decoration: BoxDecoration(
gradient: Constants.getReturn(),
),
),
),
body: Stack(
children: [
Container(
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage(
"assets/images/bg.png"), // Path to your background image
fit: BoxFit.cover,
),
),
),
SingleChildScrollView(
child: Container(
margin: const EdgeInsets.all(20.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
Column(
children: [
const Padding(padding: EdgeInsets.only(top: 5)),
GestureDetector(
onTap: () {
_showPicker(context);
},
child: SizedBox(
width: MediaQuery.of(context).size.width * 0.88,
height: MediaQuery.of(context).size.height * 0.50,
child: _base64Image != null
? Image.memory(
base64Decode(_base64Image!),
fit: BoxFit.cover,
)
: Center(
child: Image.asset(
'assets/images/camera.png',
width:
MediaQuery.of(context).size.width *
0.50, // Adjusted width
height:
MediaQuery.of(context).size.height *
0.35, // Adjusted height
),
),
),
// child: SizedBox(
// width: MediaQuery.of(context).size.width * 0.88,
// height: MediaQuery.of(context).size.height * 0.50,
// child: imagefile != null
// ? Image.file(
// imagefile!,
// fit: BoxFit.cover,
// )
// : Center(
// child: Image.asset(
// 'assets/images/camera.png',
// width:
// MediaQuery.of(context).size.width *
// 0.50, // Adjusted width
// height:
// MediaQuery.of(context).size.height *
// 0.35, // Adjusted height
// ),
// ),
// ),
),
],
),
],
),
if (isData)
SizedBox(
height: MediaQuery.of(context).size.height * 0.60,
child: PageView(
controller: _pageController,
children: pages = [
buildPage1('Page 1'),
//buildPage2('Page 2'),
//buildPage3('Page 3'),
],
),
),
SizedBox(
height: MediaQuery.of(context).size.height * 0.28,
),
// Visibility(
// visible: isVisible,
// child: SizedBox(
// width: MediaQuery.of(context).size.width * 0.90,
// child: GestureDetector(
// onTap: () async {
// if (imagefile == null) {
// setDialog('Please Capture Image');
// } else {
// setState(() {
// isloading = true; // Set loading state to true
// });
// bool isInternetConnected =
// await Constants.checkInternetConnectivity();
// if (isInternetConnected) {
// showDialog(
// context: context,
// barrierDismissible: false,
// builder: (context) {
// return const Center(
// child: CircularProgressIndicator(
// color: Color.fromARGB(255, 69, 66, 121),
// ),
// );
// });
// var upload1 = await RemoteData()
// .uploadimage(imagefile!, '');
// if (upload1 != null) {
// setState(() {
// isloading = false;
// });
// var jsonResponse = jsonDecode(upload1);
// await Future.delayed(
// const Duration(seconds: 1));
// updateUI(jsonResponse);
// }
// if (Navigator.of(context).canPop()) {
// //Navigator.of(context).pop();
// }
// } else {
// setDialog('Check your internet connection');
// }
// }
// },
// child: Container(
// margin: const EdgeInsets.only(
// left: 10, top: 0, right: 2, bottom: 0),
// width: MediaQuery.of(context).size.width * 0.100,
// height: MediaQuery.of(context).size.width * 0.13,
// padding: const EdgeInsets.all(5),
// decoration: BoxDecoration(
// gradient: const LinearGradient(
// begin: Alignment.bottomLeft,
// end: Alignment.bottomRight,
// colors: [
// Color.fromARGB(255, 227, 144, 214),
// Color.fromARGB(255, 125, 174, 251),
// ],
// ),
// borderRadius: BorderRadius.circular(50),
// ),
// child: const Row(
// children: [
// Text('\t\t'),
// Expanded(
// child: Center(
// child: Text(
// 'IDENTIFY STYLE CODE',
// style: Constants.buttonsfontStyle,
// textAlign: TextAlign.center,
// ),
// ),
// ),
// ],
// ),
// ),
// ),
// ),
// ),
const Text('\n\n')
],
),
),
),
],
),
);
}
void setDialog(String text) {
showDialog(
context: context,
builder: (BuildContext context) {
return CustomAlertDialog(
titleText: 'WARNING ! \t',
contentText: text,
buttonText: '\t\t\tCANCEL\t\t\t',
onButtonPressed: () {
Navigator.of(context).pop();
},
icon: Image.asset(
'assets/images/error.png',
width: 58,
height: 58,
),
);
},
);
}
Future<void> updateUI(Map<String, dynamic> jsonResponse1, String type) async {
Navigator.of(context).pop();
print('Response Data : $jsonResponse1');
var saree = jsonResponse1['saree_detected'];
if (kDebugMode) {
print(saree);
}
if (saree == 'Yes') {
var bodyimage = jsonResponse1['body_metrics'][0];
var annotated_image = jsonResponse1['annotated_image'];
setState(() {
_base64Image = annotated_image;
});
print(bodyimage);
try {
var upload =
await RemoteData().IdentifyStyleCode(imagefile!, bodyimage);
//var json = jsonDecode(upload!);
await Future.delayed(const Duration(seconds: 1));
getupdate(upload!);
} catch (e) {
print(e);
return;
}
return;
} else {
if (type == 'camera') {
showDialog(
context: context,
builder: (BuildContext context) {
return CustomAlertDialog(
titleText: 'WARNING ! \t',
contentText: 'Saree Not Detected',
buttonText: 'No',
onButtonPressed: () {
Navigator.of(context).pop();
},
secondButtonText: 'Yes',
onSecondButtonPressed: () {
Navigator.of(context).pop();
Future.delayed(const Duration(milliseconds: 200), () {
_navigateToCameraScreen();
});
},
icon: const Icon(Icons.info),
);
},
);
} else {
_getImageFromGallery(context);
}
}
}
void getupdate(var jsonResponse) {
print('Hitting ot npt $jsonResponse');
//Navigator.of(context).pop();
var json =
'[{"Similarity Percentage":"12","Stylecode":"Black","imageURL":"http://google.com"}]';
//List<dynamic> closestStylecodesList = jsonDecode(jsonResponse);
//jsonResponse['Closest Stylecodes'];
isData = true;
//isVisible = false;
setState(() {
//var jsonArray = jsonDecode(jsonString);
var jsonArray = jsonDecode(jsonResponse);
closestStylecodes = jsonArray.map<Stylecode>((json) {
return Stylecode.fromJson(json);
}).toList();
//closestStylecodes = [Stylecode.fromJson(json)];
});
print('Hitting ot npt $jsonResponse');
}
Future<void> getStatus(File? imagefile, String type) async {
setState(() {
isloading = true; // Set loading state to true
});
bool isInternetConnected = await Constants.checkInternetConnectivity();
if (isInternetConnected) {
showDialog(
context: context,
barrierDismissible: false,
builder: (context) {
return const Center(
child: CircularProgressIndicator(
color: Color.fromARGB(255, 69, 66, 121),
),
);
});
var upload1 = await RemoteData().uploadimage(imagefile!, '');
if (upload1 != null) {
setState(() {
isloading = false;
});
var jsonResponse = jsonDecode(upload1);
await Future.delayed(const Duration(seconds: 1));
updateUI(jsonResponse, type);
}
} else {
setDialog('Check your internet connection');
}
}
}
class Stylecode {
final String? SimilarityPercentage;
final String? similarImagePath;
final String? styleCode;
Stylecode({
this.SimilarityPercentage,
this.similarImagePath,
this.styleCode,
});
factory Stylecode.fromJson(Map<String, dynamic> json) {
return Stylecode(
SimilarityPercentage: json['Similarity Percentage'] ?? '',
similarImagePath: json['imageURL'] ?? '',
styleCode: json['Stylecode'] ?? '',
);
}
}
...@@ -5,12 +5,14 @@ import 'package:http/http.dart' as http; ...@@ -5,12 +5,14 @@ import 'package:http/http.dart' as http;
//8008202992 //8008202992
class RemoteData { class RemoteData {
final String loginUrl = 'http://vaman.plutokm.com/login'; final String loginUrl = 'http://vaman.plutokm.com/login';
final String type = "Content-Type"; final String Uploadimage = 'http://vaman.plutokm.com/vasthram_mobile';
final String appjson = "application/json"; final String Identifystylecode = 'https://vaman.plutokm.com/get_vasthram_style_code';
final String registerstylecode = 'https://vaman.plutokm.com/register_style_code';
final String type = 'Content-Type';
final String appjson = 'application/json';
Future<String> getLoginRequest( Future<String> getLoginRequest (String loginid, String pass, String token) async {
String loginid, String pass, String token) async {
Map<String, dynamic> body = { Map<String, dynamic> body = {
'login_id': loginid, 'login_id': loginid,
'password': pass, 'password': pass,
...@@ -34,13 +36,12 @@ class RemoteData { ...@@ -34,13 +36,12 @@ class RemoteData {
} }
} }
Future<String?> uploadimage(File imagepath) async { Future<String?> uploadimage(File imagepath, String embedding) async {
try { try {
final request = http.MultipartRequest( final request = http.MultipartRequest('POST', Uri.parse('http://vaman.plutokm.com/detect_saree'));
'POST', Uri.parse('http://vaman.plutokm.com/vasthram_mobile')); request.files.add(await http.MultipartFile.fromPath('image', imagepath.path));
request.files //request.files.add(await http.MultipartFile.fromPath('embedding', embedding));
.add(await http.MultipartFile.fromPath('image', imagepath.path)); var response = await request.send();
var response = await request.send();
var responseString = await response.stream.bytesToString(); var responseString = await response.stream.bytesToString();
if (kDebugMode) { if (kDebugMode) {
print('Response :$responseString'); print('Response :$responseString');
...@@ -57,4 +58,76 @@ class RemoteData { ...@@ -57,4 +58,76 @@ class RemoteData {
} }
return ''; return '';
} }
Future<String?> IdentifyStyleCode(File imagepath, String bodyimagepath) async {
print('Identify Stylecode $bodyimagepath');
try {
final request = http.MultipartRequest('POST', Uri.parse(Identifystylecode));
request.files.add(await http.MultipartFile.fromPath('image', imagepath.path));
request.files.add(await http.MultipartFile.fromString('body_image_path', bodyimagepath));
//request.files.add(await http.MultipartFile.fromPath('embedding', embedding));
var response = await request.send();
var responseString = await response.stream.bytesToString();
if (kDebugMode) {
print('Response :$responseString');
}
if (response.statusCode == 200) {
return responseString;
} else {
return responseString;
}
} catch (e) {
if (kDebugMode) {
print(e);
}
}
return '';
}
Future<String?> registerStyleCode(File imagepath, var embedding, String stylecode) async {
print('Register Style Code : $stylecode');
try {
final request = http.MultipartRequest('POST', Uri.parse(registerstylecode));
request.files.add(await http.MultipartFile.fromPath('image', imagepath.path));
request.files.add(http.MultipartFile.fromString('body_image_path', embedding));
//request.fields('style_code', stylecode);
request.fields['style_code'] = stylecode;
//request.files.add(await http.MultipartFile.fromPath('embedding', embedding));
var response = await request.send();
var responseString = await response.stream.bytesToString();
if (kDebugMode) {
print('Response :$responseString');
}
if (response.statusCode == 200) {
return responseString;
} else {
return responseString;
}
} catch (e) {
if (kDebugMode) {
print(e);
}
}
return '';
}
Future<String?> searchbybarcode(String barcode) async {
var client = http.Client();
var res = await client.get(Uri.parse('https://vaman.plutokm.com/get_vas_barcode_image/$barcode'));
if (kDebugMode) {
print(res.body);
}
if (kDebugMode) {
print(res.statusCode);
}
if (res.statusCode == 200) {
return res.body;
} else {
throw Exception('Status code was wrong$res.statusCode');
}
}
} }
//https://vaman.plutokm.com/get_vas_barcode_image/
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:vasthram/Constants.dart';
import 'package:vasthram/CustomAlertDialog.dart';
import 'package:vasthram/RemoteData.dart';
class Searchbybarcode extends StatefulWidget {
const Searchbybarcode({super.key});
@override
State<StatefulWidget> createState() => _Searchbybarcode();
}
class _Searchbybarcode extends State<Searchbybarcode> {
File? imagefile;
String? imageUrl;
String? value = '';
final TextEditingController _barcode = TextEditingController();
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {});
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
resizeToAvoidBottomInset: false,
appBar: AppBar(
title: Text(
'SEARCH BY BARCODE',
style: Constants.colorfontStyle,
),
automaticallyImplyLeading: false,
leading: IconButton(
icon: const Icon(
Icons.arrow_back_ios,
color: Color.fromARGB(255, 69, 66, 121),
size: 24,
),
onPressed: () => Navigator.pop(context),
),
flexibleSpace: Container(
decoration: BoxDecoration(
gradient: Constants.getReturn(),
),
),
),
body: Stack(
children: [
Container(
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage(
'assets/images/bg.png'), // Path to your background image
fit: BoxFit.cover,
),
),
),
SingleChildScrollView(
child: Container(
margin: const EdgeInsets.all(20.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
SizedBox(
height: 60,
child: TextFormField(
cursorColor: const Color.fromARGB(255, 69, 66, 121),
keyboardType: TextInputType.emailAddress,
controller: _barcode,
scrollPadding: const EdgeInsets.all(100.0),
decoration: InputDecoration(
prefixIcon: Padding(
padding: const EdgeInsets.only(left: 8.0),
child: IconButton(
onPressed: () {},
icon: const Icon(Icons.search_rounded),
),
),
contentPadding: const EdgeInsets.fromLTRB(20, 0, 20, 0),
hintText: 'Enter Barcode',
filled: true,
fillColor: const Color.fromARGB(255, 244, 244, 254),
border: OutlineInputBorder(
borderSide: BorderSide.none,
borderRadius: BorderRadius.circular(50),
),
),
),
),
SizedBox(
width: MediaQuery.of(context).size.width * 0.90,
child: GestureDetector(
onTap: () async {
if (_barcode.text.isEmpty) {
setDialog('Please Enter Barcode');
} else {
bool isInternetConnected =
await Constants.checkInternetConnectivity();
if (isInternetConnected) {
showDialog(
context: context,
barrierDismissible: false,
builder: (context) {
return const Center(
child: CircularProgressIndicator(
color: Color.fromARGB(255, 69, 66, 121),
),
);
}
);
var upload = await RemoteData().searchbybarcode(_barcode.text.trim().toUpperCase());
if (upload != null) {
var jsonResponse = jsonDecode(upload);
await Future.delayed(const Duration(seconds: 1));
updateUI(jsonResponse);
}
if (Navigator.of(context).canPop()) {
if (kDebugMode) {
print('Testing =========>');
}
Navigator.of(context).pop();
}
} else {
setDialog('Check your internet connection');
}
}
},
child: Container(
margin: const EdgeInsets.only(
left: 0, top: 0, right: 2, bottom: 0),
width: MediaQuery.of(context).size.width * 0.100,
height: MediaQuery.of(context).size.width * 0.13,
padding: const EdgeInsets.all(5),
decoration: BoxDecoration(
gradient: const LinearGradient(
begin: Alignment.bottomLeft,
end: Alignment.bottomRight,
colors: [
Color.fromARGB(255, 227, 144, 214),
//Color(0xFFC2185B),
Color.fromARGB(255, 125, 174, 251),
],
),
borderRadius: BorderRadius.circular(50),
),
child: const Row(
children: [
Text('\t\t'),
// replace with your image
Expanded(
child: Center(
child: Text(
'SEARCH',
style: Constants.buttonsfontStyle,
textAlign: TextAlign.center,
),
),
),
],
),
),
),
),
const Text('\t'),
Text(
value!,
style: Constants.loginfontStyle,
),
const Padding(padding: EdgeInsets.only(top: 0)),
SizedBox(
width: MediaQuery.of(context).size.width * 0.95,
height: MediaQuery.of(context).size.height * 0.65,
child: imageUrl != null
? Image.network(
imageUrl!,
width: MediaQuery.of(context).size.width * 0.95,
height: MediaQuery.of(context).size.height * 0.68,
errorBuilder: (BuildContext context,
Object exception, StackTrace? stackTrace) {
return const Text('Error loading image');
},
)
: Center(
child: Image.asset(
'assets/images/camera.png',
width: MediaQuery.of(context).size.width *
0.50, // Adjusted width
height: MediaQuery.of(context).size.height *
0.35, // Adjusted height
),
),
),
],
),
),
),
],
),
);
}
void updateUI(Map<String, dynamic> jsonResponse) {
setState(() {
var newImageUrl = jsonResponse['image_url'];
setState(() {
imageUrl = newImageUrl;
var str = _barcode.text;
value = 'BARCODE : $str';
_barcode.clear();
});
});
}
void setDialog(String text) {
showDialog(
context: context,
builder: (BuildContext context) {
return CustomAlertDialog(
titleText: 'WARNING ! \t',
contentText: text,
buttonText: '\t\t\tCANCEL\t\t\t',
onButtonPressed: () {
Navigator.of(context).pop();
},
icon: Image.asset(
'assets/images/error.png',
width: 58,
height: 58,
),
);
},
);
}
}
...@@ -2,6 +2,7 @@ import 'dart:convert'; ...@@ -2,6 +2,7 @@ import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:vasthram/CustomAlertDialog.dart';
import 'package:vasthram/RemoteData.dart'; import 'package:vasthram/RemoteData.dart';
import 'package:vasthram/UserResponse.dart'; import 'package:vasthram/UserResponse.dart';
import 'Constants.dart'; import 'Constants.dart';
...@@ -10,7 +11,6 @@ import 'package:camera/camera.dart'; ...@@ -10,7 +11,6 @@ import 'package:camera/camera.dart';
class SignUp extends StatefulWidget { class SignUp extends StatefulWidget {
const SignUp({Key? key}) : super(key: key); const SignUp({Key? key}) : super(key: key);
@override @override
State<StatefulWidget> createState() => _SignUpState(); State<StatefulWidget> createState() => _SignUpState();
} }
...@@ -24,12 +24,10 @@ class _SignUpState extends State<SignUp> { ...@@ -24,12 +24,10 @@ class _SignUpState extends State<SignUp> {
CameraController? controller; CameraController? controller;
Future<void> login(String email, String pass) async { Future<void> login(String email, String pass) async {
Constants.showAlertDialog1(context);
final response = await RemoteData().getLoginRequest(email, pass, ''); final response = await RemoteData().getLoginRequest(email, pass, '');
try { try {
Map<String, dynamic> responseMap = jsonDecode(response); Map<String, dynamic> responseMap = jsonDecode(response);
if (responseMap['status'] == 'Success') { if (responseMap['status'] == 'Success') {
// Handle success status
final userResponse = userResponseFromJson(response); final userResponse = userResponseFromJson(response);
if (userResponse.status.contains('Success')) { if (userResponse.status.contains('Success')) {
List<Map<String, dynamic>>? normalArray; List<Map<String, dynamic>>? normalArray;
...@@ -37,7 +35,6 @@ class _SignUpState extends State<SignUp> { ...@@ -37,7 +35,6 @@ class _SignUpState extends State<SignUp> {
normalArray = userResponse.stores.map((item) { normalArray = userResponse.stores.map((item) {
return { return {
'name': item.storename, 'name': item.storename,
//'value': item.value,
}; };
}).toList(); }).toList();
} }
...@@ -54,33 +51,22 @@ class _SignUpState extends State<SignUp> { ...@@ -54,33 +51,22 @@ class _SignUpState extends State<SignUp> {
.showAlertDialog(context, false); .showAlertDialog(context, false);
} }
} catch (e) { } catch (e) {
Navigator.pop(context); Constants('Login', e.toString()).showAlertDialog(context, true);
Constants('Login', e.toString()).showAlertDialog(context, false);
} }
} }
Future<void> initializeCamera() async { Future<void> initializeCamera() async {
final cameras = await availableCameras(); final cameras = await availableCameras();
// Check if there is a front camera
final frontCamera = cameras.firstWhere( final frontCamera = cameras.firstWhere(
(camera) => camera.lensDirection == CameraLensDirection.front, (camera) => camera.lensDirection == CameraLensDirection.front,
); );
if (frontCamera == null) { if (frontCamera == null) {
if (kDebugMode) { if (kDebugMode) {
print('No front camera found'); print('No front camera found');
} }
return; return;
} }
controller = CameraController(frontCamera, ResolutionPreset.veryHigh);
// Initialize the CameraController
controller = CameraController(
frontCamera,
ResolutionPreset.high,
);
// Initialize the camera and wait for it to initialize
await controller!.initialize(); await controller!.initialize();
} }
...@@ -94,10 +80,8 @@ class _SignUpState extends State<SignUp> { ...@@ -94,10 +80,8 @@ class _SignUpState extends State<SignUp> {
Future<void> takePicture() async { Future<void> takePicture() async {
if (controller == null || !controller!.value.isInitialized) { if (controller == null || !controller!.value.isInitialized) {
// Initialize the camera before taking a picture
await initializeCamera(); await initializeCamera();
} }
// Take a picture // Take a picture
final XFile? picture = await controller!.takePicture(); final XFile? picture = await controller!.takePicture();
if (picture != null) { if (picture != null) {
...@@ -111,165 +95,214 @@ class _SignUpState extends State<SignUp> { ...@@ -111,165 +95,214 @@ class _SignUpState extends State<SignUp> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
resizeToAvoidBottomInset: false, //resizeToAvoidBottomInset: false,
body: Container(
decoration: const BoxDecoration( body: Stack(
image: DecorationImage( children: [
image: AssetImage("assets/images/bg.png"), Container(
fit: BoxFit.cover, // Adjust as needed decoration: const BoxDecoration(
), image: DecorationImage(
), image: AssetImage(
child: Column( "assets/images/bg.png"), // Path to your background image
crossAxisAlignment: CrossAxisAlignment.center, fit: BoxFit.cover,
mainAxisAlignment: MainAxisAlignment.start,
children: [
const SizedBox(
height: 150,
),
Image.asset(
"assets/images/logo.png",
width: 250,
height: 125,
),
const SizedBox(
height: 20,
),
const Padding(
padding: EdgeInsets.only(
top: 40.0, left: 20.0, right: 20.0, bottom: 0),
child: SizedBox(
height: 60,
child: Text(
'LOGIN',
style: Constants.buttonsfontStyle,
),
), ),
), ),
Padding( ),
padding: const EdgeInsets.only( SingleChildScrollView(
top: 0, left: 20.0, right: 20.0, bottom: 0), reverse: true,
child: SizedBox( child: Column(
height: 50, crossAxisAlignment: CrossAxisAlignment.center,
child: TextFormField( mainAxisAlignment: MainAxisAlignment.start,
cursorColor: const Color.fromARGB(255, 126, 69, 85), children: [
keyboardType: TextInputType.number, const SizedBox(
controller: _email, height: 150,
scrollPadding: const EdgeInsets.all(100.0), ),
decoration: InputDecoration( Image.asset(
contentPadding: const EdgeInsets.fromLTRB(20, 0, 20, 0), "assets/images/logo.png",
hintText: 'USER ID', width: 320,
filled: true, height: 220,
fillColor: const Color.fromARGB(255, 224, 226, 228), ),
border: OutlineInputBorder( const SizedBox(
borderSide: BorderSide.none, height: 20,
borderRadius: BorderRadius.circular(50), ),
const Padding(
padding: EdgeInsets.only(
top: 40.0, left: 20.0, right: 20.0, bottom: 0),
child: SizedBox(
height: 45,
child: Text(
'LOGIN',
style: Constants.loginfontStyle,
), ),
suffixIcon: Padding( ),
padding: const EdgeInsets.only(right: 8.0), ),
child: IconButton( Padding(
onPressed: () {}, padding: const EdgeInsets.only(
icon: Image.asset( top: 0, left: 20.0, right: 20.0, bottom: 0),
"assets/images/user.png", child: SizedBox(
width: 24, height: 60,
height: 24, child: TextFormField(
cursorColor: const Color.fromARGB(255, 69, 66, 121),
keyboardType: TextInputType.number,
controller: _email,
scrollPadding: const EdgeInsets.all(100.0),
decoration: InputDecoration(
contentPadding: const EdgeInsets.fromLTRB(20, 0, 20, 0),
hintText: 'USER ID',
filled: true,
fillColor: const Color.fromARGB(255, 244, 244, 254),
border: OutlineInputBorder(
borderSide: BorderSide.none,
borderRadius: BorderRadius.circular(50),
),
suffixIcon: Padding(
padding: const EdgeInsets.only(right: 8.0),
child: IconButton(
onPressed: () {},
icon: Image.asset(
"assets/images/user.png",
width: 18,
height: 18,
),
),
), ),
), ),
), ),
), ),
), ),
), const SizedBox(
), height: 10,
const SizedBox( ),
height: 20, Padding(
), padding: const EdgeInsets.only(
Padding( top: 0, left: 20.0, right: 20.0, bottom: 0),
padding: const EdgeInsets.only( child: SizedBox(
top: 0, left: 20.0, right: 20.0, bottom: 0), height: 60,
child: SizedBox( child: TextFormField(
height: 50, cursorColor: const Color.fromARGB(255, 69, 66, 121),
child: TextFormField( obscureText: true,
cursorColor: const Color.fromARGB(255, 126, 69, 85), controller: _pass,
obscureText: true, decoration: InputDecoration(
controller: _pass, contentPadding: const EdgeInsets.fromLTRB(20, 0, 20, 0),
decoration: InputDecoration( hintText: 'PASSWORD',
contentPadding: const EdgeInsets.fromLTRB(20, 0, 20, 0), filled: true,
hintText: 'PASSWORD', fillColor: const Color.fromARGB(255, 244, 244, 254),
filled: true, border: OutlineInputBorder(
fillColor: const Color.fromARGB(255, 224, 226, 228), borderSide: BorderSide.none,
border: OutlineInputBorder( borderRadius: BorderRadius.circular(50),
borderSide: BorderSide.none, ),
borderRadius: BorderRadius.circular(50), suffixIcon: Padding(
), padding: const EdgeInsets.only(right: 8.0),
suffixIcon: Padding( child: IconButton(
padding: const EdgeInsets.only(right: 8.0), onPressed: () {},
child: IconButton( icon: Image.asset(
onPressed: () {}, "assets/images/password.png",
icon: Image.asset( width: 18,
"assets/images/password.png", height: 18,
width: 24, ),
height: 24, ),
), ),
), ),
), ),
), ),
), ),
), const SizedBox(
), height: 80,
const SizedBox(
height: 80,
),
Padding(
padding: const EdgeInsets.only(
top: 0,
left: 20.0,
right: 20.0,
bottom: 0), // Adjust padding as needed
child: ElevatedButton(
onPressed: () async {
Constants.saveLoginCredentials(
'', _email.text, '', '', '', true);
Navigator.pushReplacement(context,
MaterialPageRoute(builder: (context) => const Home()));
},
style: ButtonStyle(
shape: MaterialStateProperty.all<RoundedRectangleBorder>(
RoundedRectangleBorder(
borderRadius: BorderRadius.circular(
50.0), // Adjust the radius as needed
),
),
minimumSize: MaterialStateProperty.all<Size>(
const Size(double.infinity, 50),
),
backgroundColor: MaterialStateProperty.all<Color>(
const Color.fromARGB(255, 126, 69,
85), // Adjust the background color as needed
),
), ),
child: Row( SizedBox(
children: [ width: MediaQuery.of(context).size.width * 0.90,
SizedBox( child: GestureDetector(
child: Image.asset( onTap: () async {
"assets/images/signin.png", if (_email.text.isEmpty && _pass.text.isEmpty) {
width: 42, // Adjust the width as needed setDialog(
height: 42, // Adjust the height as needed 'Enter User Id & Password',
), );
), } else if (_email.text.isEmpty) {
const Expanded( setDialog('Enter UserId');
child: Center( } else if (_pass.text.isEmpty) {
child: Text( setDialog('Enter Password');
'SIGN IN', } else {
style: Constants.buttonsfontStyle, bool isInternetConnected =
await Constants.checkInternetConnectivity();
if (isInternetConnected) {
showDialog(
context: context,
builder: (context) {
return const Center(
child: CircularProgressIndicator(
color: Color.fromARGB(255, 164, 149, 120),
));
});
login(_email.text, _pass.text);
} else {
setDialog('Check your internetconnection');
}
}
},
child: Container(
margin: const EdgeInsets.only(
left: 10, top: 0, right: 2, bottom: 0),
width: MediaQuery.of(context).size.width * 0.100,
height: MediaQuery.of(context).size.width * 0.13,
padding: const EdgeInsets.all(5),
decoration: BoxDecoration(
gradient: const LinearGradient(
begin: Alignment.bottomLeft,
end: Alignment.bottomRight,
colors: [
Color.fromARGB(255, 227, 144, 214),
//Color(0xFFC2185B),
Color.fromARGB(255, 125, 174, 251),
],
), ),
borderRadius: BorderRadius.circular(50),
),
child: Row(
children: [
const Text('\t\t'),
Image.asset(
'assets/images/signin.png',
width: 60,
height: 60,
), // replace with your image
const Expanded(
child: Text(
'\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tSIGN IN',
style: Constants.buttonsfontStyle,
),
),
],
), ),
), ),
], ),
), ),
), const Text('\n\n\n\n\n\n\n'),
],
), ),
], ),
), ],
), ),
); );
} }
void setDialog(String text) {
showDialog(
context: context,
builder: (BuildContext context) {
return CustomAlertDialog(
titleText: 'WARNING ! \t',
contentText: text,
buttonText: '\t\t\tCANCEL\t\t\t',
onButtonPressed: () {
Navigator.of(context).pop();
},
icon: Image.asset(
'assets/images/error.png',
width: 58,
height: 58,
),
);
},
);
}
} }
import 'dart:async'; import 'dart:async';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gif_view/gif_view.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import 'package:vasthram/Home.dart'; import 'package:vasthram/Home.dart';
import 'package:vasthram/SignUp.dart'; import 'package:vasthram/SignUp.dart';
...@@ -27,7 +28,7 @@ class SplashScreen extends StatefulWidget { ...@@ -27,7 +28,7 @@ class SplashScreen extends StatefulWidget {
class SplashScreenState extends State<SplashScreen> { class SplashScreenState extends State<SplashScreen> {
bool? isLoggedIn = false; bool? isLoggedIn = false;
void timeToShowSplashScreenOnScreen() async { void timeToShowSplashScreenOnScreen() async {
Timer(const Duration(seconds: 3), () async { Timer(const Duration(seconds: 5), () async {
if (!mounted) return; if (!mounted) return;
SharedPreferences prefs = await SharedPreferences.getInstance(); SharedPreferences prefs = await SharedPreferences.getInstance();
var isLoggedIn = prefs.getBool("islogged") ?? false; var isLoggedIn = prefs.getBool("islogged") ?? false;
...@@ -38,11 +39,8 @@ class SplashScreenState extends State<SplashScreen> { ...@@ -38,11 +39,8 @@ class SplashScreenState extends State<SplashScreen> {
if (kDebugMode) { if (kDebugMode) {
print('if condition :$isLoggedIn'); print('if condition :$isLoggedIn');
} }
Navigator.pushReplacement( Navigator.push(context, MaterialPageRoute(builder: (context) => const Home()));
context, MaterialPageRoute(builder: (context) => const Home()));
} else { } else {
if(kDebugMode) {
}
Navigator.pushAndRemoveUntil( Navigator.pushAndRemoveUntil(
context, context,
MaterialPageRoute(builder: (context) => const SignUp()), MaterialPageRoute(builder: (context) => const SignUp()),
...@@ -61,13 +59,27 @@ class SplashScreenState extends State<SplashScreen> { ...@@ -61,13 +59,27 @@ class SplashScreenState extends State<SplashScreen> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
body: Container( body: Container(
decoration: const BoxDecoration( decoration:
//loadingText: Text("Loading"), const BoxDecoration(color: Color.fromARGB(255, 229, 227, 249)),
image: DecorationImage( child: GifView.asset(
image: AssetImage("assets/images/splash.png"), 'assets/images/splash.gif',
fit: BoxFit.cover, height: MediaQuery.of(context).size.height * 2,
), width: MediaQuery.of(context).size.width,
frameRate: 30, //default is 15 FPS
), ),
// decoration: const BoxDecoration(
// //loadingText: Text("Loading"),
// GifView.asset(
// 'assets/images/login.gif',
// height: 350,
// width: 350,
// frameRate: 30, //default is 15 FPS
// ),
// image: DecorationImage(
// image: AssetImage("assets/images/splash.gif"),
// fit: BoxFit.cover,
// ),
// ),
), ),
); );
} }
......
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:tflite_flutter/tflite_flutter.dart';
import 'package:vasthram/CameraScreen.dart';
import 'package:vasthram/Constants.dart';
import 'package:vasthram/CustomAlertDialog.dart';
import 'package:vasthram/RemoteData.dart';
class Uploadstylecode extends StatefulWidget {
const Uploadstylecode({super.key});
@override
State<StatefulWidget> createState() => _Uploadstylecode();
}
class _Uploadstylecode extends State<Uploadstylecode> {
File? imagefile;
final ImagePicker _picker = ImagePicker();
late List<File> arraylist = [];
final TextEditingController _stylecode = TextEditingController();
XFile? image;
bool isloading = false;
bool isVisible = true;
bool isData = false;
String? graph;
String? graph1;
Uint8List? bytes;
Uint8List? bytes1;
var bodycolor = '';
var bodydesigncolor = '';
var bordercolor = '';
var bordersize = '';
var borderworkcolor = '';
var stylecode = '';
var status = '';
int similarsale = 0;
int similarstock = 0;
late PageController _pageController;
List<Widget> pages = [];
Uint8List? imageBytes;
List<dynamic>? embedding;
bool _isPickingImage = false;
String? _base64Image;
// void getImage(File? imagefile) {
// // Reading image bytes from file
// final imageData = File(imagefile!.path).readAsBytesSync();
// // Decoding image
// final image = img.decodeImage(imageData);
// // Resizing image fpr model, [300, 300]
// final imageInput = img.copyResize(
// image!,
// width: 300,
// height: 300,
// );
// if (kDebugMode) {
// print(imageInput);
// }
// // Creating matrix representation, [300, 300, 3]
// final imageMatrix = List.generate(
// imageInput.height,
// (y) => List.generate(
// imageInput.width,
// (x) {
// final pixel = imageInput.getPixel(x, y);
// final r = img.getRed(pixel);
// final g = img.getGreen(pixel);
// final b = img.getBlue(pixel);
// return [r, g, b];
// },
// ),
// );
// embedding = imageMatrix;
// if (kDebugMode) {
// print(imageMatrix);
// }
// }
// Future<void> _getImage(int index) async {
// image = await _picker.pickImage(source: ImageSource.camera);
// print('Testing Image ==========> $image');
// if (image != null) {
// setState(() {
// imagefile = File(image!.path);
// isVisible = true;
// isData = false;
// //getImage(imagefile);
// });
// } else {
// image = await _picker.pickImage(source: ImageSource.camera);
// }
// }
Future<void> _navigateToCameraScreen() async {
print('Hitting or not');
try {
final imageFile1 = await Navigator.push<File>(
context,
MaterialPageRoute(builder: (context) => CameraScreen()),
);
imagefile = imageFile1;
final bytes = await imageFile1?.readAsBytes();
final base64String1 = base64Encode(bytes!);
setState(() {
_base64Image = base64String1;
});
if (imageFile1 != null) {
print('Camera Capture ==========> $imageFile1');
//setState((){
// imagefile = imageFile1;
//});
setState(() {
isloading = true; // Set loading state to true
});
bool isInternetConnected = await Constants.checkInternetConnectivity();
if (isInternetConnected) {
showDialog(
context: context,
barrierDismissible: false,
builder: (context) {
return const Center(
child: CircularProgressIndicator(
color: Color.fromARGB(255, 69, 66, 121),
),
);
});
var upload = await RemoteData().uploadimage(imagefile!, '');
print(_stylecode.text);
if (upload != null) {
setState(() {
isloading = false;
});
var jsonResponse = jsonDecode(upload);
await Future.delayed(const Duration(seconds: 1));
updateUI(jsonResponse);
}
if (Navigator.of(context).canPop()) {
if (kDebugMode) {
print('Testing =========>');
}
//Navigator.of(context).pop();
}
} else {
setDialog('Check your internet connection');
}
}
// Handle imageFile
} catch (e) {
print('Error navigating to CameraScreen: $e');
}
}
Future<void> _getImage() async {
if (_isPickingImage) return;
_isPickingImage = true;
try {
final pickedFile = await _picker.pickImage(source: ImageSource.camera);
if (pickedFile != null) {
setState(() {
imagefile = File(pickedFile.path);
isVisible = true;
isData = false;
});
print('Image picked successfully: ${pickedFile.path}');
} else {
print("No image picked");
}
} catch (e) {
print("Error while picking image from camera: $e");
} finally {
_isPickingImage = false;
}
}
void _showPicker(BuildContext context) {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text(
'SELECT OPTION',
style: Constants.dialogbuttonstyle,
),
content: SingleChildScrollView(
child: ListBody(
children: <Widget>[
GestureDetector(
child: const Text(
'CAMERA',
style: Constants.dialogbuttonstyle,
),
onTap: () {
_navigateToCameraScreen();
Navigator.of(context).pop();
},
),
const Padding(padding: EdgeInsets.all(8.0)),
GestureDetector(
child: const Text(
'GALLERY',
style: Constants.dialogbuttonstyle,
),
onTap: () {
_getImageFromGallery(context);
Navigator.of(context).pop();
},
),
],
),
),
);
},
);
}
Future<void> _getImageFromCamera() async {
try {
final pickedFile = await _picker.pickImage(source: ImageSource.camera);
if (pickedFile != null) {
setState(() {
imagefile = File(pickedFile.path);
isVisible = true;
isData = false;
});
}
} catch (e) {
print("Error while picking image from camera: $e");
}
}
// 54639
Future<void> _getImageFromGallery(BuildContext context) async {
image = await _picker.pickImage(source: ImageSource.gallery);
if (image != null) {
setState(() {
imagefile = File(image!.path);
isVisible = true;
isData = false;
//getImage(imagefile);
});
}
}
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
_pageController = PageController(initialPage: 0);
});
//loadModel();
}
Future<void> loadModel() async {
String? modelPath = 'assets/images/model.tflite';
if (kDebugMode) {
print('Loading interpreter options...');
}
final interpreterOptions = InterpreterOptions();
if (Platform.isAndroid) {
interpreterOptions.addDelegate(XNNPackDelegate());
}
if (Platform.isIOS) {
interpreterOptions.addDelegate(GpuDelegate());
}
if (kDebugMode) {
print('Loading interpreter...');
}
}
@override
void dispose() {
_pageController.dispose();
_stylecode.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
resizeToAvoidBottomInset: false,
appBar: AppBar(
title: Text(
'REGISTER STYLE CODE',
style: Constants.colorfontStyle,
),
automaticallyImplyLeading: false,
leading: IconButton(
icon: const Icon(
Icons.arrow_back_ios,
color: Color.fromARGB(255, 69, 66, 121),
size: 24,
),
onPressed: () => Navigator.pop(context),
),
flexibleSpace: Container(
decoration: BoxDecoration(
gradient: Constants.getReturn(),
),
),
),
body: Stack(
children: [
Container(
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage(
'assets/images/bg.png'), // Path to your background image
fit: BoxFit.cover,
),
),
),
SingleChildScrollView(
child: Container(
margin: const EdgeInsets.all(20.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
SizedBox(
height: 60,
child: TextFormField(
cursorColor: const Color.fromARGB(255, 69, 66, 121),
keyboardType: TextInputType.streetAddress,
controller: _stylecode,
scrollPadding: const EdgeInsets.all(100.0),
decoration: InputDecoration(
contentPadding: const EdgeInsets.fromLTRB(20, 0, 20, 0),
hintText: 'Stylecode',
filled: true,
fillColor: const Color.fromARGB(255, 244, 244, 254),
border: OutlineInputBorder(
borderSide: BorderSide.none,
borderRadius: BorderRadius.circular(10),
),
),
),
),
const SizedBox(
height:
20), // Add spacing between the TextFormField and the image
GestureDetector(
onTap: () {
//_getImage(0);
if (_stylecode.text.isEmpty) {
setDialog('Enter StyleCode');
} else {
_navigateToCameraScreen();
}
},
// child: Container(
// height: MediaQuery.of(context).size.height *
// 0.65, // Adjusted height for the image container
// // decoration: BoxDecoration(
// // border: Border.all(color: Colors.grey),
// // ),
// child: imagefile != null
// ? Image.file(
// imagefile!,
// fit: BoxFit.cover,
// )
// : Center(
// child: Image.asset(
// 'assets/images/camera.png',
// width: MediaQuery.of(context).size.width *
// 0.50, // Adjusted width
// height: MediaQuery.of(context).size.height *
// 0.35, // Adjusted height
// ),
// ),
// ),
child: Container(
//width: MediaQuery.of(context).size.width * 0.88,
height: MediaQuery.of(context).size.height * 0.65,
child: _base64Image != null
? Image.memory(
base64Decode(_base64Image!),
fit: BoxFit.cover,
)
: Center(
child: Image.asset(
'assets/images/camera.png',
width: MediaQuery.of(context).size.width *
0.50, // Adjusted width
height: MediaQuery.of(context).size.height *
0.35, // Adjusted height
),
),
),
),
const SizedBox(
height:
20), // Add spacing between the image and the button
// Visibility(
// visible: isVisible,
// child: SizedBox(
// width: MediaQuery.of(context).size.width * 0.90,
// child: GestureDetector(
// onTap: () async {
// if (imagefile == null) {
// setDialog('Please Capture Image');
// } else {
// setState(() {
// isloading = true; // Set loading state to true
// });
// bool isInternetConnected =
// await Constants.checkInternetConnectivity();
// if (isInternetConnected) {
// showDialog(
// context: context,
// barrierDismissible: false,
// builder: (context) {
// return const Center(
// child: CircularProgressIndicator(
// color: Color.fromARGB(255, 69, 66, 121),
// ),
// );
// });
// var upload = await RemoteData()
// .uploadimage(imagefile!, '');
// print(_stylecode.text);
// if (upload != null) {
// setState(() {
// isloading = false;
// });
// var jsonResponse = jsonDecode(upload);
// await Future.delayed(
// const Duration(seconds: 1));
// updateUI(jsonResponse);
// }
// if (Navigator.of(context).canPop()) {
// if (kDebugMode) {
// print('Testing =========>');
// }
// //Navigator.of(context).pop();
// }
// } else {
// setDialog('Check your internet connection');
// }
// }
// },
// child: Container(
// margin: const EdgeInsets.only(
// left: 10, top: 0, right: 2, bottom: 0),
// width: MediaQuery.of(context).size.width * 0.50,
// height: MediaQuery.of(context).size.width * 0.13,
// padding: const EdgeInsets.all(5),
// decoration: BoxDecoration(
// gradient: const LinearGradient(
// begin: Alignment.bottomLeft,
// end: Alignment.bottomRight,
// colors: [
// Color.fromARGB(255, 227, 144, 214),
// Color.fromARGB(255, 125, 174, 251),
// ],
// ),
// borderRadius: BorderRadius.circular(50),
// ),
// child: const Center(
// child: Text(
// 'REGISTER STYLE CODE',
// style: Constants.buttonsfontStyle,
// textAlign: TextAlign.center,
// ),
// ),
// ),
// ),
// ),
// ),
],
),
),
),
],
),
);
}
// @override
// Widget build(BuildContext context) {
// return Scaffold(
// resizeToAvoidBottomInset: false,
// appBar: AppBar(
// title: Text(
// 'REGISTER STYLE CODE',
// style: Constants.colorfontStyle,
// ),
// automaticallyImplyLeading: false,
// leading: IconButton(
// icon: const Icon(
// Icons.arrow_back_ios,
// color: Color.fromARGB(255, 69, 66, 121),
// size: 24,
// ),
// onPressed: () => Navigator.pop(context),
// ),
// flexibleSpace: Container(
// decoration: BoxDecoration(
// gradient: Constants.getReturn(),
// ),
// ),
// ),
// body: Stack(
// children: [
// Container(
// decoration: const BoxDecoration(
// image: DecorationImage(
// image: AssetImage(
// 'assets/images/bg.png'), // Path to your background image
// fit: BoxFit.cover,
// ),
// ),
// ),
// SingleChildScrollView(
// child: Container(
// margin: const EdgeInsets.all(20.0),
// child: Column(
// mainAxisAlignment: MainAxisAlignment.start,
// children: <Widget>[
// Row(
// mainAxisAlignment: MainAxisAlignment.spaceAround,
// children: [
// SizedBox(
// height: 60,
// child: TextFormField(
// cursorColor: const Color.fromARGB(255, 69, 66, 121),
// keyboardType: TextInputType.number,
// controller: _stylecode,
// scrollPadding: const EdgeInsets.all(100.0),
// decoration: InputDecoration(
// contentPadding:
// const EdgeInsets.fromLTRB(20, 0, 20, 0),
// hintText: 'Stylecode',
// filled: true,
// fillColor: const Color.fromARGB(255, 244, 244, 254),
// border: OutlineInputBorder(
// borderSide: BorderSide.none,
// borderRadius: BorderRadius.circular(10),
// ),
// ),
// ),
// ),
// Flexible(
// child: Column(
// children: [
// const Padding(padding: EdgeInsets.only(top: 5)),
// GestureDetector(
// onTap: () {
// _getImage(0);
// },
// child: SizedBox(
// width: MediaQuery.of(context).size.width * 0.88,
// height:
// MediaQuery.of(context).size.height * 0.68,
// child: imagefile != null
// ? Image.file(
// imagefile!,
// fit: BoxFit.cover,
// )
// : Center(
// child: Image.asset(
// 'assets/images/camera.png',
// width: MediaQuery.of(context)
// .size
// .width *
// 0.50, // Adjusted width
// height: MediaQuery.of(context)
// .size
// .height *
// 0.35, // Adjusted height
// ),
// ),
// ),
// ),
// ],
// ),
// ),
// ],
// ),
// SizedBox(
// height: MediaQuery.of(context).size.height * 0.10,
// ),
// Visibility(
// visible: isVisible,
// child: SizedBox(
// width: MediaQuery.of(context).size.width * 0.90,
// child: GestureDetector(
// onTap: () async {
// if (imagefile == null) {
// setDialog('Please Capture Image');
// } else {
// setState(() {
// isloading = true; // Set loading state to true
// });
// bool isInternetConnected =
// await Constants.checkInternetConnectivity();
// if (isInternetConnected) {
// showDialog(
// context: context,
// barrierDismissible: false,
// builder: (context) {
// return const Center(
// child: CircularProgressIndicator(
// color: Color.fromARGB(255, 69, 66, 121),
// ),
// );
// });
// var upload = await RemoteData().uploadimage(
// imagefile!, embedding!.toString());
// if (upload != null) {
// setState(() {
// isloading = false;
// });
// var jsonResponse = jsonDecode(upload);
// await Future.delayed(
// const Duration(seconds: 1));
// updateUI(jsonResponse);
// }
// if (Navigator.of(context).canPop()) {
// if (kDebugMode) {
// print('Testing =========>');
// }
// Navigator.of(context).pop();
// }
// } else {
// setDialog('Check your internet connection');
// }
// }
// },
// child: Container(
// margin: const EdgeInsets.only(
// left: 10, top: 0, right: 2, bottom: 0),
// width: MediaQuery.of(context).size.width * 0.100,
// height: MediaQuery.of(context).size.width * 0.13,
// padding: const EdgeInsets.all(5),
// decoration: BoxDecoration(
// gradient: const LinearGradient(
// begin: Alignment.bottomLeft,
// end: Alignment.bottomRight,
// colors: [
// Color.fromARGB(255, 227, 144, 214),
// //Color(0xFFC2185B),
// Color.fromARGB(255, 125, 174, 251),
// ],
// ),
// borderRadius: BorderRadius.circular(50),
// ),
// child: const Row(
// children: [
// Text('\t\t'),
// // replace with your image
// Expanded(
// child: Center(
// child: Text(
// 'REGISTER STYLE CODE',
// style: Constants.buttonsfontStyle,
// textAlign: TextAlign.center,
// ),
// ),
// ),
// ],
// ),
// ),
// ),
// ),
// ),
// ],
// ),
// ),
// ),
// ],
// ),
// );
// }
Future<void> updateUI(Map<String, dynamic> jsonResponse) async {
Navigator.of(context).pop();
print('Response Data : $jsonResponse');
var saree = jsonResponse['saree_detected'];
if (saree == 'Yes') {
var bodyimage = jsonResponse['body_metrics'][3];
var annotated_image = jsonResponse['annotated_image'];
setState(() {
_base64Image = annotated_image;
});
var upload = await RemoteData()
.registerStyleCode(imagefile!, bodyimage, _stylecode.text);
var json = jsonDecode(upload!);
await Future.delayed(const Duration(seconds: 1));
getupdate(json);
print(upload);
return;
} else {
showDialog(
context: context,
builder: (BuildContext context) {
return CustomAlertDialog(
titleText: 'WARNING ! \t',
contentText: 'Saree Not Detected',
buttonText: 'No',
onButtonPressed: () {
Navigator.of(context).pop();
},
secondButtonText: 'Yes',
onSecondButtonPressed: () {
Navigator.of(context).pop(); // Close the dialog first
// Navigate to CameraScreen after the dialog is closed
Future.delayed(const Duration(milliseconds: 200), () {
_navigateToCameraScreen();
});
},
icon: const Icon(Icons.info),
);
},
);
}
}
void getupdate(Map<String, dynamic> jsonResponse) {
setState(() {
isVisible = false;
//{"error_message":"","reg_status":"Success"}
status = jsonResponse['reg_status'];
if (status == 'Success') {
print('Printing ===============>');
isData = true;
isloading = false;
isVisible = false;
setDialog('Uploaded Sucessfully');
//Navigator.of(context).pop();
//graph = jsonResponse[''];
//graph1 = jsonResponse[''];
} else {
print('Else Printing ===============>');
setDialog(jsonResponse['error_message']);
//bytes!.clear();
//bytes1!.clear();
embedding!.clear();
//Navigator.of(context).pop();
}
});
}
void setDialog(String text) {
print('Printing ===============>');
showDialog(
context: context,
builder: (BuildContext context) {
return CustomAlertDialog(
titleText: 'WARNING ! \t',
contentText: text,
buttonText: '\t\t\tCANCEL\t\t\t',
onButtonPressed: () {
Navigator.of(context).pop();
},
icon: Image.asset(
'assets/images/error.png',
width: 58,
height: 58,
),
);
},
);
}
}
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
...@@ -7,6 +7,7 @@ list(APPEND FLUTTER_PLUGIN_LIST ...@@ -7,6 +7,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
) )
list(APPEND FLUTTER_FFI_PLUGIN_LIST list(APPEND FLUTTER_FFI_PLUGIN_LIST
tflite_flutter
) )
set(PLUGIN_BUNDLED_LIBRARIES) set(PLUGIN_BUNDLED_LIBRARIES)
......
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
...@@ -9,12 +9,15 @@ PODS: ...@@ -9,12 +9,15 @@ PODS:
- shared_preferences_foundation (0.0.1): - shared_preferences_foundation (0.0.1):
- Flutter - Flutter
- FlutterMacOS - FlutterMacOS
- tflite_flutter (0.0.1):
- FlutterMacOS
DEPENDENCIES: DEPENDENCIES:
- connectivity_macos (from `Flutter/ephemeral/.symlinks/plugins/connectivity_macos/macos`) - connectivity_macos (from `Flutter/ephemeral/.symlinks/plugins/connectivity_macos/macos`)
- file_selector_macos (from `Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos`) - file_selector_macos (from `Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos`)
- FlutterMacOS (from `Flutter/ephemeral`) - FlutterMacOS (from `Flutter/ephemeral`)
- shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`) - shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`)
- tflite_flutter (from `Flutter/ephemeral/.symlinks/plugins/tflite_flutter/macos`)
SPEC REPOS: SPEC REPOS:
trunk: trunk:
...@@ -29,14 +32,17 @@ EXTERNAL SOURCES: ...@@ -29,14 +32,17 @@ EXTERNAL SOURCES:
:path: Flutter/ephemeral :path: Flutter/ephemeral
shared_preferences_foundation: shared_preferences_foundation:
:path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin
tflite_flutter:
:path: Flutter/ephemeral/.symlinks/plugins/tflite_flutter/macos
SPEC CHECKSUMS: SPEC CHECKSUMS:
connectivity_macos: 5dae6ee11d320fac7c05f0d08bd08fc32b5514d9 connectivity_macos: 5dae6ee11d320fac7c05f0d08bd08fc32b5514d9
file_selector_macos: 468fb6b81fac7c0e88d71317f3eec34c3b008ff9 file_selector_macos: 54fdab7caa3ac3fc43c9fac4d7d8d231277f8cf2
FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96 Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96
shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126 shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78
tflite_flutter: b186ea3c62c076a90652f47c01005fe36c75171e
PODFILE CHECKSUM: 236401fc2c932af29a9fcf0e97baeeb2d750d367 PODFILE CHECKSUM: 236401fc2c932af29a9fcf0e97baeeb2d750d367
COCOAPODS: 1.13.0 COCOAPODS: 1.15.2
...@@ -259,7 +259,7 @@ ...@@ -259,7 +259,7 @@
isa = PBXProject; isa = PBXProject;
attributes = { attributes = {
LastSwiftUpdateCheck = 0920; LastSwiftUpdateCheck = 0920;
LastUpgradeCheck = 1430; LastUpgradeCheck = 1510;
ORGANIZATIONNAME = ""; ORGANIZATIONNAME = "";
TargetAttributes = { TargetAttributes = {
331C80D4294CF70F00263BE5 = { 331C80D4294CF70F00263BE5 = {
......
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<Scheme <Scheme
LastUpgradeVersion = "1430" LastUpgradeVersion = "1510"
version = "1.3"> version = "1.3">
<BuildAction <BuildAction
parallelizeBuildables = "YES" parallelizeBuildables = "YES"
......
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
import Cocoa import Cocoa
import FlutterMacOS import FlutterMacOS
@NSApplicationMain @main
class AppDelegate: FlutterAppDelegate { class AppDelegate: FlutterAppDelegate {
override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
return true return true
......
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
...@@ -21,42 +21,42 @@ packages: ...@@ -21,42 +21,42 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: camera name: camera
sha256: "1f9010f0689774380fbcd7d6b7820a5157e8e97685fa66d619e1d1f58b3fdf93" sha256: "2170a943dcb67be2af2c6bcda8775e74b41d4c02d6a4eb10bdc832ee185c4eea"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.10.5+5" version: "0.11.0+1"
camera_android: camera_android_camerax:
dependency: transitive dependency: transitive
description: description:
name: camera_android name: camera_android_camerax
sha256: "58463140f1b39591b8e2155861b436abad4ceb48160058be8374164ff0309ef3" sha256: "59967e6d80df9d682a33b86f228cc524e6b52d6184b84f6ac62151dd98bd1ea0"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.10.8+13" version: "0.6.5+2"
camera_avfoundation: camera_avfoundation:
dependency: transitive dependency: transitive
description: description:
name: camera_avfoundation name: camera_avfoundation
sha256: "3b6d9f550cfd658c71f34a99509528501e5e5d4fa79f11e3a4d6ef380d8e0254" sha256: "7d021e8cd30d9b71b8b92b4ad669e80af432d722d18d6aac338572754a786c15"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.9.13+7" version: "0.9.16"
camera_platform_interface: camera_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: camera_platform_interface name: camera_platform_interface
sha256: "86fd4fc597c6e455265ddb5884feb352d0171ad14b9cdf3aba30da59b25738c4" sha256: a250314a48ea337b35909a4c9d5416a208d736dcb01d0b02c6af122be66660b0
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.6.0" version: "2.7.4"
camera_web: camera_web:
dependency: transitive dependency: transitive
description: description:
name: camera_web name: camera_web
sha256: d4c2c571c7af04f8b10702ca16bb9ed2a26e64534171e8f75c9349b2c004d8f1 sha256: "9e9aba2fbab77ce2472924196ff8ac4dd8f9126c4f9a3096171cd1d870d6b26c"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.3.2+3" version: "0.3.3"
characters: characters:
dependency: transitive dependency: transitive
description: description:
...@@ -77,10 +77,10 @@ packages: ...@@ -77,10 +77,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: collection name: collection
sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.17.2" version: "1.18.0"
connectivity: connectivity:
dependency: "direct main" dependency: "direct main"
description: description:
...@@ -117,10 +117,10 @@ packages: ...@@ -117,10 +117,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: cross_file name: cross_file
sha256: "445db18de832dba8d851e287aff8ccf169bed30d2e94243cb54c7d2f1ed2142c" sha256: "55d7b444feb71301ef6b8838dbc1ae02e63dd48c8773f3810ff53bb1e2945b32"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.3.3+6" version: "0.3.4+1"
crypto: crypto:
dependency: "direct main" dependency: "direct main"
description: description:
...@@ -133,10 +133,10 @@ packages: ...@@ -133,10 +133,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: cupertino_icons name: cupertino_icons
sha256: d57953e10f9f8327ce64a508a355f0b1ec902193f66288e8cb5070e7c47eeb2d sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.6" version: "1.0.8"
fake_async: fake_async:
dependency: transitive dependency: transitive
description: description:
...@@ -149,10 +149,10 @@ packages: ...@@ -149,10 +149,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: ffi name: ffi
sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.0" version: "2.1.2"
file: file:
dependency: transitive dependency: transitive
description: description:
...@@ -173,18 +173,18 @@ packages: ...@@ -173,18 +173,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: file_selector_macos name: file_selector_macos
sha256: b15c3da8bd4908b9918111fa486903f5808e388b8d1c559949f584725a6594d6 sha256: f42eacb83b318e183b1ae24eead1373ab1334084404c8c16e0354f9a3e55d385
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.9.3+3" version: "0.9.4"
file_selector_platform_interface: file_selector_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: file_selector_platform_interface name: file_selector_platform_interface
sha256: "0aa47a725c346825a2bd396343ce63ac00bda6eff2fbc43eabe99737dede8262" sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.6.1" version: "2.6.2"
file_selector_windows: file_selector_windows:
dependency: transitive dependency: transitive
description: description:
...@@ -210,10 +210,10 @@ packages: ...@@ -210,10 +210,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: flutter_plugin_android_lifecycle name: flutter_plugin_android_lifecycle
sha256: f185ac890306b5779ecbd611f52502d8d4d63d27703ef73161ca0407e815f02c sha256: "8cf40eebf5dec866a6d1956ad7b4f7016e6c0cc69847ab946833b7d43743809f"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.16" version: "2.0.19"
flutter_test: flutter_test:
dependency: "direct dev" dependency: "direct dev"
description: flutter description: flutter
...@@ -224,6 +224,14 @@ packages: ...@@ -224,6 +224,14 @@ packages:
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" version: "0.0.0"
gif_view:
dependency: "direct main"
description:
name: gif_view
sha256: c14dc41501b479d9a14cd9135532c1e5bcad7d915d497a0f3e6d77c4edbc8f0e
url: "https://pub.dev"
source: hosted
version: "0.3.1"
http: http:
dependency: "direct main" dependency: "direct main"
description: description:
...@@ -244,34 +252,34 @@ packages: ...@@ -244,34 +252,34 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: image_picker name: image_picker
sha256: "7d7f2768df2a8b0a3cefa5ef4f84636121987d403130e70b17ef7e2cf650ba84" sha256: "33974eca2e87e8b4e3727f1b94fa3abcb25afe80b6bc2c4d449a0e150aedf720"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.4" version: "1.1.1"
image_picker_android: image_picker_android:
dependency: transitive dependency: transitive
description: description:
name: image_picker_android name: image_picker_android
sha256: "0c7b83bbe2980c8a8e36e974f055e11e51675784e13a4762889feed0f3937ff2" sha256: "0f57fee1e8bfadf8cc41818bbcd7f72e53bb768a54d9496355d5e8a5681a19f1"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.8.8+1" version: "0.8.12+1"
image_picker_for_web: image_picker_for_web:
dependency: transitive dependency: transitive
description: description:
name: image_picker_for_web name: image_picker_for_web
sha256: "50bc9ae6a77eea3a8b11af5eb6c661eeb858fdd2f734c2a4fd17086922347ef7" sha256: "5d6eb13048cd47b60dbf1a5495424dea226c5faf3950e20bf8120a58efb5b5f3"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.1" version: "3.0.4"
image_picker_ios: image_picker_ios:
dependency: transitive dependency: transitive
description: description:
name: image_picker_ios name: image_picker_ios
sha256: c5538cacefacac733c724be7484377923b476216ad1ead35a0d2eadcdc0fc497 sha256: "4824d8c7f6f89121ef0122ff79bb00b009607faecc8545b86bca9ab5ce1e95bf"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.8.8+2" version: "0.8.11+2"
image_picker_linux: image_picker_linux:
dependency: transitive dependency: transitive
description: description:
...@@ -292,10 +300,10 @@ packages: ...@@ -292,10 +300,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: image_picker_platform_interface name: image_picker_platform_interface
sha256: ed9b00e63977c93b0d2d2b343685bed9c324534ba5abafbb3dfbd6a780b1b514 sha256: "9ec26d410ff46f483c5519c29c02ef0e02e13a543f882b152d4bfd2f06802f80"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.9.1" version: "2.10.0"
image_picker_windows: image_picker_windows:
dependency: transitive dependency: transitive
description: description:
...@@ -304,14 +312,30 @@ packages: ...@@ -304,14 +312,30 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.2.1+1" version: "0.2.1+1"
js: leak_tracker:
dependency: transitive dependency: transitive
description: description:
name: js name: leak_tracker
sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.6.7" version: "10.0.5"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806"
url: "https://pub.dev"
source: hosted
version: "3.0.5"
leak_tracker_testing:
dependency: transitive
description:
name: leak_tracker_testing
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
url: "https://pub.dev"
source: hosted
version: "3.0.1"
lints: lints:
dependency: transitive dependency: transitive
description: description:
...@@ -324,42 +348,42 @@ packages: ...@@ -324,42 +348,42 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: matcher name: matcher
sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.12.16" version: "0.12.16+1"
material_color_utilities: material_color_utilities:
dependency: transitive dependency: transitive
description: description:
name: material_color_utilities name: material_color_utilities
sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.5.0" version: "0.11.1"
meta: meta:
dependency: transitive dependency: transitive
description: description:
name: meta name: meta
sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" sha256: "25dfcaf170a0190f47ca6355bdd4552cb8924b430512ff0cafb8db9bd41fe33b"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.9.1" version: "1.14.0"
mime: mime:
dependency: transitive dependency: transitive
description: description:
name: mime name: mime
sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.4" version: "1.0.5"
path: path:
dependency: transitive dependency: transitive
description: description:
name: path name: path
sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.8.3" version: "1.9.0"
path_provider_linux: path_provider_linux:
dependency: transitive dependency: transitive
description: description:
...@@ -372,10 +396,10 @@ packages: ...@@ -372,10 +396,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: path_provider_platform_interface name: path_provider_platform_interface
sha256: "94b1e0dd80970c1ce43d5d4e050a9918fce4f4a775e6142424c30a29a363265c" sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.1" version: "2.1.2"
path_provider_windows: path_provider_windows:
dependency: transitive dependency: transitive
description: description:
...@@ -388,18 +412,18 @@ packages: ...@@ -388,18 +412,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: platform name: platform
sha256: "0a279f0707af40c890e80b1e9df8bb761694c074ba7e1d4ab1bc4b728e200b59" sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.1.3" version: "3.1.4"
plugin_platform_interface: plugin_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: plugin_platform_interface name: plugin_platform_interface
sha256: da3fdfeccc4d4ff2da8f8c556704c08f912542c5fb3cf2233ed75372384a034d sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.6" version: "2.1.8"
quiver: quiver:
dependency: transitive dependency: transitive
description: description:
...@@ -412,26 +436,26 @@ packages: ...@@ -412,26 +436,26 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: shared_preferences name: shared_preferences
sha256: "81429e4481e1ccfb51ede496e916348668fd0921627779233bd24cc3ff6abd02" sha256: d3bbe5553a986e83980916ded2f0b435ef2e1893dfaa29d5a7a790d0eca12180
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.2.2" version: "2.2.3"
shared_preferences_android: shared_preferences_android:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_android name: shared_preferences_android
sha256: "8568a389334b6e83415b6aae55378e158fbc2314e074983362d20c562780fb06" sha256: "1ee8bf911094a1b592de7ab29add6f826a7331fb854273d55918693d5364a1f2"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.2.1" version: "2.2.2"
shared_preferences_foundation: shared_preferences_foundation:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_foundation name: shared_preferences_foundation
sha256: "7bf53a9f2d007329ee6f3df7268fd498f8373602f943c975598bbb34649b62a7" sha256: "0a8a893bf4fd1152f93fec03a415d11c27c74454d96e2318a7ac38dd18683ab7"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.3.4" version: "2.4.0"
shared_preferences_linux: shared_preferences_linux:
dependency: transitive dependency: transitive
description: description:
...@@ -444,18 +468,18 @@ packages: ...@@ -444,18 +468,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_platform_interface name: shared_preferences_platform_interface
sha256: d4ec5fc9ebb2f2e056c617112aa75dcf92fc2e4faaf2ae999caa297473f75d8a sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.3.1" version: "2.3.2"
shared_preferences_web: shared_preferences_web:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_web name: shared_preferences_web
sha256: d762709c2bbe80626ecc819143013cc820fa49ca5e363620ee20a8b15a3e3daf sha256: "9aee1089b36bd2aafe06582b7d7817fd317ef05fc30e6ba14bff247d0933042a"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.2.1" version: "2.3.0"
shared_preferences_windows: shared_preferences_windows:
dependency: transitive dependency: transitive
description: description:
...@@ -481,18 +505,18 @@ packages: ...@@ -481,18 +505,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: stack_trace name: stack_trace
sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.11.0" version: "1.11.1"
stream_channel: stream_channel:
dependency: transitive dependency: transitive
description: description:
name: stream_channel name: stream_channel
sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.1" version: "2.1.2"
stream_transform: stream_transform:
dependency: transitive dependency: transitive
description: description:
...@@ -521,10 +545,18 @@ packages: ...@@ -521,10 +545,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: test_api name: test_api
sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" sha256: "2419f20b0c8677b2d67c8ac4d1ac7372d862dc6c460cdbb052b40155408cd794"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.6.0" version: "0.7.1"
tflite_flutter:
dependency: "direct main"
description:
name: tflite_flutter
sha256: ffb8651fdb116ab0131d6dc47ff73883e0f634ad1ab12bb2852eef1bbeab4a6a
url: "https://pub.dev"
source: hosted
version: "0.10.4"
typed_data: typed_data:
dependency: transitive dependency: transitive
description: description:
...@@ -541,30 +573,38 @@ packages: ...@@ -541,30 +573,38 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.4" version: "2.1.4"
vm_service:
dependency: transitive
description:
name: vm_service
sha256: "7475cb4dd713d57b6f7464c0e13f06da0d535d8b2067e188962a59bac2cf280b"
url: "https://pub.dev"
source: hosted
version: "14.2.2"
web: web:
dependency: transitive dependency: transitive
description: description:
name: web name: web
sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.1.4-beta" version: "0.5.1"
win32: win32:
dependency: transitive dependency: transitive
description: description:
name: win32 name: win32
sha256: "350a11abd2d1d97e0cc7a28a81b781c08002aa2864d9e3f192ca0ffa18b06ed3" sha256: a79dbe579cb51ecd6d30b17e0cae4e0ea15e2c0e66f69ad4198f22a6789e94f4
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.0.9" version: "5.5.1"
xdg_directories: xdg_directories:
dependency: transitive dependency: transitive
description: description:
name: xdg_directories name: xdg_directories
sha256: "589ada45ba9e39405c198fe34eb0f607cddb2108527e658136120892beac46d2" sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.3" version: "1.0.4"
sdks: sdks:
dart: ">=3.1.3 <4.0.0" dart: ">=3.4.0 <4.0.0"
flutter: ">=3.13.0" flutter: ">=3.19.0"
...@@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev ...@@ -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 # 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 # 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. # of the product and file versions while build-number is used as the build suffix.
version: 1.0.1+1 version: 1.0.1+2
environment: environment:
sdk: '>=3.1.3 <4.0.0' sdk: '>=3.1.3 <4.0.0'
...@@ -32,16 +32,16 @@ dependencies: ...@@ -32,16 +32,16 @@ dependencies:
image_picker: image_picker:
flutter: flutter:
sdk: flutter sdk: flutter
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^1.0.2 cupertino_icons: ^1.0.2
http: ^0.13.5 http: ^0.13.5
connectivity: ^3.0.6 connectivity: ^3.0.6
crypto: ^3.0.3 crypto: ^3.0.3
shared_preferences: ^2.0.17 shared_preferences: ^2.0.17
camera: ^0.10.5+5 camera: ^0.11.0+1
tflite_flutter: ^0.10.4
#image: ^3.0.1
gif_view: ^0.3.1
#flutter_inappwebview: ^5.7.2+3
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:
...@@ -56,13 +56,14 @@ dev_dependencies: ...@@ -56,13 +56,14 @@ dev_dependencies:
# For information on the generic Dart part of this file, see the # For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec # following page: https://dart.dev/tools/pub/pubspec
# The following section is specific to Flutter packages. # The following section is specific to Flutter packages.
flutter: flutter:
# The following line ensures that the Material Icons font is # The following line ensures that the Material Icons font is
# included with your application, so that you can use the icons in # included with your application, so that you can use the icons in
# the material Icons class. # the material Icons class.
uses-material-design: true uses-material-design: true
assets: assets:
- assets/images/camera.png - assets/images/camera.png
- assets/images/splash.png - assets/images/splash.png
...@@ -73,18 +74,22 @@ flutter: ...@@ -73,18 +74,22 @@ flutter:
- assets/images/password.png - assets/images/password.png
- assets/images/signout.png - assets/images/signout.png
- assets/images/captureimage.png - assets/images/captureimage.png
- assets/images/identify.png
- assets/images/register.png
- assets/images/search.png
- assets/images/identify_product.png
- assets/images/error.png
- assets/images/model.tflite
- assets/images/splash.gif
# To add assets to your application, add an assets section, like this: # To add assets to your application, add an assets section, like this:
# assets: # assets:
# - images/a_dot_burr.jpeg # - images/a_dot_burr.jpeg
# - images/a_dot_ham.jpeg # - images/a_dot_ham.jpeg
# An image asset can refer to one or more resolution-specific "variants", see # An image asset can refer to one or more resolution-specific "variants", see
# https://flutter.dev/assets-and-images/#resolution-aware # https://flutter.dev/assets-and-images/#resolution-aware
# For details regarding adding assets from package dependencies, see # For details regarding adding assets from package dependencies, see
# https://flutter.dev/assets-and-images/#from-packages # https://flutter.dev/assets-and-images/#from-packages
# To add custom fonts to your application, add a fonts section here, # To add custom fonts to your application, add a fonts section here,
# in this "flutter" section. Each entry in this list should have a # in this "flutter" section. Each entry in this list should have a
# "family" key with the font family name, and a "fonts" key with a # "family" key with the font family name, and a "fonts" key with a
......
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
...@@ -7,6 +7,7 @@ list(APPEND FLUTTER_PLUGIN_LIST ...@@ -7,6 +7,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
) )
list(APPEND FLUTTER_FFI_PLUGIN_LIST list(APPEND FLUTTER_FFI_PLUGIN_LIST
tflite_flutter
) )
set(PLUGIN_BUNDLED_LIBRARIES) set(PLUGIN_BUNDLED_LIBRARIES)
......
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
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