commit 9fbdabafb4e61e86858e446e9d0991714238b61c Author: jahongireshonqulov Date: Fri Oct 17 19:42:02 2025 +0500 Initial commit diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/caches/deviceStreaming.xml b/.idea/caches/deviceStreaming.xml new file mode 100644 index 0000000..5a797d5 --- /dev/null +++ b/.idea/caches/deviceStreaming.xml @@ -0,0 +1,835 @@ + + + + + + \ No newline at end of file diff --git a/.idea/karvon_market-main.iml b/.idea/karvon_market-main.iml new file mode 100644 index 0000000..5c4307e --- /dev/null +++ b/.idea/karvon_market-main.iml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Dart_Packages.xml b/.idea/libraries/Dart_Packages.xml new file mode 100644 index 0000000..18687eb --- /dev/null +++ b/.idea/libraries/Dart_Packages.xml @@ -0,0 +1,1172 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Dart_SDK.xml b/.idea/libraries/Dart_SDK.xml new file mode 100644 index 0000000..9dd4449 --- /dev/null +++ b/.idea/libraries/Dart_SDK.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..639900d --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..ce000df --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/app_code/.gitattributes b/app_code/.gitattributes new file mode 100644 index 0000000..dfe0770 --- /dev/null +++ b/app_code/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/app_code/.gitignore b/app_code/.gitignore new file mode 100644 index 0000000..6c31954 --- /dev/null +++ b/app_code/.gitignore @@ -0,0 +1,46 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.build/ +.buildlog/ +.history +.svn/ +.swiftpm/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/app_code/.metadata b/app_code/.metadata new file mode 100644 index 0000000..473bbf4 --- /dev/null +++ b/app_code/.metadata @@ -0,0 +1,33 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled. + +version: + revision: f72efea43c3013323d1b95cff571f3c1caa37583 + channel: stable + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: f72efea43c3013323d1b95cff571f3c1caa37583 + base_revision: f72efea43c3013323d1b95cff571f3c1caa37583 + - platform: android + create_revision: f72efea43c3013323d1b95cff571f3c1caa37583 + base_revision: f72efea43c3013323d1b95cff571f3c1caa37583 + - platform: ios + create_revision: f72efea43c3013323d1b95cff571f3c1caa37583 + base_revision: f72efea43c3013323d1b95cff571f3c1caa37583 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/app_code/README.md b/app_code/README.md new file mode 100644 index 0000000..82c4acd --- /dev/null +++ b/app_code/README.md @@ -0,0 +1,16 @@ +# grostore + +Grostore Flutter App + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) + +For help getting started with Flutter development, view the +[online documentation](https://docs.flutter.dev/), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/app_code/Screenshot_20230709_003225.png b/app_code/Screenshot_20230709_003225.png new file mode 100644 index 0000000..1599dae Binary files /dev/null and b/app_code/Screenshot_20230709_003225.png differ diff --git a/app_code/analysis_options.yaml b/app_code/analysis_options.yaml new file mode 100644 index 0000000..61b6c4d --- /dev/null +++ b/app_code/analysis_options.yaml @@ -0,0 +1,29 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at + # https://dart-lang.github.io/linter/lints/index.html. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/app_code/android/.gitignore b/app_code/android/.gitignore new file mode 100644 index 0000000..6f56801 --- /dev/null +++ b/app_code/android/.gitignore @@ -0,0 +1,13 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties +**/*.keystore +**/*.jks diff --git a/app_code/android/app/Hotpot_Design.zip b/app_code/android/app/Hotpot_Design.zip new file mode 100644 index 0000000..ff15c36 Binary files /dev/null and b/app_code/android/app/Hotpot_Design.zip differ diff --git a/app_code/android/app/build.gradle b/app_code/android/app/build.gradle new file mode 100644 index 0000000..a1fff7e --- /dev/null +++ b/app_code/android/app/build.gradle @@ -0,0 +1,93 @@ +plugins { + id "com.android.application" + id "kotlin-android" + id "dev.flutter.flutter-gradle-plugin" +} + + +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + + +def keystoreProperties = new Properties() +def keystorePropertiesFile = rootProject.file('key.properties') +if (keystorePropertiesFile.exists()) { + keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) +} + + +android { + compileSdkVersion flutter.compileSdkVersion + ndkVersion "28.0.13004108" + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + defaultConfig { + applicationId "karvon.themetags.com.karvon" + minSdkVersion flutter.minSdkVersion + targetSdkVersion 34 + versionCode flutterVersionCode.toInteger() + versionName "1.2.4" + multiDexEnabled true + ndk { + abiFilters "arm64-v8a", "armeabi-v7a" + } + } + +// signingConfigs { +//// release { +//// keyAlias keystoreProperties['keyAlias'] +//// keyPassword keystoreProperties['keyPassword'] +//// storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null // original code +//// //storeFile file("key.jks") ? file("key.jks") : null //new solution for some customers +//// storePassword keystoreProperties['storePassword'] +//// } +// } + + buildTypes { + release { + minifyEnabled false + shrinkResources false + signingConfig signingConfigs.getByName("debug") + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + //signingConfig signingConfigs.release + } + } + + namespace 'karvon.themetags.com.karvon' +} + +flutter { + source '../..' +} + +dependencies {} diff --git a/app_code/android/app/private_key.pepk b/app_code/android/app/private_key.pepk new file mode 100644 index 0000000..6a5bca7 Binary files /dev/null and b/app_code/android/app/private_key.pepk differ diff --git a/app_code/android/app/src/debug/AndroidManifest.xml b/app_code/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..b0b29de --- /dev/null +++ b/app_code/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + diff --git a/app_code/android/app/src/main/AndroidManifest.xml b/app_code/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..c85b666 --- /dev/null +++ b/app_code/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_code/android/app/src/main/ic_launcher-playstore.png b/app_code/android/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..faff5af Binary files /dev/null and b/app_code/android/app/src/main/ic_launcher-playstore.png differ diff --git a/app_code/android/app/src/main/kotlin/karvon/themetags/com/karvon/MainActivity.kt b/app_code/android/app/src/main/kotlin/karvon/themetags/com/karvon/MainActivity.kt new file mode 100644 index 0000000..599210d --- /dev/null +++ b/app_code/android/app/src/main/kotlin/karvon/themetags/com/karvon/MainActivity.kt @@ -0,0 +1,6 @@ +package karvon.themetags.com.karvon + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() { +} diff --git a/app_code/android/app/src/main/logo_a.png b/app_code/android/app/src/main/logo_a.png new file mode 100644 index 0000000..527c009 Binary files /dev/null and b/app_code/android/app/src/main/logo_a.png differ diff --git a/app_code/android/app/src/main/res/drawable-v21/launch_background.xml b/app_code/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000..f74085f --- /dev/null +++ b/app_code/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/app_code/android/app/src/main/res/drawable/launch_background.xml b/app_code/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..304732f --- /dev/null +++ b/app_code/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/app_code/android/app/src/main/res/ic_launcher-web.png b/app_code/android/app/src/main/res/ic_launcher-web.png new file mode 100644 index 0000000..5e5cd55 Binary files /dev/null and b/app_code/android/app/src/main/res/ic_launcher-web.png differ diff --git a/app_code/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app_code/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..036d09b --- /dev/null +++ b/app_code/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app_code/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app_code/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..036d09b --- /dev/null +++ b/app_code/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app_code/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app_code/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000..04859de Binary files /dev/null and b/app_code/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/app_code/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/app_code/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..9970fda Binary files /dev/null and b/app_code/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png differ diff --git a/app_code/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app_code/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000..fc5e162 Binary files /dev/null and b/app_code/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/app_code/android/app/src/main/res/mipmap-ldpi/ic_launcher.png b/app_code/android/app/src/main/res/mipmap-ldpi/ic_launcher.png new file mode 100644 index 0000000..ef82da8 Binary files /dev/null and b/app_code/android/app/src/main/res/mipmap-ldpi/ic_launcher.png differ diff --git a/app_code/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app_code/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000..26cce50 Binary files /dev/null and b/app_code/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/app_code/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/app_code/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..4fdb496 Binary files /dev/null and b/app_code/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png differ diff --git a/app_code/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app_code/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000..b1af3c4 Binary files /dev/null and b/app_code/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/app_code/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app_code/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000..f913f6a Binary files /dev/null and b/app_code/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/app_code/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/app_code/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..31d4b98 Binary files /dev/null and b/app_code/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png differ diff --git a/app_code/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app_code/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000..6ea7f95 Binary files /dev/null and b/app_code/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/app_code/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app_code/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000..a8329c6 Binary files /dev/null and b/app_code/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/app_code/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/app_code/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..858b8c6 Binary files /dev/null and b/app_code/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png differ diff --git a/app_code/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app_code/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000..35ccf8b Binary files /dev/null and b/app_code/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/app_code/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app_code/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000..db0f96c Binary files /dev/null and b/app_code/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/app_code/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/app_code/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..6992184 Binary files /dev/null and b/app_code/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png differ diff --git a/app_code/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app_code/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000..7d74ab3 Binary files /dev/null and b/app_code/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/app_code/android/app/src/main/res/playstore-icon.png b/app_code/android/app/src/main/res/playstore-icon.png new file mode 100644 index 0000000..a669b83 Binary files /dev/null and b/app_code/android/app/src/main/res/playstore-icon.png differ diff --git a/app_code/android/app/src/main/res/values-night/styles.xml b/app_code/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000..06952be --- /dev/null +++ b/app_code/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/app_code/android/app/src/main/res/values/ic_launcher_background.xml b/app_code/android/app/src/main/res/values/ic_launcher_background.xml new file mode 100644 index 0000000..653b41a --- /dev/null +++ b/app_code/android/app/src/main/res/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #e4052d + \ No newline at end of file diff --git a/app_code/android/app/src/main/res/values/styles.xml b/app_code/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..cb1ef88 --- /dev/null +++ b/app_code/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/app_code/android/app/src/main/res/xml/filepaths.xml b/app_code/android/app/src/main/res/xml/filepaths.xml new file mode 100644 index 0000000..c0f3b31 --- /dev/null +++ b/app_code/android/app/src/main/res/xml/filepaths.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/app_code/android/app/src/main/res/xml/network_security_config.xml b/app_code/android/app/src/main/res/xml/network_security_config.xml new file mode 100644 index 0000000..bb6ab93 --- /dev/null +++ b/app_code/android/app/src/main/res/xml/network_security_config.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/app_code/android/app/src/private_key.pepk b/app_code/android/app/src/private_key.pepk new file mode 100644 index 0000000..335b97d Binary files /dev/null and b/app_code/android/app/src/private_key.pepk differ diff --git a/app_code/android/app/src/profile/AndroidManifest.xml b/app_code/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..58f9002 --- /dev/null +++ b/app_code/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/app_code/android/build.gradle b/app_code/android/build.gradle new file mode 100644 index 0000000..b998e74 --- /dev/null +++ b/app_code/android/build.gradle @@ -0,0 +1,31 @@ +//buildscript { +// ext.kotlin_version = '1.9.21' +// repositories { +// google() +// mavenCentral() +// } +// +// dependencies { +// classpath 'com.android.tools.build:gradle:8.2.2' +// classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" +// } +//} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +tasks.register("clean", Delete) { + delete rootProject.buildDir +} diff --git a/app_code/android/build/reports/problems/problems-report.html b/app_code/android/build/reports/problems/problems-report.html new file mode 100644 index 0000000..fcf1dea --- /dev/null +++ b/app_code/android/build/reports/problems/problems-report.html @@ -0,0 +1,663 @@ + + + + + + + + + + + + + Gradle Configuration Cache + + + +
+ +
+ Loading... +
+ + + + + + diff --git a/app_code/android/gradle.properties b/app_code/android/gradle.properties new file mode 100644 index 0000000..3798bf4 --- /dev/null +++ b/app_code/android/gradle.properties @@ -0,0 +1,7 @@ +android.useAndroidX=true +android.enableJetifier=true +android.defaults.buildfeatures.buildconfig=true +android.nonTransitiveRClass=false +android.nonFinalResIds=false +org.gradle.java.home=/Library/Java/JavaVirtualMachines/temurin-21.jdk/Contents/Home +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError diff --git a/app_code/android/gradle/wrapper/gradle-wrapper.properties b/app_code/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..02767eb --- /dev/null +++ b/app_code/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-all.zip diff --git a/app_code/android/settings.gradle b/app_code/android/settings.gradle new file mode 100644 index 0000000..1e4d17f --- /dev/null +++ b/app_code/android/settings.gradle @@ -0,0 +1,28 @@ +pluginManagement { + def flutterSdkPath = { + def properties = new Properties() + file("local.properties").withInputStream { properties.load(it) } + def flutterSdkPath = properties.getProperty("flutter.sdk") + assert flutterSdkPath != null, "flutter.sdk not set in local.properties" + return flutterSdkPath + } + settings.ext.flutterSdkPath = flutterSdkPath() + + includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + + id 'dev.flutter.flutter-plugin-loader' version '1.0.0' + id 'com.android.application' version '8.12.0' apply false + id 'com.google.gms.google-services' version '4.3.15' apply false + id "org.jetbrains.kotlin.android" version "2.2.20" apply false +} + +include ":app" diff --git a/app_code/assets/flags/ad.png b/app_code/assets/flags/ad.png new file mode 100644 index 0000000..fdc41f6 Binary files /dev/null and b/app_code/assets/flags/ad.png differ diff --git a/app_code/assets/flags/ae.png b/app_code/assets/flags/ae.png new file mode 100644 index 0000000..8e0ae66 Binary files /dev/null and b/app_code/assets/flags/ae.png differ diff --git a/app_code/assets/flags/af.png b/app_code/assets/flags/af.png new file mode 100644 index 0000000..bb620b1 Binary files /dev/null and b/app_code/assets/flags/af.png differ diff --git a/app_code/assets/flags/ag.png b/app_code/assets/flags/ag.png new file mode 100644 index 0000000..3579ff1 Binary files /dev/null and b/app_code/assets/flags/ag.png differ diff --git a/app_code/assets/flags/ai.png b/app_code/assets/flags/ai.png new file mode 100644 index 0000000..1aca2ec Binary files /dev/null and b/app_code/assets/flags/ai.png differ diff --git a/app_code/assets/flags/al.png b/app_code/assets/flags/al.png new file mode 100644 index 0000000..f070896 Binary files /dev/null and b/app_code/assets/flags/al.png differ diff --git a/app_code/assets/flags/am.png b/app_code/assets/flags/am.png new file mode 100644 index 0000000..9dd35f0 Binary files /dev/null and b/app_code/assets/flags/am.png differ diff --git a/app_code/assets/flags/an.png b/app_code/assets/flags/an.png new file mode 100644 index 0000000..cd6b451 Binary files /dev/null and b/app_code/assets/flags/an.png differ diff --git a/app_code/assets/flags/ao.png b/app_code/assets/flags/ao.png new file mode 100644 index 0000000..197cdc6 Binary files /dev/null and b/app_code/assets/flags/ao.png differ diff --git a/app_code/assets/flags/aq.png b/app_code/assets/flags/aq.png new file mode 100644 index 0000000..827282f Binary files /dev/null and b/app_code/assets/flags/aq.png differ diff --git a/app_code/assets/flags/ar.png b/app_code/assets/flags/ar.png new file mode 100644 index 0000000..846a2bc Binary files /dev/null and b/app_code/assets/flags/ar.png differ diff --git a/app_code/assets/flags/as.png b/app_code/assets/flags/as.png new file mode 100644 index 0000000..c2af5ea Binary files /dev/null and b/app_code/assets/flags/as.png differ diff --git a/app_code/assets/flags/at.png b/app_code/assets/flags/at.png new file mode 100644 index 0000000..05dbd1d Binary files /dev/null and b/app_code/assets/flags/at.png differ diff --git a/app_code/assets/flags/au.png b/app_code/assets/flags/au.png new file mode 100644 index 0000000..7181dc5 Binary files /dev/null and b/app_code/assets/flags/au.png differ diff --git a/app_code/assets/flags/aw.png b/app_code/assets/flags/aw.png new file mode 100644 index 0000000..efe03a9 Binary files /dev/null and b/app_code/assets/flags/aw.png differ diff --git a/app_code/assets/flags/ax.png b/app_code/assets/flags/ax.png new file mode 100644 index 0000000..c3df4ad Binary files /dev/null and b/app_code/assets/flags/ax.png differ diff --git a/app_code/assets/flags/az.png b/app_code/assets/flags/az.png new file mode 100644 index 0000000..5bc4a0f Binary files /dev/null and b/app_code/assets/flags/az.png differ diff --git a/app_code/assets/flags/ba.png b/app_code/assets/flags/ba.png new file mode 100644 index 0000000..09cec0d Binary files /dev/null and b/app_code/assets/flags/ba.png differ diff --git a/app_code/assets/flags/bb.png b/app_code/assets/flags/bb.png new file mode 100644 index 0000000..ed7731e Binary files /dev/null and b/app_code/assets/flags/bb.png differ diff --git a/app_code/assets/flags/bd.png b/app_code/assets/flags/bd.png new file mode 100644 index 0000000..c24170c Binary files /dev/null and b/app_code/assets/flags/bd.png differ diff --git a/app_code/assets/flags/be.png b/app_code/assets/flags/be.png new file mode 100644 index 0000000..202c489 Binary files /dev/null and b/app_code/assets/flags/be.png differ diff --git a/app_code/assets/flags/bf.png b/app_code/assets/flags/bf.png new file mode 100644 index 0000000..9a3d8d1 Binary files /dev/null and b/app_code/assets/flags/bf.png differ diff --git a/app_code/assets/flags/bg.png b/app_code/assets/flags/bg.png new file mode 100644 index 0000000..ab3eb4f Binary files /dev/null and b/app_code/assets/flags/bg.png differ diff --git a/app_code/assets/flags/bh.png b/app_code/assets/flags/bh.png new file mode 100644 index 0000000..62011b8 Binary files /dev/null and b/app_code/assets/flags/bh.png differ diff --git a/app_code/assets/flags/bi.png b/app_code/assets/flags/bi.png new file mode 100644 index 0000000..f4de108 Binary files /dev/null and b/app_code/assets/flags/bi.png differ diff --git a/app_code/assets/flags/bj.png b/app_code/assets/flags/bj.png new file mode 100644 index 0000000..83c9474 Binary files /dev/null and b/app_code/assets/flags/bj.png differ diff --git a/app_code/assets/flags/bl.png b/app_code/assets/flags/bl.png new file mode 100644 index 0000000..6320925 Binary files /dev/null and b/app_code/assets/flags/bl.png differ diff --git a/app_code/assets/flags/bm.png b/app_code/assets/flags/bm.png new file mode 100644 index 0000000..5e87c6a Binary files /dev/null and b/app_code/assets/flags/bm.png differ diff --git a/app_code/assets/flags/bn.png b/app_code/assets/flags/bn.png new file mode 100644 index 0000000..1006d68 Binary files /dev/null and b/app_code/assets/flags/bn.png differ diff --git a/app_code/assets/flags/bo.png b/app_code/assets/flags/bo.png new file mode 100644 index 0000000..17d56dc Binary files /dev/null and b/app_code/assets/flags/bo.png differ diff --git a/app_code/assets/flags/bq.png b/app_code/assets/flags/bq.png new file mode 100644 index 0000000..f545dc8 Binary files /dev/null and b/app_code/assets/flags/bq.png differ diff --git a/app_code/assets/flags/br.png b/app_code/assets/flags/br.png new file mode 100644 index 0000000..8b18eb2 Binary files /dev/null and b/app_code/assets/flags/br.png differ diff --git a/app_code/assets/flags/bs.png b/app_code/assets/flags/bs.png new file mode 100644 index 0000000..6bdc618 Binary files /dev/null and b/app_code/assets/flags/bs.png differ diff --git a/app_code/assets/flags/bt.png b/app_code/assets/flags/bt.png new file mode 100644 index 0000000..013a6a3 Binary files /dev/null and b/app_code/assets/flags/bt.png differ diff --git a/app_code/assets/flags/bv.png b/app_code/assets/flags/bv.png new file mode 100644 index 0000000..b7a42f4 Binary files /dev/null and b/app_code/assets/flags/bv.png differ diff --git a/app_code/assets/flags/bw.png b/app_code/assets/flags/bw.png new file mode 100644 index 0000000..04446c4 Binary files /dev/null and b/app_code/assets/flags/bw.png differ diff --git a/app_code/assets/flags/by.png b/app_code/assets/flags/by.png new file mode 100644 index 0000000..5633bdd Binary files /dev/null and b/app_code/assets/flags/by.png differ diff --git a/app_code/assets/flags/bz.png b/app_code/assets/flags/bz.png new file mode 100644 index 0000000..0ea4c76 Binary files /dev/null and b/app_code/assets/flags/bz.png differ diff --git a/app_code/assets/flags/ca.png b/app_code/assets/flags/ca.png new file mode 100644 index 0000000..5c7340a Binary files /dev/null and b/app_code/assets/flags/ca.png differ diff --git a/app_code/assets/flags/cc.png b/app_code/assets/flags/cc.png new file mode 100644 index 0000000..9191430 Binary files /dev/null and b/app_code/assets/flags/cc.png differ diff --git a/app_code/assets/flags/cd.png b/app_code/assets/flags/cd.png new file mode 100644 index 0000000..7e85a3d Binary files /dev/null and b/app_code/assets/flags/cd.png differ diff --git a/app_code/assets/flags/cf.png b/app_code/assets/flags/cf.png new file mode 100644 index 0000000..6fdd1dc Binary files /dev/null and b/app_code/assets/flags/cf.png differ diff --git a/app_code/assets/flags/cg.png b/app_code/assets/flags/cg.png new file mode 100644 index 0000000..79d62cf Binary files /dev/null and b/app_code/assets/flags/cg.png differ diff --git a/app_code/assets/flags/ch.png b/app_code/assets/flags/ch.png new file mode 100644 index 0000000..031d1f7 Binary files /dev/null and b/app_code/assets/flags/ch.png differ diff --git a/app_code/assets/flags/ci.png b/app_code/assets/flags/ci.png new file mode 100644 index 0000000..97a79e2 Binary files /dev/null and b/app_code/assets/flags/ci.png differ diff --git a/app_code/assets/flags/ck.png b/app_code/assets/flags/ck.png new file mode 100644 index 0000000..8c1d086 Binary files /dev/null and b/app_code/assets/flags/ck.png differ diff --git a/app_code/assets/flags/cl.png b/app_code/assets/flags/cl.png new file mode 100644 index 0000000..2bd971d Binary files /dev/null and b/app_code/assets/flags/cl.png differ diff --git a/app_code/assets/flags/cm.png b/app_code/assets/flags/cm.png new file mode 100644 index 0000000..fa35a32 Binary files /dev/null and b/app_code/assets/flags/cm.png differ diff --git a/app_code/assets/flags/cn.png b/app_code/assets/flags/cn.png new file mode 100644 index 0000000..ca5a8b3 Binary files /dev/null and b/app_code/assets/flags/cn.png differ diff --git a/app_code/assets/flags/co.png b/app_code/assets/flags/co.png new file mode 100644 index 0000000..6fcfd96 Binary files /dev/null and b/app_code/assets/flags/co.png differ diff --git a/app_code/assets/flags/cr.png b/app_code/assets/flags/cr.png new file mode 100644 index 0000000..d4a25c2 Binary files /dev/null and b/app_code/assets/flags/cr.png differ diff --git a/app_code/assets/flags/cu.png b/app_code/assets/flags/cu.png new file mode 100644 index 0000000..000b773 Binary files /dev/null and b/app_code/assets/flags/cu.png differ diff --git a/app_code/assets/flags/cv.png b/app_code/assets/flags/cv.png new file mode 100644 index 0000000..1684576 Binary files /dev/null and b/app_code/assets/flags/cv.png differ diff --git a/app_code/assets/flags/cw.png b/app_code/assets/flags/cw.png new file mode 100644 index 0000000..aa7b8c8 Binary files /dev/null and b/app_code/assets/flags/cw.png differ diff --git a/app_code/assets/flags/cx.png b/app_code/assets/flags/cx.png new file mode 100644 index 0000000..826b230 Binary files /dev/null and b/app_code/assets/flags/cx.png differ diff --git a/app_code/assets/flags/cy.png b/app_code/assets/flags/cy.png new file mode 100644 index 0000000..39055d7 Binary files /dev/null and b/app_code/assets/flags/cy.png differ diff --git a/app_code/assets/flags/cz.png b/app_code/assets/flags/cz.png new file mode 100644 index 0000000..8c679f2 Binary files /dev/null and b/app_code/assets/flags/cz.png differ diff --git a/app_code/assets/flags/de.png b/app_code/assets/flags/de.png new file mode 100644 index 0000000..f078fdf Binary files /dev/null and b/app_code/assets/flags/de.png differ diff --git a/app_code/assets/flags/dj.png b/app_code/assets/flags/dj.png new file mode 100644 index 0000000..64ab04e Binary files /dev/null and b/app_code/assets/flags/dj.png differ diff --git a/app_code/assets/flags/dk.png b/app_code/assets/flags/dk.png new file mode 100644 index 0000000..5f907ce Binary files /dev/null and b/app_code/assets/flags/dk.png differ diff --git a/app_code/assets/flags/dm.png b/app_code/assets/flags/dm.png new file mode 100644 index 0000000..307e374 Binary files /dev/null and b/app_code/assets/flags/dm.png differ diff --git a/app_code/assets/flags/do.png b/app_code/assets/flags/do.png new file mode 100644 index 0000000..16160a3 Binary files /dev/null and b/app_code/assets/flags/do.png differ diff --git a/app_code/assets/flags/dz.png b/app_code/assets/flags/dz.png new file mode 100644 index 0000000..0de1256 Binary files /dev/null and b/app_code/assets/flags/dz.png differ diff --git a/app_code/assets/flags/ec.png b/app_code/assets/flags/ec.png new file mode 100644 index 0000000..96d84f7 Binary files /dev/null and b/app_code/assets/flags/ec.png differ diff --git a/app_code/assets/flags/ee.png b/app_code/assets/flags/ee.png new file mode 100644 index 0000000..56aed18 Binary files /dev/null and b/app_code/assets/flags/ee.png differ diff --git a/app_code/assets/flags/eg.png b/app_code/assets/flags/eg.png new file mode 100644 index 0000000..a5320a6 Binary files /dev/null and b/app_code/assets/flags/eg.png differ diff --git a/app_code/assets/flags/eh.png b/app_code/assets/flags/eh.png new file mode 100644 index 0000000..24bdb35 Binary files /dev/null and b/app_code/assets/flags/eh.png differ diff --git a/app_code/assets/flags/er.png b/app_code/assets/flags/er.png new file mode 100644 index 0000000..bd47590 Binary files /dev/null and b/app_code/assets/flags/er.png differ diff --git a/app_code/assets/flags/es.png b/app_code/assets/flags/es.png new file mode 100644 index 0000000..23e7141 Binary files /dev/null and b/app_code/assets/flags/es.png differ diff --git a/app_code/assets/flags/et.png b/app_code/assets/flags/et.png new file mode 100644 index 0000000..258e32d Binary files /dev/null and b/app_code/assets/flags/et.png differ diff --git a/app_code/assets/flags/eu.png b/app_code/assets/flags/eu.png new file mode 100644 index 0000000..0018b6c Binary files /dev/null and b/app_code/assets/flags/eu.png differ diff --git a/app_code/assets/flags/fi.png b/app_code/assets/flags/fi.png new file mode 100644 index 0000000..7c1f908 Binary files /dev/null and b/app_code/assets/flags/fi.png differ diff --git a/app_code/assets/flags/fj.png b/app_code/assets/flags/fj.png new file mode 100644 index 0000000..6d9a4e1 Binary files /dev/null and b/app_code/assets/flags/fj.png differ diff --git a/app_code/assets/flags/fk.png b/app_code/assets/flags/fk.png new file mode 100644 index 0000000..fc9b5db Binary files /dev/null and b/app_code/assets/flags/fk.png differ diff --git a/app_code/assets/flags/fm.png b/app_code/assets/flags/fm.png new file mode 100644 index 0000000..8f5b150 Binary files /dev/null and b/app_code/assets/flags/fm.png differ diff --git a/app_code/assets/flags/fo.png b/app_code/assets/flags/fo.png new file mode 100644 index 0000000..6a1e048 Binary files /dev/null and b/app_code/assets/flags/fo.png differ diff --git a/app_code/assets/flags/fr.png b/app_code/assets/flags/fr.png new file mode 100644 index 0000000..6a196cb Binary files /dev/null and b/app_code/assets/flags/fr.png differ diff --git a/app_code/assets/flags/ga.png b/app_code/assets/flags/ga.png new file mode 100644 index 0000000..dcade00 Binary files /dev/null and b/app_code/assets/flags/ga.png differ diff --git a/app_code/assets/flags/gb-eng.png b/app_code/assets/flags/gb-eng.png new file mode 100644 index 0000000..b534e62 Binary files /dev/null and b/app_code/assets/flags/gb-eng.png differ diff --git a/app_code/assets/flags/gb-nir.png b/app_code/assets/flags/gb-nir.png new file mode 100644 index 0000000..8a020a8 Binary files /dev/null and b/app_code/assets/flags/gb-nir.png differ diff --git a/app_code/assets/flags/gb-sct.png b/app_code/assets/flags/gb-sct.png new file mode 100644 index 0000000..7f5f28f Binary files /dev/null and b/app_code/assets/flags/gb-sct.png differ diff --git a/app_code/assets/flags/gb-wls.png b/app_code/assets/flags/gb-wls.png new file mode 100644 index 0000000..9571ac5 Binary files /dev/null and b/app_code/assets/flags/gb-wls.png differ diff --git a/app_code/assets/flags/gb.png b/app_code/assets/flags/gb.png new file mode 100644 index 0000000..23e1574 Binary files /dev/null and b/app_code/assets/flags/gb.png differ diff --git a/app_code/assets/flags/gd.png b/app_code/assets/flags/gd.png new file mode 100644 index 0000000..2c070dd Binary files /dev/null and b/app_code/assets/flags/gd.png differ diff --git a/app_code/assets/flags/ge.png b/app_code/assets/flags/ge.png new file mode 100644 index 0000000..1cc5204 Binary files /dev/null and b/app_code/assets/flags/ge.png differ diff --git a/app_code/assets/flags/gf.png b/app_code/assets/flags/gf.png new file mode 100644 index 0000000..54c2d5e Binary files /dev/null and b/app_code/assets/flags/gf.png differ diff --git a/app_code/assets/flags/gg.png b/app_code/assets/flags/gg.png new file mode 100644 index 0000000..e734304 Binary files /dev/null and b/app_code/assets/flags/gg.png differ diff --git a/app_code/assets/flags/gh.png b/app_code/assets/flags/gh.png new file mode 100644 index 0000000..a8ef8c4 Binary files /dev/null and b/app_code/assets/flags/gh.png differ diff --git a/app_code/assets/flags/gi.png b/app_code/assets/flags/gi.png new file mode 100644 index 0000000..ca2b8da Binary files /dev/null and b/app_code/assets/flags/gi.png differ diff --git a/app_code/assets/flags/gl.png b/app_code/assets/flags/gl.png new file mode 100644 index 0000000..3a8ce02 Binary files /dev/null and b/app_code/assets/flags/gl.png differ diff --git a/app_code/assets/flags/gm.png b/app_code/assets/flags/gm.png new file mode 100644 index 0000000..2a70b15 Binary files /dev/null and b/app_code/assets/flags/gm.png differ diff --git a/app_code/assets/flags/gn.png b/app_code/assets/flags/gn.png new file mode 100644 index 0000000..609fd66 Binary files /dev/null and b/app_code/assets/flags/gn.png differ diff --git a/app_code/assets/flags/gp.png b/app_code/assets/flags/gp.png new file mode 100644 index 0000000..6a196cb Binary files /dev/null and b/app_code/assets/flags/gp.png differ diff --git a/app_code/assets/flags/gq.png b/app_code/assets/flags/gq.png new file mode 100644 index 0000000..60a82d9 Binary files /dev/null and b/app_code/assets/flags/gq.png differ diff --git a/app_code/assets/flags/gr.png b/app_code/assets/flags/gr.png new file mode 100644 index 0000000..ac2f75c Binary files /dev/null and b/app_code/assets/flags/gr.png differ diff --git a/app_code/assets/flags/gs.png b/app_code/assets/flags/gs.png new file mode 100644 index 0000000..60d421b Binary files /dev/null and b/app_code/assets/flags/gs.png differ diff --git a/app_code/assets/flags/gt.png b/app_code/assets/flags/gt.png new file mode 100644 index 0000000..4971a58 Binary files /dev/null and b/app_code/assets/flags/gt.png differ diff --git a/app_code/assets/flags/gu.png b/app_code/assets/flags/gu.png new file mode 100644 index 0000000..cdca8e9 Binary files /dev/null and b/app_code/assets/flags/gu.png differ diff --git a/app_code/assets/flags/gw.png b/app_code/assets/flags/gw.png new file mode 100644 index 0000000..1472f23 Binary files /dev/null and b/app_code/assets/flags/gw.png differ diff --git a/app_code/assets/flags/gy.png b/app_code/assets/flags/gy.png new file mode 100644 index 0000000..36279ec Binary files /dev/null and b/app_code/assets/flags/gy.png differ diff --git a/app_code/assets/flags/hk.png b/app_code/assets/flags/hk.png new file mode 100644 index 0000000..92123c5 Binary files /dev/null and b/app_code/assets/flags/hk.png differ diff --git a/app_code/assets/flags/hm.png b/app_code/assets/flags/hm.png new file mode 100644 index 0000000..fff75ea Binary files /dev/null and b/app_code/assets/flags/hm.png differ diff --git a/app_code/assets/flags/hn.png b/app_code/assets/flags/hn.png new file mode 100644 index 0000000..9935964 Binary files /dev/null and b/app_code/assets/flags/hn.png differ diff --git a/app_code/assets/flags/hr.png b/app_code/assets/flags/hr.png new file mode 100644 index 0000000..8396e00 Binary files /dev/null and b/app_code/assets/flags/hr.png differ diff --git a/app_code/assets/flags/ht.png b/app_code/assets/flags/ht.png new file mode 100644 index 0000000..43e208b Binary files /dev/null and b/app_code/assets/flags/ht.png differ diff --git a/app_code/assets/flags/hu.png b/app_code/assets/flags/hu.png new file mode 100644 index 0000000..d181d5d Binary files /dev/null and b/app_code/assets/flags/hu.png differ diff --git a/app_code/assets/flags/id.png b/app_code/assets/flags/id.png new file mode 100644 index 0000000..072bd8c Binary files /dev/null and b/app_code/assets/flags/id.png differ diff --git a/app_code/assets/flags/ie.png b/app_code/assets/flags/ie.png new file mode 100644 index 0000000..10fbab9 Binary files /dev/null and b/app_code/assets/flags/ie.png differ diff --git a/app_code/assets/flags/il.png b/app_code/assets/flags/il.png new file mode 100644 index 0000000..32aba13 Binary files /dev/null and b/app_code/assets/flags/il.png differ diff --git a/app_code/assets/flags/im.png b/app_code/assets/flags/im.png new file mode 100644 index 0000000..f54a464 Binary files /dev/null and b/app_code/assets/flags/im.png differ diff --git a/app_code/assets/flags/in.png b/app_code/assets/flags/in.png new file mode 100644 index 0000000..be3710d Binary files /dev/null and b/app_code/assets/flags/in.png differ diff --git a/app_code/assets/flags/io.png b/app_code/assets/flags/io.png new file mode 100644 index 0000000..c7eddc7 Binary files /dev/null and b/app_code/assets/flags/io.png differ diff --git a/app_code/assets/flags/iq.png b/app_code/assets/flags/iq.png new file mode 100644 index 0000000..273672a Binary files /dev/null and b/app_code/assets/flags/iq.png differ diff --git a/app_code/assets/flags/ir.png b/app_code/assets/flags/ir.png new file mode 100644 index 0000000..e218c83 Binary files /dev/null and b/app_code/assets/flags/ir.png differ diff --git a/app_code/assets/flags/is.png b/app_code/assets/flags/is.png new file mode 100644 index 0000000..ff6cb99 Binary files /dev/null and b/app_code/assets/flags/is.png differ diff --git a/app_code/assets/flags/it.png b/app_code/assets/flags/it.png new file mode 100644 index 0000000..3f5e25b Binary files /dev/null and b/app_code/assets/flags/it.png differ diff --git a/app_code/assets/flags/je.png b/app_code/assets/flags/je.png new file mode 100644 index 0000000..0e26cb9 Binary files /dev/null and b/app_code/assets/flags/je.png differ diff --git a/app_code/assets/flags/jm.png b/app_code/assets/flags/jm.png new file mode 100644 index 0000000..4768ee5 Binary files /dev/null and b/app_code/assets/flags/jm.png differ diff --git a/app_code/assets/flags/jo.png b/app_code/assets/flags/jo.png new file mode 100644 index 0000000..d5b39da Binary files /dev/null and b/app_code/assets/flags/jo.png differ diff --git a/app_code/assets/flags/jp.png b/app_code/assets/flags/jp.png new file mode 100644 index 0000000..253e485 Binary files /dev/null and b/app_code/assets/flags/jp.png differ diff --git a/app_code/assets/flags/ke.png b/app_code/assets/flags/ke.png new file mode 100644 index 0000000..3017b3b Binary files /dev/null and b/app_code/assets/flags/ke.png differ diff --git a/app_code/assets/flags/kg.png b/app_code/assets/flags/kg.png new file mode 100644 index 0000000..65111f5 Binary files /dev/null and b/app_code/assets/flags/kg.png differ diff --git a/app_code/assets/flags/kh.png b/app_code/assets/flags/kh.png new file mode 100644 index 0000000..74106c5 Binary files /dev/null and b/app_code/assets/flags/kh.png differ diff --git a/app_code/assets/flags/ki.png b/app_code/assets/flags/ki.png new file mode 100644 index 0000000..cdbac2f Binary files /dev/null and b/app_code/assets/flags/ki.png differ diff --git a/app_code/assets/flags/km.png b/app_code/assets/flags/km.png new file mode 100644 index 0000000..22d9760 Binary files /dev/null and b/app_code/assets/flags/km.png differ diff --git a/app_code/assets/flags/kn.png b/app_code/assets/flags/kn.png new file mode 100644 index 0000000..be0a586 Binary files /dev/null and b/app_code/assets/flags/kn.png differ diff --git a/app_code/assets/flags/kp.png b/app_code/assets/flags/kp.png new file mode 100644 index 0000000..1d9ca5e Binary files /dev/null and b/app_code/assets/flags/kp.png differ diff --git a/app_code/assets/flags/kr.png b/app_code/assets/flags/kr.png new file mode 100644 index 0000000..fd9b58d Binary files /dev/null and b/app_code/assets/flags/kr.png differ diff --git a/app_code/assets/flags/kw.png b/app_code/assets/flags/kw.png new file mode 100644 index 0000000..a939061 Binary files /dev/null and b/app_code/assets/flags/kw.png differ diff --git a/app_code/assets/flags/ky.png b/app_code/assets/flags/ky.png new file mode 100644 index 0000000..47c5580 Binary files /dev/null and b/app_code/assets/flags/ky.png differ diff --git a/app_code/assets/flags/kz.png b/app_code/assets/flags/kz.png new file mode 100644 index 0000000..b3bb7f0 Binary files /dev/null and b/app_code/assets/flags/kz.png differ diff --git a/app_code/assets/flags/la.png b/app_code/assets/flags/la.png new file mode 100644 index 0000000..006e38f Binary files /dev/null and b/app_code/assets/flags/la.png differ diff --git a/app_code/assets/flags/lb.png b/app_code/assets/flags/lb.png new file mode 100644 index 0000000..a2d62a8 Binary files /dev/null and b/app_code/assets/flags/lb.png differ diff --git a/app_code/assets/flags/lc.png b/app_code/assets/flags/lc.png new file mode 100644 index 0000000..40948b6 Binary files /dev/null and b/app_code/assets/flags/lc.png differ diff --git a/app_code/assets/flags/li.png b/app_code/assets/flags/li.png new file mode 100644 index 0000000..8d73ed8 Binary files /dev/null and b/app_code/assets/flags/li.png differ diff --git a/app_code/assets/flags/lk.png b/app_code/assets/flags/lk.png new file mode 100644 index 0000000..fb62738 Binary files /dev/null and b/app_code/assets/flags/lk.png differ diff --git a/app_code/assets/flags/lr.png b/app_code/assets/flags/lr.png new file mode 100644 index 0000000..b20d7f0 Binary files /dev/null and b/app_code/assets/flags/lr.png differ diff --git a/app_code/assets/flags/ls.png b/app_code/assets/flags/ls.png new file mode 100644 index 0000000..75d9ce3 Binary files /dev/null and b/app_code/assets/flags/ls.png differ diff --git a/app_code/assets/flags/lt.png b/app_code/assets/flags/lt.png new file mode 100644 index 0000000..c8bed37 Binary files /dev/null and b/app_code/assets/flags/lt.png differ diff --git a/app_code/assets/flags/lu.png b/app_code/assets/flags/lu.png new file mode 100644 index 0000000..0937120 Binary files /dev/null and b/app_code/assets/flags/lu.png differ diff --git a/app_code/assets/flags/lv.png b/app_code/assets/flags/lv.png new file mode 100644 index 0000000..5447b3f Binary files /dev/null and b/app_code/assets/flags/lv.png differ diff --git a/app_code/assets/flags/ly.png b/app_code/assets/flags/ly.png new file mode 100644 index 0000000..d898e49 Binary files /dev/null and b/app_code/assets/flags/ly.png differ diff --git a/app_code/assets/flags/ma.png b/app_code/assets/flags/ma.png new file mode 100644 index 0000000..a0e0290 Binary files /dev/null and b/app_code/assets/flags/ma.png differ diff --git a/app_code/assets/flags/mc.png b/app_code/assets/flags/mc.png new file mode 100644 index 0000000..f40ca3e Binary files /dev/null and b/app_code/assets/flags/mc.png differ diff --git a/app_code/assets/flags/md.png b/app_code/assets/flags/md.png new file mode 100644 index 0000000..f8408e2 Binary files /dev/null and b/app_code/assets/flags/md.png differ diff --git a/app_code/assets/flags/me.png b/app_code/assets/flags/me.png new file mode 100644 index 0000000..1d56855 Binary files /dev/null and b/app_code/assets/flags/me.png differ diff --git a/app_code/assets/flags/mf.png b/app_code/assets/flags/mf.png new file mode 100644 index 0000000..6a196cb Binary files /dev/null and b/app_code/assets/flags/mf.png differ diff --git a/app_code/assets/flags/mg.png b/app_code/assets/flags/mg.png new file mode 100644 index 0000000..21ccba3 Binary files /dev/null and b/app_code/assets/flags/mg.png differ diff --git a/app_code/assets/flags/mh.png b/app_code/assets/flags/mh.png new file mode 100644 index 0000000..e7f88ed Binary files /dev/null and b/app_code/assets/flags/mh.png differ diff --git a/app_code/assets/flags/mk.png b/app_code/assets/flags/mk.png new file mode 100644 index 0000000..e670919 Binary files /dev/null and b/app_code/assets/flags/mk.png differ diff --git a/app_code/assets/flags/ml.png b/app_code/assets/flags/ml.png new file mode 100644 index 0000000..f0e9990 Binary files /dev/null and b/app_code/assets/flags/ml.png differ diff --git a/app_code/assets/flags/mm.png b/app_code/assets/flags/mm.png new file mode 100644 index 0000000..09363b3 Binary files /dev/null and b/app_code/assets/flags/mm.png differ diff --git a/app_code/assets/flags/mn.png b/app_code/assets/flags/mn.png new file mode 100644 index 0000000..0d30b3e Binary files /dev/null and b/app_code/assets/flags/mn.png differ diff --git a/app_code/assets/flags/mo.png b/app_code/assets/flags/mo.png new file mode 100644 index 0000000..4a731ce Binary files /dev/null and b/app_code/assets/flags/mo.png differ diff --git a/app_code/assets/flags/mp.png b/app_code/assets/flags/mp.png new file mode 100644 index 0000000..a7aa3cd Binary files /dev/null and b/app_code/assets/flags/mp.png differ diff --git a/app_code/assets/flags/mq.png b/app_code/assets/flags/mq.png new file mode 100644 index 0000000..2d396ea Binary files /dev/null and b/app_code/assets/flags/mq.png differ diff --git a/app_code/assets/flags/mr.png b/app_code/assets/flags/mr.png new file mode 100644 index 0000000..cc1960f Binary files /dev/null and b/app_code/assets/flags/mr.png differ diff --git a/app_code/assets/flags/ms.png b/app_code/assets/flags/ms.png new file mode 100644 index 0000000..e51480c Binary files /dev/null and b/app_code/assets/flags/ms.png differ diff --git a/app_code/assets/flags/mt.png b/app_code/assets/flags/mt.png new file mode 100644 index 0000000..18ec071 Binary files /dev/null and b/app_code/assets/flags/mt.png differ diff --git a/app_code/assets/flags/mu.png b/app_code/assets/flags/mu.png new file mode 100644 index 0000000..b416546 Binary files /dev/null and b/app_code/assets/flags/mu.png differ diff --git a/app_code/assets/flags/mv.png b/app_code/assets/flags/mv.png new file mode 100644 index 0000000..a011b78 Binary files /dev/null and b/app_code/assets/flags/mv.png differ diff --git a/app_code/assets/flags/mw.png b/app_code/assets/flags/mw.png new file mode 100644 index 0000000..5821977 Binary files /dev/null and b/app_code/assets/flags/mw.png differ diff --git a/app_code/assets/flags/mx.png b/app_code/assets/flags/mx.png new file mode 100644 index 0000000..db28a24 Binary files /dev/null and b/app_code/assets/flags/mx.png differ diff --git a/app_code/assets/flags/my.png b/app_code/assets/flags/my.png new file mode 100644 index 0000000..6fe220e Binary files /dev/null and b/app_code/assets/flags/my.png differ diff --git a/app_code/assets/flags/mz.png b/app_code/assets/flags/mz.png new file mode 100644 index 0000000..81c587d Binary files /dev/null and b/app_code/assets/flags/mz.png differ diff --git a/app_code/assets/flags/na.png b/app_code/assets/flags/na.png new file mode 100644 index 0000000..1a4f709 Binary files /dev/null and b/app_code/assets/flags/na.png differ diff --git a/app_code/assets/flags/nc.png b/app_code/assets/flags/nc.png new file mode 100644 index 0000000..a0ecb85 Binary files /dev/null and b/app_code/assets/flags/nc.png differ diff --git a/app_code/assets/flags/ne.png b/app_code/assets/flags/ne.png new file mode 100644 index 0000000..fa8859a Binary files /dev/null and b/app_code/assets/flags/ne.png differ diff --git a/app_code/assets/flags/nf.png b/app_code/assets/flags/nf.png new file mode 100644 index 0000000..3c94505 Binary files /dev/null and b/app_code/assets/flags/nf.png differ diff --git a/app_code/assets/flags/ng.png b/app_code/assets/flags/ng.png new file mode 100644 index 0000000..fd111eb Binary files /dev/null and b/app_code/assets/flags/ng.png differ diff --git a/app_code/assets/flags/ni.png b/app_code/assets/flags/ni.png new file mode 100644 index 0000000..fa96478 Binary files /dev/null and b/app_code/assets/flags/ni.png differ diff --git a/app_code/assets/flags/nl.png b/app_code/assets/flags/nl.png new file mode 100644 index 0000000..f545dc8 Binary files /dev/null and b/app_code/assets/flags/nl.png differ diff --git a/app_code/assets/flags/no.png b/app_code/assets/flags/no.png new file mode 100644 index 0000000..b7a42f4 Binary files /dev/null and b/app_code/assets/flags/no.png differ diff --git a/app_code/assets/flags/np.png b/app_code/assets/flags/np.png new file mode 100644 index 0000000..7f2ffbe Binary files /dev/null and b/app_code/assets/flags/np.png differ diff --git a/app_code/assets/flags/nr.png b/app_code/assets/flags/nr.png new file mode 100644 index 0000000..abaae23 Binary files /dev/null and b/app_code/assets/flags/nr.png differ diff --git a/app_code/assets/flags/nu.png b/app_code/assets/flags/nu.png new file mode 100644 index 0000000..2aa41ac Binary files /dev/null and b/app_code/assets/flags/nu.png differ diff --git a/app_code/assets/flags/nz.png b/app_code/assets/flags/nz.png new file mode 100644 index 0000000..c8263c3 Binary files /dev/null and b/app_code/assets/flags/nz.png differ diff --git a/app_code/assets/flags/om.png b/app_code/assets/flags/om.png new file mode 100644 index 0000000..4945850 Binary files /dev/null and b/app_code/assets/flags/om.png differ diff --git a/app_code/assets/flags/pa.png b/app_code/assets/flags/pa.png new file mode 100644 index 0000000..a3e57a5 Binary files /dev/null and b/app_code/assets/flags/pa.png differ diff --git a/app_code/assets/flags/pe.png b/app_code/assets/flags/pe.png new file mode 100644 index 0000000..2bed96a Binary files /dev/null and b/app_code/assets/flags/pe.png differ diff --git a/app_code/assets/flags/pf.png b/app_code/assets/flags/pf.png new file mode 100644 index 0000000..9bf2ac4 Binary files /dev/null and b/app_code/assets/flags/pf.png differ diff --git a/app_code/assets/flags/pg.png b/app_code/assets/flags/pg.png new file mode 100644 index 0000000..c18cc5c Binary files /dev/null and b/app_code/assets/flags/pg.png differ diff --git a/app_code/assets/flags/ph.png b/app_code/assets/flags/ph.png new file mode 100644 index 0000000..6f73a4f Binary files /dev/null and b/app_code/assets/flags/ph.png differ diff --git a/app_code/assets/flags/pk.png b/app_code/assets/flags/pk.png new file mode 100644 index 0000000..b2355db Binary files /dev/null and b/app_code/assets/flags/pk.png differ diff --git a/app_code/assets/flags/pl.png b/app_code/assets/flags/pl.png new file mode 100644 index 0000000..e335edb Binary files /dev/null and b/app_code/assets/flags/pl.png differ diff --git a/app_code/assets/flags/pm.png b/app_code/assets/flags/pm.png new file mode 100644 index 0000000..6a196cb Binary files /dev/null and b/app_code/assets/flags/pm.png differ diff --git a/app_code/assets/flags/pn.png b/app_code/assets/flags/pn.png new file mode 100644 index 0000000..65acfc1 Binary files /dev/null and b/app_code/assets/flags/pn.png differ diff --git a/app_code/assets/flags/pr.png b/app_code/assets/flags/pr.png new file mode 100644 index 0000000..37f3b64 Binary files /dev/null and b/app_code/assets/flags/pr.png differ diff --git a/app_code/assets/flags/ps.png b/app_code/assets/flags/ps.png new file mode 100644 index 0000000..cac9ec7 Binary files /dev/null and b/app_code/assets/flags/ps.png differ diff --git a/app_code/assets/flags/pt.png b/app_code/assets/flags/pt.png new file mode 100644 index 0000000..56379a6 Binary files /dev/null and b/app_code/assets/flags/pt.png differ diff --git a/app_code/assets/flags/pw.png b/app_code/assets/flags/pw.png new file mode 100644 index 0000000..41b95b8 Binary files /dev/null and b/app_code/assets/flags/pw.png differ diff --git a/app_code/assets/flags/py.png b/app_code/assets/flags/py.png new file mode 100644 index 0000000..f9d7cc9 Binary files /dev/null and b/app_code/assets/flags/py.png differ diff --git a/app_code/assets/flags/qa.png b/app_code/assets/flags/qa.png new file mode 100644 index 0000000..93f3eda Binary files /dev/null and b/app_code/assets/flags/qa.png differ diff --git a/app_code/assets/flags/re.png b/app_code/assets/flags/re.png new file mode 100644 index 0000000..6a196cb Binary files /dev/null and b/app_code/assets/flags/re.png differ diff --git a/app_code/assets/flags/ro.png b/app_code/assets/flags/ro.png new file mode 100644 index 0000000..b8c25ce Binary files /dev/null and b/app_code/assets/flags/ro.png differ diff --git a/app_code/assets/flags/rs.png b/app_code/assets/flags/rs.png new file mode 100644 index 0000000..1c93130 Binary files /dev/null and b/app_code/assets/flags/rs.png differ diff --git a/app_code/assets/flags/ru.png b/app_code/assets/flags/ru.png new file mode 100644 index 0000000..9739ab6 Binary files /dev/null and b/app_code/assets/flags/ru.png differ diff --git a/app_code/assets/flags/rw.png b/app_code/assets/flags/rw.png new file mode 100644 index 0000000..c01b9a6 Binary files /dev/null and b/app_code/assets/flags/rw.png differ diff --git a/app_code/assets/flags/sa.png b/app_code/assets/flags/sa.png new file mode 100644 index 0000000..c1b1f70 Binary files /dev/null and b/app_code/assets/flags/sa.png differ diff --git a/app_code/assets/flags/sb.png b/app_code/assets/flags/sb.png new file mode 100644 index 0000000..ef529e1 Binary files /dev/null and b/app_code/assets/flags/sb.png differ diff --git a/app_code/assets/flags/sc.png b/app_code/assets/flags/sc.png new file mode 100644 index 0000000..a743a48 Binary files /dev/null and b/app_code/assets/flags/sc.png differ diff --git a/app_code/assets/flags/sd.png b/app_code/assets/flags/sd.png new file mode 100644 index 0000000..117ad21 Binary files /dev/null and b/app_code/assets/flags/sd.png differ diff --git a/app_code/assets/flags/se.png b/app_code/assets/flags/se.png new file mode 100644 index 0000000..b6fcc62 Binary files /dev/null and b/app_code/assets/flags/se.png differ diff --git a/app_code/assets/flags/sg.png b/app_code/assets/flags/sg.png new file mode 100644 index 0000000..65a0422 Binary files /dev/null and b/app_code/assets/flags/sg.png differ diff --git a/app_code/assets/flags/sh.png b/app_code/assets/flags/sh.png new file mode 100644 index 0000000..f77da1f Binary files /dev/null and b/app_code/assets/flags/sh.png differ diff --git a/app_code/assets/flags/si.png b/app_code/assets/flags/si.png new file mode 100644 index 0000000..a837d2c Binary files /dev/null and b/app_code/assets/flags/si.png differ diff --git a/app_code/assets/flags/sj.png b/app_code/assets/flags/sj.png new file mode 100644 index 0000000..b7a42f4 Binary files /dev/null and b/app_code/assets/flags/sj.png differ diff --git a/app_code/assets/flags/sk.png b/app_code/assets/flags/sk.png new file mode 100644 index 0000000..5ed1348 Binary files /dev/null and b/app_code/assets/flags/sk.png differ diff --git a/app_code/assets/flags/sl.png b/app_code/assets/flags/sl.png new file mode 100644 index 0000000..4f8d54e Binary files /dev/null and b/app_code/assets/flags/sl.png differ diff --git a/app_code/assets/flags/sm.png b/app_code/assets/flags/sm.png new file mode 100644 index 0000000..7ce4715 Binary files /dev/null and b/app_code/assets/flags/sm.png differ diff --git a/app_code/assets/flags/sn.png b/app_code/assets/flags/sn.png new file mode 100644 index 0000000..719c1ef Binary files /dev/null and b/app_code/assets/flags/sn.png differ diff --git a/app_code/assets/flags/so.png b/app_code/assets/flags/so.png new file mode 100644 index 0000000..6e784b1 Binary files /dev/null and b/app_code/assets/flags/so.png differ diff --git a/app_code/assets/flags/sr.png b/app_code/assets/flags/sr.png new file mode 100644 index 0000000..9a054f0 Binary files /dev/null and b/app_code/assets/flags/sr.png differ diff --git a/app_code/assets/flags/ss.png b/app_code/assets/flags/ss.png new file mode 100644 index 0000000..5833883 Binary files /dev/null and b/app_code/assets/flags/ss.png differ diff --git a/app_code/assets/flags/st.png b/app_code/assets/flags/st.png new file mode 100644 index 0000000..133edbc Binary files /dev/null and b/app_code/assets/flags/st.png differ diff --git a/app_code/assets/flags/sv.png b/app_code/assets/flags/sv.png new file mode 100644 index 0000000..acd4a36 Binary files /dev/null and b/app_code/assets/flags/sv.png differ diff --git a/app_code/assets/flags/sx.png b/app_code/assets/flags/sx.png new file mode 100644 index 0000000..3e347b0 Binary files /dev/null and b/app_code/assets/flags/sx.png differ diff --git a/app_code/assets/flags/sy.png b/app_code/assets/flags/sy.png new file mode 100644 index 0000000..45655a5 Binary files /dev/null and b/app_code/assets/flags/sy.png differ diff --git a/app_code/assets/flags/sz.png b/app_code/assets/flags/sz.png new file mode 100644 index 0000000..5b413eb Binary files /dev/null and b/app_code/assets/flags/sz.png differ diff --git a/app_code/assets/flags/tc.png b/app_code/assets/flags/tc.png new file mode 100644 index 0000000..698a4cd Binary files /dev/null and b/app_code/assets/flags/tc.png differ diff --git a/app_code/assets/flags/td.png b/app_code/assets/flags/td.png new file mode 100644 index 0000000..b835dc2 Binary files /dev/null and b/app_code/assets/flags/td.png differ diff --git a/app_code/assets/flags/tf.png b/app_code/assets/flags/tf.png new file mode 100644 index 0000000..5189a18 Binary files /dev/null and b/app_code/assets/flags/tf.png differ diff --git a/app_code/assets/flags/tg.png b/app_code/assets/flags/tg.png new file mode 100644 index 0000000..028167a Binary files /dev/null and b/app_code/assets/flags/tg.png differ diff --git a/app_code/assets/flags/th.png b/app_code/assets/flags/th.png new file mode 100644 index 0000000..cd0af74 Binary files /dev/null and b/app_code/assets/flags/th.png differ diff --git a/app_code/assets/flags/tj.png b/app_code/assets/flags/tj.png new file mode 100644 index 0000000..6cb3339 Binary files /dev/null and b/app_code/assets/flags/tj.png differ diff --git a/app_code/assets/flags/tk.png b/app_code/assets/flags/tk.png new file mode 100644 index 0000000..a960307 Binary files /dev/null and b/app_code/assets/flags/tk.png differ diff --git a/app_code/assets/flags/tl.png b/app_code/assets/flags/tl.png new file mode 100644 index 0000000..ba93417 Binary files /dev/null and b/app_code/assets/flags/tl.png differ diff --git a/app_code/assets/flags/tm.png b/app_code/assets/flags/tm.png new file mode 100644 index 0000000..b46f2a2 Binary files /dev/null and b/app_code/assets/flags/tm.png differ diff --git a/app_code/assets/flags/tn.png b/app_code/assets/flags/tn.png new file mode 100644 index 0000000..0d6a976 Binary files /dev/null and b/app_code/assets/flags/tn.png differ diff --git a/app_code/assets/flags/to.png b/app_code/assets/flags/to.png new file mode 100644 index 0000000..ab11e51 Binary files /dev/null and b/app_code/assets/flags/to.png differ diff --git a/app_code/assets/flags/tr.png b/app_code/assets/flags/tr.png new file mode 100644 index 0000000..2b0614c Binary files /dev/null and b/app_code/assets/flags/tr.png differ diff --git a/app_code/assets/flags/tt.png b/app_code/assets/flags/tt.png new file mode 100644 index 0000000..9b4575f Binary files /dev/null and b/app_code/assets/flags/tt.png differ diff --git a/app_code/assets/flags/tv.png b/app_code/assets/flags/tv.png new file mode 100644 index 0000000..8d68ead Binary files /dev/null and b/app_code/assets/flags/tv.png differ diff --git a/app_code/assets/flags/tw.png b/app_code/assets/flags/tw.png new file mode 100644 index 0000000..ec71c10 Binary files /dev/null and b/app_code/assets/flags/tw.png differ diff --git a/app_code/assets/flags/tz.png b/app_code/assets/flags/tz.png new file mode 100644 index 0000000..0c67a2a Binary files /dev/null and b/app_code/assets/flags/tz.png differ diff --git a/app_code/assets/flags/ua.png b/app_code/assets/flags/ua.png new file mode 100644 index 0000000..42b2cde Binary files /dev/null and b/app_code/assets/flags/ua.png differ diff --git a/app_code/assets/flags/ug.png b/app_code/assets/flags/ug.png new file mode 100644 index 0000000..4d040f8 Binary files /dev/null and b/app_code/assets/flags/ug.png differ diff --git a/app_code/assets/flags/um.png b/app_code/assets/flags/um.png new file mode 100644 index 0000000..ed2d8d0 Binary files /dev/null and b/app_code/assets/flags/um.png differ diff --git a/app_code/assets/flags/us.png b/app_code/assets/flags/us.png new file mode 100644 index 0000000..4e47eaa Binary files /dev/null and b/app_code/assets/flags/us.png differ diff --git a/app_code/assets/flags/uy.png b/app_code/assets/flags/uy.png new file mode 100644 index 0000000..7b5670b Binary files /dev/null and b/app_code/assets/flags/uy.png differ diff --git a/app_code/assets/flags/uz.png b/app_code/assets/flags/uz.png new file mode 100644 index 0000000..97b1a53 Binary files /dev/null and b/app_code/assets/flags/uz.png differ diff --git a/app_code/assets/flags/va.png b/app_code/assets/flags/va.png new file mode 100644 index 0000000..dcdc3a7 Binary files /dev/null and b/app_code/assets/flags/va.png differ diff --git a/app_code/assets/flags/vc.png b/app_code/assets/flags/vc.png new file mode 100644 index 0000000..4c13bc2 Binary files /dev/null and b/app_code/assets/flags/vc.png differ diff --git a/app_code/assets/flags/ve.png b/app_code/assets/flags/ve.png new file mode 100644 index 0000000..cc80484 Binary files /dev/null and b/app_code/assets/flags/ve.png differ diff --git a/app_code/assets/flags/vg.png b/app_code/assets/flags/vg.png new file mode 100644 index 0000000..9cd84e2 Binary files /dev/null and b/app_code/assets/flags/vg.png differ diff --git a/app_code/assets/flags/vi.png b/app_code/assets/flags/vi.png new file mode 100644 index 0000000..e9127a8 Binary files /dev/null and b/app_code/assets/flags/vi.png differ diff --git a/app_code/assets/flags/vn.png b/app_code/assets/flags/vn.png new file mode 100644 index 0000000..cbf65d4 Binary files /dev/null and b/app_code/assets/flags/vn.png differ diff --git a/app_code/assets/flags/vu.png b/app_code/assets/flags/vu.png new file mode 100644 index 0000000..5876456 Binary files /dev/null and b/app_code/assets/flags/vu.png differ diff --git a/app_code/assets/flags/wf.png b/app_code/assets/flags/wf.png new file mode 100644 index 0000000..ffd56d4 Binary files /dev/null and b/app_code/assets/flags/wf.png differ diff --git a/app_code/assets/flags/ws.png b/app_code/assets/flags/ws.png new file mode 100644 index 0000000..18c5b86 Binary files /dev/null and b/app_code/assets/flags/ws.png differ diff --git a/app_code/assets/flags/xk.png b/app_code/assets/flags/xk.png new file mode 100644 index 0000000..883b9ea Binary files /dev/null and b/app_code/assets/flags/xk.png differ diff --git a/app_code/assets/flags/ye.png b/app_code/assets/flags/ye.png new file mode 100644 index 0000000..c094f80 Binary files /dev/null and b/app_code/assets/flags/ye.png differ diff --git a/app_code/assets/flags/yt.png b/app_code/assets/flags/yt.png new file mode 100644 index 0000000..6a196cb Binary files /dev/null and b/app_code/assets/flags/yt.png differ diff --git a/app_code/assets/flags/za.png b/app_code/assets/flags/za.png new file mode 100644 index 0000000..110c48d Binary files /dev/null and b/app_code/assets/flags/za.png differ diff --git a/app_code/assets/flags/zm.png b/app_code/assets/flags/zm.png new file mode 100644 index 0000000..b647058 Binary files /dev/null and b/app_code/assets/flags/zm.png differ diff --git a/app_code/assets/flags/zw.png b/app_code/assets/flags/zw.png new file mode 100644 index 0000000..f502027 Binary files /dev/null and b/app_code/assets/flags/zw.png differ diff --git a/app_code/assets/icons/address.png b/app_code/assets/icons/address.png new file mode 100644 index 0000000..db09fe1 Binary files /dev/null and b/app_code/assets/icons/address.png differ diff --git a/app_code/assets/icons/cart.png b/app_code/assets/icons/cart.png new file mode 100644 index 0000000..6f0d739 Binary files /dev/null and b/app_code/assets/icons/cart.png differ diff --git a/app_code/assets/icons/categories.png b/app_code/assets/icons/categories.png new file mode 100644 index 0000000..8e45c13 Binary files /dev/null and b/app_code/assets/icons/categories.png differ diff --git a/app_code/assets/icons/coupons.png b/app_code/assets/icons/coupons.png new file mode 100644 index 0000000..c29a107 Binary files /dev/null and b/app_code/assets/icons/coupons.png differ diff --git a/app_code/assets/icons/delete.png b/app_code/assets/icons/delete.png new file mode 100644 index 0000000..cb960c0 Binary files /dev/null and b/app_code/assets/icons/delete.png differ diff --git a/app_code/assets/icons/favorite.png b/app_code/assets/icons/favorite.png new file mode 100644 index 0000000..b3b12e2 Binary files /dev/null and b/app_code/assets/icons/favorite.png differ diff --git a/app_code/assets/icons/fire.png b/app_code/assets/icons/fire.png new file mode 100644 index 0000000..41ea59e Binary files /dev/null and b/app_code/assets/icons/fire.png differ diff --git a/app_code/assets/icons/help_center.png b/app_code/assets/icons/help_center.png new file mode 100644 index 0000000..162dde2 Binary files /dev/null and b/app_code/assets/icons/help_center.png differ diff --git a/app_code/assets/icons/home.png b/app_code/assets/icons/home.png new file mode 100644 index 0000000..806a997 Binary files /dev/null and b/app_code/assets/icons/home.png differ diff --git a/app_code/assets/icons/login.png b/app_code/assets/icons/login.png new file mode 100644 index 0000000..15da809 Binary files /dev/null and b/app_code/assets/icons/login.png differ diff --git a/app_code/assets/icons/logout.png b/app_code/assets/icons/logout.png new file mode 100644 index 0000000..ab050bb Binary files /dev/null and b/app_code/assets/icons/logout.png differ diff --git a/app_code/assets/icons/next.png b/app_code/assets/icons/next.png new file mode 100644 index 0000000..5755876 Binary files /dev/null and b/app_code/assets/icons/next.png differ diff --git a/app_code/assets/icons/notification.png b/app_code/assets/icons/notification.png new file mode 100644 index 0000000..e70acfa Binary files /dev/null and b/app_code/assets/icons/notification.png differ diff --git a/app_code/assets/icons/orders.png b/app_code/assets/icons/orders.png new file mode 100644 index 0000000..0ae861d Binary files /dev/null and b/app_code/assets/icons/orders.png differ diff --git a/app_code/assets/icons/profile.png b/app_code/assets/icons/profile.png new file mode 100644 index 0000000..7590b38 Binary files /dev/null and b/app_code/assets/icons/profile.png differ diff --git a/app_code/assets/icons/refund.png b/app_code/assets/icons/refund.png new file mode 100644 index 0000000..a6ab3a3 Binary files /dev/null and b/app_code/assets/icons/refund.png differ diff --git a/app_code/assets/icons/search.png b/app_code/assets/icons/search.png new file mode 100644 index 0000000..9bf95df Binary files /dev/null and b/app_code/assets/icons/search.png differ diff --git a/app_code/assets/icons/security.png b/app_code/assets/icons/security.png new file mode 100644 index 0000000..f424f12 Binary files /dev/null and b/app_code/assets/icons/security.png differ diff --git a/app_code/assets/icons/setting.png b/app_code/assets/icons/setting.png new file mode 100644 index 0000000..184d226 Binary files /dev/null and b/app_code/assets/icons/setting.png differ diff --git a/app_code/assets/icons/terms_condition.png b/app_code/assets/icons/terms_condition.png new file mode 100644 index 0000000..1adb40e Binary files /dev/null and b/app_code/assets/icons/terms_condition.png differ diff --git a/app_code/assets/icons/track.png b/app_code/assets/icons/track.png new file mode 100644 index 0000000..a75424c Binary files /dev/null and b/app_code/assets/icons/track.png differ diff --git a/app_code/assets/icons/wallet.png b/app_code/assets/icons/wallet.png new file mode 100644 index 0000000..12e8c49 Binary files /dev/null and b/app_code/assets/icons/wallet.png differ diff --git a/app_code/assets/images/auth_background.png b/app_code/assets/images/auth_background.png new file mode 100644 index 0000000..0a81198 Binary files /dev/null and b/app_code/assets/images/auth_background.png differ diff --git a/app_code/assets/images/landing_img1.png b/app_code/assets/images/landing_img1.png new file mode 100644 index 0000000..94dfedb Binary files /dev/null and b/app_code/assets/images/landing_img1.png differ diff --git a/app_code/assets/images/landing_img2.png b/app_code/assets/images/landing_img2.png new file mode 100644 index 0000000..d619cb9 Binary files /dev/null and b/app_code/assets/images/landing_img2.png differ diff --git a/app_code/assets/images/landing_img3.png b/app_code/assets/images/landing_img3.png new file mode 100644 index 0000000..21d36b6 Binary files /dev/null and b/app_code/assets/images/landing_img3.png differ diff --git a/app_code/assets/images/splash_background.png b/app_code/assets/images/splash_background.png new file mode 100644 index 0000000..a61b878 Binary files /dev/null and b/app_code/assets/images/splash_background.png differ diff --git a/app_code/assets/logos/img.png b/app_code/assets/logos/img.png new file mode 100644 index 0000000..9629e02 Binary files /dev/null and b/app_code/assets/logos/img.png differ diff --git a/app_code/assets/logos/img_logo.png b/app_code/assets/logos/img_logo.png new file mode 100644 index 0000000..1898c02 Binary files /dev/null and b/app_code/assets/logos/img_logo.png differ diff --git a/app_code/assets/logos/img_logo2.png b/app_code/assets/logos/img_logo2.png new file mode 100644 index 0000000..5628825 Binary files /dev/null and b/app_code/assets/logos/img_logo2.png differ diff --git a/app_code/assets/logos/logo.png b/app_code/assets/logos/logo.png new file mode 100644 index 0000000..80f7706 Binary files /dev/null and b/app_code/assets/logos/logo.png differ diff --git a/app_code/assets/logos/logo2x2.png b/app_code/assets/logos/logo2x2.png new file mode 100644 index 0000000..9d822d5 Binary files /dev/null and b/app_code/assets/logos/logo2x2.png differ diff --git a/app_code/assets/logos/logo4x4.png b/app_code/assets/logos/logo4x4.png new file mode 100644 index 0000000..1cbbeb6 Binary files /dev/null and b/app_code/assets/logos/logo4x4.png differ diff --git a/app_code/assets/logos/logo_a.png b/app_code/assets/logos/logo_a.png new file mode 100644 index 0000000..527c009 Binary files /dev/null and b/app_code/assets/logos/logo_a.png differ diff --git a/app_code/devtools_options.yaml b/app_code/devtools_options.yaml new file mode 100644 index 0000000..7e7e7f6 --- /dev/null +++ b/app_code/devtools_options.yaml @@ -0,0 +1 @@ +extensions: diff --git a/app_code/ios/.gitignore b/app_code/ios/.gitignore new file mode 100644 index 0000000..7a7f987 --- /dev/null +++ b/app_code/ios/.gitignore @@ -0,0 +1,34 @@ +**/dgph +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/ephemeral/ +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/app_code/ios/Flutter/AppFrameworkInfo.plist b/app_code/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 0000000..1dc6cf7 --- /dev/null +++ b/app_code/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 13.0 + + diff --git a/app_code/ios/Flutter/Debug.xcconfig b/app_code/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000..ec97fc6 --- /dev/null +++ b/app_code/ios/Flutter/Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "Generated.xcconfig" diff --git a/app_code/ios/Flutter/Release.xcconfig b/app_code/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000..c4855bf --- /dev/null +++ b/app_code/ios/Flutter/Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "Generated.xcconfig" diff --git a/app_code/ios/Podfile b/app_code/ios/Podfile new file mode 100644 index 0000000..e7d7cbb --- /dev/null +++ b/app_code/ios/Podfile @@ -0,0 +1,44 @@ +# Uncomment this line to define a global platform for your project +platform :ios, '13.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_ios_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) +# target 'RunnerTests' do +# inherit! :search_paths +# end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_ios_build_settings(target) + end +end diff --git a/app_code/ios/Podfile.lock b/app_code/ios/Podfile.lock new file mode 100644 index 0000000..f3aaeae --- /dev/null +++ b/app_code/ios/Podfile.lock @@ -0,0 +1,62 @@ +PODS: + - Flutter (1.0.0) + - image_picker_ios (0.0.1): + - Flutter + - open_file_ios (0.0.1): + - Flutter + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + - shared_preferences_foundation (0.0.1): + - Flutter + - FlutterMacOS + - sqflite_darwin (0.0.4): + - Flutter + - FlutterMacOS + - url_launcher_ios (0.0.1): + - Flutter + - webview_flutter_wkwebview (0.0.1): + - Flutter + - FlutterMacOS + +DEPENDENCIES: + - Flutter (from `Flutter`) + - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) + - open_file_ios (from `.symlinks/plugins/open_file_ios/ios`) + - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) + - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) + - sqflite_darwin (from `.symlinks/plugins/sqflite_darwin/darwin`) + - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) + - webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/darwin`) + +EXTERNAL SOURCES: + Flutter: + :path: Flutter + image_picker_ios: + :path: ".symlinks/plugins/image_picker_ios/ios" + open_file_ios: + :path: ".symlinks/plugins/open_file_ios/ios" + path_provider_foundation: + :path: ".symlinks/plugins/path_provider_foundation/darwin" + shared_preferences_foundation: + :path: ".symlinks/plugins/shared_preferences_foundation/darwin" + sqflite_darwin: + :path: ".symlinks/plugins/sqflite_darwin/darwin" + url_launcher_ios: + :path: ".symlinks/plugins/url_launcher_ios/ios" + webview_flutter_wkwebview: + :path: ".symlinks/plugins/webview_flutter_wkwebview/darwin" + +SPEC CHECKSUMS: + Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467 + image_picker_ios: c560581cceedb403a6ff17f2f816d7fea1421fc1 + open_file_ios: 461db5853723763573e140de3193656f91990d9e + path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 + shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 + sqflite_darwin: 5a7236e3b501866c1c9befc6771dfd73ffb8702d + url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe + webview_flutter_wkwebview: 29eb20d43355b48fe7d07113835b9128f84e3af4 + +PODFILE CHECKSUM: d3d44dd8f85904f876a474551ba2cd729dcc2c08 + +COCOAPODS: 1.16.2 diff --git a/app_code/ios/Runner.xcodeproj/project.pbxproj b/app_code/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..1ed7172 --- /dev/null +++ b/app_code/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,552 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + EEC9368FBAEADD081DDEBB97 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D1B75DDA2F21DB82F8F72924 /* Pods_Runner.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 1FDA4156E696DCB23DC7E543 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 3DC0DDB92E53B5B1E644B79A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9615488B0B2899DC05A55BB3 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D1B75DDA2F21DB82F8F72924 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + EEC9368FBAEADD081DDEBB97 /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 32B343C235491AFE8728EBA4 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D1B75DDA2F21DB82F8F72924 /* Pods_Runner.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 716BE699A0DE599313647A2D /* Pods */ = { + isa = PBXGroup; + children = ( + 3DC0DDB92E53B5B1E644B79A /* Pods-Runner.debug.xcconfig */, + 1FDA4156E696DCB23DC7E543 /* Pods-Runner.release.xcconfig */, + 9615488B0B2899DC05A55BB3 /* Pods-Runner.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + 716BE699A0DE599313647A2D /* Pods */, + 32B343C235491AFE8728EBA4 /* Frameworks */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + E7D373E6676267F1CE308AE1 /* [CP] Check Pods Manifest.lock */, + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + 2A58394F0877A81C91A2D462 /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 2A58394F0877A81C91A2D462 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; + E7D373E6676267F1CE308AE1 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = grostore.themetags.com.grostore; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = grostore.themetags.com.grostore; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = grostore.themetags.com.grostore; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/app_code/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/app_code/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/app_code/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/app_code/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/app_code/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/app_code/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/app_code/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/app_code/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/app_code/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/app_code/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/app_code/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..9c12df5 --- /dev/null +++ b/app_code/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_code/ios/Runner.xcworkspace/contents.xcworkspacedata b/app_code/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..21a3cc1 --- /dev/null +++ b/app_code/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/app_code/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/app_code/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/app_code/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/app_code/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/app_code/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/app_code/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/app_code/ios/Runner/AppDelegate.swift b/app_code/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000..b636303 --- /dev/null +++ b/app_code/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import UIKit +import Flutter + +@main +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..e83c3bf --- /dev/null +++ b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,128 @@ +{ + "images":[ + { + "idiom":"iphone", + "size":"20x20", + "scale":"2x", + "filename":"Icon-App-20x20@2x.png" + }, + { + "idiom":"iphone", + "size":"20x20", + "scale":"3x", + "filename":"Icon-App-20x20@3x.png" + }, + { + "idiom":"iphone", + "size":"29x29", + "scale":"1x", + "filename":"Icon-App-29x29@1x.png" + }, + { + "idiom":"iphone", + "size":"29x29", + "scale":"2x", + "filename":"Icon-App-29x29@2x.png" + }, + { + "idiom":"iphone", + "size":"29x29", + "scale":"3x", + "filename":"Icon-App-29x29@3x.png" + }, + { + "idiom":"iphone", + "size":"40x40", + "scale":"2x", + "filename":"Icon-App-40x40@2x.png" + }, + { + "idiom":"iphone", + "size":"40x40", + "scale":"3x", + "filename":"Icon-App-40x40@3x.png" + }, + { + "idiom":"iphone", + "size":"60x60", + "scale":"2x", + "filename":"Icon-App-60x60@2x.png" + }, + { + "idiom":"iphone", + "size":"60x60", + "scale":"3x", + "filename":"Icon-App-60x60@3x.png" + }, + { + "idiom":"iphone", + "size":"76x76", + "scale":"2x", + "filename":"Icon-App-76x76@2x.png" + }, + { + "idiom":"ipad", + "size":"20x20", + "scale":"1x", + "filename":"Icon-App-20x20@1x.png" + }, + { + "idiom":"ipad", + "size":"20x20", + "scale":"2x", + "filename":"Icon-App-20x20@2x.png" + }, + { + "idiom":"ipad", + "size":"29x29", + "scale":"1x", + "filename":"Icon-App-29x29@1x.png" + }, + { + "idiom":"ipad", + "size":"29x29", + "scale":"2x", + "filename":"Icon-App-29x29@2x.png" + }, + { + "idiom":"ipad", + "size":"40x40", + "scale":"1x", + "filename":"Icon-App-40x40@1x.png" + }, + { + "idiom":"ipad", + "size":"40x40", + "scale":"2x", + "filename":"Icon-App-40x40@2x.png" + }, + { + "idiom":"ipad", + "size":"76x76", + "scale":"1x", + "filename":"Icon-App-76x76@1x.png" + }, + { + "idiom":"ipad", + "size":"76x76", + "scale":"2x", + "filename":"Icon-App-76x76@2x.png" + }, + { + "idiom":"ipad", + "size":"83.5x83.5", + "scale":"2x", + "filename":"Icon-App-83.5x83.5@2x.png" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "scale" : "1x", + "filename" : "ItunesArtwork@2x.png" + } + ], + "info":{ + "version":1, + "author":"easyappicon" + } +} diff --git a/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000..80a5769 Binary files /dev/null and b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ diff --git a/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png new file mode 100644 index 0000000..48fa47c Binary files /dev/null and b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 0000000..9cc9992 Binary files /dev/null and b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000..933457b Binary files /dev/null and b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 0000000..c19a79c Binary files /dev/null and b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000..e8b6a0f Binary files /dev/null and b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png new file mode 100644 index 0000000..b98a92e Binary files /dev/null and b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png new file mode 100644 index 0000000..9cc9992 Binary files /dev/null and b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000..a6ea412 Binary files /dev/null and b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 0000000..63071b4 Binary files /dev/null and b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000..63071b4 Binary files /dev/null and b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000..cb5a815 Binary files /dev/null and b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 0000000..cec8bdf Binary files /dev/null and b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png new file mode 100644 index 0000000..782cf97 Binary files /dev/null and b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 0000000..dde050e Binary files /dev/null and b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png new file mode 100644 index 0000000..7a2be39 Binary files /dev/null and b/app_code/ios/Runner/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png differ diff --git a/app_code/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/app_code/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 0000000..0bedcf2 --- /dev/null +++ b/app_code/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/app_code/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/app_code/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 0000000..9da19ea Binary files /dev/null and b/app_code/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png differ diff --git a/app_code/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/app_code/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000..9da19ea Binary files /dev/null and b/app_code/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png differ diff --git a/app_code/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/app_code/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000..9da19ea Binary files /dev/null and b/app_code/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png differ diff --git a/app_code/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/app_code/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000..89c2725 --- /dev/null +++ b/app_code/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/app_code/ios/Runner/Assets.xcassets/iTunesArtwork@1x.png b/app_code/ios/Runner/Assets.xcassets/iTunesArtwork@1x.png new file mode 100644 index 0000000..a669b83 Binary files /dev/null and b/app_code/ios/Runner/Assets.xcassets/iTunesArtwork@1x.png differ diff --git a/app_code/ios/Runner/Assets.xcassets/iTunesArtwork@2x.png b/app_code/ios/Runner/Assets.xcassets/iTunesArtwork@2x.png new file mode 100644 index 0000000..7a2be39 Binary files /dev/null and b/app_code/ios/Runner/Assets.xcassets/iTunesArtwork@2x.png differ diff --git a/app_code/ios/Runner/Assets.xcassets/iTunesArtwork@3x.png b/app_code/ios/Runner/Assets.xcassets/iTunesArtwork@3x.png new file mode 100644 index 0000000..78ace97 Binary files /dev/null and b/app_code/ios/Runner/Assets.xcassets/iTunesArtwork@3x.png differ diff --git a/app_code/ios/Runner/Base.lproj/LaunchScreen.storyboard b/app_code/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..f2e259c --- /dev/null +++ b/app_code/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_code/ios/Runner/Base.lproj/Main.storyboard b/app_code/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f3c2851 --- /dev/null +++ b/app_code/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_code/ios/Runner/Info.plist b/app_code/ios/Runner/Info.plist new file mode 100644 index 0000000..9142f88 --- /dev/null +++ b/app_code/ios/Runner/Info.plist @@ -0,0 +1,51 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Karvon Market + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + grostore + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + + + diff --git a/app_code/ios/Runner/Runner-Bridging-Header.h b/app_code/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000..308a2a5 --- /dev/null +++ b/app_code/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/app_code/ios/build/.last_build_id b/app_code/ios/build/.last_build_id new file mode 100644 index 0000000..45e5769 --- /dev/null +++ b/app_code/ios/build/.last_build_id @@ -0,0 +1 @@ +34b2d4612d26ae891d10a16acce1cdcf \ No newline at end of file diff --git a/app_code/l10n.yaml b/app_code/l10n.yaml new file mode 100644 index 0000000..4e6692e --- /dev/null +++ b/app_code/l10n.yaml @@ -0,0 +1,3 @@ +arb-dir: lib/l10n +template-arb-file: app_en.arb +output-localization-file: app_localizations.dart \ No newline at end of file diff --git a/app_code/lib/api_request.dart b/app_code/lib/api_request.dart new file mode 100644 index 0000000..a7d7c71 --- /dev/null +++ b/app_code/lib/api_request.dart @@ -0,0 +1,112 @@ +import 'dart:convert'; +import 'dart:io'; +import 'package:grostore/helpers/shared_value_helper.dart'; +import 'package:grostore/middlewares/middleware.dart'; +import 'package:http/http.dart' as http; + +class ApiRequest { + static Future post( + {required String url, + required Map header, + required String body, + MiddleWare? middleWare}) async { + try { + Uri uri = Uri.parse(url); + var response = await http.post(uri, body: body, headers: header); + print("Hello Post=== ${response.body}=="); + print("Hello Post=== ${response.statusCode}=="); + if (middleWare != null) { + if (middleWare.next(response.body)) { + return ApiResponse(result: true, body: response.body, statusCode: 200); + } else { + return ApiResponse(result: false,body: "Something went wrong",statusCode: 403); + } + } else { + return ApiResponse(result: true,body: response.body ,statusCode: 200); + } + } on Exception catch (e) { + return ApiResponse(result: false,body: "Something went wrong ${e.toString()}",statusCode: 500); + } + } + + static Future fileReq( + {required String url, + required Map header, + Map? body, + File? file, + MiddleWare? middleWare}) async { + try { + Uri uri = Uri.parse(url); + + var req = http.MultipartRequest("Post",uri); + req.headers.addAll( header); + + + if(file !=null) { + req.files.add(await http.MultipartFile.fromPath("avatar", file.path)); + } + + if(body !=null){ + req.fields.addAll(body); + } + + var tmp = await req.send(); + + var response= await tmp.stream.bytesToString(); + + if (middleWare != null) { + if (middleWare.next(response)) { + return ApiResponse(result: true,body: response,statusCode: 200); + } else { + return ApiResponse(result: false,body: "Something went wrong",statusCode: 403); + } + } else { + return ApiResponse(result: true,body: response ,statusCode: 200); + } + } on Exception catch (e) { + return ApiResponse(result: false,body: "Something went wrong ${e.toString()}",statusCode: 500); + } + } + + static Future get(String url, Map header, + {MiddleWare? middleWare}) async { + try { + Uri uri = Uri.parse(url); + print("Uri== $uri ==="); + var response = await http.get(uri, headers: header); + print("Request==== ${response.request} =="); + print("Body==== ${response.body} =="); + print("Status Info==== ${response.statusCode} =="); + + if(response.statusCode != 500) { + if (middleWare != null) { + if (middleWare.next(response.body)) { + return ApiResponse( + result: true, body: response.body, statusCode: 200); + } else { + return ApiResponse( + result: false, body: "Something went wrong", statusCode: 403); + } + } else { + return ApiResponse(result: true, body: response.body, statusCode: 200); + } + }else{ + access_token.$ = ""; + return ApiResponse( + result: false, body: "Something went wrong", statusCode: 500);; + } + } on Exception catch (e) { + return ApiResponse(result: false, body: "Something went wrong", statusCode: 500); + } + } + + +} + +class ApiResponse { + bool result; + String body; + int statusCode ; + + ApiResponse({required this.result,required this.body,required this.statusCode}); +} diff --git a/app_code/lib/apis/address_api.dart b/app_code/lib/apis/address_api.dart new file mode 100644 index 0000000..2d3f14a --- /dev/null +++ b/app_code/lib/apis/address_api.dart @@ -0,0 +1,161 @@ +import 'dart:convert'; + +import 'package:grostore/api_request.dart'; +import 'package:grostore/configs/app_config.dart'; +import 'package:grostore/helpers/common_functions.dart'; +import 'package:grostore/helpers/shared_value_helper.dart'; +import 'package:grostore/models/cart_response.dart'; +import 'package:grostore/models/common_response.dart'; +import 'package:grostore/models/country_response.dart'; +import 'package:grostore/models/edit_address_response.dart'; +import 'package:grostore/models/order/order_summery_response.dart'; +import 'package:grostore/models/response_model.dart'; +import 'package:grostore/models/state_response.dart'; +import 'package:grostore/models/user/addresses_response.dart'; + +import '../models/city_response.dart'; + +class AddressApi{ + + static Future> addAddress({required int countryId,required int stateId,required int cityId,required int isDefault,required String address}) + async{ + var url = "${AppConfig.apiUrl}/address/store"; + Map header = getCommonHeader(); + header.addAll({ + "Authorization":"Bearer ${access_token.$}" + }); + var postBody = jsonEncode({ + "country_id":countryId, + "state_id":stateId, + "city_id":cityId, + "is_default":isDefault, + "address":address + }); + + ApiResponse response = await ApiRequest.post(body: postBody, url: url,header: header); + if(response.result){ + return ResponseModel(response.statusCode,commonResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode, CommonResponse(result: false, message: 'Failed')); + } + } + + + static Future> updateAddress({required int id,required int countryId,required int stateId,required int cityId,required int isDefault,required String address}) + async{ + var url = "${AppConfig.apiUrl}/address/update"; + Map header = getCommonHeader(); + header.addAll({ + "Authorization":"Bearer ${access_token.$}" + }); + var postBody = jsonEncode({ + "id":id, + "country_id":countryId, + "state_id":stateId, + "city_id":cityId, + "is_default":isDefault, + "address":address + }); + + ApiResponse response = await ApiRequest.post(body: postBody, url: url,header: header); + if(response.result){ + return ResponseModel(response.statusCode,commonResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode, CommonResponse(result: false, message: 'Failed')); + } + } + + static Future> deleteAddress({required int id}) + async{ + var url = "${AppConfig.apiUrl}/address/delete/$id"; + Map header = getCommonHeader(); + header.addAll({ + "Authorization":"Bearer ${access_token.$}" + }); + + ApiResponse response = await ApiRequest.get( url, header); + if(response.result){ + return ResponseModel(response.statusCode,commonResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode, CommonResponse(result: false, message: 'Failed')); + } + } + + + static Future> getAddresses()async{ + var url = "${AppConfig.apiUrl}/address"; + Map header = getCommonHeader(); + header.addAll({ + "Authorization":"Bearer ${access_token.$}" + }); + + ApiResponse response = await ApiRequest.get(url, header); + if(response.result){ + return ResponseModel(response.statusCode,addressesResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode,AddressesResponse(data: [])); + } + } + + static Future> editAddresses(id)async{ + var url = "${AppConfig.apiUrl}/address/edit/$id"; + Map header = getCommonHeader(); + header.addAll({ + "Authorization":"Bearer ${access_token.$}" + }); + print(url.toString()); + ApiResponse response = await ApiRequest.get(url, header); + if(response.result){ + return ResponseModel(response.statusCode,editAddressResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode,EditAddressResponse(data: Data.fromJson({}), result: false, status: 500)); + } + } + + static Future> getCountries()async{ + var url = "${AppConfig.apiUrl}/address/countries"; + Map header = getCommonHeader(); + header.addAll({ + "Authorization":"Bearer ${access_token.$}" + }); + + ApiResponse response = await ApiRequest.get(url, header); + print(response.body); + if(response.result){ + return ResponseModel(response.statusCode,countryResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode,CountryResponse(data: [])); + } + } + + static Future> getState(id)async{ + var url = "${AppConfig.apiUrl}/address/states?country_id=$id"; + Map header = getCommonHeader(); + header.addAll({ + "Authorization":"Bearer ${access_token.$}" + }); + + ApiResponse response = await ApiRequest.get(url, header); + if(response.result){ + return ResponseModel(response.statusCode,stateResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode,StateResponse(data: [])); + } + } + + static Future> getCity(id)async{ + var url = "${AppConfig.apiUrl}/address/cities?state_id=$id"; + Map header = getCommonHeader(); + header.addAll({ + "Authorization":"Bearer ${access_token.$}" + }); + + ApiResponse response = await ApiRequest.get(url, header); + if(response.result){ + return ResponseModel(response.statusCode,cityResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode,CityResponse(data: [])); + } + } + +} \ No newline at end of file diff --git a/app_code/lib/apis/auth_api.dart b/app_code/lib/apis/auth_api.dart new file mode 100644 index 0000000..cbe2fe5 --- /dev/null +++ b/app_code/lib/apis/auth_api.dart @@ -0,0 +1,133 @@ +import 'package:flutter/cupertino.dart'; +import 'package:grostore/api_request.dart'; +import 'package:grostore/configs/app_config.dart'; +import 'package:grostore/helpers/route.dart'; +import 'package:grostore/helpers/shared_value_helper.dart'; +import 'package:grostore/middlewares/banned_user_middleware.dart'; +import 'package:grostore/models/auth/login_response_model.dart'; +import 'package:grostore/models/auth/registration_response_model.dart'; +import 'package:grostore/models/auth/token_check_response.dart'; +import 'package:grostore/models/common/user_info.dart'; +import 'package:grostore/screens/auth/login.dart'; + +class AuthApi{ + + /// Login +static Future login(String requestBody,BuildContext context)async{ + var url = "${AppConfig.apiUrl}/login"; + Map header = { + "Accept": "application/json", + "Content-Type": "application/json", + "App-Language": app_language.$, + }; + ApiResponse response = await ApiRequest.post(url:url, header:header,body: requestBody,middleWare:BannedMiddleware(context)); + debugPrint("Respons:::${response.body}:::"); + if(response.result){ + return loginResponseFromJson(response.body); + }else{ + return loginResponseDefaultValue(); + } + } + + /// Token chack +static Future tokenCheck(BuildContext context)async{ + var url = "${AppConfig.apiUrl}/token-check"; + Map header = { + "Accept": "application/json", + "Content-Type": "application/json", + "App-Language": app_language.$, + "Authorization": "Bearer ${access_token.$}", + }; + print(access_token.$); + ApiResponse response = await ApiRequest.get(url, header,middleWare:BannedMiddleware(context)); + debugPrint(response.body); + if(response.result){ + return tokenCheckResponseFromJson(response.body); + }else + // if(response.statusCode != 200){ + // access_token.$ = ""; + // MakeRoute.goAndRemoveAll(context, Login()); + // }else + { + return TokenCheckResponse(result: false, user: UserInfo.init()); + } + } + + // logout +static Future logout(BuildContext context)async{ + var url = "${AppConfig.apiUrl}/logout"; + Map header = { + "Accept": "application/json", + "Content-Type": "application/json", + "App-Language": app_language.$, + "Authorization": "Bearer ${access_token.$}", + }; + + print("LogoOUt::: $url ::"); + ApiResponse response = await ApiRequest.get(url, header,middleWare:BannedMiddleware(context)); + debugPrint(response.body); + if(response.result){ + return tokenCheckResponseFromJson(response.body); + }else{ + return TokenCheckResponse(result: false, user: UserInfo.init()); + } + } + + /// Regster +static Future registration(BuildContext context,String postBody)async{ + var url = "${AppConfig.apiUrl}/register"; + Map header = { + "Accept": "application/json", + "Content-Type": "application/json", + "App-Language": app_language.$ + }; + ApiResponse response = await ApiRequest.post(url:url, header:header, body: postBody, middleWare:BannedMiddleware(context)); + + debugPrint("Register response:: ${response.body} ::"); + if(response.result){ + return registrationResFromJson(response.body); + }else{ + return registrationResponsesDefault(); + } + } + + /// Forget password +static Future forgetPassword(BuildContext context,String postBody)async{ + var url = "${AppConfig.apiUrl}/forgotPassword"; + Map header = { + "Accept": "application/json", + "Content-Type": "application/json", + "App-Language": app_language.$ + }; + print("}} $url {{"); + ApiResponse response = await ApiRequest.post(url:url, header:header, body: postBody,middleWare:BannedMiddleware(context)); + debugPrint("Status Info}} ${response.result} {{"); + // debugPrint("}} ${response.body} {{"); + if(response.result){ + return registrationRespFromJson(response.body); + }else{ + return registrationRespDefault(); + } + } + + /// Otp + static Future forgetOTP(BuildContext context, String postBody)async{ + var url = "${AppConfig.apiUrl}/verify"; + Map header = { + "Accept": "application/json", + "Content-Type": "application/json", + "App-Language": app_language.$ + }; + print("URl:: $url ::"); + ApiResponse response = await ApiRequest.post(url: url, header: header, body: postBody); + debugPrint("Otp::: ${response.body} :::"); + if(response.result){ + return registrationResponseFromJson(response.body); + }else{ + return registrationResponseDefault(); + } + } + + + +} \ No newline at end of file diff --git a/app_code/lib/apis/banners_api.dart b/app_code/lib/apis/banners_api.dart new file mode 100644 index 0000000..f621325 --- /dev/null +++ b/app_code/lib/apis/banners_api.dart @@ -0,0 +1,26 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/api_request.dart'; +import 'package:grostore/configs/app_config.dart'; +import 'package:grostore/helpers/shared_value_helper.dart'; +import 'package:grostore/models/home_banner_response.dart'; +import 'package:grostore/models/response_model.dart'; + + +class BannersApi{ + static Future> homeBanner(BuildContext context)async{ + var url = "${AppConfig.apiUrl}/banner/home"; + Map header = { + "Accept": "application/json", + "Content-Type": "application/json", + "App-Language": app_language.$ + }; + ApiResponse response = await ApiRequest.get(url, header); + debugPrint(response.body); + if(response.result){ + return ResponseModel(response.statusCode,homeBannerResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode,HomeBannerResponse(data: [])); + } + } + +} \ No newline at end of file diff --git a/app_code/lib/apis/cart_api.dart b/app_code/lib/apis/cart_api.dart new file mode 100644 index 0000000..626af5d --- /dev/null +++ b/app_code/lib/apis/cart_api.dart @@ -0,0 +1,89 @@ +import 'dart:convert'; + +import 'package:grostore/api_request.dart'; +import 'package:grostore/configs/app_config.dart'; +import 'package:grostore/helpers/common_functions.dart'; +import 'package:grostore/helpers/shared_value_helper.dart'; +import 'package:grostore/models/cart_response.dart'; +import 'package:grostore/models/response_model.dart'; + +class CartApi{ + static Future> carts()async{ + var url = "${AppConfig.apiUrl}/carts"; + Map header = getCommonHeader(); + header.addAll({ + "Authorization":"Bearer ${access_token.$}" + }); + header.addAll(getCurrencyHeader()); + print(header); + ApiResponse response = await ApiRequest.get(url, header); + print(response.body); + if(response.result){ + return ResponseModel(response.statusCode,cartResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode,CartResponse(result: false, message: '', carts: [], cartCount: 0, subTotal: '0.0', total: '0.0', couponDiscount: '')); + } + } + + static Future> addToCart({required variantId,required int qty})async{ + var url = "${AppConfig.apiUrl}/carts/add"; + Map header = getCommonHeader(); + header.addAll(getCurrencyHeader()); + header.addAll({ + "Authorization":"Bearer ${access_token.$}" + }); + var postBody = jsonEncode({ + "product_variation_id":variantId, + "quantity":qty + }); + print(header); + print(postBody); + + + ApiResponse response = await ApiRequest.post(body: postBody, url: url,header: header); + if(response.result){ + return ResponseModel(response.statusCode,cartResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode, CartResponse(result: false, message: '', carts: [], cartCount: 0, subTotal: '0.0', total: '0.0', couponDiscount: '')); + } + } + + static Future> couponApply({required code})async{ + var url = "${AppConfig.apiUrl}/coupons/coupon-apply"; + Map header = getCommonHeader(); + header.addAll(getCurrencyHeader()); + header.addAll({ + "Authorization":"Bearer ${access_token.$}" + }); + var postBody = jsonEncode({ + "code":"$code" + }); + + ApiResponse response = await ApiRequest.post(body: postBody, url: url,header: header); + if(response.result){ + return ResponseModel(response.statusCode,cartResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode,CartResponse(result: false, message: '', carts: [], cartCount: 0, subTotal: '0.0', total: '0.0', couponDiscount: '')); + } + } + static Future> cartUpdate({required id,required String action})async{ + var url = "${AppConfig.apiUrl}/carts/update"; + Map header = getCommonHeader(); + header.addAll(getCurrencyHeader()); + header.addAll({ + "Authorization":"Bearer ${access_token.$}" + }); + var postBody = jsonEncode({ + "id":id, + "action":action + }); + + ApiResponse response = await ApiRequest.post(body: postBody, url: url,header: header); + if(response.result){ + return ResponseModel(response.statusCode,cartResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode,CartResponse(result: false, message: '', carts: [], cartCount: 0, subTotal: '0.0', total: '0.0', couponDiscount: '')); + } + } + +} \ No newline at end of file diff --git a/app_code/lib/apis/category_api.dart b/app_code/lib/apis/category_api.dart new file mode 100644 index 0000000..82177ca --- /dev/null +++ b/app_code/lib/apis/category_api.dart @@ -0,0 +1,42 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/api_request.dart'; +import 'package:grostore/configs/app_config.dart'; +import 'package:grostore/helpers/shared_value_helper.dart'; +import 'package:grostore/models/response_model.dart'; +import 'package:grostore/models/category_response.dart'; + +class CategoryApi{ + static Future> topCategory()async{ + var url = "${AppConfig.apiUrl}/category/top-category"; + Map header = { + "Accept": "application/json", + "Content-Type": "application/json", + "App-Language": app_language.$ + }; + ApiResponse response = await ApiRequest.get(url, header); + + if(response.result){ + return ResponseModel(response.statusCode,categoryResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode,categoryResponseFromJson("")); + } + + } + static Future> getCategories(page)async{ + var url = "${AppConfig.apiUrl}/category/all?page=$page"; + Map header = { + "Accept": "application/json", + "Content-Type": "application/json", + "App-Language": app_language.$ + }; + print(url); + ApiResponse response = await ApiRequest.get(url, header); + + if(response.result){ + return ResponseModel(response.statusCode,categoryResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode,categoryResponseFromJson("")); + } + + } +} \ No newline at end of file diff --git a/app_code/lib/apis/coupons_api.dart b/app_code/lib/apis/coupons_api.dart new file mode 100644 index 0000000..dcde96f --- /dev/null +++ b/app_code/lib/apis/coupons_api.dart @@ -0,0 +1,32 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/api_request.dart'; +import 'package:grostore/configs/app_config.dart'; +import 'package:grostore/helpers/common_functions.dart'; +import 'package:grostore/helpers/shared_value_helper.dart'; +import 'package:grostore/models/coupon_response.dart'; +import 'package:grostore/models/home_banner_response.dart'; +import 'package:grostore/models/response_model.dart'; + + +class CouponsApi{ + static Future> getCoupons()async{ + var url = "${AppConfig.apiUrl}/coupons"; + Map header = { + "Accept": "application/json", + "Content-Type": "application/json", + "App-Language": app_language.$ + }; + header.addAll({ + "Authorization":"Bearer ${access_token.$}" + }); + header.addAll(getCurrencyHeader()); + ApiResponse response = await ApiRequest.get(url, header); + debugPrint(response.body); + if(response.result){ + return ResponseModel(response.statusCode,couponResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode,CouponResponse(data: [])); + } + } + +} \ No newline at end of file diff --git a/app_code/lib/apis/currency_api.dart b/app_code/lib/apis/currency_api.dart new file mode 100644 index 0000000..15664a9 --- /dev/null +++ b/app_code/lib/apis/currency_api.dart @@ -0,0 +1,23 @@ +import 'package:grostore/api_request.dart'; +import 'package:grostore/configs/app_config.dart'; +import 'package:grostore/helpers/shared_value_helper.dart'; +import 'package:grostore/models/currency_response.dart'; +import 'package:grostore/models/response_model.dart'; + +class CurrencyApi { + Future> getList() async { + var url = "${AppConfig.apiUrl}/currencies"; + Map header = { + "Accept": "application/json", + "Content-Type": "application/json", + "App-Language": app_language.$, + }; + ApiResponse response = await ApiRequest.get(url, header); + + if (response.result) { + return ResponseModel(response.statusCode,currencyResponseFromJson(response.body)); + } else { + return ResponseModel(response.statusCode,CurrencyResponse(data: [])); + } + } +} diff --git a/app_code/lib/apis/language_api.dart b/app_code/lib/apis/language_api.dart new file mode 100644 index 0000000..5054502 --- /dev/null +++ b/app_code/lib/apis/language_api.dart @@ -0,0 +1,23 @@ +import 'package:grostore/api_request.dart'; +import 'package:grostore/configs/app_config.dart'; +import 'package:grostore/helpers/shared_value_helper.dart'; +import 'package:grostore/models/language_response.dart'; +import 'package:grostore/models/response_model.dart'; + +class LanguageApi{ + static Future> getLanguages()async{ + var url = "${AppConfig.apiUrl}/languages"; + Map header = { + "Accept": "application/json", + "Content-Type": "application/json", + "App-Language": app_language.$ + }; + ApiResponse response = await ApiRequest.get(url, header); + if(response.statusCode== 200 && response.result){ + return ResponseModel(response.statusCode,languageResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode,languageResponseFromJson("")); + } + } + +} \ No newline at end of file diff --git a/app_code/lib/apis/locations_api.dart b/app_code/lib/apis/locations_api.dart new file mode 100644 index 0000000..781cc53 --- /dev/null +++ b/app_code/lib/apis/locations_api.dart @@ -0,0 +1,27 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/api_request.dart'; +import 'package:grostore/configs/app_config.dart'; +import 'package:grostore/helpers/shared_value_helper.dart'; +import 'package:grostore/models/home_banner_response.dart'; +import 'package:grostore/models/locations_response.dart'; +import 'package:grostore/models/response_model.dart'; + + +class LocationApi{ + static Future> getLocations(BuildContext context)async{ + var url = "${AppConfig.apiUrl}/locations"; + Map header = { + "Accept": "application/json", + "Content-Type": "application/json", + "App-Language": app_language.$ + }; + ApiResponse response = await ApiRequest.get(url, header); + + if(response.result){ + return ResponseModel(response.statusCode,locationsResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode, LocationsResponse(data: [])); + } + } + +} \ No newline at end of file diff --git a/app_code/lib/apis/order_api.dart b/app_code/lib/apis/order_api.dart new file mode 100644 index 0000000..5711b7d --- /dev/null +++ b/app_code/lib/apis/order_api.dart @@ -0,0 +1,264 @@ +import 'dart:convert'; + +import 'package:grostore/api_request.dart'; +import 'package:grostore/configs/app_config.dart'; +import 'package:grostore/custom_classes/system_data.dart'; +import 'package:grostore/helpers/common_functions.dart'; +import 'package:grostore/helpers/shared_value_helper.dart'; +import 'package:grostore/models/cart_response.dart'; +import 'package:grostore/models/logistics_response.dart'; +import 'package:grostore/models/order/order_details_response.dart'; +import 'package:grostore/models/order/track_order_response.dart'; +import 'package:grostore/models/response_model.dart'; +import 'package:grostore/models/order/order_summery_response.dart'; +import 'package:grostore/models/order/orders_response.dart'; +import 'package:grostore/models/order_create_response.dart'; +import 'package:grostore/models/payment_types_response.dart'; +import 'package:grostore/models/time_slote_response.dart'; + +class OrderApi{ + + static Future> getOrders(key,page)async{ + var url = "${AppConfig.apiUrl}/customer-order-history?status=$key&page=$page"; + print("H5:::] $url [::::"); + Map header = getCommonHeader(); + header.addAll({ + "Authorization":"Bearer ${access_token.$}" + }); + header.addAll(getCurrencyHeader()); + + ApiResponse response = await ApiRequest.get(url, header); + + if(response.result){ + return ResponseModel(response.statusCode,ordersResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode,OrdersResponse.init()); + } + } + + static Future> getDetails({required code})async{ + var url = "${AppConfig.apiUrl}/order/invoice/$code"; + Map header = getCommonHeader(); + header.addAll({ + "Authorization":"Bearer ${access_token.$}" + }); + header.addAll(getCurrencyHeader()); + ApiResponse response = await ApiRequest.get(url, header,); + + if(response.result){ + return ResponseModel(response.statusCode,orderDetailsResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode,orderDetailsResponseFromJson("")); + } + } + + static Future> getSummery({required logistic_zone_id})async{ + var url = "${AppConfig.apiUrl}/order/summery"; + Map header = getCommonHeader(); + header.addAll({ + "Authorization":"Bearer ${access_token.$}" + }); + header.addAll(getCurrencyHeader()); + header.addAll(getCouponHeader()); + + var postBody = jsonEncode({ + "logistic_zone_id":logistic_zone_id + }); + ApiResponse response = await ApiRequest.post(url:url, header:header,body: postBody); +print(response.body); + if(response.result){ + return ResponseModel(response.statusCode,orderSummeryResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode,OrderSummeryResponse(subTotal: "", tax: "", shippingCharge: "", isFreeShipping:false, couponDiscount: "", total: "")); + } + } + + static Future> getLogistics({required cityId})async{ + var url = "${AppConfig.apiUrl}/logistic-by-city"; + Map header = getCommonHeader(); + header.addAll({ + "Authorization":"Bearer ${access_token.$}" + }); + var postBody = jsonEncode({ + "city_id":cityId + }); + ApiResponse response = await ApiRequest.post(url:url, header:header,body: postBody); +print(response.body); + if(response.result){ + return ResponseModel(response.statusCode,logisticsResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode,LogisticsResponse(data: [])); + } + } + + static Future> createOrder({ + required shippingId, + required billingId, + required phone, + required alternativePhone, + required logisticZoneId, + required tips, + required shippingDeliveryType, + required timeslot, + required scheduledData, + required paymentType + })async{ + var url = "${AppConfig.apiUrl}/order/store"; + Map header = getCommonHeader(); + print("Url==: $url ;=="); + print("BearerToken==: ${access_token.$} ;=="); + header.addAll({ + "Authorization":"Bearer ${access_token.$}" + }); + + // header.addAll(getCouponHeader()); + // header.addAll(getCurrencyHeader()); + + var postBody = jsonEncode({ + "shipping_address_id":shippingId, + "billing_address_id":billingId, + "phone":phone, + "alternative_phone":alternativePhone, + "chosen_logistic_zone_id":logisticZoneId, + "tips":tips, + "shipping_delivery_type":shippingDeliveryType, + "timeslot":timeslot, + "scheduled_date":scheduledData, + "payment_method": paymentType, + }); + + ApiResponse response = await ApiRequest.post(url:url, header:header,body: postBody); + print("::: $postBody :::"); + print("Order::: ${response.body}"); + print("Order::: ${response.statusCode}"); + if(response.result == true){ + return ResponseModel(response.statusCode,orderCreateResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode,OrderCreateResponse.init()); + } + } + + static Future> createOrderByCOD({required shippingId, + required billingId, + required phone, + required alternativePhone, + required logisticZoneId, + required tips, + required shippingDeliveryType, + required timeslot, + required scheduledData + })async{ + var url = "${AppConfig.apiUrl}/order/cod"; + Map header = getCommonHeader(); + header.addAll({ + "Authorization":"Bearer ${access_token.$}" + }); + header.addAll(getCouponHeader()); + header.addAll(getCurrencyHeader()); + var postBody = jsonEncode({ + "shipping_address_id":shippingId, + "billing_address_id":billingId, + "phone":phone, + "alternative_phone":alternativePhone, + "chosen_logistic_zone_id":logisticZoneId, + "tips":tips, + "shipping_delivery_type":shippingDeliveryType, + "timeslot":timeslot, + "scheduled_date":scheduledData, + + }); + ApiResponse response = await ApiRequest.post(url:url, header:header,body: postBody); +print(response.body); + if(response.result){ + return ResponseModel(response.statusCode,orderCreateResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode,OrderCreateResponse.init()); + } + } + + static Future> createOrderByWallet({required shippingId, + required billingId, + required phone, + required alternativePhone, + required logisticZoneId, + required tips, + required shippingDeliveryType, + required timeslot, + required scheduledData + })async{ + var url = "${AppConfig.apiUrl}/order/wallet"; + Map header = getCommonHeader(); + header.addAll({ + "Authorization":"Bearer ${access_token.$}" + }); + header.addAll(getCouponHeader()); + header.addAll(getCurrencyHeader()); + var postBody = jsonEncode({ + "shipping_address_id":shippingId, + "billing_address_id":billingId, + "phone":phone, + "alternative_phone":alternativePhone, + "chosen_logistic_zone_id":logisticZoneId, + "tips":tips, + "shipping_delivery_type":shippingDeliveryType, + "timeslot":timeslot, + "scheduled_date":scheduledData, + + }); + ApiResponse response = await ApiRequest.post(url:url, header:header,body: postBody); +print(response.body); + if(response.result){ + return ResponseModel(response.statusCode,orderCreateResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode,OrderCreateResponse.init()); + } + } + + static Future> getTimeSlot()async{ + var url = "${AppConfig.apiUrl}/time-slot"; + Map header = getCommonHeader(); + header.addAll(getCurrencyHeader()); + print(":: $url ::"); + ApiResponse response = await ApiRequest.get(url, header); + + print("TimeSlot== ${response.statusCode}"); + print("TimeSlot== ${response.body}"); + + if(response.result){ + return ResponseModel(response.statusCode,timeSlotResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode,TimeSlotResponse(days: 1,timeSlots: [])); + } + } + + static Future>> getPaymentTypes()async{ + var url = "${AppConfig.apiUrl}/payment-types"; + Map header = getCommonHeader(); + header.addAll(getCurrencyHeader()); + ApiResponse response = await ApiRequest.get( url, header); + if(response.result){ + return ResponseModel(response.statusCode,paymentTypesResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode,[]); + } + } + + static Future> trackOrder(id)async{ + var url = "${AppConfig.apiUrl}/order/track-order?code=$id"; + Map header = getCommonHeader(); + header.addAll({ + "Authorization":"Bearer ${access_token.$}" + }); + header.addAll(getCurrencyHeader()); + ApiResponse response = await ApiRequest.get( url, header); + print(response.body); + if(response.result){ + return ResponseModel(response.statusCode,trackOrderResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode,trackOrderResponseFromJson('')); + } + } + + + +} \ No newline at end of file diff --git a/app_code/lib/apis/page_api.dart b/app_code/lib/apis/page_api.dart new file mode 100644 index 0000000..0cde68d --- /dev/null +++ b/app_code/lib/apis/page_api.dart @@ -0,0 +1,27 @@ + + +import 'package:grostore/api_request.dart'; +import 'package:grostore/configs/app_config.dart'; +import 'package:grostore/helpers/common_functions.dart'; +import 'package:grostore/models/page_response.dart'; +import 'package:grostore/models/response_model.dart'; + +class PageApi{ + + static Future> getPage({required String slug}) + async{ + var url = "${AppConfig.apiUrl}/pages/$slug"; + Map header = getCommonHeader(); + + + ApiResponse response = await ApiRequest.get( url, header); + if(response.result){ + return ResponseModel(response.statusCode,pageResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode, pageResponseFromJson("")); + } + } + + + +} \ No newline at end of file diff --git a/app_code/lib/apis/product_api.dart b/app_code/lib/apis/product_api.dart new file mode 100644 index 0000000..26b6eed --- /dev/null +++ b/app_code/lib/apis/product_api.dart @@ -0,0 +1,95 @@ +import 'dart:convert'; + +import 'package:flutter/material.dart'; +import 'package:grostore/api_request.dart'; +import 'package:grostore/configs/app_config.dart'; +import 'package:grostore/custom_classes/system_data.dart'; +import 'package:grostore/helpers/common_functions.dart'; +import 'package:grostore/helpers/shared_value_helper.dart'; +import 'package:grostore/models/response_model.dart'; +import 'package:grostore/models/product_details_response.dart'; +import 'package:grostore/models/product_mini_response.dart'; + +class ProductApi { + static Future> getAllProducts({ + String? categoryId='',min_price='',max_price='',search='',page + }) async { + var url = "${AppConfig.apiUrl}/products?page=$page&search=$search&min_price=$min_price&max_price=$max_price&category_id=$categoryId"; + Map header = { + "Accept": "application/json", + "Content-Type": "application/json", + "App-Language": app_language.$, + "Stock-Location-Id": stock_location_id.$ + }; + print("Url2:::$url:::"); + header.addAll(getCurrencyHeader()); + ApiResponse response = await ApiRequest.get(url, header); + print("Response::=== ${response.body}====="); + if (response.result) { + print("Respnse::=== ${response.body}====="); + return ResponseModel( + response.statusCode, + productMiniResponseFromJson(response.body)); + } else { + return ResponseModel(response.statusCode, ProductMiniResponse(data: [])); + } + } + + static Future> bestSelling( + BuildContext context) async { + var url = "${AppConfig.apiUrl}/products/best-selling"; + Map header = { + "Accept": "application/json", + "Content-Type": "application/json", + "App-Language": app_language.$, + "Stock-Location-Id": stock_location_id.$ + }; + header.addAll(getCurrencyHeader()); + ApiResponse response = await ApiRequest.get(url, header); + if (response.result) { + return ResponseModel( + response.statusCode, productMiniResponseFromJson(response.body)); + } else { + return ResponseModel(response.statusCode, ProductMiniResponse(data: [])); + } + } + + static Future> relatedProducts( + BuildContext context, String slug) async { + var url = "${AppConfig.apiUrl}/products/related"; + var postBody = jsonEncode({"slug": slug}); + print("Releted:: ${postBody} ::"); + Map header = { + "Accept": "application/json", + "Content-Type": "application/json", + "App-Language": app_language.$ + }; + header.addAll(getCurrencyHeader()); + ApiResponse response = + await ApiRequest.post(url: url, header: header, body: postBody); + if (response.result) { + return ResponseModel( + response.statusCode, productMiniResponseFromJson(response.body)); + } else { + return ResponseModel(response.statusCode, ProductMiniResponse(data: [])); + } + } + + static Future> details( + BuildContext context, String slug) async { + var url = "${AppConfig.apiUrl}/products/$slug"; + Map header = getCommonHeader(); + // header.addAll(getCurrencyHeader()); + ApiResponse response = await ApiRequest.get(url, header); + print("Details::: ${response.body}::"); + if (response.result) { + return ResponseModel( + response.statusCode, productDetailsResponseFromJson(response.body)); + } else { + return ResponseModel( + response.statusCode, + ProductDetailsResponse( + result: false, data: ProductDetailsInfo.init(), status: 400)); + } + } +} diff --git a/app_code/lib/apis/refund_api.dart b/app_code/lib/apis/refund_api.dart new file mode 100644 index 0000000..4fea5ba --- /dev/null +++ b/app_code/lib/apis/refund_api.dart @@ -0,0 +1,65 @@ +import 'dart:convert'; + +import 'package:flutter/material.dart'; +import 'package:grostore/api_request.dart'; +import 'package:grostore/configs/app_config.dart'; +import 'package:grostore/helpers/common_functions.dart'; +import 'package:grostore/helpers/shared_value_helper.dart'; +import 'package:grostore/models/common_response.dart'; +import 'package:grostore/models/coupon_response.dart'; +import 'package:grostore/models/home_banner_response.dart'; +import 'package:grostore/models/refund_response.dart'; +import 'package:grostore/models/response_model.dart'; +import 'package:grostore/models/wallet_history_response.dart'; + + +class RefundApi{ + static Future> getRefundHistory(page)async{ + var url = "${AppConfig.apiUrl}/refunds?page=$page"; + Map header = { + "Accept": "application/json", + "Content-Type": "application/json", + "App-Language": app_language.$ + }; + header.addAll({ + "Authorization":"Bearer ${access_token.$}" + }); + header.addAll(getCurrencyHeader()); + ApiResponse response = await ApiRequest.get(url, header); + debugPrint(response.body); + if(response.statusCode== 200 && response.result){ + return ResponseModel(response.statusCode,refundResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode,refundResponseFromJson("")); + } + } + + static Future> refundRequest(order_item_id,reason)async{ + var url = "${AppConfig.apiUrl}/refund/request"; + Map header = { + "Accept": "application/json", + "Content-Type": "application/json", + "App-Language": app_language.$ + }; + header.addAll({ + "Authorization":"Bearer ${access_token.$}" + }); + + var postBody = jsonEncode({ + "order_item_id":order_item_id, + "refund_reason":reason + }); + + + + header.addAll(getCurrencyHeader()); + ApiResponse response = await ApiRequest.post(url:url, body: postBody,header:header); + debugPrint(response.body); + if(response.statusCode== 200 && response.result){ + return ResponseModel(response.statusCode,commonResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode,commonResponseFromJson("")); + } + } + +} \ No newline at end of file diff --git a/app_code/lib/apis/setting_api.dart b/app_code/lib/apis/setting_api.dart new file mode 100644 index 0000000..c4fe331 --- /dev/null +++ b/app_code/lib/apis/setting_api.dart @@ -0,0 +1,46 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/api_request.dart'; +import 'package:grostore/configs/app_config.dart'; +import 'package:grostore/helpers/common_functions.dart'; +import 'package:grostore/helpers/shared_value_helper.dart'; +import 'package:grostore/models/coupon_response.dart'; +import 'package:grostore/models/help_center_response.dart'; +import 'package:grostore/models/home_banner_response.dart'; +import 'package:grostore/models/refund_response.dart'; +import 'package:grostore/models/response_model.dart'; +import 'package:grostore/models/setting_response.dart'; +import 'package:grostore/models/wallet_history_response.dart'; + + +class SettingApi{ + static Future> getSettings()async{ + var url = "${AppConfig.apiUrl}/settings"; + Map header = { + "Accept": "application/json", + "Content-Type": "application/json", + "App-Language": app_language.$ + }; + ApiResponse response = await ApiRequest.get(url, header); + if(response.statusCode== 200 && response.result){ + return ResponseModel(response.statusCode,settingResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode,settingResponseFromJson("")); + } + } + + static Future> getHelpCenter()async{ + var url = "${AppConfig.apiUrl}/settings/help-center"; + Map header = { + "Accept": "application/json", + "Content-Type": "application/json", + "App-Language": app_language.$ + }; + ApiResponse response = await ApiRequest.get(url, header); + if(response.statusCode== 200 && response.result){ + return ResponseModel(response.statusCode,helpCenterResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode,helpCenterResponseFromJson("")); + } + } + +} \ No newline at end of file diff --git a/app_code/lib/apis/user_api.dart b/app_code/lib/apis/user_api.dart new file mode 100644 index 0000000..22b3229 --- /dev/null +++ b/app_code/lib/apis/user_api.dart @@ -0,0 +1,71 @@ +import 'dart:convert'; +import 'dart:developer'; +import 'dart:io'; +import 'package:grostore/api_request.dart'; +import 'package:grostore/configs/app_config.dart'; +import 'package:grostore/helpers/common_functions.dart'; +import 'package:grostore/helpers/shared_value_helper.dart'; +import 'package:grostore/models/cart_response.dart'; +import 'package:grostore/models/order/order_summery_response.dart'; +import 'package:grostore/models/response_model.dart'; +import 'package:grostore/models/user/addresses_response.dart'; + +import '../models/common_response.dart'; + +class UserApi { + static Future getAddresses() async { + var url = "${AppConfig.apiUrl}/address"; + Map header = getCommonHeader(); + header.addAll({"Authorization": "Bearer ${access_token.$}"}); + + ApiResponse response = await ApiRequest.get(url, header); + if (response.result) { + return addressesResponseFromJson(response.body); + } else { + return AddressesResponse(data: []); + } + } + + static Future> updateProfile( + {File? file, String? name, String? phone}) async { + try { + var url = "${AppConfig.apiUrl}/customer-profile/update"; + Map header = getCommonHeader(); + header.addAll({"Authorization": "Bearer ${access_token.$}"}); + print(header); + Map? body = {}; + if (name != null && phone != null) { + body = {"name": name, "phone": phone}; + } + ApiResponse response = await ApiRequest.fileReq( + url: url, header: header, body: body, file: file); + + if (response.result) { + return ResponseModel(200, commonResponseFromJson(response.body)); + } else { + return ResponseModel( + response.statusCode, commonResponseFromJson(response.body)); + } + } catch (e) { + log("Erorrr======?>>>>>${e.toString()}"); + return ResponseModel(500, commonResponseFromJson(e.toString())); + } + } + + static Future> updatePassword(body) async { + var url = "${AppConfig.apiUrl}/customer-profile/change-password"; + Map header = getCommonHeader(); + header.addAll({"Authorization": "Bearer ${access_token.$}"}); + ApiResponse response = + await ApiRequest.post(url: url, header: header, body: body); + + print(response.body); + if (response.result) { + return ResponseModel( + response.statusCode, commonResponseFromJson(response.body)); + } else { + return ResponseModel( + response.statusCode, commonResponseFromJson(response.body)); + } + } +} diff --git a/app_code/lib/apis/wallet_api.dart b/app_code/lib/apis/wallet_api.dart new file mode 100644 index 0000000..1b5377b --- /dev/null +++ b/app_code/lib/apis/wallet_api.dart @@ -0,0 +1,33 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/api_request.dart'; +import 'package:grostore/configs/app_config.dart'; +import 'package:grostore/helpers/common_functions.dart'; +import 'package:grostore/helpers/shared_value_helper.dart'; +import 'package:grostore/models/coupon_response.dart'; +import 'package:grostore/models/home_banner_response.dart'; +import 'package:grostore/models/response_model.dart'; +import 'package:grostore/models/wallet_history_response.dart'; + + +class WalletApi{ + static Future> getWalletHistory(page)async{ + var url = "${AppConfig.apiUrl}/wallet-histories?page=$page"; + Map header = { + "Accept": "application/json", + "Content-Type": "application/json", + "App-Language": app_language.$ + }; + header.addAll({ + "Authorization":"Bearer ${access_token.$}" + }); + header.addAll(getCurrencyHeader()); + ApiResponse response = await ApiRequest.get(url, header); + debugPrint(response.body); + if(response.statusCode== 200 && response.result){ + return ResponseModel(response.statusCode,walletHistoryResponseFromJson(response.body)); + }else{ + return ResponseModel(response.statusCode,walletHistoryResponseFromJson("")); + } + } + +} \ No newline at end of file diff --git a/app_code/lib/apis/wishlist_api.dart b/app_code/lib/apis/wishlist_api.dart new file mode 100644 index 0000000..2a004ba --- /dev/null +++ b/app_code/lib/apis/wishlist_api.dart @@ -0,0 +1,99 @@ +import 'dart:convert'; + +import 'package:flutter/material.dart'; +import 'package:grostore/api_request.dart'; +import 'package:grostore/configs/app_config.dart'; +import 'package:grostore/custom_classes/system_data.dart'; +import 'package:grostore/helpers/common_functions.dart'; +import 'package:grostore/helpers/shared_value_helper.dart'; +import 'package:grostore/models/common_response.dart'; +import 'package:grostore/models/response_model.dart'; +import 'package:grostore/models/product_details_response.dart'; +import 'package:grostore/models/product_mini_response.dart'; +import 'package:grostore/models/wishlist_response.dart'; + +class WishlistApi { + static Future> getWishlist() async { + var url = "${AppConfig.apiUrl}/wishlist"; + Map header = { + "Accept": "application/json", + "Content-Type": "application/json", + "App-Language": app_language.$, + "Stock-Location-Id": stock_location_id.$ + }; + header.addAll({"Authorization": "Bearer ${access_token.$}"}); + header.addAll(getCurrencyHeader()); + ApiResponse response = await ApiRequest.get(url, header); + if (response.result) { + return ResponseModel( + response.statusCode, wishlistResponseFromJson(response.body)); + } else { + return ResponseModel(response.statusCode, WishlistResponse(data: [])); + } + } + + static Future> checkWishlist(id) async { + var url = "${AppConfig.apiUrl}/wishlist/check/$id"; + Map header = { + "Accept": "application/json", + "Content-Type": "application/json", + "App-Language": app_language.$, + "Stock-Location-Id": stock_location_id.$ + }; + + header.addAll({"Authorization": "Bearer ${access_token.$}"}); + header.addAll(getCurrencyHeader()); + ApiResponse response = await ApiRequest.get(url, header); + if (response.result) { + return ResponseModel( + response.statusCode, commonResponseFromJson(response.body)); + } else { + return ResponseModel( + response.statusCode, CommonResponse(result: false, message: "")); + } + } + + static Future> deleteWishlist(id) async { + var url = "${AppConfig.apiUrl}/delete-wishlist/$id"; + Map header = { + "Accept": "application/json", + "Content-Type": "application/json", + "App-Language": app_language.$, + "Stock-Location-Id": stock_location_id.$ + }; + + header.addAll({"Authorization": "Bearer ${access_token.$}"}); + header.addAll(getCurrencyHeader()); + ApiResponse response = await ApiRequest.get(url, header); + if (response.result) { + return ResponseModel( + response.statusCode, commonResponseFromJson(response.body)); + } else { + return ResponseModel( + response.statusCode, CommonResponse(result: false, message: "")); + } + } + + static Future> addWishlist(id) async { + var url = "${AppConfig.apiUrl}/add-to-wishlist"; + Map header = { + "Accept": "application/json", + "Content-Type": "application/json", + "App-Language": app_language.$, + "Stock-Location-Id": stock_location_id.$ + }; + header.addAll({"Authorization": "Bearer ${access_token.$}"}); + header.addAll(getCurrencyHeader()); + + var postBody = jsonEncode({"product_id": id}); + ApiResponse response = + await ApiRequest.post(body: postBody, url: url, header: header); + if (response.result) { + return ResponseModel( + response.statusCode, commonResponseFromJson(response.body)); + } else { + return ResponseModel( + response.statusCode, CommonResponse(result: false, message: "")); + } + } +} diff --git a/app_code/lib/app_lang.dart b/app_code/lib/app_lang.dart new file mode 100644 index 0000000..5da5486 --- /dev/null +++ b/app_code/lib/app_lang.dart @@ -0,0 +1,214 @@ +import 'package:flutter/material.dart'; + +import 'l10n/app_localizations.dart'; + +class AppLang { + static const langList = [ + 'ab', + 'aa', + 'af', + 'ak', + 'sq', + 'am', + 'ar', + 'an', + 'hy', + 'as', + 'av', + 'ae', + 'ay', + 'az', + 'bm', + 'ba', + 'eu', + 'be', + 'bn', + 'bh', + 'bi', + 'bs', + 'br', + 'bg', + 'my', + 'ca', + 'km', + 'ch', + 'ce', + 'ny', + 'zh', + 'cu', + 'cv', + 'kw', + 'co', + 'cr', + 'hr', + 'cs', + 'da', + 'dv', + 'nl', + 'dz', + 'en', + 'eo', + 'et', + 'ee', + 'fo', + 'fj', + 'fi', + 'fr', + 'ff', + 'gd', + 'gl', + 'lg', + 'ka', + 'de', + 'ki', + 'el', + 'kl', + 'gn', + 'gu', + 'ht', + 'ha', + 'he', + 'hz', + 'hi', + 'ho', + 'hu', + 'is', + 'io', + 'ig', + 'id', + 'ia', + 'ie', + 'iu', + 'ik', + 'ga', + 'it', + 'ja', + 'jv', + 'kn', + 'kr', + 'ks', + 'kk', + 'rw', + 'kv', + 'kg', + 'ko', + 'kj', + 'ku', + 'ky', + 'lo', + 'la', + 'lv', + 'lb', + 'li', + 'ln', + 'lt', + 'lu', + 'mk', + 'mg', + 'ms', + 'ml', + 'mt', + 'gv', + 'mi', + 'mr', + 'mh', + 'ro', + 'mn', + 'na', + 'nv', + 'nd', + 'ng', + 'ne', + 'se', + 'no', + 'nb', + 'nn', + 'ii', + 'oc', + 'oj', + 'or', + 'om', + 'os', + 'pi', + 'pa', + 'ps', + 'fa', + 'pl', + 'pt', + 'qu', + 'rm', + 'rn', + 'ru', + 'sm', + 'sg', + 'sa', + 'sc', + 'sr', + 'sn', + 'sd', + 'si', + 'sk', + 'sl', + 'so', + 'st', + 'nr', + 'es', + 'su', + 'sw', + 'ss', + 'sv', + 'tl', + 'ty', + 'tg', + 'ta', + 'tt', + 'te', + 'th', + 'bo', + 'ti', + 'to', + 'ts', + 'tn', + 'tr', + 'tk', + 'tw', + 'ug', + 'uk', + 'ur', + 'uz', + 've', + 'vi', + 'vo', + 'wa', + 'cy', + 'fy', + 'wo', + 'xh', + 'yi', + 'yo', + 'za', + 'zu' + ]; + List localList = []; + + List supportedLocales() { + langList.forEach((lang) { + var local =[Locale(lang, 'en'),Locale(lang, 'uz'),Locale(lang, 'ru')]; + localList.addAll(local); + }); + + return localList; + } + + + static late BuildContext _context; + static setContext(BuildContext context){ + _context = context; + } + + static AppLocalizations getLocal(){ + return AppLocalizations.of(_context)!; + } + static AppLocalizations local (BuildContext context)=> AppLocalizations.of(context)!; + +} diff --git a/app_code/lib/configs/app_config.dart b/app_code/lib/configs/app_config.dart new file mode 100644 index 0000000..6b0e523 --- /dev/null +++ b/app_code/lib/configs/app_config.dart @@ -0,0 +1,19 @@ + + +class AppConfig{ + static String appName ="KarvonMarket.uz";//Rename it with your app name + + static const bool https = true;//Make it true if your domain support https otherwise make it false + + + // static const domain = "192.168.31.237/enmart-laravel"; //If you want to connect with local host provide your ip address instead localhost. + // static const domain = "domain.com"; //If you want to connect with your server replace it with your domain name + // static const domain = "grostore.themetags.com"; //If you want to connect with your server replace it with your domain name + static const domain = "karvonmarket.uz"; //If you want to connect with your server replace it with your domain name + + //Don't try change below values + static const String apiEndPath = "api"; + static const String protocol = https ? "https://" : "http://"; + static const String baseUrl = protocol+ domain; + static const String apiUrl = "$baseUrl/$apiEndPath"; +} \ No newline at end of file diff --git a/app_code/lib/configs/style_config.dart b/app_code/lib/configs/style_config.dart new file mode 100644 index 0000000..1241945 --- /dev/null +++ b/app_code/lib/configs/style_config.dart @@ -0,0 +1,118 @@ +import 'package:flutter/material.dart'; + +import 'package:grostore/configs/theme_config.dart'; + +class StyleConfig { + static double get padding => 18.0; + static double get padding14 => 14.0; + + static double get xsSectionSpacer => 10.0;//Extra Small section separator + static double get smSectionSpacer => 14.0;//Small section separator + static double get mSectionSpacer => 24.0;//Medium section separator + + + static RoundedRectangleBorder buttonRadius(radius) => RoundedRectangleBorder( + borderRadius: BorderRadius.circular(radius.toDouble())); + + static TextStyle fs30fwEBold() { + return TextStyle( + fontSize: 30, + color: ThemeConfig.fontColor, + fontWeight: FontWeight.w800); + } + + static TextStyle get fs8 => TextStyle( + fontSize: 8, color: ThemeConfig.fontColor, fontWeight: FontWeight.normal); + + static TextStyle get fs10 => TextStyle( + fontSize: 10, + color: ThemeConfig.fontColor, + fontWeight: FontWeight.normal); + static TextStyle get fs10Black => TextStyle( + fontSize: 9, + color: ThemeConfig.fontColor, + fontWeight: FontWeight.normal); + + static TextStyle get fs11 => TextStyle( + fontSize: 11, + color: ThemeConfig.fontColor, + fontWeight: FontWeight.normal); + + static TextStyle get fs12 => TextStyle( + fontSize: 12, + color: ThemeConfig.fontColor, + fontWeight: FontWeight.normal); + + static TextStyle get fs12Red => TextStyle( + fontSize: 12, + color: ThemeConfig.red, + fontWeight: FontWeight.normal); + + static TextStyle get fs12cWhitefwBold => TextStyle( + fontSize: 12, color: ThemeConfig.white, fontWeight: FontWeight.bold); + + static TextStyle get fs12cWhite => TextStyle( + fontSize: 12, color: ThemeConfig.white, fontWeight: FontWeight.normal); + + static TextStyle get fs12cGrey => TextStyle( + fontSize: 12, color: ThemeConfig.grey, fontWeight: FontWeight.normal); + + static TextStyle get fs12cLightfwEBold => TextStyle( + fontSize: 12, + color: ThemeConfig.lightFontColor, + fontWeight: FontWeight.bold); + + static TextStyle get fs12cLightfwNormal => TextStyle( + fontSize: 12, + color: ThemeConfig.lightFontColor, + fontWeight: FontWeight.normal); + + static TextStyle get fs14fwNormal => TextStyle( + fontSize: 14, + color: ThemeConfig.fontColor, + fontWeight: FontWeight.normal); + + static TextStyle get fs14fwBold => TextStyle( + fontSize: 14, color: ThemeConfig.fontColor, fontWeight: FontWeight.bold); + static TextStyle get fs14cSecondryfwNormal => TextStyle( + fontSize: 14, color: ThemeConfig.secondaryColor, fontWeight: FontWeight.bold); +static TextStyle get fs14cSecondryfwBold => TextStyle( + fontSize: 14, color: ThemeConfig.secondaryColor, fontWeight: FontWeight.bold); + + static TextStyle get fs14cRedfwBold => TextStyle( + fontSize: 14, color: ThemeConfig.red, fontWeight: FontWeight.bold); + static TextStyle get fs14cRedfwNormal => TextStyle( + fontSize: 14, color: ThemeConfig.red, fontWeight: FontWeight.normal); + + static TextStyle get fs14cWhitefwNormal => TextStyle( + fontSize: 14, color: ThemeConfig.white, fontWeight: FontWeight.normal); + static TextStyle get fs14cWhitefwBold => TextStyle( + fontSize: 14, color: ThemeConfig.white, fontWeight: FontWeight.bold); + + static TextStyle get fs16 => TextStyle( + fontSize: 16, color: ThemeConfig.fontColor, fontWeight: FontWeight.normal); + + static TextStyle get fs16fwBold => TextStyle( + fontSize: 16, color: ThemeConfig.fontColor, fontWeight: FontWeight.bold); + + static TextStyle get fs16cWhitefwBold => TextStyle( + fontSize: 16, color: ThemeConfig.white, fontWeight: FontWeight.bold); + + static TextStyle get fs16cRedfwBold => TextStyle( + fontSize: 16, color: ThemeConfig.red, fontWeight: FontWeight.bold); + + static TextStyle get fs18BlackfwBold => TextStyle( + fontSize: 18, color: ThemeConfig.fontColor, fontWeight: FontWeight.bold); + + static TextStyle get fs20fwBold => TextStyle( + fontSize: 20, color: ThemeConfig.fontColor, fontWeight: FontWeight.bold); + + static TextStyle get fs20cWhitefwBold => const TextStyle( + fontSize: 20, color: ThemeConfig.white, fontWeight: FontWeight.bold); + + static TextStyle get fs22fwEBold => TextStyle( + fontSize: 22, color: ThemeConfig.fontColor, fontWeight: FontWeight.bold); + + static TextStyle get fs24fwBold => TextStyle( + fontSize: 24, color: ThemeConfig.fontColor, fontWeight: FontWeight.bold); +} diff --git a/app_code/lib/configs/theme_config.dart b/app_code/lib/configs/theme_config.dart new file mode 100644 index 0000000..a6dbbe7 --- /dev/null +++ b/app_code/lib/configs/theme_config.dart @@ -0,0 +1,55 @@ + +import 'package:flutter/material.dart'; + +class ThemeConfig{ + static Color accentColor=const Color.fromRGBO(78, 181, 41,1);// main theme color + static Color accentDarkColor=const Color.fromRGBO(18, 104, 13,1);// deep theme color + static Color splashBackground =const Color.fromRGBO(237, 248, 234, 1); + static Color fontColor=const Color.fromRGBO(33, 43, 54, 1); + static Color lightFontColor=const Color.fromRGBO(67, 78, 88, 1); + +//Optional Color + static Color secondaryColor=const Color.fromRGBO(255, 124, 8,1); + + + + + + //DO NOT TRY TO CHANGE THIS COLOR'S + static const Color white = Color.fromRGBO(255,255,255, 1); + static Color noColor = Color.fromRGBO(255,255,255, 0); + static Color xxlightGrey = Color.fromRGBO(243, 245, 247, 1.0); + static Color xlightGrey = Color.fromRGBO(239,239,239, 1); + static Color lightGrey = Color.fromRGBO(209,209,209, 1); + static Color mediumGrey = Color.fromRGBO(167,175,179, 1); + static Color blueGrey = Color.fromRGBO(168,175,179, 1); + static Color grey = Color.fromRGBO(153,153,153, 1); + static Color darkGrey = Color.fromRGBO(107,115,119, 1); + static Color extraDarkGrey = Color.fromRGBO(62,68,71, 1); + static Color amberLight = Color.fromRGBO(254, 234, 209, 1); + static Color amberMedium = Color.fromRGBO(254, 240, 215, 1); + static Color amber = Color.fromRGBO(228, 0, 43, 1.0); + static Color amberShadow = Color.fromRGBO(255, 168, 0, .4); + static Color red = Color.fromRGBO(236, 9, 44, 1); + static Color green = Colors.green; + static Color blue = Colors.blue; + static Color shimmer_base = Colors.grey.shade50; + static Color shimmer_highlighted = Colors.grey.shade200; + + + + + static MaterialColor accentMaterialColor= MaterialColor(ThemeConfig.accentColor.value,{ + 50 : ThemeConfig.accentColor.withOpacity(0.05), + 100 : ThemeConfig.accentColor.withOpacity(0.1), + 200 : ThemeConfig.accentColor.withOpacity(0.2), + 300 : ThemeConfig.accentColor.withOpacity(0.3), + 400 : ThemeConfig.accentColor.withOpacity(0.4), + 500 : ThemeConfig.accentColor.withOpacity(0.5), + 600 : ThemeConfig.accentColor.withOpacity(0.6), + 700 : ThemeConfig.accentColor.withOpacity(0.7), + 800 : ThemeConfig.accentColor.withOpacity(0.8), + 900 : ThemeConfig.accentColor.withOpacity(0.9), + }); + +} \ No newline at end of file diff --git a/app_code/lib/constant/country_code.dart b/app_code/lib/constant/country_code.dart new file mode 100644 index 0000000..a28c793 --- /dev/null +++ b/app_code/lib/constant/country_code.dart @@ -0,0 +1,1232 @@ + + + +class CountryCode{ + + + List get(){ + return [ + Country( + name: "Afghanistan", + dial_code: "+93", + code: "AF" + ), + Country( + name: "Aland Islands", + dial_code: "+358", + code: "AX" + ), + Country( + name: "Albania", + dial_code: "+355", + code: "AL" + ), + Country( + name: "Algeria", + dial_code: "+213", + code: "DZ" + ), + Country( + name: "AmericanSamoa", + dial_code: "+1684", + code: "AS" + ), + Country( + name: "Andorra", + dial_code: "+376", + code: "AD" + ), + Country( + name: "Angola", + dial_code: "+244", + code: "AO" + ), + Country( + name: "Anguilla", + dial_code: "+1264", + code: "AI" + ), + Country( + name: "Antarctica", + dial_code: "+672", + code: "AQ" + ), + Country( + name: "Antigua and Barbuda", + dial_code: "+1268", + code: "AG" + ), + Country( + name: "Argentina", + dial_code: "+54", + code: "AR" + ), + Country( + name: "Armenia", + dial_code: "+374", + code: "AM" + ), + Country( + name: "Aruba", + dial_code: "+297", + code: "AW" + ), + Country( + name: "Australia", + dial_code: "+61", + code: "AU" + ), + Country( + name: "Austria", + dial_code: "+43", + code: "AT" + ), + Country( + name: "Azerbaijan", + dial_code: "+994", + code: "AZ" + ), + Country( + name: "Bahamas", + dial_code: "+1242", + code: "BS" + ), + Country( + name: "Bahrain", + dial_code: "+973", + code: "BH" + ), + Country( + name: "Bangladesh", + dial_code: "+880", + code: "BD" + ), + Country( + name: "Barbados", + dial_code: "+1246", + code: "BB" + ), + Country( + name: "Belarus", + dial_code: "+375", + code: "BY" + ), + Country( + name: "Belgium", + dial_code: "+32", + code: "BE" + ), + Country( + name: "Belize", + dial_code: "+501", + code: "BZ" + ), + Country( + name: "Benin", + dial_code: "+229", + code: "BJ" + ), + Country( + name: "Bermuda", + dial_code: "+1441", + code: "BM" + ), + Country( + name: "Bhutan", + dial_code: "+975", + code: "BT" + ), + Country( + name: "Bolivia, Plurinational State of", + dial_code: "+591", + code: "BO" + ), + Country( + name: "Bosnia and Herzegovina", + dial_code: "+387", + code: "BA" + ), + Country( + name: "Botswana", + dial_code: "+267", + code: "BW" + ), + Country( + name: "Brazil", + dial_code: "+55", + code: "BR" + ), + Country( + name: "British Indian Ocean Territory", + dial_code: "+246", + code: "IO" + ), + Country( + name: "Brunei Darussalam", + dial_code: "+673", + code: "BN" + ), + Country( + name: "Bulgaria", + dial_code: "+359", + code: "BG" + ), + Country( + name: "Burkina Faso", + dial_code: "+226", + code: "BF" + ), + Country( + name: "Burundi", + dial_code: "+257", + code: "BI" + ), + Country( + name: "Cambodia", + dial_code: "+855", + code: "KH" + ), + Country( + name: "Cameroon", + dial_code: "+237", + code: "CM" + ), + Country( + name: "Canada", + dial_code: "+1", + code: "CA" + ), + Country( + name: "Cape Verde", + dial_code: "+238", + code: "CV" + ), + Country( + name: "Cayman Islands", + dial_code: "+ 345", + code: "KY" + ), + Country( + name: "Central African Republic", + dial_code: "+236", + code: "CF" + ), + Country( + name: "Chad", + dial_code: "+235", + code: "TD" + ), + Country( + name: "Chile", + dial_code: "+56", + code: "CL" + ), + Country( + name: "China", + dial_code: "+86", + code: "CN" + ), + Country( + name: "Christmas Island", + dial_code: "+61", + code: "CX" + ), + Country( + name: "Cocos (Keeling) Islands", + dial_code: "+61", + code: "CC" + ), + Country( + name: "Colombia", + dial_code: "+57", + code: "CO" + ), + Country( + name: "Comoros", + dial_code: "+269", + code: "KM" + ), + Country( + name: "Congo", + dial_code: "+242", + code: "CG" + ), + Country( + name: "Congo, The Democratic Republic of the Congo", + dial_code: "+243", + code: "CD" + ), + Country( + name: "Cook Islands", + dial_code: "+682", + code: "CK" + ), + Country( + name: "Costa Rica", + dial_code: "+506", + code: "CR" + ), + Country( + name: "Cote d'Ivoire", + dial_code: "+225", + code: "CI" + ), + Country( + name: "Croatia", + dial_code: "+385", + code: "HR" + ), + Country( + name: "Cuba", + dial_code: "+53", + code: "CU" + ), + Country( + name: "Cyprus", + dial_code: "+357", + code: "CY" + ), + Country( + name: "Czech Republic", + dial_code: "+420", + code: "CZ" + ), + Country( + name: "Denmark", + dial_code: "+45", + code: "DK" + ), + Country( + name: "Djibouti", + dial_code: "+253", + code: "DJ" + ), + Country( + name: "Dominica", + dial_code: "+1767", + code: "DM" + ), + Country( + name: "Dominican Republic", + dial_code: "+1849", + code: "DO" + ), + Country( + name: "Ecuador", + dial_code: "+593", + code: "EC" + ), + Country( + name: "Egypt", + dial_code: "+20", + code: "EG" + ), + Country( + name: "El Salvador", + dial_code: "+503", + code: "SV" + ), + Country( + name: "Equatorial Guinea", + dial_code: "+240", + code: "GQ" + ), + Country( + name: "Eritrea", + dial_code: "+291", + code: "ER" + ), + Country( + name: "Estonia", + dial_code: "+372", + code: "EE" + ), + Country( + name: "Ethiopia", + dial_code: "+251", + code: "ET" + ), + Country( + name: "Falkland Islands (Malvinas)", + dial_code: "+500", + code: "FK" + ), + Country( + name: "Faroe Islands", + dial_code: "+298", + code: "FO" + ), + Country( + name: "Fiji", + dial_code: "+679", + code: "FJ" + ), + Country( + name: "Finland", + dial_code: "+358", + code: "FI" + ), + Country( + name: "France", + dial_code: "+33", + code: "FR" + ), + Country( + name: "French Guiana", + dial_code: "+594", + code: "GF" + ), + Country( + name: "French Polynesia", + dial_code: "+689", + code: "PF" + ), + Country( + name: "Gabon", + dial_code: "+241", + code: "GA" + ), + Country( + name: "Gambia", + dial_code: "+220", + code: "GM" + ), + Country( + name: "Georgia", + dial_code: "+995", + code: "GE" + ), + Country( + name: "Germany", + dial_code: "+49", + code: "DE" + ), + Country( + name: "Ghana", + dial_code: "+233", + code: "GH" + ), + Country( + name: "Gibraltar", + dial_code: "+350", + code: "GI" + ), + Country( + name: "Greece", + dial_code: "+30", + code: "GR" + ), + Country( + name: "Greenland", + dial_code: "+299", + code: "GL" + ), + Country( + name: "Grenada", + dial_code: "+1473", + code: "GD" + ), + Country( + name: "Guadeloupe", + dial_code: "+590", + code: "GP" + ), + Country( + name: "Guam", + dial_code: "+1671", + code: "GU" + ), + Country( + name: "Guatemala", + dial_code: "+502", + code: "GT" + ), + Country( + name: "Guernsey", + dial_code: "+44", + code: "GG" + ), + Country( + name: "Guinea", + dial_code: "+224", + code: "GN" + ), + Country( + name: "Guinea-Bissau", + dial_code: "+245", + code: "GW" + ), + Country( + name: "Guyana", + dial_code: "+595", + code: "GY" + ), + Country( + name: "Haiti", + dial_code: "+509", + code: "HT" + ), + Country( + name: "Holy See (Vatican City State)", + dial_code: "+379", + code: "VA" + ), + Country( + name: "Honduras", + dial_code: "+504", + code: "HN" + ), + Country( + name: "Hong Kong", + dial_code: "+852", + code: "HK" + ), + Country( + name: "Hungary", + dial_code: "+36", + code: "HU" + ), + Country( + name: "Iceland", + dial_code: "+354", + code: "IS" + ), + Country( + name: "India", + dial_code: "+91", + code: "IN" + ), + Country( + name: "Indonesia", + dial_code: "+62", + code: "ID" + ), + Country( + name: "Iran, Islamic Republic of Persian Gulf", + dial_code: "+98", + code: "IR" + ), + Country( + name: "Iraq", + dial_code: "+964", + code: "IQ" + ), + Country( + name: "Ireland", + dial_code: "+353", + code: "IE" + ), + Country( + name: "Isle of Man", + dial_code: "+44", + code: "IM" + ), + Country( + name: "Israel", + dial_code: "+972", + code: "IL" + ), + Country( + name: "Italy", + dial_code: "+39", + code: "IT" + ), + Country( + name: "Jamaica", + dial_code: "+1876", + code: "JM" + ), + Country( + name: "Japan", + dial_code: "+81", + code: "JP" + ), + Country( + name: "Jersey", + dial_code: "+44", + code: "JE" + ), + Country( + name: "Jordan", + dial_code: "+962", + code: "JO" + ), + Country( + name: "Kazakhstan", + dial_code: "+77", + code: "KZ" + ), + Country( + name: "Kenya", + dial_code: "+254", + code: "KE" + ), + Country( + name: "Kiribati", + dial_code: "+686", + code: "KI" + ), + Country( + name: "Korea, Democratic People's Republic of Korea", + dial_code: "+850", + code: "KP" + ), + Country( + name: "Korea, Republic of South Korea", + dial_code: "+82", + code: "KR" + ), + Country( + name: "Kuwait", + dial_code: "+965", + code: "KW" + ), + Country( + name: "Kyrgyzstan", + dial_code: "+996", + code: "KG" + ), + Country( + name: "Laos", + dial_code: "+856", + code: "LA" + ), + Country( + name: "Latvia", + dial_code: "+371", + code: "LV" + ), + Country( + name: "Lebanon", + dial_code: "+961", + code: "LB" + ), + Country( + name: "Lesotho", + dial_code: "+266", + code: "LS" + ), + Country( + name: "Liberia", + dial_code: "+231", + code: "LR" + ), + Country( + name: "Libyan Arab Jamahiriya", + dial_code: "+218", + code: "LY" + ), + Country( + name: "Liechtenstein", + dial_code: "+423", + code: "LI" + ), + Country( + name: "Lithuania", + dial_code: "+370", + code: "LT" + ), + Country( + name: "Luxembourg", + dial_code: "+352", + code: "LU" + ), + Country( + name: "Macao", + dial_code: "+853", + code: "MO" + ), + Country( + name: "Macedonia", + dial_code: "+389", + code: "MK" + ), + Country( + name: "Madagascar", + dial_code: "+261", + code: "MG" + ), + Country( + name: "Malawi", + dial_code: "+265", + code: "MW" + ), + Country( + name: "Malaysia", + dial_code: "+60", + code: "MY" + ), + Country( + name: "Maldives", + dial_code: "+960", + code: "MV" + ), + Country( + name: "Mali", + dial_code: "+223", + code: "ML" + ), + Country( + name: "Malta", + dial_code: "+356", + code: "MT" + ), + Country( + name: "Marshall Islands", + dial_code: "+692", + code: "MH" + ), + Country( + name: "Martinique", + dial_code: "+596", + code: "MQ" + ), + Country( + name: "Mauritania", + dial_code: "+222", + code: "MR" + ), + Country( + name: "Mauritius", + dial_code: "+230", + code: "MU" + ), + Country( + name: "Mayotte", + dial_code: "+262", + code: "YT" + ), + Country( + name: "Mexico", + dial_code: "+52", + code: "MX" + ), + Country( + name: "Micronesia, Federated States of Micronesia", + dial_code: "+691", + code: "FM" + ), + Country( + name: "Moldova", + dial_code: "+373", + code: "MD" + ), + Country( + name: "Monaco", + dial_code: "+377", + code: "MC" + ), + Country( + name: "Mongolia", + dial_code: "+976", + code: "MN" + ), + Country( + name: "Montenegro", + dial_code: "+382", + code: "ME" + ), + Country( + name: "Montserrat", + dial_code: "+1664", + code: "MS" + ), + Country( + name: "Morocco", + dial_code: "+212", + code: "MA" + ), + Country( + name: "Mozambique", + dial_code: "+258", + code: "MZ" + ), + Country( + name: "Myanmar", + dial_code: "+95", + code: "MM" + ), + Country( + name: "Namibia", + dial_code: "+264", + code: "NA" + ), + Country( + name: "Nauru", + dial_code: "+674", + code: "NR" + ), + Country( + name: "Nepal", + dial_code: "+977", + code: "NP" + ), + Country( + name: "Netherlands", + dial_code: "+31", + code: "NL" + ), + Country( + name: "Netherlands Antilles", + dial_code: "+599", + code: "AN" + ), + Country( + name: "New Caledonia", + dial_code: "+687", + code: "NC" + ), + Country( + name: "New Zealand", + dial_code: "+64", + code: "NZ" + ), + Country( + name: "Nicaragua", + dial_code: "+505", + code: "NI" + ), + Country( + name: "Niger", + dial_code: "+227", + code: "NE" + ), + Country( + name: "Nigeria", + dial_code: "+234", + code: "NG" + ), + Country( + name: "Niue", + dial_code: "+683", + code: "NU" + ), + Country( + name: "Norfolk Island", + dial_code: "+672", + code: "NF" + ), + Country( + name: "Northern Mariana Islands", + dial_code: "+1670", + code: "MP" + ), + Country( + name: "Norway", + dial_code: "+47", + code: "NO" + ), + Country( + name: "Oman", + dial_code: "+968", + code: "OM" + ), + Country( + name: "Pakistan", + dial_code: "+92", + code: "PK" + ), + Country( + name: "Palau", + dial_code: "+680", + code: "PW" + ), + Country( + name: "Palestinian Territory, Occupied", + dial_code: "+970", + code: "PS" + ), + Country( + name: "Panama", + dial_code: "+507", + code: "PA" + ), + Country( + name: "Papua New Guinea", + dial_code: "+675", + code: "PG" + ), + Country( + name: "Paraguay", + dial_code: "+595", + code: "PY" + ), + Country( + name: "Peru", + dial_code: "+51", + code: "PE" + ), + Country( + name: "Philippines", + dial_code: "+63", + code: "PH" + ), + Country( + name: "Pitcairn", + dial_code: "+872", + code: "PN" + ), + Country( + name: "Poland", + dial_code: "+48", + code: "PL" + ), + Country( + name: "Portugal", + dial_code: "+351", + code: "PT" + ), + Country( + name: "Puerto Rico", + dial_code: "+1939", + code: "PR" + ), + Country( + name: "Qatar", + dial_code: "+974", + code: "QA" + ), + Country( + name: "Romania", + dial_code: "+40", + code: "RO" + ), + Country( + name: "Russia", + dial_code: "+7", + code: "RU" + ), + Country( + name: "Rwanda", + dial_code: "+250", + code: "RW" + ), + Country( + name: "Reunion", + dial_code: "+262", + code: "RE" + ), + Country( + name: "Saint Barthelemy", + dial_code: "+590", + code: "BL" + ), + Country( + name: "Saint Helena, Ascension and Tristan Da Cunha", + dial_code: "+290", + code: "SH" + ), + Country( + name: "Saint Kitts and Nevis", + dial_code: "+1869", + code: "KN" + ), + Country( + name: "Saint Lucia", + dial_code: "+1758", + code: "LC" + ), + Country( + name: "Saint Martin", + dial_code: "+590", + code: "MF" + ), + Country( + name: "Saint Pierre and Miquelon", + dial_code: "+508", + code: "PM" + ), + Country( + name: "Saint Vincent and the Grenadines", + dial_code: "+1784", + code: "VC" + ), + Country( + name: "Samoa", + dial_code: "+685", + code: "WS" + ), + Country( + name: "San Marino", + dial_code: "+378", + code: "SM" + ), + Country( + name: "Sao Tome and Principe", + dial_code: "+239", + code: "ST" + ), + Country( + name: "Saudi Arabia", + dial_code: "+966", + code: "SA" + ), + Country( + name: "Senegal", + dial_code: "+221", + code: "SN" + ), + Country( + name: "Serbia", + dial_code: "+381", + code: "RS" + ), + Country( + name: "Seychelles", + dial_code: "+248", + code: "SC" + ), + Country( + name: "Sierra Leone", + dial_code: "+232", + code: "SL" + ), + Country( + name: "Singapore", + dial_code: "+65", + code: "SG" + ), + Country( + name: "Slovakia", + dial_code: "+421", + code: "SK" + ), + Country( + name: "Slovenia", + dial_code: "+386", + code: "SI" + ), + Country( + name: "Solomon Islands", + dial_code: "+677", + code: "SB" + ), + Country( + name: "Somalia", + dial_code: "+252", + code: "SO" + ), + Country( + name: "South Africa", + dial_code: "+27", + code: "ZA" + ), + Country( + name: "South Sudan", + dial_code: "+211", + code: "SS" + ), + Country( + name: "South Georgia and the South Sandwich Islands", + dial_code: "+500", + code: "GS" + ), + Country( + name: "Spain", + dial_code: "+34", + code: "ES" + ), + Country( + name: "Sri Lanka", + dial_code: "+94", + code: "LK" + ), + Country( + name: "Sudan", + dial_code: "+249", + code: "SD" + ), + Country( + name: "Suriname", + dial_code: "+597", + code: "SR" + ), + Country( + name: "Svalbard and Jan Mayen", + dial_code: "+47", + code: "SJ" + ), + Country( + name: "Swaziland", + dial_code: "+268", + code: "SZ" + ), + Country( + name: "Sweden", + dial_code: "+46", + code: "SE" + ), + Country( + name: "Switzerland", + dial_code: "+41", + code: "CH" + ), + Country( + name: "Syrian Arab Republic", + dial_code: "+963", + code: "SY" + ), + Country( + name: "Taiwan", + dial_code: "+886", + code: "TW" + ), + Country( + name: "Tajikistan", + dial_code: "+992", + code: "TJ" + ), + Country( + name: "Tanzania, United Republic of Tanzania", + dial_code: "+255", + code: "TZ" + ), + Country( + name: "Thailand", + dial_code: "+66", + code: "TH" + ), + Country( + name: "Timor-Leste", + dial_code: "+670", + code: "TL" + ), + Country( + name: "Togo", + dial_code: "+228", + code: "TG" + ), + Country( + name: "Tokelau", + dial_code: "+690", + code: "TK" + ), + Country( + name: "Tonga", + dial_code: "+676", + code: "TO" + ), + Country( + name: "Trinidad and Tobago", + dial_code: "+1868", + code: "TT" + ), + Country( + name: "Tunisia", + dial_code: "+216", + code: "TN" + ), + Country( + name: "Turkey", + dial_code: "+90", + code: "TR" + ), + Country( + name: "Turkmenistan", + dial_code: "+993", + code: "TM" + ), + Country( + name: "Turks and Caicos Islands", + dial_code: "+1649", + code: "TC" + ), + Country( + name: "Tuvalu", + dial_code: "+688", + code: "TV" + ), + Country( + name: "Uganda", + dial_code: "+256", + code: "UG" + ), + Country( + name: "Ukraine", + dial_code: "+380", + code: "UA" + ), + Country( + name: "United Arab Emirates", + dial_code: "+971", + code: "AE" + ), + Country( + name: "United Kingdom", + dial_code: "+44", + code: "GB" + ), + Country( + name: "United States", + dial_code: "+1", + code: "US" + ), + Country( + name: "Uruguay", + dial_code: "+598", + code: "UY" + ), + Country( + name: "Uzbekistan", + dial_code: "+998", + code: "UZ" + ), + Country( + name: "Vanuatu", + dial_code: "+678", + code: "VU" + ), + Country( + name: "Venezuela, Bolivarian Republic of Venezuela", + dial_code: "+58", + code: "VE" + ), + Country( + name: "Vietnam", + dial_code: "+84", + code: "VN" + ), + Country( + name: "Virgin Islands, British", + dial_code: "+1284", + code: "VG" + ), + Country( + name: "Virgin Islands, U.S.", + dial_code: "+1340", + code: "VI" + ), + Country( + name: "Wallis and Futuna", + dial_code: "+681", + code: "WF" + ), + Country( + name: "Yemen", + dial_code: "+967", + code: "YE" + ), + Country( + name: "Zambia", + dial_code: "+260", + code: "ZM" + ), + Country( + name: "Zimbabwe", + dial_code: "+263", + code: "ZW" + ) + ]; + + + } + + + +} + +class Country{ +late String name,dial_code,code; + +Country({required this.name, required this.dial_code, required this.code}); +} \ No newline at end of file diff --git a/app_code/lib/constant/country_search.dart b/app_code/lib/constant/country_search.dart new file mode 100644 index 0000000..4137396 --- /dev/null +++ b/app_code/lib/constant/country_search.dart @@ -0,0 +1,61 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/constant/country_code.dart'; + +class CountrySearchDialog extends StatefulWidget { + @override + _CountrySearchDialogState createState() => _CountrySearchDialogState(); +} + +class _CountrySearchDialogState extends State { + List country = CountryCode().get(); + + List filteredCountry = []; + + @override + void initState() { + filteredCountry = country; + super.initState(); + } + + void filtercountry(String query) { + query = query.toLowerCase(); + setState(() { + filteredCountry = country + .where((product) => product.name.toLowerCase().contains(query)) + .toList(); + }); + } + + @override + Widget build(BuildContext context) { + return AlertDialog( + title: Text('Search Product'), + content: Column( + mainAxisSize: MainAxisSize.min, + children: [ + TextField( + onChanged: filtercountry, + decoration: InputDecoration( + labelText: 'Search', + ), + ), + SizedBox(height: 16.0), + Expanded( + child: ListView.builder( + itemCount: filteredCountry.length, + itemBuilder: (context, index) { + final country = filteredCountry[index]; + return ListTile( + title: Text(country.name), + onTap: () { + Navigator.of(context).pop(country); + }, + ); + }, + ), + ), + ], + ), + ); + } +} diff --git a/app_code/lib/custom_classes/product_variation_data.dart b/app_code/lib/custom_classes/product_variation_data.dart new file mode 100644 index 0000000..3bea61b --- /dev/null +++ b/app_code/lib/custom_classes/product_variation_data.dart @@ -0,0 +1,28 @@ + + + +class ProductVariationData{ + String name; + int id; + List values; + ProductVariationData({ + required this.id, + required this.name, + required this.values, + }); + +} + +class ProductVariationValue { + var id; + String name; + var code; + bool isChosen; + + ProductVariationValue({ + required this.id, + required this.isChosen, + required this.name, + this.code, + }); +} \ No newline at end of file diff --git a/app_code/lib/custom_classes/system_data.dart b/app_code/lib/custom_classes/system_data.dart new file mode 100644 index 0000000..9f60888 --- /dev/null +++ b/app_code/lib/custom_classes/system_data.dart @@ -0,0 +1,12 @@ +import 'package:grostore/models/common/user_info.dart'; +import 'package:grostore/models/currency_response.dart'; +import 'package:grostore/models/setting_response.dart'; + +class SystemData { + // static CurrencyInfo? systemCurrency; + static SettingResponse? settings; + static bool isLogIn = false; + static UserInfo userInfo = + UserInfo(name: "", phone: "", balance: "", avatar: ""); + static String couponCode = ""; +} diff --git a/app_code/lib/custom_ui/Button.dart b/app_code/lib/custom_ui/Button.dart new file mode 100644 index 0000000..a8bf712 --- /dev/null +++ b/app_code/lib/custom_ui/Button.dart @@ -0,0 +1,81 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/configs/theme_config.dart'; + +class Button extends StatelessWidget { + final Color? color; + final OutlinedBorder? shape; + final Widget child; + final EdgeInsetsGeometry? padding; + final dynamic? minWidth; + final dynamic? minHeight; + final dynamic? onPressed; + final AlignmentGeometry alignment; + + const Button({Key? key, this.color = const Color.fromARGB(0, 0, 0, 0), + this.shape = const RoundedRectangleBorder(), + required this.child, + this.alignment = Alignment.center, + this.padding = EdgeInsets.zero, + this.minHeight, + this.minWidth, + + this.onPressed}) : super(key: key); + + + + + @override + Widget build(BuildContext context) { + return _basic(); + } + + + Widget _basic() { + //if (width != null && height != null) + return TextButton( + style: TextButton.styleFrom( + foregroundColor: ThemeConfig.fontColor, + padding: padding, + backgroundColor: color, + minimumSize: minWidth == null ? null : Size(minWidth.toDouble(),minHeight?? 10), + alignment: alignment, + shape: shape), + onPressed: onPressed, + child: child, + ); + } + + static Widget minSize( + {required width, + required double height, + color, + shape, + child, + EdgeInsetsGeometry padding=EdgeInsets.zero, + dynamic onPressed}) { + return TextButton( + style: TextButton.styleFrom( + padding: padding, + foregroundColor: ThemeConfig.noColor, + minimumSize: Size(width.toDouble(), height.toDouble()), + backgroundColor: onPressed != null ? color : ThemeConfig.grey, + shape: shape, + disabledForegroundColor: Colors.blue), + child: child, + onPressed: onPressed, + ); + } + + static Widget maxSize( + {width, height, color, shape, child, dynamic onPressed}) { + return TextButton( + style: TextButton.styleFrom( + foregroundColor: ThemeConfig.noColor, + maximumSize: Size(width, height), + backgroundColor: color, + shape: shape), + child: child, + onPressed: onPressed, + ); + } +} diff --git a/app_code/lib/custom_ui/Image_view.dart b/app_code/lib/custom_ui/Image_view.dart new file mode 100644 index 0000000..7cd4cf0 --- /dev/null +++ b/app_code/lib/custom_ui/Image_view.dart @@ -0,0 +1,144 @@ +import 'dart:io'; + +import 'package:cached_network_image/cached_network_image.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/svg.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/helpers/common_functions.dart'; + +class ImageView extends StatelessWidget { + late String url; + double? width, height; + double radius; + BoxFit? fit; + + ImageView({Key? key, required this.url, this.fit, this.width, this.height ,this.radius = 10.0, }) + : super(key: key); + + @override + Widget build(BuildContext context) { + return + ClipRRect( + borderRadius: BorderRadius.circular(radius), + clipBehavior: Clip.antiAlias, + child:url.isNotEmpty? + CachedNetworkImage( + alignment: Alignment.center, + imageUrl: url, + height: height, + width: width, + fit: fit, + placeholder: (context, url) => Image.asset(getAssetLogo("logo_a.png"),color: ThemeConfig.xxlightGrey,fit: fit,), + errorWidget: (context, url, error) => _placeHolder(), + ): + Padding( + padding: const EdgeInsets.all(8.0), + child: Image.asset(getAssetLogo("logo_a.png"),color: ThemeConfig.xxlightGrey,), + ), + ); + + /// #Eski kod + // ClipRRect( + // borderRadius: BorderRadius.circular(radius!), + // child:url.isNotEmpty? + // CachedNetworkImage( + // imageUrl: url, + // height: height, + // width: width, + // fit: BoxFit.cover, + // placeholder: (context, url) => Image.asset(getAssetLogo("logo.png"),color: ThemeConfig.xxlightGrey,), + // errorWidget: (context, url, error) => _placeHolder(), + // ): + // Padding( + // padding: const EdgeInsets.all(8.0), + // child: Image.asset(getAssetLogo("logo.png"),color: ThemeConfig.xxlightGrey,), + // ), + // ); + } + + show(BuildContext context) { + return CachedNetworkImage( + imageUrl: url, + height: height, + width: width, + fit: BoxFit.cover, + placeholder: (context, url) => const Row( + children: [ + CircularProgressIndicator(), + SizedBox( + width: 10, + height: 10, + ) + ], + ), + errorWidget: (context, url, error) => _placeHolder(), + ); + } + + static round({ + required BuildContext context, + required double radius, + required url, + required height, + required width, + }) { + return Container( + height:double.parse(height.toString()) , + width: double.parse(width.toString()), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(double.parse(radius.toString())), + image:url!=null? DecorationImage(image: NetworkImage(url)):DecorationImage(image:AssetImage(getAssetIcon("profile.png"))), + + ), + + ); + //CircleAvatar() + } + + static svg({required String url,double height=40,double width=40}){ + if( url.isEmpty){ + return Container( + child: _staticPlaceHolder()); + } + + return SvgPicture.network( + url, + height:height , + width: width, + fit: BoxFit.contain, + placeholderBuilder: (BuildContext context) => Container( + child: _staticPlaceHolder(), + ), + ); + } + + static roundFileImage({ + required BuildContext context, + required double radius, + required File file, + required height, + required width, + }){ + return Container( + height:double.parse(height.toString()) , + width: double.parse(width.toString()), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(double.parse(radius.toString())), + image:file !=null? DecorationImage(image: FileImage(file)):DecorationImage(image:AssetImage(getAssetIcon("profile.png"))), + + ), + + ); + } + + + Widget _placeHolder(){ + return SizedBox( + height: height, + width: width, + child: Image.asset(getAssetLogo("logo_a.png",),fit: BoxFit.cover,color: ThemeConfig.xxlightGrey,)); + } + static Widget _staticPlaceHolder(){ + return Image.asset(getAssetLogo("logo_a.png"),color: ThemeConfig.xxlightGrey,); + } +} diff --git a/app_code/lib/custom_ui/auth_ui.dart b/app_code/lib/custom_ui/auth_ui.dart new file mode 100644 index 0000000..aa77f1c --- /dev/null +++ b/app_code/lib/custom_ui/auth_ui.dart @@ -0,0 +1,52 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/helpers/common_functions.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; + +class AuthScreen{ + static Widget buildScreen(BuildContext context,Widget child){ + return Scaffold( + backgroundColor: Colors.white, + body:Container( + alignment: Alignment.center, + height: getHeight(context), + decoration: BoxDecoration( + image: DecorationImage(image: AssetImage(getAssetImage("auth_background.png"))) + ), + child: CustomScrollView( + physics: const BouncingScrollPhysics( + parent: AlwaysScrollableScrollPhysics()), + slivers: [ + SliverList( + delegate: SliverChildListDelegate( + + [ + Padding( + padding: const EdgeInsets.only(top: 50.0), + child: Container( + padding: const EdgeInsets.symmetric(horizontal: 8,vertical: 12), + width: 150, + height: 150, + decoration: BoxDecoration( + color: ThemeConfig.white, + borderRadius: BorderRadius.circular(8)), + child: Image.asset(getAssetLogo("img_logo2.png")), + ), + ), + Container( + // alignment: Alignment.center, + padding: EdgeInsets.symmetric(vertical: StyleConfig.padding), + child: child,), + ], + ), + ) + ], + ), + ), + ); + } + +} + + diff --git a/app_code/lib/custom_ui/boxdecorations.dart b/app_code/lib/custom_ui/boxdecorations.dart new file mode 100644 index 0000000..01b84b4 --- /dev/null +++ b/app_code/lib/custom_ui/boxdecorations.dart @@ -0,0 +1,55 @@ + + + +import 'package:cached_network_image/cached_network_image.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:grostore/configs/theme_config.dart'; + +class BoxDecorations{ + static BoxDecoration basic(){ + return BoxDecoration( + border:Border.all( + color: ThemeConfig.lightGrey, + width: 1) , + borderRadius: const BorderRadius.all( + const Radius.circular(2.0), + ) + ); + } + static BoxDecoration image({required String url,radius =0}){ + return BoxDecoration( + borderRadius: BorderRadius.all( + Radius.circular(double.parse(radius.toString())), + ), + image:DecorationImage(image: CachedNetworkImageProvider(url), + fit: BoxFit.cover + ) + ); + } + static BoxDecoration shadow({double radius=0.0, }){ + return BoxDecoration( + borderRadius : BorderRadius.all(Radius.circular(radius)), + boxShadow : [ + BoxShadow( + color: ThemeConfig.xlightGrey.withOpacity(0.5), + offset: Offset(0,1), + blurRadius: 2 + )], + color : ThemeConfig.white, + ); + } + + static BoxDecoration customRadius({required BorderRadiusGeometry radius,Color color = ThemeConfig.white }){ + return BoxDecoration( + borderRadius : radius, + boxShadow : [ + BoxShadow( + color: ThemeConfig.xlightGrey.withOpacity(0.5), + offset: Offset(0,1), + blurRadius: 2 + )], + color : color, + ); + } + +} \ No newline at end of file diff --git a/app_code/lib/custom_ui/category_ui.dart b/app_code/lib/custom_ui/category_ui.dart new file mode 100644 index 0000000..63df88b --- /dev/null +++ b/app_code/lib/custom_ui/category_ui.dart @@ -0,0 +1,33 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/custom_ui/Button.dart'; +import 'package:grostore/custom_ui/Image_view.dart'; +import 'package:grostore/custom_ui/BoxDecorations.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; + + +class CategoryUi extends StatelessWidget { + late String img,name; + CategoryUi({Key? key,required this.img,required this.name}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + decoration:BoxDecorations.shadow(radius: 6.0) , + width: getWidth(context), + padding: EdgeInsets.all(10), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Expanded( + flex: 3, + child: ImageView(url: img,width:40.0,height: 40.0,)), + const SizedBox(height: 8,), + Expanded( + flex: 2, + child: Text(name,style: StyleConfig.fs12,maxLines: 1,textAlign: TextAlign.center,)) + ], + ) + ); + } +} diff --git a/app_code/lib/custom_ui/common_appbar.dart b/app_code/lib/custom_ui/common_appbar.dart new file mode 100644 index 0000000..d2971aa --- /dev/null +++ b/app_code/lib/custom_ui/common_appbar.dart @@ -0,0 +1,43 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/custom_ui/Boxdecorations.dart'; +import 'package:grostore/custom_ui/Button.dart'; +import 'package:grostore/helpers/route.dart'; +import 'package:grostore/screens/main.dart'; + +class CommonAppbar { + static AppBar show( + {required String title, + required BuildContext context, + bool showBackButton = true, + bool gotoMain = false, + PreferredSizeWidget? bottom}) { + return AppBar( + backgroundColor: ThemeConfig.white, + elevation: 0, + title: Text( + title, + style: StyleConfig.fs16fwBold, + ), + centerTitle: true, + leading: showBackButton + ? IconButton( + onPressed: (){ + if (gotoMain) { + MakeRoute.goAndRemoveAll(context, const Main()); + } else { + Navigator.pop(context); + } + }, + icon: Icon( + Icons.arrow_back, + size: 26, + color: ThemeConfig.darkGrey, + ), + ) + : const SizedBox.shrink(), + bottom: bottom, + ); + } +} diff --git a/app_code/lib/custom_ui/filter_dropdown.dart b/app_code/lib/custom_ui/filter_dropdown.dart new file mode 100644 index 0000000..a9a62c3 --- /dev/null +++ b/app_code/lib/custom_ui/filter_dropdown.dart @@ -0,0 +1,122 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; + + +class FilterDropDown extends StatefulWidget { + late List model; + late Function onSelected; + + FilterDropDown({super.key, required this.onSelected, required this.model}); + + @override + State createState() => _FilterDropDownState(); +} + +class _FilterDropDownState extends State { + + TextEditingController controller=TextEditingController(); + List data = []; + DropDownFilterModel? selected; + + @override + void initState() { + // TODO: implement initState + data.addAll(widget.model); + super.initState(); + } + + @override + Widget build(BuildContext context) { + return DropdownButton( + value: selected, + icon: const Icon(Icons.arrow_downward), + elevation: 16, + style: const TextStyle(color: Colors.deepPurple), + underline: Container( + height: 2, + color: Colors.deepPurpleAccent, + ), + onChanged: (DropDownFilterModel? value) { + widget.onSelected(value); + }, + items: [ + DropdownMenuItem( + child: Container( + width: getWidth(context)*0.5, + height: 40, + child: TextField( + controller: controller, + onChanged: (text)async{ + if(text.isNotEmpty){ + List tmp =[]; + for(DropDownFilterModel mo in widget.model){ + if(mo.name.contains(text)){ + tmp.add(mo); + } + } + data.clear(); + data.addAll(tmp); + }else{ + data.clear(); + data.addAll(widget.model); + } + }, + ), + ), + ), + DropdownMenuItem( + child: Container( + width: getWidth(context)*0.5, + height: 40, + child: TextField( + //controller: controller, + onChanged: (text)async{ + if(text.isNotEmpty){ + List tmp =[]; + for(DropDownFilterModel mo in widget.model){ + if(mo.name.contains(text)){ + tmp.add(mo); + } + } + data.clear(); + data.addAll(tmp); + }else{ + data.clear(); + data.addAll(widget.model); + } + }, + ), + ), + ), + //...item(data), + + ], + ); + } + + List> item(List data) { + // data.insert(0, DropDownFilterModel(key: "_search", name: "")); + List> items = []; + + for (DropDownFilterModel model in data) { + items.add( + DropdownMenuItem( + child: Text(model.name), + ) + ); + } + + return items; + } + +} + +class DropDownFilterModel { + late String key; + late String name; + + DropDownFilterModel({required this.key, required this.name}); + +} + + diff --git a/app_code/lib/custom_ui/image_view2.dart b/app_code/lib/custom_ui/image_view2.dart new file mode 100644 index 0000000..eeff06c --- /dev/null +++ b/app_code/lib/custom_ui/image_view2.dart @@ -0,0 +1,141 @@ +import 'dart:io'; + +import 'package:cached_network_image/cached_network_image.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/svg.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/helpers/common_functions.dart'; + +class ImageView2 extends StatelessWidget { + late String url; + double? width, height; + double? radius; + + ImageView2({Key? key, required this.url, this.width, this.height ,this.radius = 0.0}) + : super(key: key); + + @override + Widget build(BuildContext context) { + return + ClipRRect( + borderRadius: BorderRadius.circular(radius!), + child:url.isNotEmpty? + CachedNetworkImage( + imageUrl: url, + height: height, + width: width, + fit: BoxFit.cover, + // placeholder: (context, url) => Image.asset(getAssetLogo("logo_a.png"),color: ThemeConfig.xxlightGrey,fit: BoxFit.contain,), + errorWidget: (context, url, error) => _placeHolder(), + ): + Padding( + padding: const EdgeInsets.all(8.0), + child: Image.asset(getAssetLogo("logo_a.png"),color: ThemeConfig.xxlightGrey,), + ), + ); + + /// #Eski kod + // ClipRRect( + // borderRadius: BorderRadius.circular(radius!), + // child:url.isNotEmpty? + // CachedNetworkImage( + // imageUrl: url, + // height: height, + // width: width, + // fit: BoxFit.cover, + // placeholder: (context, url) => Image.asset(getAssetLogo("logo.png"),color: ThemeConfig.xxlightGrey,), + // errorWidget: (context, url, error) => _placeHolder(), + // ): + // Padding( + // padding: const EdgeInsets.all(8.0), + // child: Image.asset(getAssetLogo("logo.png"),color: ThemeConfig.xxlightGrey,), + // ), + // ); + } + + show(BuildContext context) { + return CachedNetworkImage( + imageUrl: url, + height: height, + width: width, + fit: BoxFit.cover, + placeholder: (context, url) => const Row( + children: [ + CircularProgressIndicator(), + SizedBox( + width: 10, + height: 10, + ) + ], + ), + errorWidget: (context, url, error) => _placeHolder(), + ); + } + + static round({ + required BuildContext context, + required double radius, + required url, + required height, + required width, + }) { + return Container( + height:double.parse(height.toString()) , + width: double.parse(width.toString()), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(double.parse(radius.toString())), + image:url!=null? DecorationImage(image: NetworkImage(url)):DecorationImage(image:AssetImage(getAssetIcon("profile.png"))), + + ), + + ); + //CircleAvatar() + } + + static svg({required String url,double height=40,double width=40}){ + if( url.isEmpty){ + return Container( + child: _staticPlaceHolder()); + } + + return SvgPicture.network( + url, + height:height , + width: width, + fit: BoxFit.contain, + placeholderBuilder: (BuildContext context) => Container( + child: _staticPlaceHolder(), + ), + ); + } + + static roundFileImage({ + required BuildContext context, + required double radius, + required File file, + required height, + required width, + }){ + return Container( + height:double.parse(height.toString()) , + width: double.parse(width.toString()), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(double.parse(radius.toString())), + image:file !=null? DecorationImage(image: FileImage(file)):DecorationImage(image:AssetImage(getAssetIcon("profile.png"))), + + ), + + ); + } + + + Widget _placeHolder(){ + return SizedBox( + height: height, + width: width, + child: Image.asset(getAssetLogo("logo_a.png",),fit: BoxFit.cover,color: ThemeConfig.xxlightGrey,)); + } + static Widget _staticPlaceHolder(){ + return Image.asset(getAssetLogo("logo_a.png"),color: ThemeConfig.xxlightGrey,); + } +} diff --git a/app_code/lib/custom_ui/input_decorations.dart b/app_code/lib/custom_ui/input_decorations.dart new file mode 100644 index 0000000..842dab8 --- /dev/null +++ b/app_code/lib/custom_ui/input_decorations.dart @@ -0,0 +1,45 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/configs/theme_config.dart'; + +class InputDecorations { + static InputDecoration basic({hint_text = "",Widget? prefixIcon}) { + return InputDecoration( + prefixIcon: prefixIcon, + hintText: hint_text, + filled: true, + fillColor: ThemeConfig.white, + hintStyle: TextStyle(fontSize: 12.0, color: ThemeConfig.lightGrey), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide( + color: ThemeConfig.lightGrey, + width: 1), + borderRadius: const BorderRadius.all( + const Radius.circular(2.0), + ), + ), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide( + color: ThemeConfig.lightGrey, + width: 1), + borderRadius: const BorderRadius.all( + const Radius.circular(2.0), + ), + ), + contentPadding: const EdgeInsets.symmetric(horizontal: 16.0)); + } + + static InputDecoration phone({hint_text = "",Widget?prefixIcon}) { + return InputDecoration( + // prefixIcon: prefixIcon, + hintText: hint_text, + hintStyle: TextStyle(fontSize: 12.0, color: ThemeConfig.lightGrey), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: ThemeConfig.lightGrey, width: 1), + borderRadius: const BorderRadius.all(Radius.circular(10)), + ), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: ThemeConfig.red, width: 1), + borderRadius: const BorderRadius.all(Radius.circular(10))), + contentPadding: const EdgeInsets.symmetric(horizontal: 16.0)); + } +} diff --git a/app_code/lib/custom_ui/loading.dart b/app_code/lib/custom_ui/loading.dart new file mode 100644 index 0000000..1b096d6 --- /dev/null +++ b/app_code/lib/custom_ui/loading.dart @@ -0,0 +1,31 @@ + + + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:grostore/app_lang.dart'; + +class Loading{ + static BuildContext? _context; + + static show(BuildContext context){ + Loading._context=context; + showDialog(context: context, builder: (context){ + return AlertDialog(content: Container( + child: Row( + children: [ + CircularProgressIndicator(), + SizedBox(width: 20,), + Text(AppLang.local(context).please_wait_ucf), + ], + ), + ),); + }); + } + + static close(){ + if(Loading._context!=null){ + Navigator.pop(_context!); + } + } +} diff --git a/app_code/lib/custom_ui/no_data.dart b/app_code/lib/custom_ui/no_data.dart new file mode 100644 index 0000000..e49d723 --- /dev/null +++ b/app_code/lib/custom_ui/no_data.dart @@ -0,0 +1,23 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; + + +class NoData extends StatefulWidget { + const NoData({super.key}); + + @override + State createState() => _NoDataState(); +} + +class _NoDataState extends State { + @override + Widget build(BuildContext context) { + return SizedBox( + height: getHeight(context), + child: Center( + child: Text(AppLang.local(context).data_is_not_available), + ), + ); + } +} diff --git a/app_code/lib/custom_ui/order_item.dart b/app_code/lib/custom_ui/order_item.dart new file mode 100644 index 0000000..a66afa2 --- /dev/null +++ b/app_code/lib/custom_ui/order_item.dart @@ -0,0 +1,144 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/custom_ui/BoxDecorations.dart'; +import 'package:grostore/custom_ui/Button.dart'; +import 'package:grostore/custom_ui/Image_view.dart'; +import 'package:grostore/helpers/common_functions.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; +import 'package:grostore/models/order/order_details_response.dart'; +import 'package:grostore/presenters/refund_presenter.dart'; +import 'package:provider/provider.dart'; + +class OrderItem extends StatelessWidget { + Item item; + RefundResult? onReq; + BuildContext context; + + OrderItem({super.key, required this.item, required this.context,this.onReq}); + + TextEditingController controller = TextEditingController(); + + @override + Widget build(BuildContext context) { + return Container( + //width: (getWidth(context)*0.5)-24, + height: 160, + decoration: BoxDecorations.shadow(radius: 8), + //padding: EdgeInsets.all(8), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Expanded( + child: Container( + width: 160, + // height: 50, + // padding: EdgeInsets.only(top: 10), + alignment: Alignment.center, + child: ImageView( + url: item.product?.thumbnailImage ?? "", + width: 134, + height: 92, + )), + ), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(left: 12.0, top: 12), + child: Text( + item.product?.categories.first.name ?? "", + style: StyleConfig.fs10, + ), + ), + + Padding( + padding: const EdgeInsets.only(left: 12.0, top: 4), + child: Text( + item.product?.name ?? "", + style: StyleConfig.fs14fwBold, + maxLines: 1, + ), + ), + Padding( + padding: const EdgeInsets.only(left: 12.0, top: 8), + child: Text( + "${item.qty} x ${showPrice(item.product?.price ?? '')}", + style: StyleConfig.fs14cRedfwBold, + ), + ), + Padding( + padding: const EdgeInsets.only(left: 12.0, top: 8), + child: Text( + showPrice(item.totalPrice ?? ""), + style: StyleConfig.fs14cRedfwBold, + ), + ), + if(item.refund_status!="off") + Container( + margin: EdgeInsets.only(top: 5), + alignment: Alignment.center, + child: Button( + onPressed: item.refund_status == "request" + ? (){ + refundDialog(); + }:null, + shape: StyleConfig.buttonRadius(5), + padding: EdgeInsets.symmetric(horizontal: 10), + color: item.refund_status == "request" + ? ThemeConfig.accentColor + : null, + child: Text( + "Refund ${item.refund_status.toString()}".toUpperCase(), + style: item.refund_status == "request" + ? StyleConfig.fs12cWhite + : StyleConfig.fs12, + ) + ), + ) + ], + ), + ), + ], + ), + ); + } + + refundDialog() { + return showDialog( + context: context, + builder: (context) => AlertDialog( + title: const Text("Refund Reason"), + content: Container( + padding: EdgeInsets.symmetric(horizontal: 10,vertical: 10), + decoration: BoxDecorations.basic().copyWith(border: Border.all(color: ThemeConfig.grey)), + height: 100, + width: getWidth(context) * 0.5, + child: TextField( + controller: controller, + decoration: InputDecoration.collapsed(hintText: "reason"), + ), + ), + actions: [ + Button( + color: ThemeConfig.accentColor, + onPressed:() { + Navigator.pop(context); + Provider.of(context, listen: false) + .refundReq(this.context,item.id,controller.text.trim()).then((value) => onReq != null?onReq!(value):null); + }, + child: Text(AppLang.local(context).submit,style: StyleConfig.fs12cWhite,)) + ], + )); + } +} +typedef RefundResult = Function(bool value); + + + + diff --git a/app_code/lib/custom_ui/order_view_model.dart b/app_code/lib/custom_ui/order_view_model.dart new file mode 100644 index 0000000..e4fe2bd --- /dev/null +++ b/app_code/lib/custom_ui/order_view_model.dart @@ -0,0 +1,70 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/custom_ui/BoxDecorations.dart'; +import 'package:grostore/custom_ui/Button.dart'; +import 'package:grostore/custom_ui/Image_view.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; +import 'package:grostore/helpers/route.dart'; +import 'package:grostore/models/order/orders_response.dart'; +import 'package:grostore/screens/order/order_details.dart'; + + +class OrderViewModel extends StatelessWidget { + OrderViewModel({Key? key ,required this.orderInfo,required this.context}) : super(key: key); + OrderInfo orderInfo; + // int orderId; + BuildContext context; + + @override + Widget build(BuildContext context) { + return Container( + width: getWidth(this.context), + height: 100, + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + decoration: BoxDecorations.shadow(radius: 2), + child: Button( + onPressed: (){ + print("} ${orderInfo.id} {"); + MakeRoute.go(this.context, OrderDetails(code: orderInfo.group_id,)); + }, + child: Row( + children: [ + Expanded( + flex: 1, + child: Image(image: AssetImage("assets/logos/logo_a.png"),) + ), + Expanded( + flex:3, + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + SizedBox( + width: getWidth(this.context)*0.50, + child: Text("Buyurtma raqami: ${orderInfo.group_id}",style: StyleConfig.fs16,)), + // SizedBox( + // width: getWidth(this.context)*0.50, + // child: Text(orderInfo.item.product?.categories.first.name??"",style: StyleConfig.fs14fwNormal,)), + SizedBox( + width: getWidth(this.context)*0.50, + child: Text("Umumiy summa: ${orderInfo.item.totalPrice}",style: StyleConfig.fs14fwBold,)), + SizedBox( + width: getWidth(this.context)*0.50, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text("Buyurtma sanasi:",style: StyleConfig.fs12,maxLines: 1,), + Flexible( + flex: 1, + child: Text("${orderInfo.date.year}/0${orderInfo.date.day}/0${orderInfo.date.month}",style: StyleConfig.fs11,maxLines: 1,textAlign: TextAlign.right,)), + ], + ), + ), + ], + ), + ) + ], + ), + ), + ); + } +} diff --git a/app_code/lib/custom_ui/product_card.dart b/app_code/lib/custom_ui/product_card.dart new file mode 100644 index 0000000..69ac3c6 --- /dev/null +++ b/app_code/lib/custom_ui/product_card.dart @@ -0,0 +1,192 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/custom_classes/system_data.dart'; +import 'package:grostore/custom_ui/Button.dart'; +import 'package:grostore/custom_ui/Image_view.dart'; +import 'package:grostore/custom_ui/BoxDecorations.dart'; +import 'package:grostore/helpers/common_functions.dart'; +import 'package:grostore/helpers/route.dart'; +import 'package:grostore/models/product_mini_response.dart'; +import 'package:grostore/presenters/cart_presenter.dart'; +import 'package:grostore/screens/auth/login.dart'; +import 'package:grostore/screens/product_details.dart'; +import 'package:provider/provider.dart'; + + +class ProductCard extends StatelessWidget { + late ProductMini product; + late BuildContext context; + ProductCard({Key? key,required this.product ,required this.context}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + width: 160, + height: 160, + alignment: Alignment.center, + decoration: BoxDecorations.shadow(radius: 8), + //padding: EdgeInsets.all(8), + child: Stack( + children: [ + ClipRRect( + borderRadius: const BorderRadius.all(Radius.circular(8)), + clipBehavior: Clip.antiAlias, + child: Button( + minWidth: MediaQuery.sizeOf(context).width, + onPressed: (){ + MakeRoute.productRoute(this.context, ProductDetails(slug: product.slug)); + }, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Expanded( + flex:7, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Center( + child: Hero( + tag: product, + child: ImageView(url: product.thumbnailImage,fit: BoxFit.contain,)), + ), + ), + ), + Expanded( + flex: 6, + child: Padding( + padding: const EdgeInsets.only(bottom: 8,left: 8,right: 28,top: 8), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Expanded( + flex:6, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Text(product.categories.first.name,style: StyleConfig.fs10,overflow: TextOverflow.ellipsis,), + SizedBox(width: MediaQuery.sizeOf(context).width,child: Text(product.name,style: StyleConfig.fs14fwBold,maxLines: 2,overflow: TextOverflow.ellipsis,)), + ], + ), + ), + Expanded( + flex: 3, + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Text(showPrice(product.price),style: StyleConfig.fs14cRedfwBold,), + ], + ), + ), + ], + ), + ), + ), + + ], + ), + ), + ), + + /// #Add Button + Positioned( + bottom: -4, + right: -4, + child: Button.minSize( + color: ThemeConfig.fontColor, + onPressed: (){ + if(SystemData.isLogIn){ + if(product.variations.length==1) { + Provider.of(context, listen: false) + .addToCart(product.variations.first.id, 1, context); + }else{ + MakeRoute.productRoute(this.context, ProductDetails(slug: product.slug)); + } + }else{ + MakeRoute.productRoute(this.context, const Login()); + } + + }, + width: 40, + height: 40, + shape: const RoundedRectangleBorder(borderRadius: BorderRadius.only(topLeft: Radius.circular(8),bottomRight: Radius.circular(8))), + child: const Icon(Icons.add,color: ThemeConfig.white,), + )), + ], + ), + + ); + + /// #Eski kod + // Container( + // width: 160, + // height: 160, + // decoration: BoxDecorations.shadow(radius: 8), + // //padding: EdgeInsets.all(8), + // child: Stack( + // children: [ + // Button( + // minWidth: 160, + // onPressed: (){ + // MakeRoute.productRoute(this.context, ProductDetails(slug: product.slug)); + // }, + // child: Column( + // crossAxisAlignment: CrossAxisAlignment.start, + // mainAxisAlignment: MainAxisAlignment.center, + // children: [ + // Container( + // width: 160, + // // padding: EdgeInsets.only(top: 10), + // alignment: Alignment.center, + // child: Hero( + // tag: product, + // child: ImageView(url: product.thumbnailImage,width: 134,height: 92,))), + // Padding( + // padding: const EdgeInsets.only(left: 12.0,top: 12), + // child: Text(product.categories.first.name,style: StyleConfig.fs10,), + // ), + // Padding( + // padding: const EdgeInsets.only(left: 12.0,top: 4), + // child: Text(product.name,style: StyleConfig.fs14fwBold,maxLines: 2,), + // ), + // Padding( + // padding: const EdgeInsets.only(left: 12.0,top: 8), + // child: Text(showPrice(product.price),style: StyleConfig.fs14cRedfwBold,), + // ), + // + // ], + // ), + // ), + // Positioned( + // bottom: -4, + // right: -4, + // child: Button.minSize( + // color: ThemeConfig.fontColor, + // onPressed: (){ + // if(SystemData.isLogIn){ + // if(product.variations.length==1) { + // Provider.of(context, listen: false) + // .addToCart(product.variations.first.id, 1, context); + // }else{ + // MakeRoute.productRoute(this.context, ProductDetails(slug: product.slug)); + // + // } + // }else{ + // MakeRoute.productRoute(this.context, Login()); + // + // } + // + // }, + // width: 40, + // height: 40, + // shape: RoundedRectangleBorder(borderRadius: BorderRadius.only(topLeft: Radius.circular(8),bottomRight: Radius.circular(8))), + // child: Icon(Icons.add,color: ThemeConfig.white,), + // )), + // ], + // ), + // + // ); + } +} diff --git a/app_code/lib/custom_ui/shimmers.dart b/app_code/lib/custom_ui/shimmers.dart new file mode 100644 index 0000000..9143295 --- /dev/null +++ b/app_code/lib/custom_ui/shimmers.dart @@ -0,0 +1,84 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:shimmer/shimmer.dart'; + +class Shimmers extends StatelessWidget { + late double width, height; + double? radius; + + Shimmers( + {Key? key, required this.width, required this.height, this.radius = 0}) + : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + width: width, + height: height, + child: Shimmer.fromColors( + baseColor: ThemeConfig.xlightGrey, + highlightColor: ThemeConfig.lightGrey, + child: Container( + decoration: BoxDecoration( + color: ThemeConfig.mediumGrey, + borderRadius: + radius != null ? BorderRadius.circular(radius!) : null, + ), + width: width, + height: height), + ), + ); + } + + static list(int items, double width, double height) { + return ListView.separated( + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemBuilder: (context, index) { + return Shimmers(width: width, height: height); + }, + separatorBuilder: (context, index) { + return const SizedBox( + height: 10, + ); + }, + itemCount: items); + } + + static horizontalList(int items, double width, double height) { + return ListView.separated( + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + scrollDirection: Axis.horizontal, + itemBuilder: (context, index) { + return Shimmers(width: width, height: height); + }, + separatorBuilder: (context, index) { + return const SizedBox( + width: 10, + ); + }, + itemCount: items); + } + + static gridShimmer(int crossAxisCount, int items, + {double width = 160, double height = 186, double radius = 8}) { + return GridView.builder( + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: crossAxisCount, + crossAxisSpacing: 16, + mainAxisSpacing: 16, + childAspectRatio: 0.8), + itemCount: items, + itemBuilder: (context, index) { + return Shimmers( + width: double.parse(width.toString()), + height: double.parse(height.toString()), + radius: double.parse(radius.toString()), + ); + }); + } +} diff --git a/app_code/lib/custom_ui/toast_ui.dart b/app_code/lib/custom_ui/toast_ui.dart new file mode 100644 index 0000000..54d24ab --- /dev/null +++ b/app_code/lib/custom_ui/toast_ui.dart @@ -0,0 +1,70 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/helpers/route.dart'; +import 'package:grostore/screens/cart.dart'; +import 'package:toast/toast.dart'; + + +class ToastUi{ +static simpleToast(context,message){ + ToastContext().init(context); + return Toast.show( + message, + border: Border.all(color: ThemeConfig.fontColor,width: 1), + backgroundColor: ThemeConfig.white, + textStyle: StyleConfig.fs14fwNormal, + duration: Toast.lengthLong,gravity: Toast.center); + } + +static show(BuildContext mainContext,message){ + showDialog( + context: mainContext, builder: (context){ + Future.delayed(const Duration(milliseconds: 250)).then((value) => Navigator.pop(mainContext)); + return AlertDialog( + content: Text(message,style: StyleConfig.fs14fwNormal,),); + }); +} + +static show3(BuildContext mainContext,message){ + showDialog( + context: mainContext, builder: (context){ + Future.delayed(const Duration(milliseconds: 1200)).then((value) => Navigator.pop(mainContext)); + return AlertDialog( + backgroundColor: Colors.white, + content: Text(message,style: StyleConfig.fs14fwNormal,),); + }); +} +static showAdd(BuildContext mainContext,message){ + showDialog( + useSafeArea: false, + barrierDismissible: true, + barrierColor: Colors.transparent, + context: mainContext, builder: (context){ + Future.delayed(const Duration(milliseconds: 250)).then((value) => Navigator.pop(mainContext)); + return AlertDialog( + elevation: 0, + content: InkWell( + onTap: (){ + Navigator.of(context).push(MaterialPageRoute(builder: (_)=> const Cart())); + }, + child: SizedBox( + height: 20, + child: Text(message,style: StyleConfig.fs14fwNormal,))),); + }); +} +static showAdd2(BuildContext mainContext,message){ + showDialog( + // useSafeArea: false, + // barrierDismissible: true, + // barrierColor: Colors.transparent, + context: mainContext, builder: (context){ + // Future.delayed(const Duration(milliseconds: 200)).then((value) => Navigator.pop(mainContext)); + return AlertDialog( + // elevation: 0, + content: InkWell( + onTap: (){}, + child: Text(message,style: StyleConfig.fs14fwNormal,)),); + }); +} +} \ No newline at end of file diff --git a/app_code/lib/helpers/common_functions.dart b/app_code/lib/helpers/common_functions.dart new file mode 100644 index 0000000..da04a6d --- /dev/null +++ b/app_code/lib/helpers/common_functions.dart @@ -0,0 +1,76 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:grostore/custom_classes/system_data.dart'; +import 'package:grostore/helpers/shared_value_helper.dart'; +import 'package:grostore/presenters/main_persenter.dart'; +import 'package:grostore/screens/main.dart'; +import 'package:provider/provider.dart'; + +// bool isEmail(String input){ +// return RegExp(r'^.+@[a-zA-Z]+\.{1}[a-zA-Z]+(\.{0,1}[a-zA-Z]+)$').hasMatch(input); +// } + +resetApp(BuildContext context){ + Provider.of(context, listen: false).dispose(); + Navigator.pushAndRemoveUntil(context, MaterialPageRoute(builder: (context)=>Main()), (route) => false); +} + +getAssetImage(String img){ + return "assets/images/$img"; +} +getAssetIcon(String icon){ + return "assets/icons/$icon"; +} +String getAssetLogo(String logo){ + return "assets/logos/$logo"; +} +getAssetFlag(String name){ + return "assets/flags/$name"; +} + + +String getQueryParameter(BuildContext context , String key){ + String value = ""; +final path = ModalRoute.of(context); + if(path !=null) { + String url = path.settings.name!; + List route = url.split("?"); + if (route.isNotEmpty && route[1] != "") { + List qParameters = route[1].split("&"); + + qParameters.forEach((element) { + List tmp = element.split("="); + if (tmp.isNotEmpty && tmp[0]==key) { + value = tmp[1]; + } + }); + } + } + return value; +} + +Map getCurrencyHeader(){ + return system_currency.$.isNotEmpty?{ + "Currency-Code": system_currency.$ + }:{}; +} + +Map getCommonHeader(){ + return { + "Accept": "application/json", + "Content-Type": "application/json", + "App-Language": app_language.$, + "Stock-Location-Id":stock_location_id.$ + }; +} + + Map getCouponHeader(){ + return { + "Coupon-Code":SystemData.couponCode + }; +} + +String showPrice(String price){ + return price; + //price.replaceAll(SystemData.systemCurrency?.code??"", SystemData.systemCurrency?.symbol??""); +} \ No newline at end of file diff --git a/app_code/lib/helpers/device_info_helper.dart b/app_code/lib/helpers/device_info_helper.dart new file mode 100644 index 0000000..dbb3d5a --- /dev/null +++ b/app_code/lib/helpers/device_info_helper.dart @@ -0,0 +1,8 @@ +import 'package:flutter/material.dart'; + +double getWidth(context){ + return MediaQuery.of(context).size.width; +} +double getHeight(context){ + return MediaQuery.of(context).size.height; +} \ No newline at end of file diff --git a/app_code/lib/helpers/route.dart b/app_code/lib/helpers/route.dart new file mode 100644 index 0000000..644d84d --- /dev/null +++ b/app_code/lib/helpers/route.dart @@ -0,0 +1,39 @@ +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:grostore/presenters/cart_presenter.dart'; +import 'package:grostore/presenters/check_out_presenter.dart'; +import 'package:grostore/screens/product_details.dart'; +import 'package:provider/provider.dart'; + +class MakeRoute{ + static Navigator route = const Navigator(); + static go(BuildContext context,dynamic newRoute){ + Navigator.push(context, MaterialPageRoute(builder: (context)=>newRoute)); + + } + static goAndRemoveAll(context,dynamic newRoute){ + MakeRoute.clearProviders(context); + Navigator.pushAndRemoveUntil(context, MaterialPageRoute(builder: (context)=>newRoute),(route)=>false); + } + + static productRoute(BuildContext context,Widget route){ + + if(context.widget.runtimeType == ProductDetails){ + + Navigator.pushReplacement(context, MaterialPageRoute(builder: (context)=>route)); + }else{ + Navigator.push(context, MaterialPageRoute(builder: (context)=>route)); + } + } + static goName(BuildContext context, String route){ + Navigator.pushNamed( context, route); + } + + + static clearProviders(BuildContext context){ + Provider.of(context,listen: false).clearAll(); + Provider.of(context,listen: false).clearAll(); + } + + +} \ No newline at end of file diff --git a/app_code/lib/helpers/shared_value_helper.dart b/app_code/lib/helpers/shared_value_helper.dart new file mode 100644 index 0000000..a37a7ec --- /dev/null +++ b/app_code/lib/helpers/shared_value_helper.dart @@ -0,0 +1,42 @@ + +import 'package:shared_value/shared_value.dart'; + +final SharedValue show_landing_page = SharedValue( + value: true, // initial value + key: "show_landing_page", + autosave: true// disk storage key for shared_preferences +); + +final SharedValue access_token = SharedValue( + value: "", // initial value + key: "access_token", + autosave: true// disk storage key for shared_preferences +); +final SharedValue app_language = SharedValue( + // initial value + key: "app_mobile_language", + value: "en", + autosave: true +); + +final SharedValue language_is_rtl = SharedValue( + // initial value + key: "language_is_rtl", + value: false, + autosave: true +); +final SharedValue server_app_language = SharedValue( + value: "en", // initial value + key: "server_app_language", + autosave: true// disk storage key for shared_preferences +); + +final SharedValue system_currency = SharedValue( + key: "system_currency", + value: '', +); +final SharedValue stock_location_id = SharedValue( + key: "stock_location_id", + value: '', + autosave: true, +); diff --git a/app_code/lib/helpers/utils.dart b/app_code/lib/helpers/utils.dart new file mode 100644 index 0000000..c71a20b --- /dev/null +++ b/app_code/lib/helpers/utils.dart @@ -0,0 +1,6 @@ +import 'package:intl/intl.dart'; + +class Utils { + static formatPrice(double price) => '\$ ${price.toStringAsFixed(2)}'; + static formatDate(DateTime date) => DateFormat.yMd().format(date); +} \ No newline at end of file diff --git a/app_code/lib/l10n/app_en.arb b/app_code/lib/l10n/app_en.arb new file mode 100644 index 0000000..c0ce65d --- /dev/null +++ b/app_code/lib/l10n/app_en.arb @@ -0,0 +1,166 @@ +{ + "hellow": "hellow", + "please_enter_email": "Please enter email", + "please_enter_name": "Please enter name", + "please_enter_phone": "Please enter phone number", + "please_enter_valid_email": "Please enter valid email", + "please_enter_confirm_password": "Please enter confirm password", + "password_and_confirm_password_is_not_matching": "Password and Confirm password do not match", + "please_enter_password": "Please enter password", + "password_must_be_at_last_6_digit": "Password must be at last 6 digit.", + "welcome_to_online_fresh_food_grocery_application": "Welcome to\nOnline Fresh Food Grocery\nApplication", + "energetically_streamline_one_to_one_web_readiness_before_extensive_meta_services": "Energetically streamline one-to-one web-readiness before extensive meta-services.", + "best_quality_organic_grocery_app_platform_ucf": "Best Quality Organic Grocery App Platform", + "easy_payment_method": "Easy Payment Method", + "skip": "Skip", + "welcome_to_back": "Welcome to Back!", + "login": "Login", + "register": "Register", + "register_now_ucf": "Register Now", + "create_new_account_ucf": "Create New Account", + "email": "Email", + "name": "Name", + "phone": "Phone", + "password": "Password", + "new_password_ucf": "New Password", + "confirm_password_ucf": "Confirm Password", + "sign_up_ucf": "Sign Up", + "already_have_an_account": "Already Have an Account?", + "not_a_member": "Not a member?", + "forgot_password_q_ucf": "Forgot Password?", + "forgot_password_ucf": "Forgot Password", + "send": "Send", + "enter_otp_code": "Enter OTP code", + "reset_password_ucf": "Reset Password", + "otp_all_cap": "OTP", + "resend_otp_all_cap": "Resend OTP", + "home": "Home", + "categories": "Categories", + "cart": "Cart", + "profile": "Profile", + "search_product_ucf": "Search Product", + "top_categories_ucf": "Top Categories", + "best_selling_products_ucf": "Best Selling Products", + "description": "Description", + "price": "Price", + "related_product_ucf": "Related Product", + "edit_profile_ucf": "Edit Profile", + "voucher_n_offers_ucf": "Vouchers & Offers", + "favorite": "Favorite", + "order_n_recording_ucf": "Order & Recording", + "my_profile_ucf": "My Profile", + "help_center_ucf": "Help Center", + "address": "Address", + "notification": "Notification", + "security": "Security", + "track_my_order_ucf": "Track My Order", + "wallet_history_ucf": "Wallet History", + "refund_history_ucf": "Refund History", + "settings": "Settings", + "terms_n_conditions_ucf": "Terms & Conditions", + "log_out_ucf": "Log Out", + "add_to_cart": "Add to cart", + "pick_a_location": "Pick a location", + "locations": "Locations", + "data_is_not_available": "Data is not available", + "product_stock_not_available": "Product stock not available", + "out_of_stock_ucf": "Out of stock", + "order_info_ucf": "Order Info", + "subtotal": "Subtotal", + "delivery_fee_ucf": "Delivery Fee", + "total": "Total", + "review_n_payment_ucf": "Review & Payment", + "promo_code_ucf": "Promo Code", + "apply": "Apply", + "coupon_discount_ucf": "Coupon Discount", + "check_out_ucf": "Check Out", + "delivery_address_ucf": "Delivery Address", + "billing_address_ucf": "Billing Address", + "alternative_phone_ucf": "Alternative Phone", + "additional_info_ucf": "Additional Info", + "tax": "Tax", + "available_logistics_ucf": "Available Logistics", + "please_wait_ucf": "Please Wait...", + "something_went_wrong": "Something went wrong", + "orders": "Orders", + "empty": "Empty!", + "all_order": "All Order", + "pending": "Pending", + "processing": "Processing", + "delivered": "Delivered", + "filter": "Filter", + "price_range_ucf": "Price Range", + "to": "To", + "next": "Next", + "coupons": "Coupons", + "days": "Days", + "hours": "Hours", + "min": "Min", + "sec": "Sec", + "copy_code_ucf": "Copy Code", + "wishlist": "Wishlist", + "add": "Add", + "add_new_address_ucf": "Add New Address", + "update_address": "Update Address", + "select_country": "Select country", + "select_state": "Select state", + "select_city": "Select city", + "country": "Country", + "state": "State", + "city": "City", + "default_address": "Default address", + "select_one": "Select one", + "save": "Save", + "close": "Close", + "please_select_a_country": "Please select a country", + "please_select_a_state": "Please select a state", + "please_select_a_city": "Please select a city", + "please_enter_address": "Please enter address", + "date": "Date", + "note": "Note", + "order_has_been_placed": "Order has been placed", + "order_tracking": "Order Tracking", + "currency": "Currency", + "order_details": "Order details", + "password_change_ucf": "Password Change", + "update_password_ucf": "Update Password", + "basic_info": "Basic info", + "update_profile_ucf": "Update Profile", + "cancelled": "Cancelled", + "submit": "Submit", + "go_to_cart": "Go to cart", + "all_products_ucf": "All Products", + "no_more_data": "No more data", + "place_order": "Place Order", + "reg_delivery": "Regular delivery", + "we_will_deliver_your_products_soon": "We will deliver your products soon.", + "we_are_not_shipping_to_your_city_now": "We are not shipping to your city now.", + "preferred_delivery_time": "Preferred delivery time", + "payment_method": "Payment Method", + "personal_information": "Personal Information", + "tips": "Comment", + "add_tips_for_deliveryman": "Add tips for deliveryman", + "order_summary": "Order Summary", + "when_receiving_by_cash": "When receiving by cash", + "when_receiving_by_card": "When receiving by card", + "add_to_cart": "Add to cart", + "update": "Update", + "order_accepted": "Order accepted", + "success_login": "Logged in successfully", + "success_register": "Successfully registered", + "no_such_user_exists": "No such user exists", + "a": "_", + "a": "_", + "a": "_", + "a": "_", + "a": "_", + "a": "_", + "a": "_", + "a": "_", + "a": "_", + "a": "_", + "a": "_", + "a": "_", + "download_invoice":"Download invoice", + "image_mustbe_less_1_mb": "Image size must be less than 1 MB" +} \ No newline at end of file diff --git a/app_code/lib/l10n/app_localizations.dart b/app_code/lib/l10n/app_localizations.dart new file mode 100644 index 0000000..3ad1f77 --- /dev/null +++ b/app_code/lib/l10n/app_localizations.dart @@ -0,0 +1,1050 @@ +import 'dart:async'; + +import 'package:flutter/foundation.dart'; +import 'package:flutter/widgets.dart'; +import 'package:flutter_localizations/flutter_localizations.dart'; +import 'package:intl/intl.dart' as intl; + +import 'app_localizations_en.dart'; +import 'app_localizations_ru.dart'; +import 'app_localizations_uz.dart'; + +// ignore_for_file: type=lint + +/// Callers can lookup localized strings with an instance of AppLocalizations +/// returned by `AppLocalizations.of(context)`. +/// +/// Applications need to include `AppLocalizations.delegate()` in their app's +/// `localizationDelegates` list, and the locales they support in the app's +/// `supportedLocales` list. For example: +/// +/// ```dart +/// import 'l10n/app_localizations.dart'; +/// +/// return MaterialApp( +/// localizationsDelegates: AppLocalizations.localizationsDelegates, +/// supportedLocales: AppLocalizations.supportedLocales, +/// home: MyApplicationHome(), +/// ); +/// ``` +/// +/// ## Update pubspec.yaml +/// +/// Please make sure to update your pubspec.yaml to include the following +/// packages: +/// +/// ```yaml +/// dependencies: +/// # Internationalization support. +/// flutter_localizations: +/// sdk: flutter +/// intl: any # Use the pinned version from flutter_localizations +/// +/// # Rest of dependencies +/// ``` +/// +/// ## iOS Applications +/// +/// iOS applications define key application metadata, including supported +/// locales, in an Info.plist file that is built into the application bundle. +/// To configure the locales supported by your app, you’ll need to edit this +/// file. +/// +/// First, open your project’s ios/Runner.xcworkspace Xcode workspace file. +/// Then, in the Project Navigator, open the Info.plist file under the Runner +/// project’s Runner folder. +/// +/// Next, select the Information Property List item, select Add Item from the +/// Editor menu, then select Localizations from the pop-up menu. +/// +/// Select and expand the newly-created Localizations item then, for each +/// locale your application supports, add a new item and select the locale +/// you wish to add from the pop-up menu in the Value field. This list should +/// be consistent with the languages listed in the AppLocalizations.supportedLocales +/// property. +abstract class AppLocalizations { + AppLocalizations(String locale) + : localeName = intl.Intl.canonicalizedLocale(locale.toString()); + + final String localeName; + + static AppLocalizations? of(BuildContext context) { + return Localizations.of(context, AppLocalizations); + } + + static const LocalizationsDelegate delegate = + _AppLocalizationsDelegate(); + + /// A list of this localizations delegate along with the default localizations + /// delegates. + /// + /// Returns a list of localizations delegates containing this delegate along with + /// GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate, + /// and GlobalWidgetsLocalizations.delegate. + /// + /// Additional delegates can be added by appending to this list in + /// MaterialApp. This list does not have to be used at all if a custom list + /// of delegates is preferred or required. + static const List> localizationsDelegates = + >[ + delegate, + GlobalMaterialLocalizations.delegate, + GlobalCupertinoLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + ]; + + /// A list of this localizations delegate's supported locales. + static const List supportedLocales = [ + Locale('en'), + Locale('ru'), + Locale('uz') + ]; + + /// No description provided for @hellow. + /// + /// In en, this message translates to: + /// **'hellow'** + String get hellow; + + /// No description provided for @please_enter_email. + /// + /// In en, this message translates to: + /// **'Please enter email'** + String get please_enter_email; + + /// No description provided for @please_enter_name. + /// + /// In en, this message translates to: + /// **'Please enter name'** + String get please_enter_name; + + /// No description provided for @please_enter_phone. + /// + /// In en, this message translates to: + /// **'Please enter phone number'** + String get please_enter_phone; + + /// No description provided for @please_enter_valid_email. + /// + /// In en, this message translates to: + /// **'Please enter valid email'** + String get please_enter_valid_email; + + /// No description provided for @please_enter_confirm_password. + /// + /// In en, this message translates to: + /// **'Please enter confirm password'** + String get please_enter_confirm_password; + + /// No description provided for @password_and_confirm_password_is_not_matching. + /// + /// In en, this message translates to: + /// **'Password and Confirm password do not match'** + String get password_and_confirm_password_is_not_matching; + + /// No description provided for @please_enter_password. + /// + /// In en, this message translates to: + /// **'Please enter password'** + String get please_enter_password; + + /// No description provided for @password_must_be_at_last_6_digit. + /// + /// In en, this message translates to: + /// **'Password must be at last 6 digit.'** + String get password_must_be_at_last_6_digit; + + /// No description provided for @welcome_to_online_fresh_food_grocery_application. + /// + /// In en, this message translates to: + /// **'Welcome to\nOnline Fresh Food Grocery\nApplication'** + String get welcome_to_online_fresh_food_grocery_application; + + /// No description provided for @energetically_streamline_one_to_one_web_readiness_before_extensive_meta_services. + /// + /// In en, this message translates to: + /// **'Energetically streamline one-to-one web-readiness before extensive meta-services.'** + String + get energetically_streamline_one_to_one_web_readiness_before_extensive_meta_services; + + /// No description provided for @best_quality_organic_grocery_app_platform_ucf. + /// + /// In en, this message translates to: + /// **'Best Quality Organic Grocery App Platform'** + String get best_quality_organic_grocery_app_platform_ucf; + + /// No description provided for @easy_payment_method. + /// + /// In en, this message translates to: + /// **'Easy Payment Method'** + String get easy_payment_method; + + /// No description provided for @skip. + /// + /// In en, this message translates to: + /// **'Skip'** + String get skip; + + /// No description provided for @welcome_to_back. + /// + /// In en, this message translates to: + /// **'Welcome to Back!'** + String get welcome_to_back; + + /// No description provided for @login. + /// + /// In en, this message translates to: + /// **'Login'** + String get login; + + /// No description provided for @register. + /// + /// In en, this message translates to: + /// **'Register'** + String get register; + + /// No description provided for @register_now_ucf. + /// + /// In en, this message translates to: + /// **'Register Now'** + String get register_now_ucf; + + /// No description provided for @create_new_account_ucf. + /// + /// In en, this message translates to: + /// **'Create New Account'** + String get create_new_account_ucf; + + /// No description provided for @email. + /// + /// In en, this message translates to: + /// **'Email'** + String get email; + + /// No description provided for @name. + /// + /// In en, this message translates to: + /// **'Name'** + String get name; + + /// No description provided for @phone. + /// + /// In en, this message translates to: + /// **'Phone'** + String get phone; + + /// No description provided for @password. + /// + /// In en, this message translates to: + /// **'Password'** + String get password; + + /// No description provided for @new_password_ucf. + /// + /// In en, this message translates to: + /// **'New Password'** + String get new_password_ucf; + + /// No description provided for @confirm_password_ucf. + /// + /// In en, this message translates to: + /// **'Confirm Password'** + String get confirm_password_ucf; + + /// No description provided for @sign_up_ucf. + /// + /// In en, this message translates to: + /// **'Sign Up'** + String get sign_up_ucf; + + /// No description provided for @already_have_an_account. + /// + /// In en, this message translates to: + /// **'Already Have an Account?'** + String get already_have_an_account; + + /// No description provided for @not_a_member. + /// + /// In en, this message translates to: + /// **'Not a member?'** + String get not_a_member; + + /// No description provided for @forgot_password_q_ucf. + /// + /// In en, this message translates to: + /// **'Forgot Password?'** + String get forgot_password_q_ucf; + + /// No description provided for @forgot_password_ucf. + /// + /// In en, this message translates to: + /// **'Forgot Password'** + String get forgot_password_ucf; + + /// No description provided for @send. + /// + /// In en, this message translates to: + /// **'Send'** + String get send; + + /// No description provided for @enter_otp_code. + /// + /// In en, this message translates to: + /// **'Enter OTP code'** + String get enter_otp_code; + + /// No description provided for @reset_password_ucf. + /// + /// In en, this message translates to: + /// **'Reset Password'** + String get reset_password_ucf; + + /// No description provided for @otp_all_cap. + /// + /// In en, this message translates to: + /// **'OTP'** + String get otp_all_cap; + + /// No description provided for @resend_otp_all_cap. + /// + /// In en, this message translates to: + /// **'Resend OTP'** + String get resend_otp_all_cap; + + /// No description provided for @home. + /// + /// In en, this message translates to: + /// **'Home'** + String get home; + + /// No description provided for @categories. + /// + /// In en, this message translates to: + /// **'Categories'** + String get categories; + + /// No description provided for @cart. + /// + /// In en, this message translates to: + /// **'Cart'** + String get cart; + + /// No description provided for @profile. + /// + /// In en, this message translates to: + /// **'Profile'** + String get profile; + + /// No description provided for @search_product_ucf. + /// + /// In en, this message translates to: + /// **'Search Product'** + String get search_product_ucf; + + /// No description provided for @top_categories_ucf. + /// + /// In en, this message translates to: + /// **'Top Categories'** + String get top_categories_ucf; + + /// No description provided for @best_selling_products_ucf. + /// + /// In en, this message translates to: + /// **'Best Selling Products'** + String get best_selling_products_ucf; + + /// No description provided for @description. + /// + /// In en, this message translates to: + /// **'Description'** + String get description; + + /// No description provided for @price. + /// + /// In en, this message translates to: + /// **'Price'** + String get price; + + /// No description provided for @related_product_ucf. + /// + /// In en, this message translates to: + /// **'Related Product'** + String get related_product_ucf; + + /// No description provided for @edit_profile_ucf. + /// + /// In en, this message translates to: + /// **'Edit Profile'** + String get edit_profile_ucf; + + /// No description provided for @voucher_n_offers_ucf. + /// + /// In en, this message translates to: + /// **'Vouchers & Offers'** + String get voucher_n_offers_ucf; + + /// No description provided for @favorite. + /// + /// In en, this message translates to: + /// **'Favorite'** + String get favorite; + + /// No description provided for @order_n_recording_ucf. + /// + /// In en, this message translates to: + /// **'Order & Recording'** + String get order_n_recording_ucf; + + /// No description provided for @my_profile_ucf. + /// + /// In en, this message translates to: + /// **'My Profile'** + String get my_profile_ucf; + + /// No description provided for @help_center_ucf. + /// + /// In en, this message translates to: + /// **'Help Center'** + String get help_center_ucf; + + /// No description provided for @address. + /// + /// In en, this message translates to: + /// **'Address'** + String get address; + + /// No description provided for @notification. + /// + /// In en, this message translates to: + /// **'Notification'** + String get notification; + + /// No description provided for @security. + /// + /// In en, this message translates to: + /// **'Security'** + String get security; + + /// No description provided for @track_my_order_ucf. + /// + /// In en, this message translates to: + /// **'Track My Order'** + String get track_my_order_ucf; + + /// No description provided for @wallet_history_ucf. + /// + /// In en, this message translates to: + /// **'Wallet History'** + String get wallet_history_ucf; + + /// No description provided for @refund_history_ucf. + /// + /// In en, this message translates to: + /// **'Refund History'** + String get refund_history_ucf; + + /// No description provided for @settings. + /// + /// In en, this message translates to: + /// **'Settings'** + String get settings; + + /// No description provided for @terms_n_conditions_ucf. + /// + /// In en, this message translates to: + /// **'Terms & Conditions'** + String get terms_n_conditions_ucf; + + /// No description provided for @log_out_ucf. + /// + /// In en, this message translates to: + /// **'Log Out'** + String get log_out_ucf; + + /// No description provided for @add_to_cart. + /// + /// In en, this message translates to: + /// **'Add to cart'** + String get add_to_cart; + + /// No description provided for @pick_a_location. + /// + /// In en, this message translates to: + /// **'Pick a location'** + String get pick_a_location; + + /// No description provided for @locations. + /// + /// In en, this message translates to: + /// **'Locations'** + String get locations; + + /// No description provided for @data_is_not_available. + /// + /// In en, this message translates to: + /// **'Data is not available'** + String get data_is_not_available; + + /// No description provided for @product_stock_not_available. + /// + /// In en, this message translates to: + /// **'Product stock not available'** + String get product_stock_not_available; + + /// No description provided for @out_of_stock_ucf. + /// + /// In en, this message translates to: + /// **'Out of stock'** + String get out_of_stock_ucf; + + /// No description provided for @order_info_ucf. + /// + /// In en, this message translates to: + /// **'Order Info'** + String get order_info_ucf; + + /// No description provided for @subtotal. + /// + /// In en, this message translates to: + /// **'Subtotal'** + String get subtotal; + + /// No description provided for @delivery_fee_ucf. + /// + /// In en, this message translates to: + /// **'Delivery Fee'** + String get delivery_fee_ucf; + + /// No description provided for @total. + /// + /// In en, this message translates to: + /// **'Total'** + String get total; + + /// No description provided for @review_n_payment_ucf. + /// + /// In en, this message translates to: + /// **'Review & Payment'** + String get review_n_payment_ucf; + + /// No description provided for @promo_code_ucf. + /// + /// In en, this message translates to: + /// **'Promo Code'** + String get promo_code_ucf; + + /// No description provided for @apply. + /// + /// In en, this message translates to: + /// **'Apply'** + String get apply; + + /// No description provided for @coupon_discount_ucf. + /// + /// In en, this message translates to: + /// **'Coupon Discount'** + String get coupon_discount_ucf; + + /// No description provided for @check_out_ucf. + /// + /// In en, this message translates to: + /// **'Check Out'** + String get check_out_ucf; + + /// No description provided for @delivery_address_ucf. + /// + /// In en, this message translates to: + /// **'Delivery Address'** + String get delivery_address_ucf; + + /// No description provided for @billing_address_ucf. + /// + /// In en, this message translates to: + /// **'Billing Address'** + String get billing_address_ucf; + + /// No description provided for @alternative_phone_ucf. + /// + /// In en, this message translates to: + /// **'Alternative Phone'** + String get alternative_phone_ucf; + + /// No description provided for @additional_info_ucf. + /// + /// In en, this message translates to: + /// **'Additional Info'** + String get additional_info_ucf; + + /// No description provided for @tax. + /// + /// In en, this message translates to: + /// **'Tax'** + String get tax; + + /// No description provided for @available_logistics_ucf. + /// + /// In en, this message translates to: + /// **'Available Logistics'** + String get available_logistics_ucf; + + /// No description provided for @please_wait_ucf. + /// + /// In en, this message translates to: + /// **'Please Wait...'** + String get please_wait_ucf; + + /// No description provided for @something_went_wrong. + /// + /// In en, this message translates to: + /// **'Something went wrong'** + String get something_went_wrong; + + /// No description provided for @orders. + /// + /// In en, this message translates to: + /// **'Orders'** + String get orders; + + /// No description provided for @empty. + /// + /// In en, this message translates to: + /// **'Empty!'** + String get empty; + + /// No description provided for @all_order. + /// + /// In en, this message translates to: + /// **'All Order'** + String get all_order; + + /// No description provided for @pending. + /// + /// In en, this message translates to: + /// **'Pending'** + String get pending; + + /// No description provided for @processing. + /// + /// In en, this message translates to: + /// **'Processing'** + String get processing; + + /// No description provided for @delivered. + /// + /// In en, this message translates to: + /// **'Delivered'** + String get delivered; + + /// No description provided for @filter. + /// + /// In en, this message translates to: + /// **'Filter'** + String get filter; + + /// No description provided for @price_range_ucf. + /// + /// In en, this message translates to: + /// **'Price Range'** + String get price_range_ucf; + + /// No description provided for @to. + /// + /// In en, this message translates to: + /// **'To'** + String get to; + + /// No description provided for @next. + /// + /// In en, this message translates to: + /// **'Next'** + String get next; + + /// No description provided for @coupons. + /// + /// In en, this message translates to: + /// **'Coupons'** + String get coupons; + + /// No description provided for @days. + /// + /// In en, this message translates to: + /// **'Days'** + String get days; + + /// No description provided for @hours. + /// + /// In en, this message translates to: + /// **'Hours'** + String get hours; + + /// No description provided for @min. + /// + /// In en, this message translates to: + /// **'Min'** + String get min; + + /// No description provided for @sec. + /// + /// In en, this message translates to: + /// **'Sec'** + String get sec; + + /// No description provided for @copy_code_ucf. + /// + /// In en, this message translates to: + /// **'Copy Code'** + String get copy_code_ucf; + + /// No description provided for @wishlist. + /// + /// In en, this message translates to: + /// **'Wishlist'** + String get wishlist; + + /// No description provided for @add. + /// + /// In en, this message translates to: + /// **'Add'** + String get add; + + /// No description provided for @add_new_address_ucf. + /// + /// In en, this message translates to: + /// **'Add New Address'** + String get add_new_address_ucf; + + /// No description provided for @update_address. + /// + /// In en, this message translates to: + /// **'Update Address'** + String get update_address; + + /// No description provided for @select_country. + /// + /// In en, this message translates to: + /// **'Select country'** + String get select_country; + + /// No description provided for @select_state. + /// + /// In en, this message translates to: + /// **'Select state'** + String get select_state; + + /// No description provided for @select_city. + /// + /// In en, this message translates to: + /// **'Select city'** + String get select_city; + + /// No description provided for @country. + /// + /// In en, this message translates to: + /// **'Country'** + String get country; + + /// No description provided for @state. + /// + /// In en, this message translates to: + /// **'State'** + String get state; + + /// No description provided for @city. + /// + /// In en, this message translates to: + /// **'City'** + String get city; + + /// No description provided for @default_address. + /// + /// In en, this message translates to: + /// **'Default address'** + String get default_address; + + /// No description provided for @select_one. + /// + /// In en, this message translates to: + /// **'Select one'** + String get select_one; + + /// No description provided for @save. + /// + /// In en, this message translates to: + /// **'Save'** + String get save; + + /// No description provided for @close. + /// + /// In en, this message translates to: + /// **'Close'** + String get close; + + /// No description provided for @please_select_a_country. + /// + /// In en, this message translates to: + /// **'Please select a country'** + String get please_select_a_country; + + /// No description provided for @please_select_a_state. + /// + /// In en, this message translates to: + /// **'Please select a state'** + String get please_select_a_state; + + /// No description provided for @please_select_a_city. + /// + /// In en, this message translates to: + /// **'Please select a city'** + String get please_select_a_city; + + /// No description provided for @please_enter_address. + /// + /// In en, this message translates to: + /// **'Please enter address'** + String get please_enter_address; + + /// No description provided for @date. + /// + /// In en, this message translates to: + /// **'Date'** + String get date; + + /// No description provided for @note. + /// + /// In en, this message translates to: + /// **'Note'** + String get note; + + /// No description provided for @order_has_been_placed. + /// + /// In en, this message translates to: + /// **'Order has been placed'** + String get order_has_been_placed; + + /// No description provided for @order_tracking. + /// + /// In en, this message translates to: + /// **'Order Tracking'** + String get order_tracking; + + /// No description provided for @currency. + /// + /// In en, this message translates to: + /// **'Currency'** + String get currency; + + /// No description provided for @order_details. + /// + /// In en, this message translates to: + /// **'Order details'** + String get order_details; + + /// No description provided for @password_change_ucf. + /// + /// In en, this message translates to: + /// **'Password Change'** + String get password_change_ucf; + + /// No description provided for @update_password_ucf. + /// + /// In en, this message translates to: + /// **'Update Password'** + String get update_password_ucf; + + /// No description provided for @basic_info. + /// + /// In en, this message translates to: + /// **'Basic info'** + String get basic_info; + + /// No description provided for @update_profile_ucf. + /// + /// In en, this message translates to: + /// **'Update Profile'** + String get update_profile_ucf; + + /// No description provided for @cancelled. + /// + /// In en, this message translates to: + /// **'Cancelled'** + String get cancelled; + + /// No description provided for @submit. + /// + /// In en, this message translates to: + /// **'Submit'** + String get submit; + + /// No description provided for @go_to_cart. + /// + /// In en, this message translates to: + /// **'Go to cart'** + String get go_to_cart; + + /// No description provided for @all_products_ucf. + /// + /// In en, this message translates to: + /// **'All Products'** + String get all_products_ucf; + + /// No description provided for @no_more_data. + /// + /// In en, this message translates to: + /// **'No more data'** + String get no_more_data; + + /// No description provided for @place_order. + /// + /// In en, this message translates to: + /// **'Place Order'** + String get place_order; + + /// No description provided for @reg_delivery. + /// + /// In en, this message translates to: + /// **'Regular delivery'** + String get reg_delivery; + + /// No description provided for @we_will_deliver_your_products_soon. + /// + /// In en, this message translates to: + /// **'We will deliver your products soon.'** + String get we_will_deliver_your_products_soon; + + /// No description provided for @we_are_not_shipping_to_your_city_now. + /// + /// In en, this message translates to: + /// **'We are not shipping to your city now.'** + String get we_are_not_shipping_to_your_city_now; + + /// No description provided for @preferred_delivery_time. + /// + /// In en, this message translates to: + /// **'Preferred delivery time'** + String get preferred_delivery_time; + + /// No description provided for @payment_method. + /// + /// In en, this message translates to: + /// **'Payment Method'** + String get payment_method; + + /// No description provided for @personal_information. + /// + /// In en, this message translates to: + /// **'Personal Information'** + String get personal_information; + + /// No description provided for @tips. + /// + /// In en, this message translates to: + /// **'Comment'** + String get tips; + + /// No description provided for @add_tips_for_deliveryman. + /// + /// In en, this message translates to: + /// **'Add tips for deliveryman'** + String get add_tips_for_deliveryman; + + /// No description provided for @order_summary. + /// + /// In en, this message translates to: + /// **'Order Summary'** + String get order_summary; + + /// No description provided for @when_receiving_by_cash. + /// + /// In en, this message translates to: + /// **'When receiving by cash'** + String get when_receiving_by_cash; + + /// No description provided for @when_receiving_by_card. + /// + /// In en, this message translates to: + /// **'When receiving by card'** + String get when_receiving_by_card; + + /// No description provided for @update. + /// + /// In en, this message translates to: + /// **'Update'** + String get update; + + /// No description provided for @order_accepted. + /// + /// In en, this message translates to: + /// **'Order accepted'** + String get order_accepted; + + /// No description provided for @success_login. + /// + /// In en, this message translates to: + /// **'Logged in successfully'** + String get success_login; + + /// No description provided for @success_register. + /// + /// In en, this message translates to: + /// **'Successfully registered'** + String get success_register; + + /// No description provided for @no_such_user_exists. + /// + /// In en, this message translates to: + /// **'No such user exists'** + String get no_such_user_exists; + + /// No description provided for @a. + /// + /// In en, this message translates to: + /// **'_'** + String get a; + + /// No description provided for @download_invoice. + /// + /// In en, this message translates to: + /// **'Download invoice'** + String get download_invoice; + + /// No description provided for @image_mustbe_less_1_mb. + /// + /// In en, this message translates to: + /// **'Image size must be less than 1 MB'** + String get image_mustbe_less_1_mb; +} + +class _AppLocalizationsDelegate + extends LocalizationsDelegate { + const _AppLocalizationsDelegate(); + + @override + Future load(Locale locale) { + return SynchronousFuture(lookupAppLocalizations(locale)); + } + + @override + bool isSupported(Locale locale) => + ['en', 'ru', 'uz'].contains(locale.languageCode); + + @override + bool shouldReload(_AppLocalizationsDelegate old) => false; +} + +AppLocalizations lookupAppLocalizations(Locale locale) { + // Lookup logic when only language code is specified. + switch (locale.languageCode) { + case 'en': + return AppLocalizationsEn(); + case 'ru': + return AppLocalizationsRu(); + case 'uz': + return AppLocalizationsUz(); + } + + throw FlutterError( + 'AppLocalizations.delegate failed to load unsupported locale "$locale". This is likely ' + 'an issue with the localizations generation tool. Please file an issue ' + 'on GitHub with a reproducible sample app and the gen-l10n configuration ' + 'that was used.'); +} diff --git a/app_code/lib/l10n/app_localizations_en.dart b/app_code/lib/l10n/app_localizations_en.dart new file mode 100644 index 0000000..ea20d86 --- /dev/null +++ b/app_code/lib/l10n/app_localizations_en.dart @@ -0,0 +1,473 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for English (`en`). +class AppLocalizationsEn extends AppLocalizations { + AppLocalizationsEn([String locale = 'en']) : super(locale); + + @override + String get hellow => 'hellow'; + + @override + String get please_enter_email => 'Please enter email'; + + @override + String get please_enter_name => 'Please enter name'; + + @override + String get please_enter_phone => 'Please enter phone number'; + + @override + String get please_enter_valid_email => 'Please enter valid email'; + + @override + String get please_enter_confirm_password => 'Please enter confirm password'; + + @override + String get password_and_confirm_password_is_not_matching => + 'Password and Confirm password do not match'; + + @override + String get please_enter_password => 'Please enter password'; + + @override + String get password_must_be_at_last_6_digit => + 'Password must be at last 6 digit.'; + + @override + String get welcome_to_online_fresh_food_grocery_application => + 'Welcome to\nOnline Fresh Food Grocery\nApplication'; + + @override + String get energetically_streamline_one_to_one_web_readiness_before_extensive_meta_services => + 'Energetically streamline one-to-one web-readiness before extensive meta-services.'; + + @override + String get best_quality_organic_grocery_app_platform_ucf => + 'Best Quality Organic Grocery App Platform'; + + @override + String get easy_payment_method => 'Easy Payment Method'; + + @override + String get skip => 'Skip'; + + @override + String get welcome_to_back => 'Welcome to Back!'; + + @override + String get login => 'Login'; + + @override + String get register => 'Register'; + + @override + String get register_now_ucf => 'Register Now'; + + @override + String get create_new_account_ucf => 'Create New Account'; + + @override + String get email => 'Email'; + + @override + String get name => 'Name'; + + @override + String get phone => 'Phone'; + + @override + String get password => 'Password'; + + @override + String get new_password_ucf => 'New Password'; + + @override + String get confirm_password_ucf => 'Confirm Password'; + + @override + String get sign_up_ucf => 'Sign Up'; + + @override + String get already_have_an_account => 'Already Have an Account?'; + + @override + String get not_a_member => 'Not a member?'; + + @override + String get forgot_password_q_ucf => 'Forgot Password?'; + + @override + String get forgot_password_ucf => 'Forgot Password'; + + @override + String get send => 'Send'; + + @override + String get enter_otp_code => 'Enter OTP code'; + + @override + String get reset_password_ucf => 'Reset Password'; + + @override + String get otp_all_cap => 'OTP'; + + @override + String get resend_otp_all_cap => 'Resend OTP'; + + @override + String get home => 'Home'; + + @override + String get categories => 'Categories'; + + @override + String get cart => 'Cart'; + + @override + String get profile => 'Profile'; + + @override + String get search_product_ucf => 'Search Product'; + + @override + String get top_categories_ucf => 'Top Categories'; + + @override + String get best_selling_products_ucf => 'Best Selling Products'; + + @override + String get description => 'Description'; + + @override + String get price => 'Price'; + + @override + String get related_product_ucf => 'Related Product'; + + @override + String get edit_profile_ucf => 'Edit Profile'; + + @override + String get voucher_n_offers_ucf => 'Vouchers & Offers'; + + @override + String get favorite => 'Favorite'; + + @override + String get order_n_recording_ucf => 'Order & Recording'; + + @override + String get my_profile_ucf => 'My Profile'; + + @override + String get help_center_ucf => 'Help Center'; + + @override + String get address => 'Address'; + + @override + String get notification => 'Notification'; + + @override + String get security => 'Security'; + + @override + String get track_my_order_ucf => 'Track My Order'; + + @override + String get wallet_history_ucf => 'Wallet History'; + + @override + String get refund_history_ucf => 'Refund History'; + + @override + String get settings => 'Settings'; + + @override + String get terms_n_conditions_ucf => 'Terms & Conditions'; + + @override + String get log_out_ucf => 'Log Out'; + + @override + String get add_to_cart => 'Add to cart'; + + @override + String get pick_a_location => 'Pick a location'; + + @override + String get locations => 'Locations'; + + @override + String get data_is_not_available => 'Data is not available'; + + @override + String get product_stock_not_available => 'Product stock not available'; + + @override + String get out_of_stock_ucf => 'Out of stock'; + + @override + String get order_info_ucf => 'Order Info'; + + @override + String get subtotal => 'Subtotal'; + + @override + String get delivery_fee_ucf => 'Delivery Fee'; + + @override + String get total => 'Total'; + + @override + String get review_n_payment_ucf => 'Review & Payment'; + + @override + String get promo_code_ucf => 'Promo Code'; + + @override + String get apply => 'Apply'; + + @override + String get coupon_discount_ucf => 'Coupon Discount'; + + @override + String get check_out_ucf => 'Check Out'; + + @override + String get delivery_address_ucf => 'Delivery Address'; + + @override + String get billing_address_ucf => 'Billing Address'; + + @override + String get alternative_phone_ucf => 'Alternative Phone'; + + @override + String get additional_info_ucf => 'Additional Info'; + + @override + String get tax => 'Tax'; + + @override + String get available_logistics_ucf => 'Available Logistics'; + + @override + String get please_wait_ucf => 'Please Wait...'; + + @override + String get something_went_wrong => 'Something went wrong'; + + @override + String get orders => 'Orders'; + + @override + String get empty => 'Empty!'; + + @override + String get all_order => 'All Order'; + + @override + String get pending => 'Pending'; + + @override + String get processing => 'Processing'; + + @override + String get delivered => 'Delivered'; + + @override + String get filter => 'Filter'; + + @override + String get price_range_ucf => 'Price Range'; + + @override + String get to => 'To'; + + @override + String get next => 'Next'; + + @override + String get coupons => 'Coupons'; + + @override + String get days => 'Days'; + + @override + String get hours => 'Hours'; + + @override + String get min => 'Min'; + + @override + String get sec => 'Sec'; + + @override + String get copy_code_ucf => 'Copy Code'; + + @override + String get wishlist => 'Wishlist'; + + @override + String get add => 'Add'; + + @override + String get add_new_address_ucf => 'Add New Address'; + + @override + String get update_address => 'Update Address'; + + @override + String get select_country => 'Select country'; + + @override + String get select_state => 'Select state'; + + @override + String get select_city => 'Select city'; + + @override + String get country => 'Country'; + + @override + String get state => 'State'; + + @override + String get city => 'City'; + + @override + String get default_address => 'Default address'; + + @override + String get select_one => 'Select one'; + + @override + String get save => 'Save'; + + @override + String get close => 'Close'; + + @override + String get please_select_a_country => 'Please select a country'; + + @override + String get please_select_a_state => 'Please select a state'; + + @override + String get please_select_a_city => 'Please select a city'; + + @override + String get please_enter_address => 'Please enter address'; + + @override + String get date => 'Date'; + + @override + String get note => 'Note'; + + @override + String get order_has_been_placed => 'Order has been placed'; + + @override + String get order_tracking => 'Order Tracking'; + + @override + String get currency => 'Currency'; + + @override + String get order_details => 'Order details'; + + @override + String get password_change_ucf => 'Password Change'; + + @override + String get update_password_ucf => 'Update Password'; + + @override + String get basic_info => 'Basic info'; + + @override + String get update_profile_ucf => 'Update Profile'; + + @override + String get cancelled => 'Cancelled'; + + @override + String get submit => 'Submit'; + + @override + String get go_to_cart => 'Go to cart'; + + @override + String get all_products_ucf => 'All Products'; + + @override + String get no_more_data => 'No more data'; + + @override + String get place_order => 'Place Order'; + + @override + String get reg_delivery => 'Regular delivery'; + + @override + String get we_will_deliver_your_products_soon => + 'We will deliver your products soon.'; + + @override + String get we_are_not_shipping_to_your_city_now => + 'We are not shipping to your city now.'; + + @override + String get preferred_delivery_time => 'Preferred delivery time'; + + @override + String get payment_method => 'Payment Method'; + + @override + String get personal_information => 'Personal Information'; + + @override + String get tips => 'Comment'; + + @override + String get add_tips_for_deliveryman => 'Add tips for deliveryman'; + + @override + String get order_summary => 'Order Summary'; + + @override + String get when_receiving_by_cash => 'When receiving by cash'; + + @override + String get when_receiving_by_card => 'When receiving by card'; + + @override + String get update => 'Update'; + + @override + String get order_accepted => 'Order accepted'; + + @override + String get success_login => 'Logged in successfully'; + + @override + String get success_register => 'Successfully registered'; + + @override + String get no_such_user_exists => 'No such user exists'; + + @override + String get a => '_'; + + @override + String get download_invoice => 'Download invoice'; + + @override + String get image_mustbe_less_1_mb => 'Image size must be less than 1 MB'; +} diff --git a/app_code/lib/l10n/app_localizations_ru.dart b/app_code/lib/l10n/app_localizations_ru.dart new file mode 100644 index 0000000..d64d0de --- /dev/null +++ b/app_code/lib/l10n/app_localizations_ru.dart @@ -0,0 +1,477 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Russian (`ru`). +class AppLocalizationsRu extends AppLocalizations { + AppLocalizationsRu([String locale = 'ru']) : super(locale); + + @override + String get hellow => 'ЗдравÑтвуйте'; + + @override + String get please_enter_email => + 'ПожалуйÑта, введите Ð°Ð´Ñ€ÐµÑ Ñлектронной почты'; + + @override + String get please_enter_name => 'ПожалуйÑта, введите имÑ'; + + @override + String get please_enter_phone => 'ПожалуйÑта, введите номер телефона'; + + @override + String get please_enter_valid_email => + 'ПожалуйÑта, введите дейÑтвительный Ð°Ð´Ñ€ÐµÑ Ñлектронной почты'; + + @override + String get please_enter_confirm_password => + 'ПожалуйÑта, введите подтверждающий пароль'; + + @override + String get password_and_confirm_password_is_not_matching => + 'Пароль и пароль Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð½Ðµ Ñовпадают'; + + @override + String get please_enter_password => 'ПожалуйÑта, введите пароль'; + + @override + String get password_must_be_at_last_6_digit => + 'Пароль должен ÑоÑтоÑть как минимум из 6 цифр.'; + + @override + String get welcome_to_online_fresh_food_grocery_application => + 'Добро пожаловать в Интернет-магазин Ñвежих продуктов Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ñ ÐŸÑ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ðµ'; + + @override + String get energetically_streamline_one_to_one_web_readiness_before_extensive_meta_services => + 'Энергично оптимизируйте индивидуальную веб-готовноÑть перед обширными мета-ÑервиÑами.'; + + @override + String get best_quality_organic_grocery_app_platform_ucf => + 'Платформа приложений Ð´Ð»Ñ Ð¾Ñ€Ð³Ð°Ð½Ð¸Ñ‡ÐµÑких продуктов лучшего качеÑтва'; + + @override + String get easy_payment_method => 'ПроÑтой ÑпоÑоб оплаты'; + + @override + String get skip => 'ПропуÑкать'; + + @override + String get welcome_to_back => 'С возвращением!'; + + @override + String get login => 'ÐвторизоватьÑÑ'; + + @override + String get register => 'РегиÑтр'; + + @override + String get register_now_ucf => 'ЗарегиÑтрироватьÑÑ'; + + @override + String get create_new_account_ucf => 'Создать новый аккаунт'; + + @override + String get email => 'Ð­Ð»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð°Ñ Ð¿Ð¾Ñ‡Ñ‚Ð°'; + + @override + String get name => 'ИмÑ'; + + @override + String get phone => 'Телефон'; + + @override + String get password => 'Пароль'; + + @override + String get new_password_ucf => 'Ðовый пароль'; + + @override + String get confirm_password_ucf => 'Подтвердите пароль'; + + @override + String get sign_up_ucf => 'ЗарегиÑтрироватьÑÑ'; + + @override + String get already_have_an_account => 'У Ð²Ð°Ñ ÑƒÐ¶Ðµ еÑть ÑƒÑ‡ÐµÑ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ?'; + + @override + String get not_a_member => 'Ðе ÑвлÑетеÑÑŒ членом?'; + + @override + String get forgot_password_q_ucf => 'Забыли пароль?'; + + @override + String get forgot_password_ucf => 'Забыли пароль'; + + @override + String get send => 'ОтправлÑть'; + + @override + String get enter_otp_code => 'Введите OTP-код'; + + @override + String get reset_password_ucf => 'Ð¡Ð±Ñ€Ð¾Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ'; + + @override + String get otp_all_cap => 'Одноразовый пароль'; + + @override + String get resend_otp_all_cap => 'Повторно отправить одноразовый пароль'; + + @override + String get home => 'ОÑновной'; + + @override + String get categories => 'Категории'; + + @override + String get cart => 'Корзина'; + + @override + String get profile => 'Профиль'; + + @override + String get search_product_ucf => 'ПоиÑк продукта'; + + @override + String get top_categories_ucf => 'Лучшие категории'; + + @override + String get best_selling_products_ucf => 'Самые продаваемые продукты'; + + @override + String get description => 'ОпиÑание'; + + @override + String get price => 'Цена'; + + @override + String get related_product_ucf => 'Похожий продукт'; + + @override + String get edit_profile_ucf => 'Редактировать профиль'; + + @override + String get voucher_n_offers_ucf => 'Ваучеры и предложениÑ'; + + @override + String get favorite => 'Любимый'; + + @override + String get order_n_recording_ucf => 'Заказ и запиÑÑŒ'; + + @override + String get my_profile_ucf => 'Мой профайл'; + + @override + String get help_center_ucf => 'Центр помощи'; + + @override + String get address => 'ÐдреÑ'; + + @override + String get notification => 'Уведомление'; + + @override + String get security => 'БезопаÑноÑть'; + + @override + String get track_my_order_ucf => 'ОтÑлеживать Ñвой заказ'; + + @override + String get wallet_history_ucf => 'ИÑÑ‚Ð¾Ñ€Ð¸Ñ ÐºÐ¾ÑˆÐµÐ»ÑŒÐºÐ°'; + + @override + String get refund_history_ucf => 'ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‚Ð¾Ð²'; + + @override + String get settings => 'ÐаÑтройки'; + + @override + String get terms_n_conditions_ucf => 'УÑÐ»Ð¾Ð²Ð¸Ñ Ð¸ÑпользованиÑ'; + + @override + String get log_out_ucf => 'Выйти'; + + @override + String get add_to_cart => 'Добавить в корзину'; + + @override + String get pick_a_location => 'Выберите меÑто'; + + @override + String get locations => 'Локации'; + + @override + String get data_is_not_available => 'Данные недоÑтупны'; + + @override + String get product_stock_not_available => 'Ðа Ñкладе товара нет в наличии'; + + @override + String get out_of_stock_ucf => 'РаÑпродано'; + + @override + String get order_info_ucf => 'Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ заказе'; + + @override + String get subtotal => 'Промежуточный итог'; + + @override + String get delivery_fee_ucf => 'Плата за доÑтавку'; + + @override + String get total => 'Общий'; + + @override + String get review_n_payment_ucf => 'Обзор и оплата'; + + @override + String get promo_code_ucf => 'Промо-код'; + + @override + String get apply => 'ПрименÑть'; + + @override + String get coupon_discount_ucf => 'Купон Скидка'; + + @override + String get check_out_ucf => 'Проверить'; + + @override + String get delivery_address_ucf => 'ÐÐ´Ñ€ÐµÑ Ð´Ð¾Ñтавки'; + + @override + String get billing_address_ucf => 'ÐÐ´Ñ€ÐµÑ Ð´Ð»Ñ Ð²Ñ‹ÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñчета'; + + @override + String get alternative_phone_ucf => 'Ðльтернативный телефон'; + + @override + String get additional_info_ucf => 'Ð”Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ'; + + @override + String get tax => 'Ðалог'; + + @override + String get available_logistics_ucf => 'ДоÑÑ‚ÑƒÐ¿Ð½Ð°Ñ Ð»Ð¾Ð³Ð¸Ñтика'; + + @override + String get please_wait_ucf => 'ПожалуйÑта, подождите...'; + + @override + String get something_went_wrong => 'Что-то пошло не так'; + + @override + String get orders => 'Заказы'; + + @override + String get empty => 'ПуÑтой!'; + + @override + String get all_order => 'ВеÑÑŒ заказ'; + + @override + String get pending => 'Ð’ ожидании'; + + @override + String get processing => 'Обработка'; + + @override + String get delivered => 'ДоÑтавленный'; + + @override + String get filter => 'Фильтр'; + + @override + String get price_range_ucf => 'Ценовой диапазон'; + + @override + String get to => 'К'; + + @override + String get next => 'Следующий'; + + @override + String get coupons => 'Купоны'; + + @override + String get days => 'Дни'; + + @override + String get hours => 'ЧаÑÑ‹'; + + @override + String get min => 'Минут'; + + @override + String get sec => 'Секунд'; + + @override + String get copy_code_ucf => 'Копировать код'; + + @override + String get wishlist => 'СпиÑок желаний'; + + @override + String get add => 'ДобавлÑть'; + + @override + String get add_new_address_ucf => 'Добавить новый адреÑ'; + + @override + String get update_address => 'Обновить адреÑ'; + + @override + String get select_country => 'Выберите Ñтрану'; + + @override + String get select_state => 'Выберите штат'; + + @override + String get select_city => 'Выберите город'; + + @override + String get country => 'Страна'; + + @override + String get state => 'Штат'; + + @override + String get city => 'Город'; + + @override + String get default_address => 'ÐÐ´Ñ€ÐµÑ Ð¿Ð¾ умолчанию'; + + @override + String get select_one => 'Выбери один'; + + @override + String get save => 'СохранÑть'; + + @override + String get close => 'Закрывать'; + + @override + String get please_select_a_country => 'ПожалуйÑта, выберите Ñтрану'; + + @override + String get please_select_a_state => 'ПожалуйÑта, выберите штат'; + + @override + String get please_select_a_city => 'ПожалуйÑта, выберите город'; + + @override + String get please_enter_address => 'ПожалуйÑта, введите адреÑ'; + + @override + String get date => 'Дата'; + + @override + String get note => 'Примечание'; + + @override + String get order_has_been_placed => 'Заказ размещен'; + + @override + String get order_tracking => 'ОтÑлеживание заказа'; + + @override + String get currency => 'Валюта'; + + @override + String get order_details => 'Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð´Ð»Ñ Ð·Ð°ÐºÐ°Ð·Ð°'; + + @override + String get password_change_ucf => 'Изменение паролÑ'; + + @override + String get update_password_ucf => 'Обновить пароль'; + + @override + String get basic_info => 'Ð‘Ð°Ð·Ð¾Ð²Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ'; + + @override + String get update_profile_ucf => 'Обновить профиль'; + + @override + String get cancelled => 'Отменено'; + + @override + String get submit => 'ПредÑтавлÑть на раÑÑмотрение'; + + @override + String get go_to_cart => 'Перейти в корзину'; + + @override + String get all_products_ucf => 'Ð’Ñе продукты'; + + @override + String get no_more_data => 'Больше нет данных'; + + @override + String get place_order => 'Заказать'; + + @override + String get reg_delivery => 'ДоÑтавка'; + + @override + String get we_will_deliver_your_products_soon => + 'Мы доÑтавим вашу продукцию в ближайшее времÑ.'; + + @override + String get we_are_not_shipping_to_your_city_now => + 'Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð¼Ñ‹ не оÑущеÑтвлÑем доÑтавку по вашему адреÑу..'; + + @override + String get preferred_delivery_time => 'Предпочтительное Ð²Ñ€ÐµÐ¼Ñ Ð´Ð¾Ñтавки'; + + @override + String get payment_method => 'СпоÑоб оплаты'; + + @override + String get personal_information => 'ПерÑÐ¾Ð½Ð°Ð»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ'; + + @override + String get tips => 'Комментарий'; + + @override + String get add_tips_for_deliveryman => 'Добавить чаевые Ð´Ð»Ñ Ð”Ð¾Ñтавщик'; + + @override + String get order_summary => 'Итог заказа'; + + @override + String get when_receiving_by_cash => 'При получении наличными.'; + + @override + String get when_receiving_by_card => 'При получении на карту.'; + + @override + String get update => 'обновлÑть'; + + @override + String get order_accepted => 'Заказ принÑÑ‚'; + + @override + String get success_login => 'Ð’Ñ‹ уÑпешно вошли в ÑиÑтему'; + + @override + String get success_register => 'УÑÐ¿ÐµÑˆÐ½Ð°Ñ Ñ€ÐµÐ³Ð¸ÑтрациÑ'; + + @override + String get no_such_user_exists => 'Tакого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½Ðµ ÑущеÑтвует'; + + @override + String get a => '_'; + + @override + String get download_invoice => 'Скачать чек'; + + @override + String get image_mustbe_less_1_mb => + 'Размер Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ быть меньше 1 МБ'; +} diff --git a/app_code/lib/l10n/app_localizations_uz.dart b/app_code/lib/l10n/app_localizations_uz.dart new file mode 100644 index 0000000..2d75e93 --- /dev/null +++ b/app_code/lib/l10n/app_localizations_uz.dart @@ -0,0 +1,480 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Uzbek (`uz`). +class AppLocalizationsUz extends AppLocalizations { + AppLocalizationsUz([String locale = 'uz']) : super(locale); + + @override + String get hellow => 'Salom'; + + @override + String get please_enter_email => + 'Iltimos, elektron pochta manzilini kiriting'; + + @override + String get please_enter_name => 'Iltimos, ismni kiriting'; + + @override + String get please_enter_phone => 'Iltimos, telefon raqamingizni kiriting'; + + @override + String get please_enter_valid_email => + 'Yaroqli elektron pochta manzilini kiriting'; + + @override + String get please_enter_confirm_password => + 'Iltimos, tasdiqlash parolini kiriting'; + + @override + String get password_and_confirm_password_is_not_matching => + 'Parol va parolni tasdiqlash mos kelmaydi'; + + @override + String get please_enter_password => 'Iltimos, parolni kiriting'; + + @override + String get password_must_be_at_last_6_digit => + 'Parol oxirgi 6 ta raqamdan oshmasligi kerak.'; + + @override + String get welcome_to_online_fresh_food_grocery_application => + 'Karvon marketning yangi onlayn oziq-ovqat mahsulotlari do\'koniga xush kelibsiz'; + + @override + String get energetically_streamline_one_to_one_web_readiness_before_extensive_meta_services => + 'Keng ko\'lamli mahsulotlar katalogidan o\'zingizga kerakli mahsulotlarnig uyingizdan chiqmay turib buyurtma bering'; + + @override + String get best_quality_organic_grocery_app_platform_ucf => + 'Eng yaxshi sifatli oziq-ovqat mahsulotlarni jamlagan onlayn buyurtma platformasi'; + + @override + String get easy_payment_method => 'Oson to\'lov usuli'; + + @override + String get skip => 'OÊ»tkazib yuborish'; + + @override + String get welcome_to_back => 'Karvonmarketga xush kelibsiz!'; + + @override + String get login => 'Tizimga kirish'; + + @override + String get register => 'RoÊ»yxatdan oÊ»tish'; + + @override + String get register_now_ucf => 'Hozir roÊ»yxatdan oÊ»ting'; + + @override + String get create_new_account_ucf => 'Yangi hisob yaratish'; + + @override + String get email => 'Elektron pochta'; + + @override + String get name => 'Ism'; + + @override + String get phone => 'Telefon'; + + @override + String get password => 'Parol'; + + @override + String get new_password_ucf => 'Yangi parol'; + + @override + String get confirm_password_ucf => 'Parolni tasdiqlang'; + + @override + String get sign_up_ucf => 'Ro\'yxatdan o\'tish'; + + @override + String get already_have_an_account => 'Hisobingiz bormi?'; + + @override + String get not_a_member => 'Aʼzo emasmisiz?'; + + @override + String get forgot_password_q_ucf => 'Parolni unutdingizmi?'; + + @override + String get forgot_password_ucf => 'Parolni unutdingizmi'; + + @override + String get send => 'Yuborish'; + + @override + String get enter_otp_code => 'Tasdiqlash kodini kiriting'; + + @override + String get reset_password_ucf => 'Parolni tiklash'; + + @override + String get otp_all_cap => 'Bir martalik parol'; + + @override + String get resend_otp_all_cap => 'Bir martalik parolni qayta yuborish'; + + @override + String get home => 'Asosiy'; + + @override + String get categories => 'Kategoriyalar'; + + @override + String get cart => 'Savatcha'; + + @override + String get profile => 'Profil'; + + @override + String get search_product_ucf => 'Mahsulotni qidirish'; + + @override + String get top_categories_ucf => 'Eng yaxshi kategoriyalar'; + + @override + String get best_selling_products_ucf => 'Eng ko\'p sotiladigan mahsulotlar'; + + @override + String get description => 'Tavsif'; + + @override + String get price => 'Narxi'; + + @override + String get related_product_ucf => 'O\'xshash mahsulotlar'; + + @override + String get edit_profile_ucf => 'Profilni tahrirlash'; + + @override + String get voucher_n_offers_ucf => 'Voucherlar va takliflar'; + + @override + String get favorite => 'Sevimli'; + + @override + String get order_n_recording_ucf => 'Buyurtma va yozib olish'; + + @override + String get my_profile_ucf => 'Mening profilim'; + + @override + String get help_center_ucf => 'Yordam markazi'; + + @override + String get address => 'Manzil'; + + @override + String get notification => 'Bildirishnoma'; + + @override + String get security => 'Xavfsizlik'; + + @override + String get track_my_order_ucf => 'Buyurtmani kuzatish'; + + @override + String get wallet_history_ucf => 'Hamyon tarixi'; + + @override + String get refund_history_ucf => 'To\'lovni qaytarish tarixi'; + + @override + String get settings => 'Sozlamalar'; + + @override + String get terms_n_conditions_ucf => 'Foydalanish shartlari'; + + @override + String get log_out_ucf => 'Chiqish'; + + @override + String get add_to_cart => 'Savatga qo\'shish'; + + @override + String get pick_a_location => 'Joyni tanlang'; + + @override + String get locations => 'Joylar'; + + @override + String get data_is_not_available => 'Maʼlumotlar mavjud emas'; + + @override + String get product_stock_not_available => 'Ushbu mahsulotdan afsuski qolmadi'; + + @override + String get out_of_stock_ucf => 'Sotuvda yo\'q'; + + @override + String get order_info_ucf => 'Buyurtma haqida ma\'lumot'; + + @override + String get subtotal => 'Oraliq jami'; + + @override + String get delivery_fee_ucf => 'Yetkazib berish toÊ»lovi'; + + @override + String get total => 'Jami'; + + @override + String get review_n_payment_ucf => 'Ko\'rib chiqish va to\'lash'; + + @override + String get promo_code_ucf => 'Kupon kodi'; + + @override + String get apply => 'Foydalanish'; + + @override + String get coupon_discount_ucf => 'Kupon chegirmasi'; + + @override + String get check_out_ucf => 'Ro\'yxatdan o\'chirish'; + + @override + String get delivery_address_ucf => 'Yetkazib berish manzili'; + + @override + String get billing_address_ucf => + 'To\'lovchi; to\'lovni qabul qiladigan manzil'; + + @override + String get alternative_phone_ucf => 'Qo\'shimcha telefon'; + + @override + String get additional_info_ucf => 'Qo\'shimcha ma\'lumot'; + + @override + String get tax => 'Soliq'; + + @override + String get available_logistics_ucf => 'Mavjud yetkazib berish usuli'; + + @override + String get please_wait_ucf => 'Iltimos kuting...'; + + @override + String get something_went_wrong => 'Nimadir noto\'g\'ri bajarildi'; + + @override + String get orders => 'Buyurtmalar'; + + @override + String get empty => 'Bo\'sh!'; + + @override + String get all_order => 'Hamma buyurtmalar'; + + @override + String get pending => 'Kutilmoqda'; + + @override + String get processing => 'Qayta ishlash'; + + @override + String get delivered => 'Yetkazib berildi'; + + @override + String get filter => 'Filtr'; + + @override + String get price_range_ucf => 'Narx diapazoni'; + + @override + String get to => 'Kimga'; + + @override + String get next => 'Keyingisi'; + + @override + String get coupons => 'Kuponlar'; + + @override + String get days => 'Kunlar'; + + @override + String get hours => 'Soat'; + + @override + String get min => 'Daqiqa'; + + @override + String get sec => 'Soniya'; + + @override + String get copy_code_ucf => 'Kodni nusxalash'; + + @override + String get wishlist => 'Istaklar roÊ»yxati'; + + @override + String get add => 'Qo\'shish'; + + @override + String get add_new_address_ucf => 'Yangi manzil qo\'shing'; + + @override + String get update_address => 'Manzilni yangilash'; + + @override + String get select_country => 'Mamlakatni tanlang'; + + @override + String get select_state => 'Davlatni tanlang'; + + @override + String get select_city => 'Shaharni tanlang'; + + @override + String get country => 'Mamlakat'; + + @override + String get state => 'Davlat'; + + @override + String get city => 'Shahar'; + + @override + String get default_address => 'Birlamchi manzil'; + + @override + String get select_one => 'Birini tanlang'; + + @override + String get save => 'Saqlash'; + + @override + String get close => 'Yopish'; + + @override + String get please_select_a_country => 'Iltimos, mamlakatni tanlang'; + + @override + String get please_select_a_state => 'Iltimos, davlatni tanlang'; + + @override + String get please_select_a_city => 'Iltimos, shaharni tanlang'; + + @override + String get please_enter_address => 'Iltimos, manzilni kiriting'; + + @override + String get date => 'Sana'; + + @override + String get note => 'Eslatma'; + + @override + String get order_has_been_placed => 'Buyurtma berildi'; + + @override + String get order_tracking => 'Buyurtmani kuzatish'; + + @override + String get currency => 'Valyuta'; + + @override + String get order_details => 'Buyurtma tafsilotlari'; + + @override + String get password_change_ucf => 'Parolni o\'zgartirish'; + + @override + String get update_password_ucf => 'Parolni yangilash'; + + @override + String get basic_info => 'Asosiy ma\'lumot'; + + @override + String get update_profile_ucf => 'Profilni yangilash'; + + @override + String get cancelled => 'Bekor qilingan'; + + @override + String get submit => 'Yuborish'; + + @override + String get go_to_cart => 'Savatga borish'; + + @override + String get all_products_ucf => 'Barcha mahsulotlar'; + + @override + String get no_more_data => 'Boshqa maʼlumot yoÊ»q'; + + @override + String get place_order => 'Buyurtma qilish'; + + @override + String get reg_delivery => 'Yetkazib berish'; + + @override + String get we_will_deliver_your_products_soon => + 'Mahsulotlaringizni tez orada yetkazib beramiz.'; + + @override + String get we_are_not_shipping_to_your_city_now => + 'Siz ko\'rsatayotgan manzilgan hozircha yetkazib berish mavjud emas'; + + @override + String get preferred_delivery_time => + 'Maqul yetkazib berish muddatini belgilang'; + + @override + String get payment_method => 'To\'lov usuli'; + + @override + String get personal_information => 'Shaxsiy ma\'lumotlar'; + + @override + String get tips => 'Izoh'; + + @override + String get add_tips_for_deliveryman => + 'Yetkazib beruvchi uchun qo\'shimcha izoh'; + + @override + String get order_summary => 'Buyurtma haqida qisqacha'; + + @override + String get when_receiving_by_cash => 'Naqd pul orqali qabul qilganda'; + + @override + String get when_receiving_by_card => 'Karta orqali qabul qilganda'; + + @override + String get update => 'Yangilandi'; + + @override + String get order_accepted => 'Buyurtma qabul qilindi'; + + @override + String get success_login => 'Muvaffaqiyatli tizimga kirildi'; + + @override + String get success_register => 'Muvaffaqiyatli ro\'yxatdan o\'tildi'; + + @override + String get no_such_user_exists => 'Bunday foydalanuvchi mavjud emas'; + + @override + String get a => '_'; + + @override + String get download_invoice => 'Chekni yuklab olish'; + + @override + String get image_mustbe_less_1_mb => + 'Rasm hajmi 1 mb dan kam bo\'lishi kerak'; +} diff --git a/app_code/lib/l10n/app_ru.arb b/app_code/lib/l10n/app_ru.arb new file mode 100644 index 0000000..fef6362 --- /dev/null +++ b/app_code/lib/l10n/app_ru.arb @@ -0,0 +1,165 @@ +{ + "hellow": "ЗдравÑтвуйте", + "please_enter_email": "ПожалуйÑта, введите Ð°Ð´Ñ€ÐµÑ Ñлектронной почты", + "please_enter_name": "ПожалуйÑта, введите имÑ", + "please_enter_phone": "ПожалуйÑта, введите номер телефона", + "please_enter_valid_email": "ПожалуйÑта, введите дейÑтвительный Ð°Ð´Ñ€ÐµÑ Ñлектронной почты", + "please_enter_confirm_password": "ПожалуйÑта, введите подтверждающий пароль", + "password_and_confirm_password_is_not_matching": "Пароль и пароль Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð½Ðµ Ñовпадают", + "please_enter_password": "ПожалуйÑта, введите пароль", + "password_must_be_at_last_6_digit": "Пароль должен ÑоÑтоÑть как минимум из 6 цифр.", + "welcome_to_online_fresh_food_grocery_application": "Добро пожаловать в Интернет-магазин Ñвежих продуктов Ð¿Ð¸Ñ‚Ð°Ð½Ð¸Ñ ÐŸÑ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ðµ", + "energetically_streamline_one_to_one_web_readiness_before_extensive_meta_services": "Энергично оптимизируйте индивидуальную веб-готовноÑть перед обширными мета-ÑервиÑами.", + "best_quality_organic_grocery_app_platform_ucf": "Платформа приложений Ð´Ð»Ñ Ð¾Ñ€Ð³Ð°Ð½Ð¸Ñ‡ÐµÑких продуктов лучшего качеÑтва", + "easy_payment_method": "ПроÑтой ÑпоÑоб оплаты", + "skip": "ПропуÑкать", + "welcome_to_back": "С возвращением!", + "login": "ÐвторизоватьÑÑ", + "register": "РегиÑтр", + "register_now_ucf": "ЗарегиÑтрироватьÑÑ", + "create_new_account_ucf": "Создать новый аккаунт", + "email": "Ð­Ð»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð°Ñ Ð¿Ð¾Ñ‡Ñ‚Ð°", + "name": "ИмÑ", + "phone": "Телефон", + "password": "Пароль", + "new_password_ucf": "Ðовый пароль", + "confirm_password_ucf": "Подтвердите пароль", + "sign_up_ucf": "ЗарегиÑтрироватьÑÑ", + "already_have_an_account": "У Ð²Ð°Ñ ÑƒÐ¶Ðµ еÑть ÑƒÑ‡ÐµÑ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ?", + "not_a_member": "Ðе ÑвлÑетеÑÑŒ членом?", + "forgot_password_q_ucf": "Забыли пароль?", + "forgot_password_ucf": "Забыли пароль", + "send": "ОтправлÑть", + "enter_otp_code": "Введите OTP-код", + "reset_password_ucf": "Ð¡Ð±Ñ€Ð¾Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ", + "otp_all_cap": "Одноразовый пароль", + "resend_otp_all_cap": "Повторно отправить одноразовый пароль", + "home": "ОÑновной", + "categories": "Категории", + "cart": "Корзина", + "profile": "Профиль", + "search_product_ucf": "ПоиÑк продукта", + "top_categories_ucf": "Лучшие категории", + "best_selling_products_ucf": "Самые продаваемые продукты", + "description": "ОпиÑание", + "price": "Цена", + "related_product_ucf": "Похожий продукт", + "edit_profile_ucf": "Редактировать профиль", + "voucher_n_offers_ucf": "Ваучеры и предложениÑ", + "favorite": "Любимый", + "order_n_recording_ucf": "Заказ и запиÑÑŒ", + "my_profile_ucf": "Мой профайл", + "help_center_ucf": "Центр помощи", + "address": "ÐдреÑ", + "notification": "Уведомление", + "security": "БезопаÑноÑть", + "track_my_order_ucf": "ОтÑлеживать Ñвой заказ", + "wallet_history_ucf": "ИÑÑ‚Ð¾Ñ€Ð¸Ñ ÐºÐ¾ÑˆÐµÐ»ÑŒÐºÐ°", + "refund_history_ucf": "ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‚Ð¾Ð²", + "settings": "ÐаÑтройки", + "terms_n_conditions_ucf": "УÑÐ»Ð¾Ð²Ð¸Ñ Ð¸ÑпользованиÑ", + "log_out_ucf": "Выйти", + "add_to_cart": "Добавить в корзину", + "pick_a_location": "Выберите меÑто", + "locations": "Локации", + "data_is_not_available": "Данные недоÑтупны", + "product_stock_not_available": "Ðа Ñкладе товара нет в наличии", + "out_of_stock_ucf": "РаÑпродано", + "order_info_ucf": "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ заказе", + "subtotal": "Промежуточный итог", + "delivery_fee_ucf": "Плата за доÑтавку", + "total": "Общий", + "review_n_payment_ucf": "Обзор и оплата", + "promo_code_ucf": "Промо-код", + "apply": "ПрименÑть", + "coupon_discount_ucf": "Купон Скидка", + "check_out_ucf": "Проверить", + "delivery_address_ucf": "ÐÐ´Ñ€ÐµÑ Ð´Ð¾Ñтавки", + "billing_address_ucf": "ÐÐ´Ñ€ÐµÑ Ð´Ð»Ñ Ð²Ñ‹ÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñчета", + "alternative_phone_ucf": "Ðльтернативный телефон", + "additional_info_ucf": "Ð”Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ", + "tax": "Ðалог", + "available_logistics_ucf": "ДоÑÑ‚ÑƒÐ¿Ð½Ð°Ñ Ð»Ð¾Ð³Ð¸Ñтика", + "please_wait_ucf": "ПожалуйÑта, подождите...", + "something_went_wrong": "Что-то пошло не так", + "orders": "Заказы", + "empty": "ПуÑтой!", + "all_order": "ВеÑÑŒ заказ", + "pending": "Ð’ ожидании", + "processing": "Обработка", + "delivered": "ДоÑтавленный", + "filter": "Фильтр", + "price_range_ucf": "Ценовой диапазон", + "to": "К", + "next": "Следующий", + "coupons": "Купоны", + "days": "Дни", + "hours": "ЧаÑÑ‹", + "min": "Минут", + "sec": "Секунд", + "copy_code_ucf": "Копировать код", + "wishlist": "СпиÑок желаний", + "add": "ДобавлÑть", + "add_new_address_ucf": "Добавить новый адреÑ", + "update_address": "Обновить адреÑ", + "select_country": "Выберите Ñтрану", + "select_state": "Выберите штат", + "select_city": "Выберите город", + "country": "Страна", + "state": "Штат", + "city": "Город", + "default_address": "ÐÐ´Ñ€ÐµÑ Ð¿Ð¾ умолчанию", + "select_one": "Выбери один", + "save": "СохранÑть", + "close": "Закрывать", + "please_select_a_country": "ПожалуйÑта, выберите Ñтрану", + "please_select_a_state": "ПожалуйÑта, выберите штат", + "please_select_a_city": "ПожалуйÑта, выберите город", + "please_enter_address": "ПожалуйÑта, введите адреÑ", + "date": "Дата", + "note": "Примечание", + "order_has_been_placed": "Заказ размещен", + "order_tracking": "ОтÑлеживание заказа", + "currency": "Валюта", + "order_details": "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð´Ð»Ñ Ð·Ð°ÐºÐ°Ð·Ð°", + "password_change_ucf": "Изменение паролÑ", + "update_password_ucf": "Обновить пароль", + "basic_info": "Ð‘Ð°Ð·Ð¾Ð²Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ", + "update_profile_ucf": "Обновить профиль", + "cancelled": "Отменено", + "submit": "ПредÑтавлÑть на раÑÑмотрение", + "go_to_cart": "Перейти в корзину", + "all_products_ucf": "Ð’Ñе продукты", + "no_more_data": "Больше нет данных", + "place_order": "Заказать", + "reg_delivery": "ДоÑтавка", + "we_will_deliver_your_products_soon": "Мы доÑтавим вашу продукцию в ближайшее времÑ.", + "we_are_not_shipping_to_your_city_now": "Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð¼Ñ‹ не оÑущеÑтвлÑем доÑтавку по вашему адреÑу..", + "preferred_delivery_time": "Предпочтительное Ð²Ñ€ÐµÐ¼Ñ Ð´Ð¾Ñтавки", + "payment_method": "СпоÑоб оплаты", + "personal_information": "ПерÑÐ¾Ð½Ð°Ð»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ", + "tips": "Комментарий", + "add_tips_for_deliveryman": "Добавить чаевые Ð´Ð»Ñ Ð”Ð¾Ñтавщик", + "order_summary": "Итог заказа", + "when_receiving_by_cash": "При получении наличными.", + "when_receiving_by_card": "При получении на карту.", + "update": "обновлÑть", + "order_accepted": "Заказ принÑÑ‚", + "success_login": "Ð’Ñ‹ уÑпешно вошли в ÑиÑтему", + "success_register": "УÑÐ¿ÐµÑˆÐ½Ð°Ñ Ñ€ÐµÐ³Ð¸ÑтрациÑ", + "no_such_user_exists": "Tакого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½Ðµ ÑущеÑтвует", + "a": "_", + "a": "_", + "a": "_", + "a": "_", + "a": "_", + "a": "_", + "a": "_", + "a": "_", + "a": "_", + "a": "_", + "a": "_", + "download_invoice":"Скачать чек", + "image_mustbe_less_1_mb": "Размер Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ быть меньше 1 МБ" + +} \ No newline at end of file diff --git a/app_code/lib/l10n/app_uz.arb b/app_code/lib/l10n/app_uz.arb new file mode 100644 index 0000000..36da9d3 --- /dev/null +++ b/app_code/lib/l10n/app_uz.arb @@ -0,0 +1,164 @@ +{ + "hellow": "Salom", + "please_enter_email": "Iltimos, elektron pochta manzilini kiriting", + "please_enter_name": "Iltimos, ismni kiriting", + "please_enter_phone": "Iltimos, telefon raqamingizni kiriting", + "please_enter_valid_email": "Yaroqli elektron pochta manzilini kiriting", + "please_enter_confirm_password": "Iltimos, tasdiqlash parolini kiriting", + "password_and_confirm_password_is_not_matching": "Parol va parolni tasdiqlash mos kelmaydi", + "please_enter_password": "Iltimos, parolni kiriting", + "password_must_be_at_last_6_digit": "Parol oxirgi 6 ta raqamdan oshmasligi kerak.", + "welcome_to_online_fresh_food_grocery_application": "Karvon marketning yangi onlayn oziq-ovqat mahsulotlari do'koniga xush kelibsiz", + "energetically_streamline_one_to_one_web_readiness_before_extensive_meta_services": "Keng ko'lamli mahsulotlar katalogidan o'zingizga kerakli mahsulotlarnig uyingizdan chiqmay turib buyurtma bering", + "best_quality_organic_grocery_app_platform_ucf": "Eng yaxshi sifatli oziq-ovqat mahsulotlarni jamlagan onlayn buyurtma platformasi", + "easy_payment_method": "Oson to'lov usuli", + "skip": "OÊ»tkazib yuborish", + "welcome_to_back": "Karvonmarketga xush kelibsiz!", + "login": "Tizimga kirish", + "register": "RoÊ»yxatdan oÊ»tish", + "register_now_ucf": "Hozir roÊ»yxatdan oÊ»ting", + "create_new_account_ucf": "Yangi hisob yaratish", + "email": "Elektron pochta", + "name": "Ism", + "phone": "Telefon", + "password": "Parol", + "new_password_ucf": "Yangi parol", + "confirm_password_ucf": "Parolni tasdiqlang", + "sign_up_ucf": "Ro'yxatdan o'tish", + "already_have_an_account": "Hisobingiz bormi?", + "not_a_member": "Aʼzo emasmisiz?", + "forgot_password_q_ucf": "Parolni unutdingizmi?", + "forgot_password_ucf": "Parolni unutdingizmi", + "send": "Yuborish", + "enter_otp_code": "Tasdiqlash kodini kiriting", + "reset_password_ucf": "Parolni tiklash", + "otp_all_cap": "Bir martalik parol", + "resend_otp_all_cap": "Bir martalik parolni qayta yuborish", + "home": "Asosiy", + "categories": "Kategoriyalar", + "cart": "Savatcha", + "profile": "Profil", + "search_product_ucf": "Mahsulotni qidirish", + "top_categories_ucf": "Eng yaxshi kategoriyalar", + "best_selling_products_ucf": "Eng ko'p sotiladigan mahsulotlar", + "description": "Tavsif", + "price": "Narxi", + "related_product_ucf": "O'xshash mahsulotlar", + "edit_profile_ucf": "Profilni tahrirlash", + "voucher_n_offers_ucf": "Voucherlar va takliflar", + "favorite": "Sevimli", + "order_n_recording_ucf": "Buyurtma va yozib olish", + "my_profile_ucf": "Mening profilim", + "help_center_ucf": "Yordam markazi", + "address": "Manzil", + "notification": "Bildirishnoma", + "security": "Xavfsizlik", + "track_my_order_ucf": "Buyurtmani kuzatish", + "wallet_history_ucf": "Hamyon tarixi", + "refund_history_ucf": "To'lovni qaytarish tarixi", + "settings": "Sozlamalar", + "terms_n_conditions_ucf": "Foydalanish shartlari", + "log_out_ucf": "Chiqish", + "add_to_cart": "Savatga qo'shildi", + "pick_a_location": "Joyni tanlang", + "locations": "Joylar", + "data_is_not_available": "Maʼlumotlar mavjud emas", + "product_stock_not_available": "Ushbu mahsulotdan afsuski qolmadi", + "out_of_stock_ucf": "Sotuvda yo'q", + "order_info_ucf": "Buyurtma haqida ma'lumot", + "subtotal": "Oraliq jami", + "delivery_fee_ucf": "Yetkazib berish toÊ»lovi", + "total": "Jami", + "review_n_payment_ucf": "Ko'rib chiqish va to'lash", + "promo_code_ucf": "Kupon kodi", + "apply": "Foydalanish", + "coupon_discount_ucf": "Kupon chegirmasi", + "check_out_ucf": "Ro'yxatdan o'chirish", + "delivery_address_ucf": "Yetkazib berish manzili", + "billing_address_ucf": "To'lovchi; to'lovni qabul qiladigan manzil", + "alternative_phone_ucf": "Qo'shimcha telefon", + "additional_info_ucf": "Qo'shimcha ma'lumot", + "tax": "Soliq", + "available_logistics_ucf": "Mavjud yetkazib berish usuli", + "please_wait_ucf": "Iltimos kuting...", + "something_went_wrong": "Nimadir noto'g'ri bajarildi", + "orders": "Buyurtmalar", + "empty": "Bo'sh!", + "all_order": "Hamma buyurtmalar", + "pending": "Kutilmoqda", + "processing": "Qayta ishlash", + "delivered": "Yetkazib berildi", + "filter": "Filtr", + "price_range_ucf": "Narx diapazoni", + "to": "Kimga", + "next": "Keyingisi", + "coupons": "Kuponlar", + "days": "Kunlar", + "hours": "Soat", + "min": "Daqiqa", + "sec": "Soniya", + "copy_code_ucf": "Kodni nusxalash", + "wishlist": "Istaklar roÊ»yxati", + "add": "Qo'shish", + "add_new_address_ucf": "Yangi manzil qo'shing", + "update_address": "Manzilni yangilash", + "select_country": "Mamlakatni tanlang", + "select_state": "Davlatni tanlang", + "select_city": "Shaharni tanlang", + "country": "Mamlakat", + "state": "Davlat", + "city": "Shahar", + "default_address": "Birlamchi manzil", + "select_one": "Birini tanlang", + "save": "Saqlash", + "close": "Yopish", + "please_select_a_country": "Iltimos, mamlakatni tanlang", + "please_select_a_state": "Iltimos, davlatni tanlang", + "please_select_a_city": "Iltimos, shaharni tanlang", + "please_enter_address": "Iltimos, manzilni kiriting", + "date": "Sana", + "note": "Eslatma", + "order_has_been_placed": "Buyurtma berildi", + "order_tracking": "Buyurtmani kuzatish", + "currency": "Valyuta", + "order_details": "Buyurtma tafsilotlari", + "password_change_ucf": "Parolni o'zgartirish", + "update_password_ucf": "Parolni yangilash", + "basic_info": "Asosiy ma'lumot", + "update_profile_ucf": "Profilni yangilash", + "cancelled": "Bekor qilingan", + "submit": "Yuborish", + "go_to_cart": "Savatga borish", + "all_products_ucf": "Barcha mahsulotlar", + "no_more_data": "Boshqa maʼlumot yoÊ»q", + "place_order": "Buyurtma qilish", + "reg_delivery": "Yetkazib berish", + "we_will_deliver_your_products_soon": "Mahsulotlaringizni tez orada yetkazib beramiz.", + "we_are_not_shipping_to_your_city_now": "Siz ko'rsatayotgan manzilgan hozircha yetkazib berish mavjud emas", + "preferred_delivery_time": "Maqul yetkazib berish muddatini belgilang", + "payment_method": "To'lov usuli", + "personal_information": "Shaxsiy ma'lumotlar", + "tips": "Izoh", + "add_tips_for_deliveryman": "Yetkazib beruvchi uchun qo'shimcha izoh", + "order_summary": "Buyurtma haqida qisqacha", + "when_receiving_by_cash": "Naqd pul orqali qabul qilganda", + "when_receiving_by_card": "Karta orqali qabul qilganda", + "add_to_cart": "Savatga qo'shish", + "update": "Yangilandi", + "order_accepted": "Buyurtma qabul qilindi", + "success_login": "Muvaffaqiyatli tizimga kirildi", + "success_register": "Muvaffaqiyatli ro'yxatdan o'tildi", + "no_such_user_exists": "Bunday foydalanuvchi mavjud emas", + "a": "_", + "a": "_", + "a": "_", + "a": "_", + "a": "_", + "a": "_", + "a": "_", + "a": "_", + "a": "_", + "a": "_", + "download_invoice":"Chekni yuklab olish", + "image_mustbe_less_1_mb":"Rasm hajmi 1 mb dan kam bo'lishi kerak" +} \ No newline at end of file diff --git a/app_code/lib/l10n/l10n.dart b/app_code/lib/l10n/l10n.dart new file mode 100644 index 0000000..0b8eed6 --- /dev/null +++ b/app_code/lib/l10n/l10n.dart @@ -0,0 +1,13 @@ + + +import 'dart:ui'; + +import 'package:grostore/screens/auth/login.dart'; + +class L10n{ + static final all = [ + Locale('en'), + Locale('uz'), + Locale('ru'), + ]; +} \ No newline at end of file diff --git a/app_code/lib/main.dart b/app_code/lib/main.dart new file mode 100644 index 0000000..5427310 --- /dev/null +++ b/app_code/lib/main.dart @@ -0,0 +1,157 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:go_router/go_router.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/configs/app_config.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/helpers/common_functions.dart'; +import 'package:grostore/l10n/l10n.dart'; +import 'package:grostore/presenters/address_presenter.dart'; +import 'package:grostore/presenters/auth/auth_presenter.dart'; +import 'package:grostore/presenters/bloc/lang/lang_bloc.dart'; +import 'package:grostore/presenters/cart_presenter.dart'; +import 'package:grostore/presenters/categories_presenter.dart'; +import 'package:grostore/presenters/check_out_presenter.dart'; +import 'package:grostore/presenters/coupon_presenter.dart'; +import 'package:grostore/presenters/filter_presenter.dart'; +import 'package:grostore/presenters/home_presenter.dart'; +import 'package:grostore/presenters/landing_page_presenter.dart'; +import 'package:grostore/presenters/order_details_presenter.dart'; +import 'package:grostore/presenters/setting_presenter.dart'; +import 'package:grostore/presenters/main_persenter.dart'; +import 'package:grostore/presenters/order_presenter.dart'; +import 'package:grostore/presenters/product_details_presenter.dart'; +import 'package:grostore/presenters/refund_presenter.dart'; +import 'package:grostore/presenters/stock_locations_presenter.dart'; +import 'package:grostore/presenters/user_presenter.dart'; +import 'package:grostore/presenters/wallet_presenter.dart'; +import 'package:grostore/presenters/wishlist_presenter.dart'; +import 'package:grostore/screens/home.dart'; +import 'package:grostore/screens/landing_pages/landing_page.dart'; +import 'package:grostore/screens/main.dart'; +import 'package:grostore/screens/splash.dart'; +import 'package:flutter_localizations/flutter_localizations.dart'; + + +import 'package:provider/provider.dart'; +import 'package:shared_value/shared_value.dart'; + +import 'l10n/app_localizations.dart'; + +void main() { + runApp(SharedValue.wrapApp( + const MyApp(), + )); +} + +/// The route configuration. +final GoRouter router = GoRouter( + routes: [ + GoRoute( + path: '/', + builder: (BuildContext context, GoRouterState state) { + return const Splash(); + }, + ), + GoRoute( + path: '/landing-page', + builder: (BuildContext context, GoRouterState state) { + return const LandingPage(); + }, + ), + + ], +); + + +class MyApp extends StatelessWidget { + const MyApp({super.key}); + + // This widget is the root of your application. + @override + Widget build(BuildContext context) { + Locale locale = const Locale("uz"); + return MultiProvider( + providers: [ + ChangeNotifierProvider(create: (_) => SettingPresenter()), + ChangeNotifierProvider(create: (context) => AuthPresenter()), + ChangeNotifierProvider(create: (context) => MainPresenter()), + ChangeNotifierProvider(create: (context) => LandingPagePresenter()), + ChangeNotifierProvider(create: (context) => CartPresenter()), + ChangeNotifierProvider(create: (context) => HomePresenter()), + ChangeNotifierProvider(create: (context) => ProductDetailsPresenter()), + ChangeNotifierProvider(create: (context) => StockLocationsPresenter()), + ChangeNotifierProvider(create: (context) => UserPresenter(),), + ChangeNotifierProvider(create: (context) => OrderPresenter()), + ChangeNotifierProvider(create: (context) => CheckOutPresenter()), + ChangeNotifierProvider(create: (context) => CategoriesPresenter()), + ChangeNotifierProvider(create: (context) => FilterPresenter()), + ChangeNotifierProvider(create: (context) => CouponPresenter()), + ChangeNotifierProvider(create: (context) => WishlistPresenter()), + ChangeNotifierProvider(create: (context) => AddressPresenter()), + ChangeNotifierProvider(create: (context) => WalletPresenter()), + ChangeNotifierProvider(create: (context) => RefundPresenter()), + ChangeNotifierProvider(create: (context) => OrderDetailsPresenter()), + + ], + child: Consumer( + builder: (context, data, child) { + return BlocProvider( + create: (context) => LangBloc(), + child: BlocBuilder( + builder: (context, state) { + if(state is LangSuccess){ + locale = state.locale; + } + return MaterialApp( + debugShowCheckedModeBanner: false, + title: AppConfig.appName, + theme: ThemeData( + //primaryTextTheme:GoogleFonts.lobsterTextTheme() , + primaryColor: ThemeConfig.accentMaterialColor, + primarySwatch: ThemeConfig.accentMaterialColor, + textTheme: GoogleFonts.interTextTheme().copyWith( + + ), + //textTheme: + ), + //builder: OneContext().builder, + themeMode: ThemeMode.light, + locale: locale, + + // localeResolutionCallback: (deviceLocale, supportedLocales) { + // if (AppLocalizations.delegate.isSupported(deviceLocale!)) { + // return deviceLocale; + // } + // return const Locale('uz'); + // }, + localizationsDelegates: const [ + AppLocalizations.delegate, + GlobalMaterialLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + GlobalCupertinoLocalizations.delegate, + ], + supportedLocales: L10n.all, + // AppLang().supportedLocales(), + // home: Splash(), + initialRoute: '/', + routes: { + "/": (context) => const Splash(), + "/home": (context) => + Home(id: getQueryParameter(context, "id"),), + "/main": (context) => const Main(), + "/landing_page": (context) => const LandingPage(), + }, + + ); + }, + ), + ); + } + ), + ); + } +} + + diff --git a/app_code/lib/middlewares/banned_user_middleware.dart b/app_code/lib/middlewares/banned_user_middleware.dart new file mode 100644 index 0000000..416a2d0 --- /dev/null +++ b/app_code/lib/middlewares/banned_user_middleware.dart @@ -0,0 +1,29 @@ +import 'dart:convert'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:grostore/custom_ui/toast_ui.dart'; +import 'package:grostore/helpers/common_functions.dart'; +import 'package:grostore/screens/main.dart'; + +import 'middleware.dart'; + +class BannedMiddleware extends MiddleWare{ + + BuildContext context; + + BannedMiddleware(this.context); + + @override + bool next(String response) { + var jsonResponse = jsonDecode(response); + + if(!jsonResponse['result'] && jsonResponse['is_banned'] !=null && jsonResponse['is_banned']){ + ToastUi.show(context, jsonResponse['message']); + resetApp(context); + return false; + } + return true; + + } + +} \ No newline at end of file diff --git a/app_code/lib/middlewares/middleware.dart b/app_code/lib/middlewares/middleware.dart new file mode 100644 index 0000000..6846e4d --- /dev/null +++ b/app_code/lib/middlewares/middleware.dart @@ -0,0 +1,7 @@ + + + +abstract class MiddleWare{ +bool next(String response); + +} \ No newline at end of file diff --git a/app_code/lib/models/auth/login_response_model.dart b/app_code/lib/models/auth/login_response_model.dart new file mode 100644 index 0000000..71cc190 --- /dev/null +++ b/app_code/lib/models/auth/login_response_model.dart @@ -0,0 +1,46 @@ +// To parse this JSON data, do +// +// final loginResponse = loginResponseFromJson(jsonString); + +import 'dart:convert'; + +import 'package:grostore/models/common/user_info.dart'; + +LoginResponse loginResponseFromJson(String str) => LoginResponse.fromJson(json.decode(str)); +LoginResponse loginResponseDefaultValue() => LoginResponse(result: false, message: "Faild", accessToken: "", tokenType: "",user: UserInfo.init()); + +String loginResponseToJson(LoginResponse data) => json.encode(data.toJson()); + +class LoginResponse { + bool result; + String message; + String accessToken; + String tokenType; + UserInfo user; + + + LoginResponse({ + required this.result, + required this.message, + required this.accessToken, + required this.tokenType, + required this.user + + }); + + factory LoginResponse.fromJson(Map json) => LoginResponse( + result: json["result"], + message: json["message"], + accessToken: json["access_token"], + tokenType: json["token_type"], + user: UserInfo.fromJson(json["user"]), + ); + + Map toJson() => { + "result": result, + "message": message, + "access_token": accessToken, + "token_type": tokenType, + "user": user.toJson(), + }; +} diff --git a/app_code/lib/models/auth/registration_response_model.dart b/app_code/lib/models/auth/registration_response_model.dart new file mode 100644 index 0000000..6fc26df --- /dev/null +++ b/app_code/lib/models/auth/registration_response_model.dart @@ -0,0 +1,117 @@ +// To parse this JSON data, do +// +// final registrationResponse = registrationResponseFromJson(jsonString); + +import 'dart:convert'; + +import 'package:grostore/models/common/user_info.dart'; + +RegistrationResponse registrationResponseFromJson(String str) =>RegistrationResponse.fromJson(json.decode(str)); + +RegistrationResponses registrationResFromJson(String str) =>RegistrationResponses.fromJson(json.decode(str)); + +RegistrationResp registrationRespFromJson(String str) =>RegistrationResp.fromJson(json.decode(str)); + +RegistrationResp registrationRespDefault() =>RegistrationResp.fromJson(json.decode('''{ + "result": false, + "message": "", + "code":1}''')); + +RegistrationResponse registrationResponseDefault() =>RegistrationResponse.fromJson(json.decode('''{ + "result": false, + "message": "", + "access_token": "", + "token_type": "" +}''')); + +RegistrationResponses registrationResponsesDefault() => RegistrationResponses.fromJson(json.decode('''{ + "result": false, + "message": "", + "access_token": "", + "token_type": "" +}''')); + +String registrationResponseToJson(RegistrationResponse data) =>json.encode(data.toJson()); + + +class RegistrationResponse { + bool result; + String message; + String accessToken; + String tokenType; + UserInfo user; + + RegistrationResponse( + {required this.result, + required this.message, + required this.accessToken, + required this.tokenType, + required this.user}); + + factory RegistrationResponse.fromJson(Map json) => + RegistrationResponse( + result: json["result"], + message: json["message"], + accessToken: json["access_token"], + tokenType: json["token_type"], + user: UserInfo.fromJson(json["user"]), + ); + + Map toJson() => { + "result": result, + "message": message, + "access_token": accessToken, + "token_type": tokenType, + "user": user.toJson(), + }; +} + +class RegistrationResponses { + bool result; + var message; + String accessToken; + String tokenType; + + RegistrationResponses({ + required this.result, + required this.message, + required this.accessToken, + required this.tokenType, + }); + + factory RegistrationResponses.fromJson(Map json) => + RegistrationResponses( + result: json["result"], + message: json["message"], + accessToken: json["access_token"], + tokenType: json["token_type"], + ); + + Map toJson() => { + "result": result, + "message": message, + "access_token": accessToken, + "token_type": tokenType, + }; +} + +class RegistrationResp { + bool result; + String message; + int code; + + RegistrationResp({required this.result, required this.message, required this.code}); + + factory RegistrationResp.fromJson(Map json) => + RegistrationResp( + result: json["result"], + message: json["message"], + code: json["code"], + ); + + Map toJson() => { + "result": result, + "message": message, + "code": code, + }; +} diff --git a/app_code/lib/models/auth/token_check_response.dart b/app_code/lib/models/auth/token_check_response.dart new file mode 100644 index 0000000..3bd6bf0 --- /dev/null +++ b/app_code/lib/models/auth/token_check_response.dart @@ -0,0 +1,34 @@ +// To parse this JSON data, do +// +// final tokenCheckResponse = tokenCheckResponseFromJson(jsonString); + +import 'dart:convert'; + +import 'package:grostore/models/common/user_info.dart'; + +TokenCheckResponse tokenCheckResponseFromJson(String str) => TokenCheckResponse.fromJson(json.decode(str)); + +String tokenCheckResponseToJson(TokenCheckResponse data) => json.encode(data.toJson()); + +class TokenCheckResponse { + bool result; + UserInfo user; + + TokenCheckResponse({ + required this.result, + required this.user, + }); + + factory TokenCheckResponse.fromJson(Map json) => TokenCheckResponse( + result: json["result"], + user: UserInfo.fromJson(json["user"]), + ); + + Map toJson() => { + "result": result, + "user": user.toJson(), + }; +} + + + diff --git a/app_code/lib/models/cart_response.dart b/app_code/lib/models/cart_response.dart new file mode 100644 index 0000000..02d80ca --- /dev/null +++ b/app_code/lib/models/cart_response.dart @@ -0,0 +1,93 @@ +// To parse this JSON data, do +// +// final cartResponse = cartResponseFromJson(jsonString); + +import 'dart:convert'; + +CartResponse cartResponseFromJson(String str) => CartResponse.fromJson(json.decode(str)); + +String cartResponseToJson(CartResponse data) => json.encode(data.toJson()); + +class CartResponse { + bool result; + String message; + List carts; + var cartCount; + String subTotal; + String total; + String couponDiscount; + + CartResponse({ + required this.result, + required this.message, + required this.carts, + required this.cartCount, + required this.subTotal, + required this.total, + required this.couponDiscount, + }); + + factory CartResponse.fromJson(Map json) => CartResponse( + result: json["result"], + message: json["message"], + carts: List.from(json["carts"].map((x) => Cart.fromJson(x))), + cartCount: json["cartCount"], + subTotal: json["subTotal"], + total: json["total"], + couponDiscount: json["couponDiscount"], + ); + + Map toJson() => { + "result": result, + "message": message, + "carts": List.from(carts.map((x) => x.toJson())), + "cartCount": cartCount, + "subTotal": subTotal, + "total": total, + "couponDiscount": couponDiscount, + }; +} + +class Cart { + var id; + String slug; + String name; + var quantity; + String thumbnailImage; + String unit; + String price; + String category; + + Cart({ + required this.id, + required this.slug, + required this.name, + required this.quantity, + required this.thumbnailImage, + required this.unit, + required this.price, + required this.category, + }); + + factory Cart.fromJson(Map json) => Cart( + id: json["id"], + slug: json["slug"], + name: json["name"], + quantity: json["quantity"], + thumbnailImage: json["thumbnail_image"], + unit: json["unit"], + price: json["price"], + category: json["category"], + ); + + Map toJson() => { + "id": id, + "slug": slug, + "name": name, + "quantity": quantity, + "thumbnail_image": thumbnailImage, + "unit": unit, + "price": price, + "category": category, + }; +} diff --git a/app_code/lib/models/category_response.dart b/app_code/lib/models/category_response.dart new file mode 100644 index 0000000..038d92d --- /dev/null +++ b/app_code/lib/models/category_response.dart @@ -0,0 +1,129 @@ + +import 'dart:convert'; + +import 'package:grostore/models/common/category_info.dart'; + +CategoryResponse categoryResponseFromJson(String str) => CategoryResponse.fromJson(json.decode(str)); + +String categoryResponseToJson(CategoryResponse data) => json.encode(data.toJson()); + +class CategoryResponse { + List data; + Links links; + Meta meta; + + CategoryResponse({ + required this.data, + required this.links, + required this.meta, + }); + + factory CategoryResponse.fromJson(Map json) => CategoryResponse( + data: List.from(json["data"].map((x) => CategoryInfo.fromJson(x))), + links: Links.fromJson(json["links"]), + meta: Meta.fromJson(json["meta"]), + ); + + Map toJson() => { + "data": List.from(data.map((x) => x.toJson())), + "links": links.toJson(), + "meta": meta.toJson(), + }; +} + +class Links { + String first; + String last; + dynamic prev; + dynamic next; + + Links({ + required this.first, + required this.last, + this.prev, + this.next, + }); + + factory Links.fromJson(Map json) => Links( + first: json["first"], + last: json["last"], + prev: json["prev"], + next: json["next"], + ); + + Map toJson() => { + "first": first, + "last": last, + "prev": prev, + "next": next, + }; +} + +class Meta { + var currentPage; + var from; + var lastPage; + List links; + String path; + var perPage; + var to; + var total; + + Meta({ + required this.currentPage, + required this.from, + required this.lastPage, + required this.links, + required this.path, + required this.perPage, + required this.to, + required this.total, + }); + + factory Meta.fromJson(Map json) => Meta( + currentPage: json["current_page"], + from: json["from"], + lastPage: json["last_page"], + links: List.from(json["links"].map((x) => Link.fromJson(x))), + path: json["path"], + perPage: json["per_page"], + to: json["to"], + total: json["total"], + ); + + Map toJson() => { + "current_page": currentPage, + "from": from, + "last_page": lastPage, + "links": List.from(links.map((x) => x.toJson())), + "path": path, + "per_page": perPage, + "to": to, + "total": total, + }; +} + +class Link { + String? url; + String label; + bool active; + + Link({ + this.url, + required this.label, + required this.active, + }); + + factory Link.fromJson(Map json) => Link( + url: json["url"], + label: json["label"], + active: json["active"], + ); + + Map toJson() => { + "url": url, + "label": label, + "active": active, + }; +} + diff --git a/app_code/lib/models/city_response.dart b/app_code/lib/models/city_response.dart new file mode 100644 index 0000000..300c00e --- /dev/null +++ b/app_code/lib/models/city_response.dart @@ -0,0 +1,53 @@ +// To parse this JSON data, do +// +// final cityResponse = cityResponseFromJson(jsonString); + +import 'dart:convert'; + +CityResponse cityResponseFromJson(String str) => CityResponse.fromJson(json.decode(str)); + +String cityResponseToJson(CityResponse data) => json.encode(data.toJson()); + +class CityResponse { + List data; + + CityResponse({ + required this.data, + }); + + factory CityResponse.fromJson(Map json) => CityResponse( + data: List.from(json["data"].map((x) => CityInfo.fromJson(x))), + ); + + Map toJson() => { + "data": List.from(data.map((x) => x.toJson())), + }; +} + +class CityInfo { + int stateId; + int id; + String name; + bool isActive; + + CityInfo({ + required this.stateId, + required this.id, + required this.name, + required this.isActive, + }); + + factory CityInfo.fromJson(Map json) => CityInfo( + stateId: json["state_id"], + id: json["id"], + name: json["name"], + isActive: json["is_active"], + ); + + Map toJson() => { + "state_id": stateId, + "id": id, + "name": name, + "is_active": isActive, + }; +} diff --git a/app_code/lib/models/common/category_info.dart b/app_code/lib/models/common/category_info.dart new file mode 100644 index 0000000..4ff5c4a --- /dev/null +++ b/app_code/lib/models/common/category_info.dart @@ -0,0 +1,27 @@ +class CategoryInfo { + var id; + String name; + var products; + String thumbnailImage; + + CategoryInfo({ + required this.id, + required this.name, + required this.products, + required this.thumbnailImage, + }); + + factory CategoryInfo.fromJson(Map json) => CategoryInfo( + id: json["id"], + name: json["name"], + products: json["products"], + thumbnailImage: json["thumbnail_image"], + ); + + Map toJson() => { + "id": id, + "name": name, + "products": products, + "thumbnail_image": thumbnailImage, + }; +} \ No newline at end of file diff --git a/app_code/lib/models/common/user_info.dart b/app_code/lib/models/common/user_info.dart new file mode 100644 index 0000000..26e1668 --- /dev/null +++ b/app_code/lib/models/common/user_info.dart @@ -0,0 +1,39 @@ +class UserInfo { + String name; + String? email; + String phone; + var balance; + String avatar; + + UserInfo({ + required this.name, + this.email, + required this.phone, + required this.balance, + required this.avatar, + }); + + factory UserInfo.fromJson(Map json) => UserInfo( + name: json["name"], + email: json["email"], + phone: json["phone"], + balance: json["balance"], + avatar: json["avatar"], + ); + + factory UserInfo.init() => UserInfo( + name: '', + email: '', + phone: '', + balance:'', + avatar: '' + ); + + Map toJson() => { + "name": name, + "email": email, + "phone": phone, + "balance": balance, + "avatar": avatar, + }; +} \ No newline at end of file diff --git a/app_code/lib/models/common_response.dart b/app_code/lib/models/common_response.dart new file mode 100644 index 0000000..c2d537d --- /dev/null +++ b/app_code/lib/models/common_response.dart @@ -0,0 +1,29 @@ +// To parse this JSON data, do +// +// final commonResponse = commonResponseFromJson(jsonString); + +import 'dart:convert'; + +CommonResponse commonResponseFromJson(String str) => CommonResponse.fromJson(json.decode(str)); + +String commonResponseToJson(CommonResponse data) => json.encode(data.toJson()); + +class CommonResponse { + bool result; + var message; + + CommonResponse({ + required this.result, + required this.message, + }); + + factory CommonResponse.fromJson(Map json) => CommonResponse( + result: json["result"], + message: json["message"], + ); + + Map toJson() => { + "result": result, + "message": message, + }; +} diff --git a/app_code/lib/models/country_response.dart b/app_code/lib/models/country_response.dart new file mode 100644 index 0000000..17e7660 --- /dev/null +++ b/app_code/lib/models/country_response.dart @@ -0,0 +1,53 @@ +// To parse this JSON data, do +// +// final countryResponse = countryResponseFromJson(jsonString); + +import 'dart:convert'; + +CountryResponse countryResponseFromJson(String str) => CountryResponse.fromJson(json.decode(str)); + +String countryResponseToJson(CountryResponse data) => json.encode(data.toJson()); + +class CountryResponse { + List data; + + CountryResponse({ + required this.data, + }); + + factory CountryResponse.fromJson(Map json) => CountryResponse( + data: List.from(json["data"].map((x) => CountryInfo.fromJson(x))), + ); + + Map toJson() => { + "data": List.from(data.map((x) => x.toJson())), + }; +} + +class CountryInfo { + int id; + String code; + String name; + bool isActive; + + CountryInfo({ + required this.id, + required this.code, + required this.name, + required this.isActive, + }); + + factory CountryInfo.fromJson(Map json) => CountryInfo( + id: json["id"], + code: json["code"], + name: json["name"], + isActive: json["is_active"], + ); + + Map toJson() => { + "id": id, + "code": code, + "name": name, + "is_active": isActive, + }; +} diff --git a/app_code/lib/models/coupon_response.dart b/app_code/lib/models/coupon_response.dart new file mode 100644 index 0000000..91f5740 --- /dev/null +++ b/app_code/lib/models/coupon_response.dart @@ -0,0 +1,93 @@ +// To parse this JSON data, do +// +// final couponResponse = couponResponseFromJson(jsonString); + +import 'dart:convert'; + +CouponResponse couponResponseFromJson(String str) => CouponResponse.fromJson(json.decode(str)); + +String couponResponseToJson(CouponResponse data) => json.encode(data.toJson()); + +class CouponResponse { + List data; + + CouponResponse({ + required this.data, + }); + + factory CouponResponse.fromJson(Map json) => CouponResponse( + data: List.from(json["data"].map((x) => CouponInfo.fromJson(x))), + ); + + Map toJson() => { + "data": List.from(data.map((x) => x.toJson())), + }; +} + +class CouponInfo { + var id; + var shopId; + String banner; + String code; + String discountType; + var discountValue; + var isFreeShipping; + String startDate; + String endDate; + var minSpend; + var maxDiscountAmount; + var customerUsageLimit; + String? productIds; + String? categoryIds; + + CouponInfo({ + required this.id, + required this.shopId, + required this.banner, + required this.code, + required this.discountType, + required this.discountValue, + required this.isFreeShipping, + required this.startDate, + required this.endDate, + required this.minSpend, + required this.maxDiscountAmount, + required this.customerUsageLimit, + this.productIds, + this.categoryIds, + }); + + factory CouponInfo.fromJson(Map json) => CouponInfo( + id: json["id"], + shopId: json["shop_id"], + banner: json["banner"], + code: json["code"], + discountType: json["discount_type"], + discountValue: json["discount_value"], + isFreeShipping: json["is_free_shipping"], + startDate: json["start_date"], + endDate: json["end_date"], + minSpend: json["min_spend"], + maxDiscountAmount: json["max_discount_amount"], + customerUsageLimit: json["customer_usage_limit"], + productIds: json["product_ids"], + categoryIds: json["category_ids"], + ); + + Map toJson() => { + "id": id, + "shop_id": shopId, + "banner": banner, + "code": code, + "discount_type": discountType, + "discount_value": discountValue, + "is_free_shipping": isFreeShipping, + "start_date": startDate, + "end_date": endDate, + "min_spend": minSpend, + "max_discount_amount": maxDiscountAmount, + "customer_usage_limit": customerUsageLimit, + "product_ids": productIds, + "category_ids": categoryIds, + }; +} diff --git a/app_code/lib/models/currency_response.dart b/app_code/lib/models/currency_response.dart new file mode 100644 index 0000000..85f5494 --- /dev/null +++ b/app_code/lib/models/currency_response.dart @@ -0,0 +1,61 @@ +// To parse this JSON data, do +// +// final currencyResponse = currencyResponseFromJson(jsonString); + +import 'dart:convert'; + +CurrencyResponse currencyResponseFromJson(String str) => CurrencyResponse.fromJson(json.decode(str)); + +String currencyResponseToJson(CurrencyResponse data) => json.encode(data.toJson()); + +class CurrencyResponse { + List data; + + CurrencyResponse({ + required this.data, + }); + + factory CurrencyResponse.fromJson(Map json) => CurrencyResponse( + data: List.from(json["data"].map((x) => CurrencyInfo.fromJson(x))), + ); + + Map toJson() => { + "data": List.from(data.map((x) => x.toJson())), + }; +} + +class CurrencyInfo { + String code; + String name; + String symbol; + var rate; + var alignment; + bool isDefault; + + CurrencyInfo({ + required this.code, + required this.name, + required this.symbol, + required this.rate, + required this.alignment, + required this.isDefault, + }); + + factory CurrencyInfo.fromJson(Map json) => CurrencyInfo( + code: json["code"], + name: json["name"], + symbol: json["symbol"], + alignment: json["alignment"], + rate: json["rate"], + isDefault: json["is_default"], + ); + + Map toJson() => { + "code": code, + "name": name, + "symbol": symbol, + "rate": rate, + "alignment": alignment, + "is_default": isDefault, + }; +} diff --git a/app_code/lib/models/customer.dart b/app_code/lib/models/customer.dart new file mode 100644 index 0000000..30a8ee5 --- /dev/null +++ b/app_code/lib/models/customer.dart @@ -0,0 +1,9 @@ +class Customer { + final String name; + final String address; + + const Customer({ + required this.name, + required this.address, + }); +} \ No newline at end of file diff --git a/app_code/lib/models/edit_address_response.dart b/app_code/lib/models/edit_address_response.dart new file mode 100644 index 0000000..e6bc685 --- /dev/null +++ b/app_code/lib/models/edit_address_response.dart @@ -0,0 +1,88 @@ +// To parse this JSON data, do +// +// final editAddressResponse = editAddressResponseFromJson(jsonString); + +import 'dart:convert'; + +EditAddressResponse editAddressResponseFromJson(String str) => + EditAddressResponse.fromJson(json.decode(str)); + +String editAddressResponseToJson(EditAddressResponse data) => + json.encode(data.toJson()); + +class EditAddressResponse { + Data data; + bool result; + int status; + + EditAddressResponse({ + required this.data, + required this.result, + required this.status, + }); + + factory EditAddressResponse.fromJson(Map json) => + EditAddressResponse( + data: Data.fromJson(json["data"]), + result: json["result"], + status: json["status"], + ); + + Map toJson() => { + "data": data.toJson(), + "result": result, + "status": status, + }; +} + +class Data { + int id; + int userId; + int countryId; + String countryName; + int stateId; + String stateName; + int cityId; + String cityName; + String address; + int isDefault; + + Data({ + required this.id, + required this.userId, + required this.countryId, + required this.countryName, + required this.stateId, + required this.stateName, + required this.cityId, + required this.cityName, + required this.address, + required this.isDefault, + }); + + factory Data.fromJson(Map json) => Data( + id: json["id"], + userId: json["user_id"], + countryId: json["country_id"], + countryName: json["country_name"], + stateId: json["state_id"], + stateName: json["state_name"], + cityId: json["city_id"], + cityName: json["city_name"], + address: json["address"], + isDefault: json["is_default"], + ); + + Map toJson() => { + "id": id, + "user_id": userId, + "country_id": countryId, + "country_name": countryName, + "state_id": stateId, + "state_name": stateName, + "city_id": cityId, + "city_name": cityName, + "address": address, + "is_default": isDefault, + }; +} diff --git a/app_code/lib/models/help_center_response.dart b/app_code/lib/models/help_center_response.dart new file mode 100644 index 0000000..c64b5c6 --- /dev/null +++ b/app_code/lib/models/help_center_response.dart @@ -0,0 +1,33 @@ +// To parse this JSON data, do +// +// final helpCenterResponse = helpCenterResponseFromJson(jsonString); + +import 'dart:convert'; + +HelpCenterResponse helpCenterResponseFromJson(String str) => HelpCenterResponse.fromJson(json.decode(str)); + +String helpCenterResponseToJson(HelpCenterResponse data) => json.encode(data.toJson()); + +class HelpCenterResponse { + String location; + String contactNumber; + String email; + + HelpCenterResponse({ + required this.location, + required this.contactNumber, + required this.email, + }); + + factory HelpCenterResponse.fromJson(Map json) => HelpCenterResponse( + location: json["location"], + contactNumber: json["contact_number"], + email: json["email"], + ); + + Map toJson() => { + "location": location, + "contact_number": contactNumber, + "email": email, + }; +} diff --git a/app_code/lib/models/home_banner_response.dart b/app_code/lib/models/home_banner_response.dart new file mode 100644 index 0000000..5a372fc --- /dev/null +++ b/app_code/lib/models/home_banner_response.dart @@ -0,0 +1,45 @@ +// To parse this JSON data, do +// +// final homeBannerResponse = homeBannerResponseFromJson(jsonString); + +import 'dart:convert'; + +HomeBannerResponse homeBannerResponseFromJson(String str) => HomeBannerResponse.fromJson(json.decode(str)); + +String homeBannerResponseToJson(HomeBannerResponse data) => json.encode(data.toJson()); + +class HomeBannerResponse { + List data; + + HomeBannerResponse({ + required this.data, + }); + + factory HomeBannerResponse.fromJson(Map json) => HomeBannerResponse( + data: List.from(json["data"].map((x) => BannerData.fromJson(x))), + ); + + Map toJson() => { + "data": List.from(data.map((x) => x.toJson())), + }; +} + +class BannerData { + String image; + String link; + + BannerData({ + required this.image, + required this.link, + }); + + factory BannerData.fromJson(Map json) => BannerData( + image: json["image"], + link: json["link"], + ); + + Map toJson() => { + "image": image, + "link": link, + }; +} diff --git a/app_code/lib/models/invoice.dart b/app_code/lib/models/invoice.dart new file mode 100644 index 0000000..5fb1335 --- /dev/null +++ b/app_code/lib/models/invoice.dart @@ -0,0 +1,48 @@ + +import 'package:grostore/models/supplire.dart'; + +import 'customer.dart'; + +class Invoice { + final InvoiceInfo info; + final Supplier supplier; + final Customer customer; + final List items; + + const Invoice({ + required this.info, + required this.supplier, + required this.customer, + required this.items, + }); +} + +class InvoiceInfo { + final String description; + final String number; + final DateTime date; + final DateTime dueDate; + + const InvoiceInfo({ + required this.description, + required this.number, + required this.date, + required this.dueDate, + }); +} + +class InvoiceItem { + final String description; + final DateTime date; + final int quantity; + final double vat; + final double unitPrice; + + const InvoiceItem({ + required this.description, + required this.date, + required this.quantity, + required this.vat, + required this.unitPrice, + }); +} \ No newline at end of file diff --git a/app_code/lib/models/language_response.dart b/app_code/lib/models/language_response.dart new file mode 100644 index 0000000..263ad9e --- /dev/null +++ b/app_code/lib/models/language_response.dart @@ -0,0 +1,61 @@ +// To parse this JSON data, do +// +// final languageResponse = languageResponseFromJson(jsonString); + +import 'dart:convert'; + +LanguageResponse languageResponseFromJson(String str) => LanguageResponse.fromJson(json.decode(str)); + +String languageResponseToJson(LanguageResponse data) => json.encode(data.toJson()); + +class LanguageResponse { + List data; + + LanguageResponse({ + required this.data, + }); + + factory LanguageResponse.fromJson(Map json) => LanguageResponse( + data: List.from(json["data"].map((x) => LanguageInfo.fromJson(x))), + ); + + Map toJson() => { + "data": List.from(data.map((x) => x.toJson())), + }; +} + +class LanguageInfo { + int id; + String name; + String flag; + String code; + var isRtl; + var isActive; + + LanguageInfo({ + required this.id, + required this.name, + required this.flag, + required this.code, + required this.isRtl, + required this.isActive, + }); + + factory LanguageInfo.fromJson(Map json) => LanguageInfo( + id: json["id"], + name: json["name"], + flag: json["flag"], + code: json["code"], + isRtl: json["is_rtl"], + isActive: json["is_active"], + ); + + Map toJson() => { + "id": id, + "name": name, + "flag": flag, + "code": code, + "is_rtl": isRtl, + "is_active": isActive, + }; +} diff --git a/app_code/lib/models/locations_response.dart b/app_code/lib/models/locations_response.dart new file mode 100644 index 0000000..3cceff3 --- /dev/null +++ b/app_code/lib/models/locations_response.dart @@ -0,0 +1,65 @@ +// To parse this JSON data, do +// +// final locationsResponse = locationsResponseFromJson(jsonString); + +import 'dart:convert'; + +LocationsResponse locationsResponseFromJson(String str) => LocationsResponse.fromJson(json.decode(str)); + +String locationsResponseToJson(LocationsResponse data) => json.encode(data.toJson()); + +class LocationsResponse { + List data; + + LocationsResponse({ + required this.data, + }); + + factory LocationsResponse.fromJson(Map json) => LocationsResponse( + data: List.from(json["data"].map((x) => LocationInfo.fromJson(x))), + ); + + Map toJson() => { + "data": List.from(data.map((x) => x.toJson())), + }; +} + +class LocationInfo { + int id; + String name; + String image; + String address; + dynamic lat; + dynamic lng; + bool isDefault; + + LocationInfo({ + required this.id, + required this.name, + required this.image, + required this.address, + this.lat, + this.lng, + required this.isDefault, + }); + + factory LocationInfo.fromJson(Map json) => LocationInfo( + id: json["id"], + name: json["name"], + image: json["image"], + address: json["address"], + lat: json["lat"], + lng: json["lng"], + isDefault: json["is_default"], + ); + + Map toJson() => { + "id": id, + "name": name, + "image": image, + "address": address, + "lat": lat, + "lng": lng, + "is_default": isDefault, + }; +} diff --git a/app_code/lib/models/logistics_response.dart b/app_code/lib/models/logistics_response.dart new file mode 100644 index 0000000..dba7a28 --- /dev/null +++ b/app_code/lib/models/logistics_response.dart @@ -0,0 +1,57 @@ +// To parse this JSON data, do +// +// final logisticsResponse = logisticsResponseFromJson(jsonString); + +import 'dart:convert'; + +LogisticsResponse logisticsResponseFromJson(String str) => LogisticsResponse.fromJson(json.decode(str)); + +String logisticsResponseToJson(LogisticsResponse data) => json.encode(data.toJson()); + +class LogisticsResponse { + List data; + + LogisticsResponse({ + required this.data, + }); + + factory LogisticsResponse.fromJson(Map json) => LogisticsResponse( + data: List.from(json["data"].map((x) => LogisticInfo.fromJson(x))), + ); + + Map toJson() => { + "data": List.from(data.map((x) => x.toJson())), + }; +} + +class LogisticInfo { + int id; + String name; + int logisticId; + String price; + String image; + + LogisticInfo({ + required this.id, + required this.name, + required this.logisticId, + required this.price, + required this.image, + }); + + factory LogisticInfo.fromJson(Map json) => LogisticInfo( + id: json["id"], + name: json["name"], + logisticId: json["logistic_id"], + price: json["price"], + image: json["image"], + ); + + Map toJson() => { + "id": id, + "name": name, + "logistic_id": logisticId, + "price": price, + "image": image, + }; +} diff --git a/app_code/lib/models/order/order_details_response.dart b/app_code/lib/models/order/order_details_response.dart new file mode 100644 index 0000000..bb284ad --- /dev/null +++ b/app_code/lib/models/order/order_details_response.dart @@ -0,0 +1,177 @@ +// To parse this JSON data, do +// +// final orderDetailsResponse = orderDetailsResponseFromJson(jsonString); + +import 'dart:convert'; + +import 'package:grostore/models/product_mini_response.dart'; + +OrderDetailsResponse orderDetailsResponseFromJson(String str) => OrderDetailsResponse.fromJson(json.decode(str)); + +String orderDetailsResponseToJson(OrderDetailsResponse data) => json.encode(data.toJson()); + +class OrderDetailsResponse { + OrderDetailsInfo data; + + OrderDetailsResponse({ + required this.data, + }); + + factory OrderDetailsResponse.fromJson(Map json) => OrderDetailsResponse( + data: OrderDetailsInfo.fromJson(json["data"]), + ); + + Map toJson() => { + "data": data.toJson(), + }; +} + +class OrderDetailsInfo { + int id; + String code; + String date; + IngAddress? shippingAddress; + IngAddress? billingAddress; + List items; + String status; + String payment_method; + String subTotalAmount; + String totalTips; + String totalShippingCost; + String couponDiscountAmount; + String totalPrice; + + OrderDetailsInfo({ + required this.id, + required this.code, + required this.date, + this.shippingAddress, + this.billingAddress, + required this.items, + required this.status, + required this.payment_method, + required this.subTotalAmount, + required this.totalTips, + required this.totalShippingCost, + required this.totalPrice, + required this.couponDiscountAmount + }); + + factory OrderDetailsInfo.fromJson(Map json) => OrderDetailsInfo( + id: json["id"], + code: json["order_code"], + date: json["date"], + shippingAddress:json["shipping_address"]==null?null: IngAddress.fromJson(json["shipping_address"]), + billingAddress: json["billing_address"]==null?null:IngAddress.fromJson(json["billing_address"]), + items: List.from(json["items"].map((x) => Item.fromJson(x))), + status: json["status"], + payment_method: json["payment_method"], + subTotalAmount: json["sub_total_amount"], + totalTips: json["total_tips"], + totalShippingCost: json["total_shipping_cost"], + couponDiscountAmount: json["coupon_discount_amount"], + totalPrice: json["total_price"], + ); + + Map toJson() => { + "id": id, + "date": date, + "shipping_address": shippingAddress?.toJson(), + "billing_address": billingAddress?.toJson(), + "items": List.from(items.map((x) => x.toJson())), + "status": status, + "sub_total_amount": subTotalAmount, + "total_tips": totalTips, + "total_shipping_cost": totalShippingCost, + "total_price": totalPrice, + }; +} + +class IngAddress { + var id; + var userId; + var countryId; + String countryName; + var stateId; + String stateName; + var cityId; + String cityName; + String address; + var isDefault; + + IngAddress({ + required this.id, + required this.userId, + required this.countryId, + required this.countryName, + required this.stateId, + required this.stateName, + required this.cityId, + required this.cityName, + required this.address, + required this.isDefault, + }); + + factory IngAddress.fromJson(Map json) => IngAddress( + id: json["id"], + userId: json["user_id"], + countryId: json["country_id"], + countryName: json["country_name"], + stateId: json["state_id"], + stateName: json["state_name"], + cityId: json["city_id"], + cityName: json["city_name"], + address: json["address"], + isDefault: json["is_default"], + ); + + Map toJson() => { + "id": id, + "user_id": userId, + "country_id": countryId, + "country_name": countryName, + "state_id": stateId, + "state_name": stateName, + "city_id": cityId, + "city_name": cityName, + "address": address, + "is_default": isDefault, + }; +} + +class Item { + var id; + ProductMini? product; + var qty; + String unitPrice; + String totalPrice; + var refund_status; + + Item({ + required this.id, + this.product, + required this.qty, + required this.unitPrice, + required this.totalPrice, + required this.refund_status, + }); + + factory Item.fromJson(Map json) => Item( + id: json["id"], + product: ProductMini.fromJson(json["product"]), + qty: json["qty"], + unitPrice: json["unit_price"], + totalPrice: json["total_price"], + refund_status: json["refund_status"], + ); + + Map toJson() => { + "id":id, + "product": product?.toJson(), + "qty": qty, + "unit_price": unitPrice, + "total_price": totalPrice, + "refund_status": refund_status, + }; +} + diff --git a/app_code/lib/models/order/order_summery_response.dart b/app_code/lib/models/order/order_summery_response.dart new file mode 100644 index 0000000..312d3b1 --- /dev/null +++ b/app_code/lib/models/order/order_summery_response.dart @@ -0,0 +1,45 @@ +// To parse this JSON data, do +// +// final orderSummeryResponse = orderSummeryResponseFromJson(jsonString); + +import 'dart:convert'; + +OrderSummeryResponse orderSummeryResponseFromJson(String str) => OrderSummeryResponse.fromJson(json.decode(str)); + +String orderSummeryResponseToJson(OrderSummeryResponse data) => json.encode(data.toJson()); + +class OrderSummeryResponse { + String subTotal; + String tax; + String shippingCharge; + bool isFreeShipping; + String couponDiscount; + String total; + + OrderSummeryResponse({ + required this.subTotal, + required this.tax, + required this.shippingCharge, + required this.isFreeShipping, + required this.couponDiscount, + required this.total, + }); + + factory OrderSummeryResponse.fromJson(Map json) => OrderSummeryResponse( + subTotal: json["sub_total"], + tax: json["tax"], + shippingCharge: json["shipping_charge"], + isFreeShipping: json["is_free_shipping"], + couponDiscount: json["coupon_discount"], + total: json["total"], + ); + + Map toJson() => { + "sub_total": subTotal, + "tax": tax, + "shipping_charge": shippingCharge, + "is_free_shipping": isFreeShipping, + "coupon_discount": couponDiscount, + "total": total, + }; +} diff --git a/app_code/lib/models/order/orders_response.dart b/app_code/lib/models/order/orders_response.dart new file mode 100644 index 0000000..5d301e1 --- /dev/null +++ b/app_code/lib/models/order/orders_response.dart @@ -0,0 +1,233 @@ +// To parse this JSON data, do +// +// final ordersResponse = ordersResponseFromJson(jsonString); + +import 'dart:convert'; + +import 'package:grostore/models/product_mini_response.dart'; + +OrdersResponse ordersResponseFromJson(String str) => OrdersResponse.fromJson(json.decode(str)); + +String ordersResponseToJson(OrdersResponse data) => json.encode(data.toJson()); + +class OrdersResponse { + List data; + Links links; + Meta meta; + + OrdersResponse({ + required this.data, + required this.links, + required this.meta, + }); +factory OrdersResponse.init(){ + return OrdersResponse(data: [], links: Links.fromJson({}), meta: Meta.fromJson({}),); + +} + factory OrdersResponse.fromJson(Map json) => OrdersResponse( + data: List.from(json["data"].map((x) => OrderInfo.fromJson(x))), + links: Links.fromJson(json["links"]), + meta: Meta.fromJson(json["meta"]), + ); + + Map toJson() => { + "data": List.from(data.map((x) => x.toJson())), + "links": links.toJson(), + "meta": meta.toJson(), + }; +} + +class OrderInfo{ + int id; + int group_id; + Item item; + String status; + DateTime date; + + OrderInfo({ + required this.id, + required this.group_id, + required this.item, + required this.status, + required this.date, + }); + + factory OrderInfo.fromJson(Map json) + { + return OrderInfo( + id: json["id"], + group_id: json["group_id"], + item: Item.fromJson(json["items"]), + status: json["status"], + date: DateTime.parse(json["date"]), + ); + } + + Map toJson() => { + "id": id, + "group_id": group_id, + "items": item.toJson(), + "status": statusValues.reverse[status], + "date": date.toIso8601String(), + }; +} + +class Item { + int id; + ProductMini? product; + var qty; + String unitPrice; + String totalPrice; + var isRefunded; + + Item({ + required this.id, + required this.product, + required this.qty, + required this.unitPrice, + required this.totalPrice, + required this.isRefunded, + }); + + factory Item.fromJson(Map json) => Item( + id: json["id"], + product: ProductMini.fromJson(json["product"]), + qty: json["qty"], + unitPrice: json["unit_price"], + totalPrice: json["total_price"], + isRefunded: json["is_refunded"], + ); + + Map toJson() => { + "id": id, + "product": product?.toJson(), + "qty": qty, + "unit_price": unitPrice, + "total_price": totalPrice, + "is_refunded": isRefunded, + }; +} + + + + + + + + + +enum Status { ORDER_PLACED, DELIVERED, PROCESSING } + +final statusValues = EnumValues({ + "delivered": Status.DELIVERED, + "order_placed": Status.ORDER_PLACED, + "processing": Status.PROCESSING +}); + +class Links { + String first; + String last; + dynamic prev; + dynamic next; + + Links({ + required this.first, + required this.last, + this.prev, + this.next, + }); + + factory Links.fromJson(Map json) => Links( + first: json["first"], + last: json["last"], + prev: json["prev"], + next: json["next"], + ); + + Map toJson() => { + "first": first, + "last": last, + "prev": prev, + "next": next, + }; +} + +class Meta { + int currentPage; + int? from; + int lastPage; + List links; + String path; + int perPage; + int? to; + int total; + + Meta({ + required this.currentPage, + this.from, + required this.lastPage, + required this.links, + required this.path, + required this.perPage, + this.to, + required this.total, + }); + + factory Meta.fromJson(Map json) => Meta( + currentPage: json["current_page"], + from: json["from"], + lastPage: json["last_page"], + links: List.from(json["links"].map((x) => Link.fromJson(x))), + path: json["path"], + perPage: json["per_page"], + to: json["to"], + total: json["total"], + ); + + Map toJson() => { + "current_page": currentPage, + "from": from, + "last_page": lastPage, + "links": List.from(links.map((x) => x.toJson())), + "path": path, + "per_page": perPage, + "to": to, + "total": total, + }; +} + +class Link { + String? url; + String label; + bool active; + + Link({ + this.url, + required this.label, + required this.active, + }); + + factory Link.fromJson(Map json) => Link( + url: json["url"], + label: json["label"], + active: json["active"], + ); + + Map toJson() => { + "url": url, + "label": label, + "active": active, + }; +} + +class EnumValues { + Map map; + late Map reverseMap; + + EnumValues(this.map); + + Map get reverse { + reverseMap = map.map((k, v) => MapEntry(v, k)); + return reverseMap; + } +} diff --git a/app_code/lib/models/order/track_order_response.dart b/app_code/lib/models/order/track_order_response.dart new file mode 100644 index 0000000..09539d9 --- /dev/null +++ b/app_code/lib/models/order/track_order_response.dart @@ -0,0 +1,69 @@ +// To parse this JSON TrackInfo, do +// +// final trackOrderResponse = trackOrderResponseFromJson(jsonString); + +import 'dart:convert'; + +TrackOrderResponse trackOrderResponseFromJson(String str) => TrackOrderResponse.fromJson(json.decode(str)); + +String trackOrderResponseToJson(TrackOrderResponse data) => json.encode(data.toJson()); + +class TrackOrderResponse { + TrackInfo? data; + + TrackOrderResponse({ + this.data, + }); + + factory TrackOrderResponse.fromJson(Map json) => TrackOrderResponse( + data:json["data"]==null?null: TrackInfo.fromJson(json["data"]), + ); + + Map toJson() => { + "data": data?.toJson(), + }; +} + +class TrackInfo { + int id; + List orderUpdates; + String createdDate; + + TrackInfo({ + required this.id, + required this.orderUpdates, + required this.createdDate, + }); + + factory TrackInfo.fromJson(Map json) => TrackInfo( + id: json["id"], + orderUpdates: List.from(json["order_updates"].map((x) => OrderUpdate.fromJson(x))), + createdDate: json["created_date"], + ); + + Map toJson() => { + "id": id, + "order_updates": List.from(orderUpdates.map((x) => x.toJson())), + "created_date": createdDate, + }; +} + +class OrderUpdate { + String date; + String note; + + OrderUpdate({ + required this.date, + required this.note, + }); + + factory OrderUpdate.fromJson(Map json) => OrderUpdate( + date: json["date"], + note: json["note"], + ); + + Map toJson() => { + "date": date, + "note": note, + }; +} diff --git a/app_code/lib/models/order_create_response.dart b/app_code/lib/models/order_create_response.dart new file mode 100644 index 0000000..fec5dd9 --- /dev/null +++ b/app_code/lib/models/order_create_response.dart @@ -0,0 +1,39 @@ +// To parse this JSON data, do +// +// final orderCreateResponse = orderCreateResponseFromJson(jsonString); + +import 'dart:convert'; + +OrderCreateResponse orderCreateResponseFromJson(String str) => OrderCreateResponse.fromJson(json.decode(str)); + +String orderCreateResponseToJson(OrderCreateResponse data) => json.encode(data.toJson()); + +class OrderCreateResponse { + + bool result; + int orderCode; + String message; + + factory OrderCreateResponse.init(){ + return OrderCreateResponse(message: "",orderCode: 0,result: false); + } + + + OrderCreateResponse({ + required this.result, + required this.orderCode, + required this.message, + }); + + factory OrderCreateResponse.fromJson(Map json) => OrderCreateResponse( + result: json["result"], + orderCode: json["order_code"], + message: json["message"], + ); + + Map toJson() => { + "result": result, + "order_code": orderCode, + "message": message, + }; +} diff --git a/app_code/lib/models/page_response.dart b/app_code/lib/models/page_response.dart new file mode 100644 index 0000000..3b81888 --- /dev/null +++ b/app_code/lib/models/page_response.dart @@ -0,0 +1,125 @@ +// To parse this JSON data, do +// +// final pageResponse = pageResponseFromJson(jsonString); + +import 'dart:convert'; + +PageResponse pageResponseFromJson(String str) => PageResponse.fromJson(json.decode(str)); + +String pageResponseToJson(PageResponse data) => json.encode(data.toJson()); + +class PageResponse { + PageInfo data; + + PageResponse({ + required this.data, + }); + + factory PageResponse.fromJson(Map json) => PageResponse( + data: PageInfo.fromJson(json["data"]), + ); + + Map toJson() => { + "data": data.toJson(), + }; +} + +class PageInfo { + int id; + String title; + String slug; + String content; + String metaTitle; + String metaImage; + String metaDescription; + DateTime createdAt; + DateTime updatedAt; + dynamic deletedAt; + List pageLocalizations; + + PageInfo({ + required this.id, + required this.title, + required this.slug, + required this.content, + required this.metaTitle, + required this.metaImage, + required this.metaDescription, + required this.createdAt, + required this.updatedAt, + this.deletedAt, + required this.pageLocalizations, + }); + + factory PageInfo.fromJson(Map json) => PageInfo( + id: json["id"], + title: json["title"], + slug: json["slug"], + content: json["content"], + metaTitle: json["meta_title"], + metaImage: json["meta_image"], + metaDescription: json["meta_description"], + createdAt: DateTime.parse(json["created_at"]), + updatedAt: DateTime.parse(json["updated_at"]), + deletedAt: json["deleted_at"], + pageLocalizations: List.from(json["page_localizations"].map((x) => PageLocalization.fromJson(x))), + ); + + Map toJson() => { + "id": id, + "title": title, + "slug": slug, + "content": content, + "meta_title": metaTitle, + "meta_image": metaImage, + "meta_description": metaDescription, + "created_at": createdAt.toIso8601String(), + "updated_at": updatedAt.toIso8601String(), + "deleted_at": deletedAt, + "page_localizations": List.from(pageLocalizations.map((x) => x.toJson())), + }; +} + +class PageLocalization { + int id; + var pageId; + String title; + String content; + String langKey; + DateTime createdAt; + DateTime updatedAt; + dynamic deletedAt; + + PageLocalization({ + required this.id, + required this.pageId, + required this.title, + required this.content, + required this.langKey, + required this.createdAt, + required this.updatedAt, + this.deletedAt, + }); + + factory PageLocalization.fromJson(Map json) => PageLocalization( + id: json["id"], + pageId: json["page_id"], + title: json["title"], + content: json["content"], + langKey: json["lang_key"], + createdAt: DateTime.parse(json["created_at"]), + updatedAt: DateTime.parse(json["updated_at"]), + deletedAt: json["deleted_at"], + ); + + Map toJson() => { + "id": id, + "page_id": pageId, + "title": title, + "content": content, + "lang_key": langKey, + "created_at": createdAt.toIso8601String(), + "updated_at": updatedAt.toIso8601String(), + "deleted_at": deletedAt, + }; +} diff --git a/app_code/lib/models/payment_types_response.dart b/app_code/lib/models/payment_types_response.dart new file mode 100644 index 0000000..a1d5120 --- /dev/null +++ b/app_code/lib/models/payment_types_response.dart @@ -0,0 +1,33 @@ +// To parse this JSON data, do +// +// final paymentTypesResponse = paymentTypesResponseFromJson(jsonString); + +import 'dart:convert'; + +List paymentTypesResponseFromJson(String str) => List.from(json.decode(str).map((x) => PaymentTypesResponse.fromJson(x))); + +String paymentTypesResponseToJson(List data) => json.encode(List.from(data.map((x) => x.toJson()))); + +class PaymentTypesResponse { + String key; + String name; + String image; + + PaymentTypesResponse({ + required this.key, + required this.name, + required this.image, + }); + + factory PaymentTypesResponse.fromJson(Map json) => PaymentTypesResponse( + key: json["key"], + name: json["name"], + image: json["image"], + ); + + Map toJson() => { + "key": key, + "name": name, + "image": image, + }; +} diff --git a/app_code/lib/models/product_details_response.dart b/app_code/lib/models/product_details_response.dart new file mode 100644 index 0000000..1a1d5bf --- /dev/null +++ b/app_code/lib/models/product_details_response.dart @@ -0,0 +1,255 @@ +// To parse this JSON data, do +// +// final productDetailsResponse = productDetailsResponseFromJson(jsonString); + +import 'dart:convert'; + +ProductDetailsResponse productDetailsResponseFromJson(String str) => ProductDetailsResponse.fromJson(json.decode(str)); + +String productDetailsResponseToJson(ProductDetailsResponse data) => json.encode(data.toJson()); + +class ProductDetailsResponse { + ProductDetailsInfo data; + bool result; + var status; + + ProductDetailsResponse({ + required this.data, + required this.result, + required this.status, + }); + + factory ProductDetailsResponse.fromJson(Map json) => ProductDetailsResponse( + data: ProductDetailsInfo.fromJson(json["data"]), + result: json["result"], + status: json["status"], + ); + + Map toJson() => { + "data": data.toJson(), + "result": result, + "status": status, + }; +} + +class ProductDetailsInfo { + var id; + List variations; + List variationMaterials; + String slug; + String name; + String thumbnailImage; + List galleryImages; + String price; + double mainPrice; + bool isDiscounted; + var discount; + String? shortDescription; + String? description; + String? brand; + String? unit; + var stock; + var rewardPovars; + List categories; + + ProductDetailsInfo({ + required this.id, + required this.variations, + required this.variationMaterials, + required this.slug, + required this.name, + required this.thumbnailImage, + required this.galleryImages, + required this.price, + required this.mainPrice, + required this.isDiscounted, + required this.discount, + this.shortDescription, + this.description, + this.brand, + this.unit, + required this.stock, + required this.rewardPovars, + required this.categories, + }); + + factory ProductDetailsInfo.fromJson(Map json) => ProductDetailsInfo( + id: json["id"], + variations:json["variations"]==[]?[]: List.from(json["variations"].map((x) => Variation.fromJson(x))), + variationMaterials:json["variation_materials"]==[]?[]: List.from(json["variation_materials"].map((x) => VariationMaterial.fromJson(x))), + slug: json["slug"], + name: json["name"], + thumbnailImage: json["thumbnail_image"], + galleryImages: List.from(json["gallery_images"].map((x) => x)), + price: json["price"], + mainPrice: json["main_price"]?.toDouble(), + isDiscounted: json["is_discounted"], + discount: json["discount"], + shortDescription: json["short_description"], + description: json["description"], + brand: json["brand"], + unit: json["unit"], + stock: json["stock"], + rewardPovars: json["reward_povars"], + categories: List.from(json["categories"].map((x) => Category.fromJson(x))), + ); + factory ProductDetailsInfo.init() => ProductDetailsInfo( + id: 0, + variations: [], + variationMaterials: [], + slug:"", + name: '', + thumbnailImage: '', + galleryImages:[], + price: "", + mainPrice: 0.0, + isDiscounted: false, + discount: "", + shortDescription: "", + description: "", + brand: "", + unit: "", + stock: "", + rewardPovars: "", + categories: [] + ); + + Map toJson() => { + "id": id, + "variations": List.from(variations.map((x) => x.toJson())), + "variation_materials": List.from(variationMaterials.map((x) => x.toJson())), + "slug": slug, + "name": name, + "thumbnail_image": thumbnailImage, + "gallery_images": List.from(galleryImages.map((x) => x)), + "price": price, + "main_price": mainPrice, + "is_discounted": isDiscounted, + "discount": discount, + "short_description": shortDescription, + "description": description, + "brand": brand, + "unit": unit, + "stock": stock, + "reward_povars": rewardPovars, + "categories": List.from(categories.map((x) => x.toJson())), + }; +} + +class Category { + var id; + String name; + var products; + String thumbnailImage; + + Category({ + required this.id, + required this.name, + required this.products, + required this.thumbnailImage, + }); + + factory Category.fromJson(Map json) => Category( + id: json["id"], + name: json["name"], + products: json["products"], + thumbnailImage: json["thumbnail_image"], + ); + + Map toJson() => { + "id": id, + "name": name, + "products": products, + "thumbnail_image": thumbnailImage, + }; +} + +class VariationMaterial { + var id; + String name; + List values; + + VariationMaterial({ + required this.id, + required this.name, + required this.values, + }); + + factory VariationMaterial.fromJson(Map json) => VariationMaterial( + id: json["id"], + name: json["name"], + values: List.from(json["values"].map((x) => Value.fromJson(x))), + ); + + Map toJson() => { + "id": id, + "name": name, + "values": List.from(values.map((x) => x.toJson())), + }; +} + +class Value { + var id; + String name; + String? code; + + Value({ + required this.id, + required this.name, + this.code, + }); + + factory Value.fromJson(Map json) => Value( + id: json["id"], + name: json["name"], + code: json["code"], + ); + + Map toJson() => { + "id": id, + "name": name, + "code": code, + }; +} + +class Variation { + var id; + var productId; + String? variationKey; + String? sku; + String? code; + int sock; + var price; + + + Variation({ + required this.id, + required this.productId, + this.variationKey, + this.sku, + this.code, + required this.sock, + required this.price, + + }); + + factory Variation.fromJson(Map json) => Variation( + id: json["id"], + productId: json["product_id"], + variationKey: json["variation_key"], + sku: json["sku"], + sock: json["stock"], + code: json["code"], + price: json["price"], + ); + + Map toJson() => { + "id": id, + "product_id": productId, + "variation_key": variationKey, + "sku": sku, + "stock": sock, + "code": code, + "price": price, + }; +} diff --git a/app_code/lib/models/product_mini_response.dart b/app_code/lib/models/product_mini_response.dart new file mode 100644 index 0000000..2fe1f55 --- /dev/null +++ b/app_code/lib/models/product_mini_response.dart @@ -0,0 +1,87 @@ +// To parse this JSON data, do +// +// final productMiniResponse = productMiniResponseFromJson(jsonString); + +import 'dart:convert'; + +import 'package:grostore/models/common/category_info.dart'; + +import 'product_details_response.dart'; + +ProductMiniResponse productMiniResponseFromJson(String str) => ProductMiniResponse.fromJson(json.decode(str)); + +String productMiniResponseToJson(ProductMiniResponse data) => json.encode(data.toJson()); + +class ProductMiniResponse { + List data; + + ProductMiniResponse({ + required this.data, + }); + + factory ProductMiniResponse.fromJson(Map json) => ProductMiniResponse( + data: List.from(json["data"].map((x) => ProductMini.fromJson(x))), + ); + + Map toJson() => { + "data": List.from(data.map((x) => x.toJson())), + }; +} + +class ProductMini { + var id; + String name; + String slug; + String? brand; + String unit; + String thumbnailImage; + String price; + var discount; + bool isDiscounted; + var rewardPovars; + List categories; + List variations; + + ProductMini({ + required this.id, + required this.variations, + required this.name, + required this.slug, + required this.brand, + required this.unit, + required this.thumbnailImage, + required this.price, + required this.discount, + required this.isDiscounted, + required this.rewardPovars, + required this.categories, + }); + + factory ProductMini.fromJson(Map json) => ProductMini( + id: json["id"], + name: json["name"], + variations:json["variations"]==[]?[]: List.from(json["variations"].map((x) => Variation.fromJson(x))), + slug: json["slug"], + brand: json["brand"], + unit: json["unit"], + thumbnailImage: json["thumbnail_image"], + price: json["price"], + discount: json["discount"], + isDiscounted: json["is_discounted"], + rewardPovars: json["reward_points"], + categories: List.from(json["categories"].map((x) => CategoryInfo.fromJson(x))), + ); + + Map toJson() => { + "name": name, + "slug": slug, + "brand": brand, + "unit": unit, + "thumbnail_image": thumbnailImage, + "price": price, + "is_discounted": isDiscounted, + "discount": discount, + "reward_povars": rewardPovars, + "categories": List.from(categories.map((x) => x.toJson())), + }; +} \ No newline at end of file diff --git a/app_code/lib/models/refund_response.dart b/app_code/lib/models/refund_response.dart new file mode 100644 index 0000000..47c4b65 --- /dev/null +++ b/app_code/lib/models/refund_response.dart @@ -0,0 +1,169 @@ +// To parse this JSON data, do +// +// final refundResponse = refundResponseFromJson(jsonString); + +import 'dart:convert'; + +RefundResponse refundResponseFromJson(String str) => RefundResponse.fromJson(json.decode(str)); + +String refundResponseToJson(RefundResponse data) => json.encode(data.toJson()); + +class RefundResponse { + List data; + Links links; + Meta meta; + + RefundResponse({ + required this.data, + required this.links, + required this.meta, + }); + + factory RefundResponse.fromJson(Map json) => RefundResponse( + data: List.from(json["data"].map((x) => RefundInfo.fromJson(x))), + links: Links.fromJson(json["links"]), + meta: Meta.fromJson(json["meta"]), + ); + + Map toJson() => { + "data": List.from(data.map((x) => x.toJson())), + "links": links.toJson(), + "meta": meta.toJson(), + }; +} + +class RefundInfo { + int id; + String orderCode; + String amount; + String productName; + String status; + dynamic reson; + String date; + + RefundInfo({ + required this.id, + required this.orderCode, + required this.amount, + required this.productName, + required this.status, + this.reson, + required this.date, + }); + + factory RefundInfo.fromJson(Map json) => RefundInfo( + id: json["id"], + orderCode: json["order_code"], + amount: json["amount"], + productName: json["product_name"], + status: json["status"], + reson: json["reson"], + date: json["date"], + ); + + Map toJson() => { + "id": id, + "order_code": orderCode, + "amount": amount, + "product_name": productName, + "status": status, + "reson": reson, + "date": date, + }; +} + +class Links { + String first; + String last; + dynamic prev; + dynamic next; + + Links({ + required this.first, + required this.last, + this.prev, + this.next, + }); + + factory Links.fromJson(Map json) => Links( + first: json["first"], + last: json["last"], + prev: json["prev"], + next: json["next"], + ); + + Map toJson() => { + "first": first, + "last": last, + "prev": prev, + "next": next, + }; +} + +class Meta { + int currentPage; + int? from; + int lastPage; + List links; + String path; + String perPage; + int? to; + int total; + + Meta({ + required this.currentPage, + this.from, + required this.lastPage, + required this.links, + required this.path, + required this.perPage, + this.to, + required this.total, + }); + + factory Meta.fromJson(Map json) => Meta( + currentPage: json["current_page"], + from: json["from"], + lastPage: json["last_page"], + links: List.from(json["links"].map((x) => Link.fromJson(x))), + path: json["path"], + perPage: json["per_page"], + to: json["to"], + total: json["total"], + ); + + Map toJson() => { + "current_page": currentPage, + "from": from, + "last_page": lastPage, + "links": List.from(links.map((x) => x.toJson())), + "path": path, + "per_page": perPage, + "to": to, + "total": total, + }; +} + +class Link { + String? url; + String label; + bool active; + + Link({ + this.url, + required this.label, + required this.active, + }); + + factory Link.fromJson(Map json) => Link( + url: json["url"], + label: json["label"], + active: json["active"], + ); + + Map toJson() => { + "url": url, + "label": label, + "active": active, + }; +} diff --git a/app_code/lib/models/response_model.dart b/app_code/lib/models/response_model.dart new file mode 100644 index 0000000..7ab6108 --- /dev/null +++ b/app_code/lib/models/response_model.dart @@ -0,0 +1,5 @@ +class ResponseModel{ + late int statusCode; + late T object ; + ResponseModel(this.statusCode, this.object); +} \ No newline at end of file diff --git a/app_code/lib/models/setting_response.dart b/app_code/lib/models/setting_response.dart new file mode 100644 index 0000000..b94b97d --- /dev/null +++ b/app_code/lib/models/setting_response.dart @@ -0,0 +1,25 @@ +// To parse this JSON data, do +// +// final settingResponse = settingResponseFromJson(jsonString); + +import 'dart:convert'; + +SettingResponse settingResponseFromJson(String str) => SettingResponse.fromJson(json.decode(str)); + +String settingResponseToJson(SettingResponse data) => json.encode(data.toJson()); + +class SettingResponse { + String orderCodePrefix; + + SettingResponse({ + required this.orderCodePrefix, + }); + + factory SettingResponse.fromJson(Map json) => SettingResponse( + orderCodePrefix: json["order_code_prefix"], + ); + + Map toJson() => { + "order_code_prefix": orderCodePrefix, + }; +} diff --git a/app_code/lib/models/state_response.dart b/app_code/lib/models/state_response.dart new file mode 100644 index 0000000..e0e0336 --- /dev/null +++ b/app_code/lib/models/state_response.dart @@ -0,0 +1,53 @@ +// To parse this JSON data, do +// +// final stateResponse = stateResponseFromJson(jsonString); + +import 'dart:convert'; + +StateResponse stateResponseFromJson(String str) => StateResponse.fromJson(json.decode(str)); + +String stateResponseToJson(StateResponse data) => json.encode(data.toJson()); + +class StateResponse { + List data; + + StateResponse({ + required this.data, + }); + + factory StateResponse.fromJson(Map json) => StateResponse( + data: List.from(json["data"].map((x) => StateInfo.fromJson(x))), + ); + + Map toJson() => { + "data": List.from(data.map((x) => x.toJson())), + }; +} + +class StateInfo { + int countryId; + int id; + String name; + bool isActive; + + StateInfo({ + required this.countryId, + required this.id, + required this.name, + required this.isActive, + }); + + factory StateInfo.fromJson(Map json) => StateInfo( + countryId: json["country_id"], + id: json["id"], + name: json["name"], + isActive: json["is_active"], + ); + + Map toJson() => { + "country_id": countryId, + "id": id, + "name": name, + "is_active": isActive, + }; +} diff --git a/app_code/lib/models/supplire.dart b/app_code/lib/models/supplire.dart new file mode 100644 index 0000000..33fc64a --- /dev/null +++ b/app_code/lib/models/supplire.dart @@ -0,0 +1,11 @@ +class Supplier { + final String name; + final String address; + final String paymentInfo; + + const Supplier({ + required this.name, + required this.address, + required this.paymentInfo, + }); +} \ No newline at end of file diff --git a/app_code/lib/models/time_slote_response.dart b/app_code/lib/models/time_slote_response.dart new file mode 100644 index 0000000..407a332 --- /dev/null +++ b/app_code/lib/models/time_slote_response.dart @@ -0,0 +1,57 @@ +// To parse this JSON data, do +// +// final timeSlotResponse = timeSlotResponseFromJson(jsonString); + +import 'dart:convert'; + +import 'package:grostore/models/product_details_response.dart'; + +TimeSlotResponse timeSlotResponseFromJson(String str) => TimeSlotResponse.fromJson(json.decode(str)); + +String timeSlotResponseToJson(TimeSlotResponse data) => json.encode(data.toJson()); + +class TimeSlotResponse { + int days; + List timeSlots; + + TimeSlotResponse({ + required this.days, + required this.timeSlots, + }); + + factory TimeSlotResponse.fromJson(Map json) => TimeSlotResponse( + days: json["days"], + timeSlots: List.from(json["time_slots"].map((x) => TimeSlot.fromJson(x))), + ); + + Map toJson() => { + "days": days, + "time_slots": List.from(timeSlots.map((x) => x.toJson())), + }; +} + +class TimeSlot { + var id; + String timeline; + var sortingOrder; + + + + TimeSlot({ + required this.id, + required this.timeline, + required this.sortingOrder, + }); + + factory TimeSlot.fromJson(Map json) => TimeSlot( + id: json["id"], + timeline: json["timeline"], + sortingOrder: json["sorting_order"], + ); + + Map toJson() => { + "id": id, + "timeline": timeline, + "sorting_order": sortingOrder, + }; +} diff --git a/app_code/lib/models/user/addresses_response.dart b/app_code/lib/models/user/addresses_response.dart new file mode 100644 index 0000000..e955582 --- /dev/null +++ b/app_code/lib/models/user/addresses_response.dart @@ -0,0 +1,77 @@ +// To parse this JSON data, do +// +// final addressesResponse = addressesResponseFromJson(jsonString); + +import 'dart:convert'; + +AddressesResponse addressesResponseFromJson(String str) => AddressesResponse.fromJson(json.decode(str)); + +String addressesResponseToJson(AddressesResponse data) => json.encode(data.toJson()); + +class AddressesResponse { + List data; + + AddressesResponse({ + required this.data, + }); + + factory AddressesResponse.fromJson(Map json) => AddressesResponse( + data: List.from(json["data"].map((x) => AddressInfo.fromJson(x))), + ); + + Map toJson() => { + "data": List.from(data.map((x) => x.toJson())), + }; +} + +class AddressInfo { + var id; + var userId; + var countryId; + String countryName; + var stateId; + String stateName; + var cityId; + String cityName; + String address; + var isDefault; + + AddressInfo({ + required this.id, + required this.userId, + required this.countryId, + required this.countryName, + required this.stateId, + required this.stateName, + required this.cityId, + required this.cityName, + required this.address, + required this.isDefault, + }); + + factory AddressInfo.fromJson(Map json) => AddressInfo( + id: json["id"], + userId: json["user_id"], + countryId: json["country_id"], + countryName: json["country_name"], + stateId: json["state_id"], + stateName: json["state_name"], + cityId: json["city_id"], + cityName: json["city_name"], + address: json["address"], + isDefault: json["is_default"], + ); + + Map toJson() => { + "id": id, + "user_id": userId, + "country_id": countryId, + "country_name": countryName, + "state_id": stateId, + "state_name": stateName, + "city_id": cityId, + "city_name": cityName, + "address": address, + "is_default": isDefault, + }; +} diff --git a/app_code/lib/models/user_info_response_model.dart b/app_code/lib/models/user_info_response_model.dart new file mode 100644 index 0000000..4df6199 --- /dev/null +++ b/app_code/lib/models/user_info_response_model.dart @@ -0,0 +1,50 @@ +// To parse this JSON data, do +// +// final userInfoResponse = userInfoResponseFromJson(jsonString); + +import 'dart:convert'; + +import 'common/user_info.dart'; + +UserInfoResponse userInfoResponseFromJson(String str) => UserInfoResponse.fromJson(json.decode(str)); +UserInfoResponse userInfoResponseDefault() => UserInfoResponse.fromJson(json.decode(''' +{ + "data": { + "name": "", + "email": "", + "phone": "", + "balance": 0, + "avatar": "" + }, + "result": false, + "message": "failed" +} +''')); + +String userInfoResponseToJson(UserInfoResponse data) => json.encode(data.toJson()); + +class UserInfoResponse { + UserInfo data; + bool result; + String message; + + UserInfoResponse({ + required this.data, + required this.result, + required this.message, + }); + + factory UserInfoResponse.fromJson(Map json) => UserInfoResponse( + data: UserInfo.fromJson(json["data"]), + result: json["result"], + message: json["message"], + ); + + Map toJson() => { + "data": data.toJson(), + "result": result, + "message": message, + }; +} + + diff --git a/app_code/lib/models/wallet_history_response.dart b/app_code/lib/models/wallet_history_response.dart new file mode 100644 index 0000000..76e8624 --- /dev/null +++ b/app_code/lib/models/wallet_history_response.dart @@ -0,0 +1,161 @@ +// To parse this JSON data, do +// +// final walletHistoryResponse = walletHistoryResponseFromJson(jsonString); + +import 'dart:convert'; + +WalletHistoryResponse walletHistoryResponseFromJson(String str) => WalletHistoryResponse.fromJson(json.decode(str)); + +String walletHistoryResponseToJson(WalletHistoryResponse data) => json.encode(data.toJson()); + +class WalletHistoryResponse { + List data; + Links links; + Meta meta; + + WalletHistoryResponse({ + required this.data, + required this.links, + required this.meta, + }); + + factory WalletHistoryResponse.fromJson(Map json) => WalletHistoryResponse( + data: List.from(json["data"].map((x) => WalletInfo.fromJson(x))), + links: Links.fromJson(json["links"]), + meta: Meta.fromJson(json["meta"]), + ); + + Map toJson() => { + "data": List.from(data.map((x) => x.toJson())), + "links": links.toJson(), + "meta": meta.toJson(), + }; +} + +class WalletInfo { + int id; + String amount; + String paymentMethod; + String status; + String date; + + WalletInfo({ + required this.id, + required this.amount, + required this.paymentMethod, + required this.status, + required this.date, + }); + + factory WalletInfo.fromJson(Map json) => WalletInfo( + id: json["id"], + amount: json["amount"], + paymentMethod: json["payment_method"], + status: json["status"], + date: json["date"], + ); + + Map toJson() => { + "id": id, + "amount": amount, + "payment_method": paymentMethod, + "status": status, + "date": date, + }; +} + +class Links { + String first; + String last; + dynamic prev; + dynamic next; + + Links({ + required this.first, + required this.last, + this.prev, + this.next, + }); + + factory Links.fromJson(Map json) => Links( + first: json["first"], + last: json["last"], + prev: json["prev"], + next: json["next"], + ); + + Map toJson() => { + "first": first, + "last": last, + "prev": prev, + "next": next, + }; +} + +class Meta { + int currentPage; + int? from; + int lastPage; + List links; + String path; + String perPage; + int? to; + int total; + + Meta({ + required this.currentPage, + this.from, + required this.lastPage, + required this.links, + required this.path, + required this.perPage, + this.to, + required this.total, + }); + + factory Meta.fromJson(Map json) => Meta( + currentPage: json["current_page"], + from: json["from"], + lastPage: json["last_page"], + links: List.from(json["links"].map((x) => Link.fromJson(x))), + path: json["path"], + perPage: json["per_page"], + to: json["to"], + total: json["total"], + ); + + Map toJson() => { + "current_page": currentPage, + "from": from, + "last_page": lastPage, + "links": List.from(links.map((x) => x.toJson())), + "path": path, + "per_page": perPage, + "to": to, + "total": total, + }; +} + +class Link { + String? url; + String label; + bool active; + + Link({ + this.url, + required this.label, + required this.active, + }); + + factory Link.fromJson(Map json) => Link( + url: json["url"], + label: json["label"], + active: json["active"], + ); + + Map toJson() => { + "url": url, + "label": label, + "active": active, + }; +} diff --git a/app_code/lib/models/wishlist_response.dart b/app_code/lib/models/wishlist_response.dart new file mode 100644 index 0000000..2f7446b --- /dev/null +++ b/app_code/lib/models/wishlist_response.dart @@ -0,0 +1,50 @@ +// To parse this JSON data, do +// +// final wishlistResponse = wishlistResponseFromJson(jsonString); + +import 'dart:convert'; + +import 'package:grostore/models/product_mini_response.dart'; + +WishlistResponse wishlistResponseFromJson(String str) => WishlistResponse.fromJson(json.decode(str)); + +String wishlistResponseToJson(WishlistResponse data) => json.encode(data.toJson()); + +class WishlistResponse { + List data; + + WishlistResponse({ + required this.data, + }); + + factory WishlistResponse.fromJson(Map json) => WishlistResponse( + data: List.from(json["data"].map((x) => WishlistInfo.fromJson(x))), + ); + + Map toJson() => { + "data": List.from(data.map((x) => x.toJson())), + }; +} + +class WishlistInfo { + int id; + ProductMini product; + + WishlistInfo({ + required this.id, + required this.product, + }); + + factory WishlistInfo.fromJson(Map json) => WishlistInfo( + id: json["id"], + product: ProductMini.fromJson(json["product"]), + ); + + Map toJson() => { + "id": id, + "product": product.toJson(), + }; +} + + + diff --git a/app_code/lib/presenters/address_presenter.dart b/app_code/lib/presenters/address_presenter.dart new file mode 100644 index 0000000..f2e4169 --- /dev/null +++ b/app_code/lib/presenters/address_presenter.dart @@ -0,0 +1,283 @@ +import 'package:flutter/cupertino.dart'; +import 'package:grostore/apis/address_api.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/custom_ui/loading.dart'; +import 'package:grostore/custom_ui/toast_ui.dart'; +import 'package:grostore/models/city_response.dart'; +import 'package:grostore/models/country_response.dart'; +import 'package:grostore/models/edit_address_response.dart'; +import 'package:grostore/models/state_response.dart'; +import 'package:grostore/models/user/addresses_response.dart'; + +class AddressPresenter extends ChangeNotifier { + static BuildContext? context; + + setContext(BuildContext context) { + AddressPresenter.context = context; + } + + List addresses = []; + List countries = []; + List states = []; + List cities = []; + List filteredCountries = []; + List filteredStates = []; + List filteredCities = []; + + String defaultAddress = "No"; + EditAddressResponse? editAddress; + + CountryInfo? selectedCountry; + + StateInfo? selectedState; + + CityInfo? selectedCity; + + bool isFetchAddress = false; + + TextEditingController addressController = TextEditingController(); + + fetchAddresses() async { + var res = await AddressApi.getAddresses(); + addresses.clear(); + addresses.addAll(res.object.data); + isFetchAddress = true; + notifyListeners(); + } + + initState() { + fetchAddresses(); + } + + Future onRefresh()async{ + return await fetchAddresses(); + } + + clear(){ + addresses.clear(); + isFetchAddress = false; + notifyListeners(); + } + + filterCountry(String text) { + filteredCountries.clear(); + if (text.isNotEmpty) { + filteredCountries.addAll(countries.where((element) { + return element.name.toLowerCase().contains(text.toLowerCase()); + })); + } else { + filteredCountries.addAll(countries); + } + notifyListeners(); + } + + filterState(String text) { + filteredStates.clear(); + if (text.isNotEmpty) { + filteredStates.addAll(states.where((element) { + return element.name.toLowerCase().contains(text.toLowerCase()); + })); + } else { + filteredStates.addAll(states); + } + notifyListeners(); + } + + filterCity(String text) { + filteredCities.clear(); + if (text.isNotEmpty) { + filteredCities.addAll(cities.where((element) { + return element.name.toLowerCase().contains(text.toLowerCase()); + })); + } else { + filteredCities.addAll(cities); + } + notifyListeners(); + } + + getCountries() async { + var response = await AddressApi.getCountries(); + countries.addAll(response.object.data); + + if(editAddress!=null){ + countries.forEach((element) { + if(element.id==editAddress!.data.countryId){ + setSelectedCountry(element); + } + }); + } + + filteredCountries.addAll(countries); + notifyListeners(); + } + + getStates(id) async { + var response = await AddressApi.getState(id); + states.addAll(response.object.data); + if(editAddress!=null){ + states.forEach((element) { + if(element.id==editAddress!.data.stateId){ + setSelectedState(element); + } + }); + } + filteredStates.addAll(states); + notifyListeners(); + } + + getCities(id) async { + var response = await AddressApi.getCity(id); + cities.addAll(response.object.data); + if(editAddress!=null){ + cities.forEach((element) { + print(element.id); + print(editAddress!.data.cityId); + if(element.id==editAddress!.data.cityId){ + setSelectedCity(element); + } + }); + } + + notifyListeners(); + } + + setSelectedCountry(CountryInfo countryInfo) { + selectedCountry = countryInfo; + selectedState = null; + selectedCity = null; + getStates(countryInfo.id); + notifyListeners(); + } + + setSelectedState(StateInfo stateInfo) { + selectedState = stateInfo; + selectedCity = null; + getCities(stateInfo.id); + notifyListeners(); + } + + setSelectedCity(CityInfo cityInfo) { + selectedCity = cityInfo; + notifyListeners(); + } + + setDefaultAddress(String? value) { + if (value != null) { + defaultAddress = value; + notifyListeners(); + } + } + + addAddress(BuildContext context, + {required CountryInfo? countryInfo, + required StateInfo? stateInfo, + required CityInfo? cityInfo, + required String? fullAddress, + required int? isDefault}) async { + if (!checkAddressValidation(context, + countryInfo: countryInfo, + stateInfo: stateInfo, + cityInfo: cityInfo, + fullAddress: fullAddress, + isDefault: isDefault)) { + return; + } + Loading.show(context); + var response = await AddressApi.addAddress( + countryId: countryInfo!.id, + stateId: stateInfo!.id, + cityId: cityInfo!.id, + isDefault: isDefault!, + address: fullAddress!); + Loading.close(); + if (!context.mounted) return; + ToastUi.show(context, response.object.message); + if (response.object.result) { + Navigator.pop(context); + } + } + + updateAddress(BuildContext context, + { + required int id, + required CountryInfo? countryInfo, + required StateInfo? stateInfo, + required CityInfo? cityInfo, + required String? fullAddress, + required int? isDefault}) async { + if (!checkAddressValidation(context, + countryInfo: countryInfo, + stateInfo: stateInfo, + cityInfo: cityInfo, + fullAddress: fullAddress, + isDefault: isDefault)) { + return; + } + Loading.show(context); + var response = await AddressApi.updateAddress( + id: id, + countryId: countryInfo!.id, + stateId: stateInfo!.id, + cityId: cityInfo!.id, + isDefault: isDefault!, + address: fullAddress!); + Loading.close(); + if (!context.mounted) return; + ToastUi.show(context, response.object.message); + if (response.object.result) { + Navigator.pop(context); + } + } + + + bool checkAddressValidation(BuildContext context, + {required CountryInfo? countryInfo, + required StateInfo? stateInfo, + required CityInfo? cityInfo, + required String? fullAddress, + required int? isDefault}) { + if (countryInfo == null) { + ToastUi.show(context, AppLang.local(context).please_select_a_country); + return false; + } + if (stateInfo == null) { + ToastUi.show(context, AppLang.local(context).please_select_a_state); + return false; + } + if (cityInfo == null) { + ToastUi.show(context, AppLang.local(context).please_select_a_city); + return false; + } + if (fullAddress == null || fullAddress.trim().isEmpty) { + ToastUi.show(context, AppLang.local(context).please_enter_address); + return false; + } + return true; + } + + getEditAddressData(id,BuildContext context)async{ + Loading.show(context); + var response =await AddressApi.editAddresses(id); + Loading.close(); + if(response.statusCode==200 && response.object.result){ + editAddress= response.object; + getCountries(); + //setSelectedCountry(CountryInfo(id: response.object.data.countryId, code: "0", name: response.object.data.countryName, isActive: true)); + //setSelectedState(StateInfo(id: response.object.data.stateId,name: response.object.data.stateName, isActive: true, countryId: response.object.data.countryId)); + //setSelectedCity(CityInfo(id: response.object.data.cityId,name: response.object.data.cityName, isActive: true, stateId: response.object.data.stateId)); + + setDefaultAddress(editAddress!.data.isDefault==1?"Set Default":"No"); + addressController.text=response.object.data.address; + notifyListeners(); + } + } + + deleteAddress(id,BuildContext context)async{ + Loading.show(context); + var response = await AddressApi.deleteAddress(id: id); + Loading.close(); + ToastUi.show(context, response.object.message); + onRefresh(); + } + +} diff --git a/app_code/lib/presenters/auth/aa.dart b/app_code/lib/presenters/auth/aa.dart new file mode 100644 index 0000000..4625810 --- /dev/null +++ b/app_code/lib/presenters/auth/aa.dart @@ -0,0 +1,715 @@ + +import 'dart:convert'; + +// import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:grostore/apis/auth_api.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/constant/country_code.dart'; +import 'package:grostore/custom_classes/system_data.dart'; +import 'package:grostore/custom_ui/loading.dart'; +import 'package:grostore/custom_ui/toast_ui.dart'; +import 'package:grostore/helpers/route.dart'; +import 'package:grostore/helpers/shared_value_helper.dart'; +import 'package:grostore/models/auth/login_response_model.dart'; +import 'package:grostore/models/common/user_info.dart'; +import 'package:grostore/models/user_info_response_model.dart'; +import 'package:grostore/screens/auth/password_otp.dart'; +import 'package:grostore/screens/main.dart'; + +class AuthPresenterf extends ChangeNotifier { + UserInfo userInfo = userInfoResponseDefault().data; + static BuildContext? _context; + + static BuildContext get getContext => _context!; + + setContext(BuildContext context) { + AuthPresenterf._context = context; + } + + List country = CountryCode().get(); + + List filteredCountry = CountryCode().get(); + + void filterCountry(String query) { + query = query.toLowerCase(); + + filteredCountry = country.where((product) { + if (product.name.toLowerCase().contains(query)) { + return true; + } else { + return false; + } + }).toList(); + notifyListeners(); + } + + //controllers + TextEditingController loginPhoneNumberController = TextEditingController(); + TextEditingController loginEmailController = TextEditingController(); + TextEditingController loginPasswordController = TextEditingController(); + + String loginBy = "phone"; //phone or email + String initialCountry = 'US'; + var countriesCode = []; + Country regCountry = CountryCode().get().last; + String loginPhone = ""; + late String loginEmail, loginPassword; + + /// Registration variables + String registerBy = "email"; //phone or email + String regPhone = ""; + bool isAgree = false; + + //controllers + TextEditingController regNameController = TextEditingController(); + TextEditingController regPhoneNumberController = TextEditingController(); + TextEditingController regPasswordController = TextEditingController(); + TextEditingController regPasswordConfirmController = TextEditingController(); + + fetch_country() async { + // var data = await AddressRepository().getCountryList(); + // data.countries.forEach((c) => countries_code.add(c.code)); + } + + String makeLoginPostBody(login,pass) { + return jsonEncode({ + "phone": login, + "password": pass, + }); + } + + onPressedLogin() async { + + loginPhone = loginPhoneNumberController.text.toString().trim(); + loginPassword = loginPasswordController.text.toString().trim(); + + loginPhone = "+998$loginPhone"; + + print("Loginn::: $loginPhone"); + print("Password::: $loginPassword"); + + if (loginPhone == "") { + ToastUi.show(_context!, AppLang + .local(_context!) + .please_enter_phone); + return; + } else if (loginPassword == "") { + ToastUi.show(_context!, AppLang + .local(_context!) + .please_enter_password); + return; + } + + var body = makeLoginPostBody(loginPhone, loginPassword); + print("JsonBody::: $body"); + + Loading.show(_context!); + var response =await AuthApi.login(body, _context!); + Loading.close(); + if (response.result == false) { + var message = ""; + + if (response.message.runtimeType == List) { + // response.message.forEach((key, value) { + // value.forEach((messages) { + // message += messages + "\n"; + // }); + // } + // ) + message = response.message; + } else { + message = response.message; + } + + ToastUi.show(_context!, message); + } else { + ToastUi.show(_context!, response.message); + + loginPasswordController.text == ''; + loginPasswordController.text == ''; + + SystemData.isLogIn = true; + // MakeRoute.clearProviders(_context!); + Navigator.pushReplacement(_context!, MaterialPageRoute(builder: (_)=> const Main())); + } + + } + + tokenCheck(BuildContext context) async { + var response = await AuthApi.tokenCheck(context); + if (response.result) { + SystemData.isLogIn = response.result; + SystemData.userInfo = response.user; + } + notifyListeners(); + } + + logout(BuildContext context) async { + var response = await AuthApi.logout(context); + if (response.result) { + SystemData.isLogIn = false; + SystemData.userInfo = response.user; + } + notifyListeners(); + } + + ///registration methods + + onChangeCountry(Country country) { + regCountry = country; + notifyListeners(); + } + + String makeRegBody(name, phone, password, confirmPassword) { + return jsonEncode({ + "name": name, + "phone": phone, + "password": password, + "password_confirmation": confirmPassword + }); + } + + onPressSignUp() async { + var name = regNameController.text.toString(); + var password = regPasswordController.text.toString(); + var passwordConfirm = regPasswordConfirmController.text.toString(); + regPhone = regPhoneNumberController.value.text.toString(); + String valu = ''; + String value = ''; + if (regPhone.isNotEmpty) { + // valu = regPhone.substring(0,2); + // value = regPhone.substring(2); + regPhone = "+998$regPhone"; + // regPhone = "+998($valu)$value"; + } + + if (name == "") { + ToastUi.show(_context!, AppLang + .local(_context!) + .please_enter_phone); + return; + } else if (password == "") { + ToastUi.show(_context!, AppLang + .local(_context!) + .please_enter_password); + return; + } else if (passwordConfirm == "") { + ToastUi.show( + _context!, AppLang + .local(_context!) + .please_enter_confirm_password); + return; + } else if (password.length < 6) { + ToastUi.show( + _context!, AppLang + .local(_context!) + .password_must_be_at_last_6_digit); + return; + } else if (password != passwordConfirm) { + ToastUi.show( + _context!, + AppLang + .local(_context!) + .password_and_confirm_password_is_not_matching); + return; + } + + var body = makeRegBody( + name, + regPhone, + password, + passwordConfirm); + + Loading.show(_context!); + var signupResponse = await AuthApi.registration(_context!, body); + Loading.close(); + + if (signupResponse == false) { + var message = ""; + if (signupResponse.message.runtimeType == List) { + signupResponse.message.forEach((key, value) { + value.forEach((messages) { + message += messages + "\n"; + }); + }); + } else { + message = signupResponse.message; + } + + ToastUi.show(_context!, message); + } else { + ToastUi.show(_context!, signupResponse.message); + + regPasswordController.text = ""; + // SystemData.isLogIn = true; + // MakeRoute.clearProviders(_context!); + Navigator.pushReplacement(_context!, MaterialPageRoute(builder: (_)=>PasswordOtp())); + } + // notifyListeners(); + } + /// + + /// ForgetPassword + /// + + //controllers + TextEditingController forgetEmailController = TextEditingController(); + TextEditingController forgetPhoneNumberController = TextEditingController(); + + onPressSendCode() async { + var email = forgetEmailController.text.toString(); + + if (email == "") { + ToastUi.show(_context!, AppLang.local(_context!).please_enter_email); + return; + } + + var passwordForgetResponse = await AuthApi.forgetPassword(_context!, email); + + if (passwordForgetResponse.result == false) { + ToastUi.show(_context!, passwordForgetResponse.message); + } else { + ToastUi.show(_context!, passwordForgetResponse.message); + + // Navigator.push(context, MaterialPageRoute(builder: (context) { + // return PasswordOtp( + // verify_by: _send_code_by, + // ); + // })); + } + } + + String makeRegOTP(code) { + return jsonEncode({ + "code": code + }); + } + TextEditingController otpController = TextEditingController(); + + /// Otp + onPressOTP() async { + var code = otpCodeController.text.toString(); + + + if (code == "") { + ToastUi.show( + _context!, + AppLang.local(_context!).enter_otp_code, + ); + return; + } + + var otp = makeRegOTP(code); + + var passwordConfirmResponse =await AuthApi.forgetOTP(_context!, otp); + + if (passwordConfirmResponse.result == false) { + ToastUi.show(_context!, passwordConfirmResponse.message); + } else { + ToastUi.show(_context!, passwordConfirmResponse.message); + // MakeRoute.clearProviders(_context!); + SystemData.isLogIn = true; + + Navigator.pushReplacement(_context!, MaterialPageRoute(builder: (_)=> const Main())); + } + // notifyListeners(); + } + + + + //controllers + TextEditingController otpCodeController = TextEditingController(); + TextEditingController otpPasswordController = TextEditingController(); + TextEditingController otpPasswordConfirmController = TextEditingController(); + bool otpResetPasswordSuccess = false; + + onPressConfirm() async { + var code = otpCodeController.text.toString(); + var password = otpPasswordController.text.toString(); + var password_confirm = otpPasswordConfirmController.text.toString(); + + if (code == "") { + ToastUi.show( + _context!, + AppLang.local(_context!).enter_otp_code, + ); + return; + } else if (password == "") { + ToastUi.show(_context!, AppLang.local(_context!).please_enter_password); + return; + } else if (password_confirm == "") { + ToastUi.show( + _context!, AppLang.local(_context!).please_enter_confirm_password); + return; + } else if (password.length < 6) { + ToastUi.show( + _context!, AppLang.local(_context!).password_must_be_at_last_6_digit); + return; + } else if (password != password_confirm) { + ToastUi.show( + _context!, + AppLang.local(_context!) + .password_and_confirm_password_is_not_matching); + return; + } + + var passwordConfirmResponse = + await AuthApi.forgetPassword(_context!, password); + + if (passwordConfirmResponse.result == false) { + ToastUi.show(_context!, passwordConfirmResponse.message); + } else { + ToastUi.show(_context!, passwordConfirmResponse.message); + } + } + + onTapResend() async { + var passwordResendCodeResponse = + await AuthApi.forgetPassword(_context!, ""); + + if (passwordResendCodeResponse.result == false) { + ToastUi.show(_context!, passwordResendCodeResponse.message); + } else { + ToastUi.show(_context!, passwordResendCodeResponse.message); + } + } +} + + + + +// import 'dart:convert'; +// +// import 'package:flutter/cupertino.dart'; +// import 'package:grostore/apis/auth_api.dart'; +// import 'package:grostore/app_lang.dart'; +// import 'package:grostore/constant/country_code.dart'; +// import 'package:grostore/custom_classes/system_data.dart'; +// import 'package:grostore/custom_ui/loading.dart'; +// import 'package:grostore/custom_ui/toast_ui.dart'; +// import 'package:grostore/helpers/common_functions.dart'; +// import 'package:grostore/helpers/route.dart'; +// import 'package:grostore/helpers/shared_value_helper.dart'; +// import 'package:grostore/models/auth/login_response_model.dart'; +// import 'package:grostore/models/common/user_info.dart'; +// import 'package:grostore/models/user_info_response_model.dart'; +// import 'package:grostore/screens/main.dart'; +// +// class AuthPresenter extends ChangeNotifier { +// UserInfo userInfo = userInfoResponseDefault().data; +// static BuildContext? _context; +// +// static BuildContext get getContext => _context!; +// +// setContext(BuildContext context) { +// AuthPresenter._context = context; +// } +// +// List country = CountryCode().get(); +// +// List filteredCountry = CountryCode().get(); +// +// void filterCountry(String query) { +// query = query.toLowerCase(); +// +// filteredCountry = country.where((product) { +// if (product.name.toLowerCase().contains(query)) { +// return true; +// } else { +// return false; +// } +// }).toList(); +// notifyListeners(); +// } +// +// //controllers +// TextEditingController loginPhoneNumberController = TextEditingController(); +// TextEditingController loginEmailController = TextEditingController(); +// TextEditingController loginPasswordController = TextEditingController(); +// +// String loginBy = "email"; //phone or email +// String initialCountry = 'US'; +// var countriesCode = []; +// Country regCountry = CountryCode().get().last; +// String loginPhone = ""; +// late String loginEmail, loginPassword; +// +// /// Registration variables +// String registerBy = "email"; //phone or email +// String regPhone = ""; +// bool isAgree = false; +// +// //controllers +// TextEditingController regNameController = TextEditingController(); +// TextEditingController regEmailController = TextEditingController(); +// TextEditingController regPhoneNumberController = TextEditingController(); +// TextEditingController regPasswordController = TextEditingController(); +// TextEditingController regPasswordConfirmController = TextEditingController(); +// +// fetch_country() async { +// // var data = await AddressRepository().getCountryList(); +// // data.countries.forEach((c) => countries_code.add(c.code)); +// } +// +// onPressedLogin() async { +// if (checkLoginValidation()) { +// makeLogin(); +// } +// } +// +// String makeLoginPostBody() { +// return jsonEncode({ +// "email": loginEmail, +// "type": "customer", +// "password": loginPassword, +// }); +// } +// +// bool checkLoginValidation() { +// loginEmail = loginEmailController.text.toString().trim(); +// loginPassword = loginPasswordController.text.toString().trim(); +// if (loginBy == "email") { +// if (loginEmail.isEmpty || !isEmail(loginEmail)) { +// ToastUi.show(_context!, AppLang.getLocal().please_enter_valid_email); +// return false; +// } +// } else { +// ///todo phone no validation +// return false; +// } +// +// if (loginPassword.isEmpty) { +// return false; +// } +// return true; +// } +// +// makeLogin() async { +// Loading.show(_context!); +// LoginResponse response = +// await AuthApi.login(makeLoginPostBody(), _context!); +// Loading.close(); +// if (response.result) { +// access_token.update((p0) => response.accessToken); +// access_token.save(); +// loginEmailController.clear(); +// loginPasswordController.clear(); +// SystemData.isLogIn = true; +// SystemData.userInfo = response.user; +// MakeRoute.goAndRemoveAll(_context!, Main()); +// //UserInfo(name: response.name, email: response.email, phone: response.phone, balance: response.balance, avatar: response.avatar); +// } +// ToastUi.show(_context!, response.message); +// } +// +// tokenCheck(BuildContext context) async { +// var response = await AuthApi.tokenCheck(context); +// if (response.result) { +// SystemData.isLogIn = response.result; +// SystemData.userInfo = response.user; +// } +// notifyListeners(); +// } +// +// logout(BuildContext context) async { +// var response = await AuthApi.logout(context); +// if (response.result) { +// SystemData.isLogIn = false; +// SystemData.userInfo = response.user; +// } +// notifyListeners(); +// } +// +// ///registration methods +// +// onChangeCountry(Country country) { +// regCountry = country; +// notifyListeners(); +// } +// +// String makeRegBody(name, email, phone, password, confirmPassword) { +// return jsonEncode({ +// "name": name, +// "email": email, +// "phone": phone, +// "password": password, +// "password_confirmation": confirmPassword +// }); +// } +// +// onPressSignUp() async { +// var name = regNameController.text.toString(); +// var email = regEmailController.text.toString(); +// var password = regPasswordController.text.toString(); +// var password_confirm = regPasswordConfirmController.text.toString(); +// regPhone = regPhoneNumberController.text.trim(); +// if (regPhone.isNotEmpty) { +// regPhone = regCountry.dial_code + regPhone; +// } +// +// if (name == "") { +// ToastUi.show(_context!, AppLang.local(_context!).please_enter_name); +// return; +// } else if (registerBy == 'email' && (email == "" || !isEmail(email))) { +// ToastUi.show(_context!, AppLang.local(_context!).please_enter_email); +// return; +// } else if (registerBy == 'phone' && regPhone == "") { +// ToastUi.show(_context!, AppLang.local(_context!).please_enter_phone); +// return; +// } else if (password == "") { +// ToastUi.show(_context!, AppLang.local(_context!).please_enter_password); +// return; +// } else if (password_confirm == "") { +// ToastUi.show( +// _context!, AppLang.local(_context!).please_enter_confirm_password); +// return; +// } else if (password.length < 6) { +// ToastUi.show( +// _context!, AppLang.local(_context!).password_must_be_at_last_6_digit); +// return; +// } else if (password != password_confirm) { +// ToastUi.show( +// _context!, +// AppLang.local(_context!) +// .password_and_confirm_password_is_not_matching); +// return; +// } +// +// var body = makeRegBody(name, email, regPhone, password, password_confirm); +// Loading.show(_context!); +// var signupResponse = await AuthApi.registration(_context!, body); +// Loading.close(); +// print(signupResponse.toJson()); +// if (signupResponse.result == false) { +// var message = ""; +// if (signupResponse.message.runtimeType == List) { +// signupResponse.message.forEach((key, value) { +// value.forEach((messages) { +// message += messages + "\n"; +// }); +// }); +// } else { +// message = signupResponse.message; +// } +// +// ToastUi.show(_context!, message); +// } else { +// ToastUi.show(_context!, signupResponse.message); +// access_token.update((p0) => signupResponse.accessToken); +// access_token.save(); +// loginEmailController.clear(); +// loginPasswordController.clear(); +// SystemData.isLogIn = true; +// SystemData.userInfo = signupResponse.user; +// MakeRoute.goAndRemoveAll(_context!, Main()); +// +// // if ((mail_verification_status.$ && _register_by == "email") || +// // _register_by == "phone") { +// // Navigator.push(context, MaterialPageRoute(builder: (context) { +// // return Otp( +// // verify_by: _register_by, +// // user_id: signupResponse.user_id, +// // ); +// // })); +// // +// // } else { +// // Navigator.push(context, MaterialPageRoute(builder: (context) { +// // return Login(); +// // })); +// // } +// } +// } +// +// /// +// +// /// ForgetPassword +// /// +// +// //controllers +// TextEditingController forgetEmailController = TextEditingController(); +// TextEditingController forgetPhoneNumberController = TextEditingController(); +// +// onPressSendCode() async { +// var email = forgetEmailController.text.toString(); +// +// if (email == "") { +// ToastUi.show(_context!, AppLang.local(_context!).please_enter_email); +// return; +// } +// +// var passwordForgetResponse = await AuthApi.forgetPassword(_context!, email); +// +// if (passwordForgetResponse.result == false) { +// ToastUi.show(_context!, passwordForgetResponse.message); +// } else { +// ToastUi.show(_context!, passwordForgetResponse.message); +// +// // Navigator.push(context, MaterialPageRoute(builder: (context) { +// // return PasswordOtp( +// // verify_by: _send_code_by, +// // ); +// // })); +// } +// } +// +// /// Otp +// /// +// +// //controllers +// TextEditingController otpCodeController = TextEditingController(); +// TextEditingController otpPasswordController = TextEditingController(); +// TextEditingController otpPasswordConfirmController = TextEditingController(); +// bool otpResetPasswordSuccess = false; +// +// onPressConfirm() async { +// var code = otpCodeController.text.toString(); +// var password = otpPasswordController.text.toString(); +// var password_confirm = otpPasswordConfirmController.text.toString(); +// +// if (code == "") { +// ToastUi.show( +// _context!, +// AppLang.local(_context!).enter_otp_code, +// ); +// return; +// } else if (password == "") { +// ToastUi.show(_context!, AppLang.local(_context!).please_enter_password); +// return; +// } else if (password_confirm == "") { +// ToastUi.show( +// _context!, AppLang.local(_context!).please_enter_confirm_password); +// return; +// } else if (password.length < 6) { +// ToastUi.show( +// _context!, AppLang.local(_context!).password_must_be_at_last_6_digit); +// return; +// } else if (password != password_confirm) { +// ToastUi.show( +// _context!, +// AppLang.local(_context!) +// .password_and_confirm_password_is_not_matching); +// return; +// } +// +// var passwordConfirmResponse = +// await AuthApi.forgetPassword(_context!, password); +// +// if (passwordConfirmResponse.result == false) { +// ToastUi.show(_context!, passwordConfirmResponse.message); +// } else { +// ToastUi.show(_context!, passwordConfirmResponse.message); +// } +// } +// +// onTapResend() async { +// var passwordResendCodeResponse = +// await AuthApi.forgetPassword(_context!, ""); +// +// if (passwordResendCodeResponse.result == false) { +// ToastUi.show(_context!, passwordResendCodeResponse.message); +// } else { +// ToastUi.show(_context!, passwordResendCodeResponse.message); +// } +// } +// } diff --git a/app_code/lib/presenters/auth/auth_presenter.dart b/app_code/lib/presenters/auth/auth_presenter.dart new file mode 100644 index 0000000..78f4667 --- /dev/null +++ b/app_code/lib/presenters/auth/auth_presenter.dart @@ -0,0 +1,713 @@ + +import 'dart:convert'; + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:grostore/apis/auth_api.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/constant/country_code.dart'; +import 'package:grostore/custom_classes/system_data.dart'; +import 'package:grostore/custom_ui/loading.dart'; +import 'package:grostore/custom_ui/toast_ui.dart'; +import 'package:grostore/helpers/route.dart'; +import 'package:grostore/helpers/shared_value_helper.dart'; +import 'package:grostore/models/auth/login_response_model.dart'; +import 'package:grostore/models/common/user_info.dart'; +import 'package:grostore/models/user_info_response_model.dart'; +import 'package:grostore/screens/auth/password_otp.dart'; +import 'package:grostore/screens/main.dart'; + +class AuthPresenter extends ChangeNotifier { + UserInfo userInfo = userInfoResponseDefault().data; + static BuildContext? _context; + + static BuildContext get getContext => _context!; + + setContext(BuildContext context) { + AuthPresenter._context = context; + } + + List country = CountryCode().get(); + + List filteredCountry = CountryCode().get(); + + void filterCountry(String query) { + query = query.toLowerCase(); + + filteredCountry = country.where((product) { + if (product.name.toLowerCase().contains(query)) { + return true; + } else { + return false; + } + }).toList(); + notifyListeners(); + } + + //controllers + TextEditingController loginPhoneNumberController = TextEditingController(); + TextEditingController loginEmailController = TextEditingController(); + TextEditingController loginPasswordController = TextEditingController(); + + String loginBy = "phone"; //phone or email + String initialCountry = 'US'; + var countriesCode = []; + Country regCountry = CountryCode().get().last; + String loginPhone = ""; + late String loginEmail, loginPassword; + + /// Registration variables + String registerBy = "email"; //phone or email + String regPhone = ""; + bool isAgree = false; + + //controllers + TextEditingController regNameController = TextEditingController(); + TextEditingController regPhoneNumberController = TextEditingController(); + TextEditingController regPasswordController = TextEditingController(); + TextEditingController regPasswordConfirmController = TextEditingController(); + + fetch_country() async { + // var data = await AddressRepository().getCountryList(); + // data.countries.forEach((c) => countries_code.add(c.code)); + } + + onPressedLogin() async { + if (checkLoginValidation()) { + makeLogin(); + } + } + + String makeLoginPostBody(phone,pass) { + return jsonEncode({ + "phone": phone, + "password": pass, + }); + } + + bool checkLoginValidation() { + loginPhone = loginPhoneNumberController.text.toString().trim(); + loginPassword = loginPasswordController.text.toString().trim(); + + loginPhone = "+998$loginPhone"; + + if (loginBy == "phone") { + if (loginPhone.isEmpty) { + ToastUi.show(_context!, AppLang.getLocal().please_enter_valid_email); + return false; + } + } else { + return false; + } + + if (loginPassword.isEmpty) { + return false; + } + return true; + } + + makeLogin() async { + loginPhone = loginPhoneNumberController.text.toString().trim(); + loginPassword = loginPasswordController.text.toString().trim(); + loginPhone = "+998$loginPhone"; + + print("Hello==$loginPhone"); + print("Hello==$loginPassword"); + + Loading.show(_context!); + LoginResponse response = await AuthApi.login(makeLoginPostBody(loginPhone,loginPassword), _context!); + Loading.close(); + if (response.result == true) { + access_token.update((p0) => response.accessToken); + access_token.save(); + loginPhoneNumberController.text = ''; + loginPasswordController.text = ''; + SystemData.isLogIn = true; + MakeRoute.goAndRemoveAll(_context!, const Main()); + //UserInfo(name: response.name, email: response.email, phone: response.phone, balance: response.balance, avatar: response.avatar); + ToastUi.show(_context!, AppLang.local(_context!).success_login); + } + ToastUi.show(_context!, AppLang.local(_context!).no_such_user_exists); + + notifyListeners(); + } + + tokenCheck(BuildContext context) async { + var response = await AuthApi.tokenCheck(context); + if (response.result) { + SystemData.isLogIn = response.result; + SystemData.userInfo = response.user; + } + notifyListeners(); + } + + logout(BuildContext context) async { + var response = await AuthApi.logout(context); + if (response.result) { + SystemData.isLogIn = false; + SystemData.userInfo = response.user; + } + notifyListeners(); + } + + ///registration methods + + onChangeCountry(Country country) { + regCountry = country; + notifyListeners(); + } + + String makeRegBody(name, phone, password, confirmPassword) { + return jsonEncode({ + "name": name, + "phone": phone, + "password": password, + "password_confirmation": confirmPassword + }); + } + + onPressSignUp() async { + var name = regNameController.text.toString(); + var password = regPasswordController.text.toString(); + var passwordConfirm = regPasswordConfirmController.text.toString(); + regPhone = regPhoneNumberController.value.text.toString(); + String valu = ''; + String value = ''; + if (regPhone.isNotEmpty) { + // valu = regPhone.substring(0,2); + // value = regPhone.substring(2); + regPhone = "+998$regPhone"; + // regPhone = "+998($valu)$value"; + } + + if (name == "") { + ToastUi.show(_context!, AppLang + .local(_context!) + .please_enter_phone); + return; + } else if (password == "") { + ToastUi.show(_context!, AppLang + .local(_context!) + .please_enter_password); + return; + } else if (passwordConfirm == "") { + ToastUi.show( + _context!, AppLang + .local(_context!) + .please_enter_confirm_password); + return; + } else if (password.length < 6) { + ToastUi.show( + _context!, AppLang + .local(_context!) + .password_must_be_at_last_6_digit); + return; + } else if (password != passwordConfirm) { + ToastUi.show( + _context!, + AppLang + .local(_context!) + .password_and_confirm_password_is_not_matching); + return; + } + + var body = makeRegBody( + name, + regPhone, + password, + passwordConfirm); + + Loading.show(_context!); + var signupResponse = await AuthApi.registration(_context!, body); + Loading.close(); + + if (signupResponse.result == false) { + var message = ""; + if (signupResponse.message.runtimeType == List) { + signupResponse.message.forEach((key, value) { + value.forEach((messages) { + message += messages + "\n"; + }); + }); + } else { + message = signupResponse.message; + } + + await ToastUi.show(_context!, message); + } else { + // loginPasswordController.clear(); + // SystemData.isLogIn = true; + MakeRoute.go(_context!, PasswordOtp()); + } + notifyListeners(); + } + /// + + + String makePhone(code) { + return jsonEncode({ + "phone": code + }); + } + //controllers + TextEditingController forgetPhoneNumberController = TextEditingController(); + + onPressSendCode() async { + var phoneNum = forgetPhoneNumberController.text.toString(); + phoneNum = "+998$phoneNum"; + + if (phoneNum == "") { + ToastUi.show(_context!, AppLang.local(_context!).please_enter_phone); + return; + } + + var passwordForgetResponse = await AuthApi.forgetPassword(_context!, makePhone(phoneNum)); + + if (passwordForgetResponse.result == false) { + ToastUi.show(_context!, passwordForgetResponse.message); + } else { + // ToastUi.show(_context!, passwordForgetResponse.message); + + // MakeRoute.goAndRemoveAll(_context!, PasswordOtp(phone_num: phoneNum)); + Navigator.push(_context!, MaterialPageRoute(builder: (context) { + return PasswordOtp( + verify_by: phoneNum, + ); + })); + forgetPhoneNumberController.text = ""; + } + } + + /// Otp + String makeRegOTP(code) { + return jsonEncode({ + "code": code + }); + } + + /// #OTP + TextEditingController otpController = TextEditingController(); + onPressOTP() async { + var code = otpCodeController.text.toString(); + + + if (code == "") { + ToastUi.show( + _context!, + AppLang.local(_context!).enter_otp_code, + ); + return; + } + + var confirmOTP =await AuthApi.forgetOTP(_context!, makeRegOTP(code)); + + if (confirmOTP.result == false) { + ToastUi.show(_context!, confirmOTP.message); + }else{ + access_token.update((p0) => confirmOTP.accessToken); + access_token.save(); + SystemData.isLogIn = true; + MakeRoute.goAndRemoveAll(_context!, const Main()); + otpController.text = ""; + // ToastUi.show(_context!, AppLang.local(_context!).success_register); + } + notifyListeners(); + } + + + + //controllers + TextEditingController otpCodeController = TextEditingController(); + TextEditingController otpPasswordController = TextEditingController(); + TextEditingController otpPasswordConfirmController = TextEditingController(); + bool otpResetPasswordSuccess = false; + + onPressConfirm() async { + var code = otpCodeController.text.toString(); + var password = otpPasswordController.text.toString(); + var password_confirm = otpPasswordConfirmController.text.toString(); + + if (code == "") { + ToastUi.show( + _context!, + AppLang.local(_context!).enter_otp_code, + ); + return; + } else if (password == "") { + ToastUi.show(_context!, AppLang.local(_context!).please_enter_password); + return; + } else if (password_confirm == "") { + ToastUi.show( + _context!, AppLang.local(_context!).please_enter_confirm_password); + return; + } else if (password.length < 6) { + ToastUi.show( + _context!, AppLang.local(_context!).password_must_be_at_last_6_digit); + return; + } else if (password != password_confirm) { + ToastUi.show( + _context!, + AppLang.local(_context!) + .password_and_confirm_password_is_not_matching); + return; + } + + var passwordConfirmResponse = + await AuthApi.forgetPassword(_context!, password); + + if (passwordConfirmResponse.result == false) { + ToastUi.show(_context!, passwordConfirmResponse.message); + } else { + ToastUi.show(_context!, passwordConfirmResponse.message); + } + } + + onTapResend() async { + var passwordResendCodeResponse = + await AuthApi.forgetPassword(_context!, ""); + + if (passwordResendCodeResponse.result == false) { + ToastUi.show(_context!, passwordResendCodeResponse.message); + } else { + ToastUi.show(_context!, passwordResendCodeResponse.message); + } + } +} + + + + +// import 'dart:convert'; +// +// import 'package:flutter/cupertino.dart'; +// import 'package:grostore/apis/auth_api.dart'; +// import 'package:grostore/app_lang.dart'; +// import 'package:grostore/constant/country_code.dart'; +// import 'package:grostore/custom_classes/system_data.dart'; +// import 'package:grostore/custom_ui/loading.dart'; +// import 'package:grostore/custom_ui/toast_ui.dart'; +// import 'package:grostore/helpers/common_functions.dart'; +// import 'package:grostore/helpers/route.dart'; +// import 'package:grostore/helpers/shared_value_helper.dart'; +// import 'package:grostore/models/auth/login_response_model.dart'; +// import 'package:grostore/models/common/user_info.dart'; +// import 'package:grostore/models/user_info_response_model.dart'; +// import 'package:grostore/screens/main.dart'; +// +// class AuthPresenter extends ChangeNotifier { +// UserInfo userInfo = userInfoResponseDefault().data; +// static BuildContext? _context; +// +// static BuildContext get getContext => _context!; +// +// setContext(BuildContext context) { +// AuthPresenter._context = context; +// } +// +// List country = CountryCode().get(); +// +// List filteredCountry = CountryCode().get(); +// +// void filterCountry(String query) { +// query = query.toLowerCase(); +// +// filteredCountry = country.where((product) { +// if (product.name.toLowerCase().contains(query)) { +// return true; +// } else { +// return false; +// } +// }).toList(); +// notifyListeners(); +// } +// +// //controllers +// TextEditingController loginPhoneNumberController = TextEditingController(); +// TextEditingController loginEmailController = TextEditingController(); +// TextEditingController loginPasswordController = TextEditingController(); +// +// String loginBy = "email"; //phone or email +// String initialCountry = 'US'; +// var countriesCode = []; +// Country regCountry = CountryCode().get().last; +// String loginPhone = ""; +// late String loginEmail, loginPassword; +// +// /// Registration variables +// String registerBy = "email"; //phone or email +// String regPhone = ""; +// bool isAgree = false; +// +// //controllers +// TextEditingController regNameController = TextEditingController(); +// TextEditingController regEmailController = TextEditingController(); +// TextEditingController regPhoneNumberController = TextEditingController(); +// TextEditingController regPasswordController = TextEditingController(); +// TextEditingController regPasswordConfirmController = TextEditingController(); +// +// fetch_country() async { +// // var data = await AddressRepository().getCountryList(); +// // data.countries.forEach((c) => countries_code.add(c.code)); +// } +// +// onPressedLogin() async { +// if (checkLoginValidation()) { +// makeLogin(); +// } +// } +// +// String makeLoginPostBody() { +// return jsonEncode({ +// "email": loginEmail, +// "type": "customer", +// "password": loginPassword, +// }); +// } +// +// bool checkLoginValidation() { +// loginEmail = loginEmailController.text.toString().trim(); +// loginPassword = loginPasswordController.text.toString().trim(); +// if (loginBy == "email") { +// if (loginEmail.isEmpty || !isEmail(loginEmail)) { +// ToastUi.show(_context!, AppLang.getLocal().please_enter_valid_email); +// return false; +// } +// } else { +// ///todo phone no validation +// return false; +// } +// +// if (loginPassword.isEmpty) { +// return false; +// } +// return true; +// } +// +// makeLogin() async { +// Loading.show(_context!); +// LoginResponse response = +// await AuthApi.login(makeLoginPostBody(), _context!); +// Loading.close(); +// if (response.result) { +// access_token.update((p0) => response.accessToken); +// access_token.save(); +// loginEmailController.clear(); +// loginPasswordController.clear(); +// SystemData.isLogIn = true; +// SystemData.userInfo = response.user; +// MakeRoute.goAndRemoveAll(_context!, Main()); +// //UserInfo(name: response.name, email: response.email, phone: response.phone, balance: response.balance, avatar: response.avatar); +// } +// ToastUi.show(_context!, response.message); +// } +// +// tokenCheck(BuildContext context) async { +// var response = await AuthApi.tokenCheck(context); +// if (response.result) { +// SystemData.isLogIn = response.result; +// SystemData.userInfo = response.user; +// } +// notifyListeners(); +// } +// +// logout(BuildContext context) async { +// var response = await AuthApi.logout(context); +// if (response.result) { +// SystemData.isLogIn = false; +// SystemData.userInfo = response.user; +// } +// notifyListeners(); +// } +// +// ///registration methods +// +// onChangeCountry(Country country) { +// regCountry = country; +// notifyListeners(); +// } +// +// String makeRegBody(name, email, phone, password, confirmPassword) { +// return jsonEncode({ +// "name": name, +// "email": email, +// "phone": phone, +// "password": password, +// "password_confirmation": confirmPassword +// }); +// } +// +// onPressSignUp() async { +// var name = regNameController.text.toString(); +// var email = regEmailController.text.toString(); +// var password = regPasswordController.text.toString(); +// var password_confirm = regPasswordConfirmController.text.toString(); +// regPhone = regPhoneNumberController.text.trim(); +// if (regPhone.isNotEmpty) { +// regPhone = regCountry.dial_code + regPhone; +// } +// +// if (name == "") { +// ToastUi.show(_context!, AppLang.local(_context!).please_enter_name); +// return; +// } else if (registerBy == 'email' && (email == "" || !isEmail(email))) { +// ToastUi.show(_context!, AppLang.local(_context!).please_enter_email); +// return; +// } else if (registerBy == 'phone' && regPhone == "") { +// ToastUi.show(_context!, AppLang.local(_context!).please_enter_phone); +// return; +// } else if (password == "") { +// ToastUi.show(_context!, AppLang.local(_context!).please_enter_password); +// return; +// } else if (password_confirm == "") { +// ToastUi.show( +// _context!, AppLang.local(_context!).please_enter_confirm_password); +// return; +// } else if (password.length < 6) { +// ToastUi.show( +// _context!, AppLang.local(_context!).password_must_be_at_last_6_digit); +// return; +// } else if (password != password_confirm) { +// ToastUi.show( +// _context!, +// AppLang.local(_context!) +// .password_and_confirm_password_is_not_matching); +// return; +// } +// +// var body = makeRegBody(name, email, regPhone, password, password_confirm); +// Loading.show(_context!); +// var signupResponse = await AuthApi.registration(_context!, body); +// Loading.close(); +// print(signupResponse.toJson()); +// if (signupResponse.result == false) { +// var message = ""; +// if (signupResponse.message.runtimeType == List) { +// signupResponse.message.forEach((key, value) { +// value.forEach((messages) { +// message += messages + "\n"; +// }); +// }); +// } else { +// message = signupResponse.message; +// } +// +// ToastUi.show(_context!, message); +// } else { +// ToastUi.show(_context!, signupResponse.message); +// access_token.update((p0) => signupResponse.accessToken); +// access_token.save(); +// loginEmailController.clear(); +// loginPasswordController.clear(); +// SystemData.isLogIn = true; +// SystemData.userInfo = signupResponse.user; +// MakeRoute.goAndRemoveAll(_context!, Main()); +// +// // if ((mail_verification_status.$ && _register_by == "email") || +// // _register_by == "phone") { +// // Navigator.push(context, MaterialPageRoute(builder: (context) { +// // return Otp( +// // verify_by: _register_by, +// // user_id: signupResponse.user_id, +// // ); +// // })); +// // +// // } else { +// // Navigator.push(context, MaterialPageRoute(builder: (context) { +// // return Login(); +// // })); +// // } +// } +// } +// +// /// +// +// /// ForgetPassword +// /// +// +// //controllers +// TextEditingController forgetEmailController = TextEditingController(); +// TextEditingController forgetPhoneNumberController = TextEditingController(); +// +// onPressSendCode() async { +// var email = forgetEmailController.text.toString(); +// +// if (email == "") { +// ToastUi.show(_context!, AppLang.local(_context!).please_enter_email); +// return; +// } +// +// var passwordForgetResponse = await AuthApi.forgetPassword(_context!, email); +// +// if (passwordForgetResponse.result == false) { +// ToastUi.show(_context!, passwordForgetResponse.message); +// } else { +// ToastUi.show(_context!, passwordForgetResponse.message); +// +// // Navigator.push(context, MaterialPageRoute(builder: (context) { +// // return PasswordOtp( +// // verify_by: _send_code_by, +// // ); +// // })); +// } +// } +// +// /// Otp +// /// +// +// //controllers +// TextEditingController otpCodeController = TextEditingController(); +// TextEditingController otpPasswordController = TextEditingController(); +// TextEditingController otpPasswordConfirmController = TextEditingController(); +// bool otpResetPasswordSuccess = false; +// +// onPressConfirm() async { +// var code = otpCodeController.text.toString(); +// var password = otpPasswordController.text.toString(); +// var password_confirm = otpPasswordConfirmController.text.toString(); +// +// if (code == "") { +// ToastUi.show( +// _context!, +// AppLang.local(_context!).enter_otp_code, +// ); +// return; +// } else if (password == "") { +// ToastUi.show(_context!, AppLang.local(_context!).please_enter_password); +// return; +// } else if (password_confirm == "") { +// ToastUi.show( +// _context!, AppLang.local(_context!).please_enter_confirm_password); +// return; +// } else if (password.length < 6) { +// ToastUi.show( +// _context!, AppLang.local(_context!).password_must_be_at_last_6_digit); +// return; +// } else if (password != password_confirm) { +// ToastUi.show( +// _context!, +// AppLang.local(_context!) +// .password_and_confirm_password_is_not_matching); +// return; +// } +// +// var passwordConfirmResponse = +// await AuthApi.forgetPassword(_context!, password); +// +// if (passwordConfirmResponse.result == false) { +// ToastUi.show(_context!, passwordConfirmResponse.message); +// } else { +// ToastUi.show(_context!, passwordConfirmResponse.message); +// } +// } +// +// onTapResend() async { +// var passwordResendCodeResponse = +// await AuthApi.forgetPassword(_context!, ""); +// +// if (passwordResendCodeResponse.result == false) { +// ToastUi.show(_context!, passwordResendCodeResponse.message); +// } else { +// ToastUi.show(_context!, passwordResendCodeResponse.message); +// } +// } +// } diff --git a/app_code/lib/presenters/bloc/lang/lang_bloc.dart b/app_code/lib/presenters/bloc/lang/lang_bloc.dart new file mode 100644 index 0000000..26f91c7 --- /dev/null +++ b/app_code/lib/presenters/bloc/lang/lang_bloc.dart @@ -0,0 +1,19 @@ +import 'dart:async'; +import 'dart:ui'; + +import 'package:bloc/bloc.dart'; +import 'package:equatable/equatable.dart'; + +part 'lang_event.dart'; +part 'lang_state.dart'; + +class LangBloc extends Bloc { + LangBloc() : super(LangLoading()) { + on(_setLocale); + } + + void _setLocale(LanguageEvent event, Emitter emit){ + emit(LangLoading()); + emit(LangSuccess(locale: event.locale)); + } +} diff --git a/app_code/lib/presenters/bloc/lang/lang_event.dart b/app_code/lib/presenters/bloc/lang/lang_event.dart new file mode 100644 index 0000000..c7c98e5 --- /dev/null +++ b/app_code/lib/presenters/bloc/lang/lang_event.dart @@ -0,0 +1,14 @@ +part of 'lang_bloc.dart'; + +abstract class LangEvent extends Equatable { + const LangEvent(); +} + +class LanguageEvent extends LangEvent{ + final Locale locale; + + const LanguageEvent({required this.locale}); + + @override + List get props => []; +} \ No newline at end of file diff --git a/app_code/lib/presenters/bloc/lang/lang_state.dart b/app_code/lib/presenters/bloc/lang/lang_state.dart new file mode 100644 index 0000000..ab9fcff --- /dev/null +++ b/app_code/lib/presenters/bloc/lang/lang_state.dart @@ -0,0 +1,22 @@ +part of 'lang_bloc.dart'; + +abstract class LangState extends Equatable { + const LangState(); +} + +class LangLoading extends LangState { + @override + List get props => []; +} +class LangSuccess extends LangState { + final Locale locale; + + const LangSuccess({required this.locale}); + @override + List get props => []; +} + +class LangFailed extends LangState { + @override + List get props => []; +} diff --git a/app_code/lib/presenters/cart_presenter.dart b/app_code/lib/presenters/cart_presenter.dart new file mode 100644 index 0000000..4816c68 --- /dev/null +++ b/app_code/lib/presenters/cart_presenter.dart @@ -0,0 +1,83 @@ + +import 'package:flutter/material.dart'; +import 'package:grostore/apis/cart_api.dart'; +import 'package:grostore/apis/order_api.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/custom_classes/system_data.dart'; +import 'package:grostore/custom_ui/toast_ui.dart'; +import 'package:grostore/models/cart_response.dart'; +import 'package:grostore/models/order/order_summery_response.dart'; + +class CartPresenter extends ChangeNotifier{ + static BuildContext? context; + setContext(BuildContext context){ + CartPresenter.context=context; + } + TextEditingController couponTxtController = TextEditingController(); + OrderSummeryResponse orderSummery = OrderSummeryResponse(subTotal: "", tax: "", shippingCharge: "", isFreeShipping:false, couponDiscount: "", total: ""); + + CartResponse cartResponse=CartResponse(result: false, message: '', carts: [], cartCount: 0, subTotal: '0.0', total: "0.0",couponDiscount: ''); + bool isCartResponseFetch=false; + + + fetchCart()async{ + var res = await CartApi.carts(); + if(res.object.result) { + cartResponse = res.object; + isCartResponseFetch=true; + notifyListeners(); + } + } + + addToCart(variantId,qty,BuildContext context)async{ + var res = await CartApi.addToCart(variantId: variantId, qty: qty); + if(res.object.result) { + cartResponse = res.object; + isCartResponseFetch=true; + notifyListeners(); + } + // ToastUi.show(context, res.object.message); + ToastUi.showAdd(context, AppLang.local(context).add_to_cart); + } + + applyCoupon(BuildContext context,code)async{ + var res = await CartApi.couponApply(code:code ); + if(res.object.result) { + SystemData.couponCode=code; + cartResponse = res.object; + isCartResponseFetch=true; + notifyListeners(); + } + ToastUi.show(context, res.object.message); + } + + updateCart({required cartId,required BuildContext context,required String action})async{ + var res = await CartApi.cartUpdate(id: cartId, action: action); + if(res.object.result) { + cartResponse = res.object; + isCartResponseFetch=true; + // ToastUi.show(context, res.object.message); + ToastUi.show(context, AppLang.local(context).update); + notifyListeners(); + } + } + + getOrderSummery({String logistic_zone_id="0"})async{ + var res = await OrderApi.getSummery(logistic_zone_id: logistic_zone_id); + orderSummery =res.object; + notifyListeners(); + } + + clearAll(){ + couponTxtController = TextEditingController(); + orderSummery = OrderSummeryResponse(subTotal: "", tax: "", shippingCharge: "", isFreeShipping:false, couponDiscount: "", total: ""); + cartResponse=CartResponse(result: false, message: '', carts: [], cartCount: 0, subTotal: '0.0', total: "0.0",couponDiscount: ''); + isCartResponseFetch=false; + + } + + init(){ + + } + +} \ No newline at end of file diff --git a/app_code/lib/presenters/categories_presenter.dart b/app_code/lib/presenters/categories_presenter.dart new file mode 100644 index 0000000..b8c6ee9 --- /dev/null +++ b/app_code/lib/presenters/categories_presenter.dart @@ -0,0 +1,69 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/apis/category_api.dart'; +import 'package:grostore/apis/order_api.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/models/common/category_info.dart'; +import 'package:grostore/models/order/orders_response.dart'; +import 'package:grostore/models/category_response.dart'; + +class CategoriesPresenter extends ChangeNotifier { + static BuildContext? context; + + ScrollController scrollController = ScrollController(); + setContext(BuildContext context) { + CategoriesPresenter.context = context; + } + + List categories = []; + int page = 1; + bool isCategoryInit=false; + + getCategories() async { + var response = await CategoryApi.getCategories(page); + print(response.object.data); + if (response.statusCode == 200 && response.object.data.isNotEmpty) { + categories.addAll(response.object.data); + page++; + isCategoryInit=true; + notifyListeners(); + } + + } + + fetchAll() { + getCategories(); + } + + scrollListener(){ + scrollController.addListener(() { + if(scrollController.position.maxScrollExtent <= scrollController.position.pixels){ + getCategories(); + } + }); + } + + clearAll() { + page = 1; + isCategoryInit=false; + categories.clear(); + notifyListeners(); + } + + Future onRefresh()async{ + await clearAll(); + return fetchAll(); + } + + initState() { + onRefresh(); + scrollListener(); + } + + @override + void dispose() { + // TODO: implement dispose + clearAll(); + scrollController.dispose(); + super.dispose(); + } +} diff --git a/app_code/lib/presenters/check_out_presenter.dart b/app_code/lib/presenters/check_out_presenter.dart new file mode 100644 index 0000000..c1484ab --- /dev/null +++ b/app_code/lib/presenters/check_out_presenter.dart @@ -0,0 +1,343 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/api_request.dart'; +import 'package:grostore/apis/order_api.dart'; +import 'package:grostore/apis/user_api.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/custom_classes/system_data.dart'; +import 'package:grostore/custom_ui/loading.dart'; +import 'package:grostore/custom_ui/toast_ui.dart'; +import 'package:grostore/helpers/route.dart'; +import 'package:grostore/models/logistics_response.dart'; +import 'package:grostore/models/order/order_details_response.dart'; +import 'package:grostore/models/order/order_summery_response.dart'; +import 'package:grostore/models/payment_types_response.dart'; +import 'package:grostore/models/time_slote_response.dart'; +import 'package:grostore/models/user/addresses_response.dart'; +import 'package:grostore/presenters/order_presenter.dart'; +import 'package:grostore/screens/main.dart'; +import 'package:grostore/screens/order/order_details.dart'; +import 'package:grostore/screens/order/orders.dart'; +import 'package:grostore/screens/payment.dart'; + +class CheckOutPresenter extends ChangeNotifier { + static BuildContext? context; + + setContext(BuildContext context) { + CheckOutPresenter.context = context; + } + + TextEditingController phoneTxt = TextEditingController(text: SystemData.userInfo.phone); + TextEditingController additionalPhoneTxt = TextEditingController(); + TextEditingController additionalInfoTxt = TextEditingController(); + TextEditingController tipsTxt = TextEditingController(text: "0"); + + int billingAddressId = 0; + AddressInfo selectedShippingAddress = AddressInfo( + id: 0, + userId: 0, + countryId: 0, + countryName: "", + stateId: 0, + stateName: "", + cityId: 0, + cityName: "", + address: "", + isDefault: 0); + + List addresses = []; + List logistics = []; + List paymentTypes = []; + LogisticInfo selectedLogistic = LogisticInfo(id: 0, name: "", logisticId: 0, price: "", image: ""); + PaymentTypesResponse? selectedPaymentMethod; + List timeSlots = []; + TimeSlot? selectedTimeslot; + String paymentType = "Naqd pul"; + + // bool isFetchLogistic= false; + bool isFetchDeliveryAddress = false; + bool isFetchBillingAddress = false; + bool isFetchTimeSlot = false; + + OrderSummeryResponse orderSummeryResponse = OrderSummeryResponse( + subTotal: "", + tax: "", + shippingCharge: "", + isFreeShipping: false, + couponDiscount: "", + total: ""); + + var firstDate; + var lastDate; + DateTime? selectedDate; + String shipping_delivery_type = "regular"; + + fetchAddresses(BuildContext context) async { + var res = await UserApi.getAddresses(); + addresses.clear(); + addresses.addAll(res.data); + if (addresses.isNotEmpty) { + onChangeShippingAddress(addresses.first); + billingAddressId = addresses.first.id; + } + isFetchDeliveryAddress = true; + notifyListeners(); + } + + fetchOrderSummery(id) async { + var res = await OrderApi.getSummery(logistic_zone_id: 2); + orderSummeryResponse = res.object; + notifyListeners(); + } + + fetchLogistic(cityId) async { + var res = await OrderApi.getLogistics(cityId: cityId); + logistics.clear(); + logistics.addAll(res.object.data); + if (logistics.isNotEmpty) { + onChangeLogistic(logistics.last); + } + notifyListeners(); + } + + // fetchPaymentTypes() async { + // var res = await OrderApi.getPaymentTypes(); + // paymentTypes.clear(); + // paymentTypes.addAll(res.object); + // onChangePaymentMethod(paymentTypes.first); + // notifyListeners(); + // } + + fetchTimeSlots() async { + firstDate = DateTime.now(); + lastDate = DateTime(2100); + var response = await OrderApi.getTimeSlot(); + timeSlots.clear(); + timeSlots.addAll(response.object.timeSlots); + selectedTimeslot = timeSlots.first; + // TimeSlot(id: 0, timeline: "1", sortingOrder: ''); + selectedDate = firstDate; + isFetchTimeSlot = true; + notifyListeners(); + } + + onChangeBillingAddress(id) { + billingAddressId = id; + notifyListeners(); + } + + onChangeShippingAddress(AddressInfo info) { + selectedShippingAddress = info; + fetchLogistic(selectedShippingAddress.cityId); + notifyListeners(); + } + + onChangeLogistic(LogisticInfo info) { + selectedLogistic = info; + fetchOrderSummery(info.logisticId); + notifyListeners(); + } + + onChangeTimeSlot(TimeSlot timeSlot) { + selectedTimeslot = timeSlot; + notifyListeners(); + } + + onChangeDate(date) { + selectedDate = date; + notifyListeners(); + } + + onChangeDeliveryType(type) { + shipping_delivery_type = type; + notifyListeners(); + } + + onChangePaymentMethod(PaymentTypesResponse method) { + selectedPaymentMethod = method; + notifyListeners(); + } + + clearAll() { + billingAddressId = 0; + selectedShippingAddress = AddressInfo( + id: 0, + userId: 0, + countryId: 0, + countryName: "", + stateId: 0, + stateName: "", + cityId: 0, + cityName: "", + address: "", + isDefault: 0); + addresses = []; + logistics = []; + paymentTypes = []; + selectedLogistic = LogisticInfo(id: 0, name: "", logisticId: 0, price: "", image: ""); + timeSlots = []; + selectedTimeslot = null; + // bool isFetchLogistic= false; + isFetchDeliveryAddress = false; + isFetchBillingAddress = false; + isFetchTimeSlot = false; + + orderSummeryResponse = OrderSummeryResponse( + subTotal: "", + tax: "", + shippingCharge: "", + isFreeShipping: false, + couponDiscount: "", + total: ""); + + firstDate = null; + lastDate = null; + selectedDate = null; + tipsTxt.text = ""; + shipping_delivery_type = "regular"; + } + + init(context) { + fetchAddresses(context); + fetchTimeSlots(); + // fetchPaymentTypes(); + } + + peyMethod(String pay) { + paymentType = pay; + notifyListeners(); + } + + OrderPresenter ordr = OrderPresenter(); + + _store(BuildContext context) async { + Loading.show(context); + var response = await OrderApi.createOrder( + shippingId: selectedShippingAddress.id, + billingId: billingAddressId, + phone: phoneTxt.text.trim(), + alternativePhone: additionalPhoneTxt.text.trim(), + logisticZoneId: 2, + tips: tipsTxt.text == "" ? "0" : tipsTxt.text.trim(), + shippingDeliveryType: shipping_delivery_type, + timeslot: selectedTimeslot!.id, + scheduledData: selectedDate!.day, + paymentType: paymentType); + Loading.close(); + if (response.object.result) { + SystemData.couponCode = ""; + print("-----------------------"); + print(response.object.result); + print(response.object.orderCode); + print("-----------------------"); + ToastUi.showAdd2(context, "${AppLang.local(context).order_accepted}\nBuyurtma raqami: ${response.object.orderCode}"); + Future.delayed(const Duration(seconds: 1)).then((value) { + MakeRoute.goAndRemoveAll(context, const Main()); + MakeRoute.go( context,OrderDetails(code: response.object.orderCode,)); + }); + // MakeRoute.go(context,Payment( + // code: response.object.orderCode, + // title: selectedPaymentMethod?.name ?? "", + // payment_method: selectedPaymentMethod?.key ?? "")); + // ToastUi.show(context, response.object.message); + } + {} + } + + _byCOD(BuildContext context) async { + Loading.show(context); + var response = await OrderApi.createOrderByCOD( + shippingId: selectedShippingAddress.id, + billingId: billingAddressId, + phone: phoneTxt.text.trim(), + alternativePhone: additionalPhoneTxt.text.trim(), + logisticZoneId: selectedLogistic.logisticId, + tips: tipsTxt.text.trim(), + shippingDeliveryType: shipping_delivery_type, + timeslot: selectedTimeslot!.id, + scheduledData: selectedDate!.microsecond); + Loading.close(); + if (response.object.result) { + SystemData.couponCode = ""; + MakeRoute.go( + context, + Orders( + fromBottomBar: false, + fromCheckOut: true, + )); + } + ToastUi.show(context, response.object.message); + } + + _byWallet(BuildContext context) async { + Loading.show(context); + var response = await OrderApi.createOrderByCOD( + shippingId: selectedShippingAddress.id, + billingId: billingAddressId, + phone: phoneTxt.text.trim(), + alternativePhone: additionalPhoneTxt.text.trim(), + logisticZoneId: selectedLogistic.logisticId, + tips: tipsTxt.text.trim(), + shippingDeliveryType: shipping_delivery_type, + timeslot: selectedTimeslot!.id, + scheduledData: selectedDate!.microsecond); + Loading.close(); + if (response.object.result) { + SystemData.couponCode = ""; + MakeRoute.go( + context, + Orders( + fromBottomBar: false, + fromCheckOut: true, + )); + } + ToastUi.show(context, response.object.message); + } + + placeOrder(BuildContext context) async { + if (selectedLogistic.id == 0) { + ToastUi.show(context, "Logistic not founded!"); + return; + } + _store(context); + + // if (selectedPaymentMethod!.key == "cod") { + // _byCOD(context); + // return; + // } + // if (selectedPaymentMethod!.key == "wallet") { + // _byWallet(context); + // return; + // } + + // if (selectedPaymentMethod!.key == "paypal" || + // selectedPaymentMethod!.key == "stripe" || + // selectedPaymentMethod!.key == "paytm" || + // selectedPaymentMethod!.key == "razorpay" || + // selectedPaymentMethod!.key == "iyzico") { + + // return; + // } + // ToastUi.show(context, "Not implemented Payment Method"); + } + +// createOrder(BuildContext context) async { +// final tips = tipsTxt.text.trim(); +// +// +// final response = await OrderApi.createOrder( +// shippingId: selectedShippingAddress.id, +// billingId: billingAddressId, +// phone: phoneTxt.text.trim(), +// alternativePhone: additionalPhoneTxt.text.trim(), +// logisticZoneId: selectedLogistic.logisticId, +// tips: tips, +// shippingDeliveryType: onChangeDeliveryType, +// timeslot: timeSlots, +// scheduledData: selectedDate!.microsecond); +// if(response.statusCode == 200 || response.statusCode == 201){ +// MakeRoute.go(context, Orders(fromBottomBar: false, fromCheckOut: true,)); +// }else{ +// ToastUi.show(context, response.object.message); +// } +// } +} diff --git a/app_code/lib/presenters/coupon_presenter.dart b/app_code/lib/presenters/coupon_presenter.dart new file mode 100644 index 0000000..a3cdb90 --- /dev/null +++ b/app_code/lib/presenters/coupon_presenter.dart @@ -0,0 +1,59 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_countdown_timer/countdown_timer_controller.dart'; +import 'package:grostore/apis/coupons_api.dart'; +import 'package:grostore/apis/order_api.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/models/coupon_response.dart'; +import 'package:grostore/models/order/orders_response.dart'; + +class CouponPresenter extends ChangeNotifier { + static BuildContext? context; + List controller=[]; + setContext(BuildContext context) { + CouponPresenter.context = context; + } + + List coupons = []; + bool isCouponsInit = false; + + DateTime convertTimeStampToDateTime(int timeStamp) { + var dateToTimeStamp = DateTime.fromMillisecondsSinceEpoch(timeStamp * 1000); + return dateToTimeStamp; + } + + + getCoupons() async { + var response = await CouponsApi.getCoupons(); + if (response.statusCode == 200) { + coupons.addAll(response.object.data); + isCouponsInit=true; + coupons.forEach((element) { + + DateTime end = convertTimeStampToDateTime( + int.parse(element.endDate)); // YYYY-mm-dd + DateTime now = DateTime.now(); + int diff = end.difference(now).inMilliseconds; + int endTime = diff + now.millisecondsSinceEpoch; + + + print(element.endDate); + controller.add( CountdownTimerController(endTime:endTime , onEnd: (){})); + }); + notifyListeners(); + } + } + + fetchAll() { + getCoupons(); + } + + clearAll() { + isCouponsInit=false; + coupons.clear(); + } + + initState() { + clearAll(); + fetchAll(); + } +} diff --git a/app_code/lib/presenters/filter_presenter.dart b/app_code/lib/presenters/filter_presenter.dart new file mode 100644 index 0000000..9c7883b --- /dev/null +++ b/app_code/lib/presenters/filter_presenter.dart @@ -0,0 +1,177 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/apis/category_api.dart'; +import 'package:grostore/apis/order_api.dart'; +import 'package:grostore/apis/product_api.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/custom_ui/loading.dart'; +import 'package:grostore/custom_ui/toast_ui.dart'; +import 'package:grostore/models/common/category_info.dart'; +import 'package:grostore/models/order/orders_response.dart'; +import 'package:grostore/models/category_response.dart'; +import 'package:grostore/models/product_mini_response.dart'; + +class FilterPresenter extends ChangeNotifier { + static BuildContext? context; + + ScrollController scrollController = ScrollController(); + TextEditingController searchTxt = TextEditingController(); + + setContext(BuildContext context) { + FilterPresenter.context = context; + } + + int page = 1; + int page2 = 1; + int selectedCategoryId = 0; + bool isCategoryInit = false; + List categories = []; + List products = []; + + RangeValues price=RangeValues(0, 5); + +//fetch data + getCategories() async { + var response = await CategoryApi.getCategories(page); + if (response.statusCode == 200 && response.object.data.isNotEmpty) { + categories.addAll(response.object.data); + page++; + isCategoryInit = true; + notifyListeners(); + } + } + + + getFilteredProducts() async { + // products.clear(); + Loading.show(FilterPresenter.context!); + var productResponse = await ProductApi.getAllProducts( + page: page2, + categoryId: selectedCategoryId==0?'':selectedCategoryId.toString(), + // min_price: price.start==0?'':price.start.round().toString(), + // max_price: price.end==0?'':price.end.round().toString(), + // search: searchTxt.text.isEmpty?'':searchTxt.text.trim().toString() + ); + Loading.close(); + page2++; + if(productResponse.statusCode == 200) { + products.addAll(productResponse.object.data); + notifyListeners(); + if(products.isEmpty) { + ToastUi.show(context!, AppLang.local(context!).data_is_not_available); + } + notifyListeners(); + }else{ + ToastUi.show(context!, AppLang.local(context!).something_went_wrong); + } + } + + getProducts() async { + var productResponse = await ProductApi.getAllProducts( + page:page, + categoryId: selectedCategoryId==0?'':selectedCategoryId.toString(), + // min_price: price.start==0?'':price.start.round().toString(), + // max_price: price.end==0?'':price.end.round().toString(), + // search: searchTxt.text.isEmpty?'':searchTxt.text.trim().toString() + ); + + if (productResponse.statusCode == 200) { + if (productResponse.object.data.isEmpty && page > 1) { + ToastUi.simpleToast( + context!, AppLang.local(context!).no_more_data); + return; + } + page++; + print(productResponse.object.data.length); + // isAllProductInitial = true; + products.addAll(productResponse.object.data); + notifyListeners(); + } else { + ToastUi.simpleToast(context!, AppLang.local(context!).something_went_wrong); + } + } + + + clearCategory(){ + selectedCategoryId=0; + notifyListeners(); + } + clearPriceRange(){ + price=RangeValues(0, 0); + notifyListeners(); + } + clearKeyWord(){ + searchTxt.clear(); + notifyListeners(); + } + +//handlers + Future onRefresh() async { + await clearAll(); + await fetchAll(); + return; + } + + onSelectCategory(id) { + selectedCategoryId = int.parse(id.toString()); + notifyListeners(); + } + onChangePrice(newPrice) { + price = newPrice; + + notifyListeners(); + } + + //others + scrollListener() { + scrollController.addListener(() { + if (scrollController.position.maxScrollExtent == + scrollController.position.pixels) { + // getCategories(); + getProducts(); + } + }); + } + + clearAll() { + page = 1; + isCategoryInit = false; + categories.clear(); + products = []; + price=const RangeValues(0, 1); + searchTxt.text = ""; + + notifyListeners(); + } + + fetchAll() { + // getCategories(); + getProducts(); + } + + initState() { + clearAll(); + scrollListener(); + fetchAll(); + getProducts(); + } + setInitData({searchKey, + sort_by, + max_price, + min_price, + category_id, + tag_id, + per_page}){ + + selectedCategoryId=int.parse((category_id??"0").toString()); + price= RangeValues(double.parse((min_price??0.0).toString()), double.parse((max_price??0.0).toString())); + getProducts(); + + } + + @override + void dispose() { + clearAll(); + scrollController.dispose(); + super.dispose(); + } +} diff --git a/app_code/lib/presenters/help_center_presenter.dart b/app_code/lib/presenters/help_center_presenter.dart new file mode 100644 index 0000000..ee76172 --- /dev/null +++ b/app_code/lib/presenters/help_center_presenter.dart @@ -0,0 +1,31 @@ + + + +import 'package:flutter/cupertino.dart'; +import 'package:grostore/apis/setting_api.dart'; +import 'package:grostore/models/help_center_response.dart'; + +class HelpCenterPresenter extends ChangeNotifier{ + + HelpCenterResponse? helpCenter; + + + getData()async{ + var response = await SettingApi.getHelpCenter(); + helpCenter=response.object; + notifyListeners(); + } + + initState(){ + getData(); + } + + Future onRefresh()async{ + clear(); + return getData(); + } + clear(){ + helpCenter=null; + } + +} \ No newline at end of file diff --git a/app_code/lib/presenters/home_presenter.dart b/app_code/lib/presenters/home_presenter.dart new file mode 100644 index 0000000..09f6d21 --- /dev/null +++ b/app_code/lib/presenters/home_presenter.dart @@ -0,0 +1,167 @@ +import 'package:cached_network_image/cached_network_image.dart'; +import 'package:carousel_slider/carousel_controller.dart'; +import 'package:grostore/apis/banners_api.dart'; +import 'package:grostore/apis/category_api.dart'; +import 'package:grostore/apis/product_api.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/custom_ui/Button.dart'; +import 'package:grostore/custom_ui/Image_view.dart'; +import 'package:grostore/custom_ui/toast_ui.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; +import 'package:grostore/models/common/category_info.dart'; +import 'package:grostore/models/home_banner_response.dart'; +import 'package:grostore/models/product_mini_response.dart'; +import 'package:grostore/models/category_response.dart'; +import 'package:provider/provider.dart'; +import 'package:flutter/material.dart'; + +class HomePresenter extends ChangeNotifier { + static BuildContext? context; + + setContext(BuildContext context) { + HomePresenter.context = context; + } + + int currentSlider = 0; + + List homeBannerImages = []; + List topCategoryList = []; + List bestSellingProductList = []; + List products = []; + int page = 1; + + bool isTopCategoryInitial = false; + bool isHomeBannerInitial = false; + bool isBestSellingProductInitial = false; + bool isAllProductInitial = false; + ScrollController homeScrollController = ScrollController(); + + fetchAll() { + getProducts(); + fetchBannerImages(); + fetchTopCategories(); + fetBestSellingProducts(); + } + + Widget bannerImageSimple(BannerData data) { + return Container( + margin: EdgeInsets.symmetric(horizontal: 5), + child: Button( + minWidth: getWidth(context), + onPressed: () {}, + child: ImageView( + url: data.image, + width: getWidth(context), + height: 200, + fit: BoxFit.cover, + ), + ), + ); + } + + getProducts() async { + var productResponse = await ProductApi.getAllProducts(page: page); + + if (productResponse.statusCode == 200) { + if (productResponse.object.data.isEmpty && page > 1) { + ToastUi.simpleToast( + context!, AppLang.local(context!).no_more_data); + return; + } + page++; + print(productResponse.object.data.length); + isAllProductInitial = true; + products.addAll(productResponse.object.data); + notifyListeners(); + } else { + ToastUi.simpleToast(context!, AppLang.local(context!).something_went_wrong); + } + } + + onChangeBannerIndex(index) { + currentSlider = index; + notifyListeners(); + } + + fetchBannerImages() async { + homeBannerImages = []; + var bannerOneResponse = await BannersApi.homeBanner(context!); + if (bannerOneResponse.statusCode == 200) { + bannerOneResponse.object.data.forEach((slider) { + homeBannerImages.add(bannerImageSimple(slider)); + }); + isHomeBannerInitial = true; + + notifyListeners(); + } + } + + fetchTopCategories() async { + var categoryResponse = await CategoryApi.topCategory(); + if (categoryResponse.statusCode == 200) { + topCategoryList.addAll(categoryResponse.object.data); + isTopCategoryInitial = true; + notifyListeners(); + } + } + + fetBestSellingProducts() async { + var productResponse = await ProductApi.bestSelling(context!); + + if (productResponse.statusCode == 200) { + bestSellingProductList.addAll(productResponse.object.data); + isBestSellingProductInitial = true; + notifyListeners(); + } else { + ToastUi.show(context!, AppLang.local(context!).something_went_wrong); + } + } + + reset() { + page=1; + currentSlider = 0; + homeBannerImages = []; + topCategoryList = []; + bestSellingProductList = []; + products.clear(); + isAllProductInitial = false; + isTopCategoryInitial = false; + isHomeBannerInitial = false; + isBestSellingProductInitial = false; + } + + Future onRefresh() async { + reset(); + fetchAll(); + } + + changeCurrentSlider(index) { + currentSlider = index; + notifyListeners(); + } + + mainScrollListener(BuildContext context) { + homeScrollController.addListener(() { + //print("position: " + xcrollController.position.pixels.toString()); + //print("max: " + xcrollController.position.maxScrollExtent.toString()); + + if (homeScrollController.position.pixels == + homeScrollController.position.maxScrollExtent) { + ToastUi.simpleToast(context, "Loading more..."); + getProducts(); + } + }); + } + + initState(BuildContext context) { + mainScrollListener(context); + reset(); + fetchAll(); + } + + @override + void dispose() { + super.dispose(); + reset(); + } +} diff --git a/app_code/lib/presenters/landing_page_presenter.dart b/app_code/lib/presenters/landing_page_presenter.dart new file mode 100644 index 0000000..b3b7d85 --- /dev/null +++ b/app_code/lib/presenters/landing_page_presenter.dart @@ -0,0 +1,50 @@ + +import 'package:carousel_slider/carousel_controller.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/screens/landing_pages/auth_model.dart'; +import 'package:grostore/screens/landing_pages/page_model.dart'; + +class LandingPagePresenter extends ChangeNotifier{ + int currentIndex = 0; + List pages = []; + static BuildContext? context; + CarouselSliderController controller =CarouselSliderController(); + setContext(BuildContext context){ + LandingPagePresenter.context??=context; + } + iniState(){ + if(pages.isEmpty) { + pages.addAll([ + PageModel( + img: "landing_img1.png", + headerTxt: AppLang.local(context!) + .welcome_to_online_fresh_food_grocery_application, + txt: AppLang.local(context!) + .energetically_streamline_one_to_one_web_readiness_before_extensive_meta_services), + PageModel( + img: "landing_img2.png", + headerTxt: AppLang.local(context!) + .welcome_to_online_fresh_food_grocery_application, + txt: AppLang.local(context!) + .energetically_streamline_one_to_one_web_readiness_before_extensive_meta_services), + PageModel( + img: "landing_img3.png", + headerTxt: AppLang.local(context!).welcome_to_online_fresh_food_grocery_application, + txt: AppLang.local(context!) + .energetically_streamline_one_to_one_web_readiness_before_extensive_meta_services), + const AuthPageModel(), + ]); + } + } + + indexChange(index){ + currentIndex=index; + notifyListeners(); + } + onChangeSlider(){ + controller.nextPage(); + notifyListeners(); + } + +} \ No newline at end of file diff --git a/app_code/lib/presenters/main_persenter.dart b/app_code/lib/presenters/main_persenter.dart new file mode 100644 index 0000000..5cb6932 --- /dev/null +++ b/app_code/lib/presenters/main_persenter.dart @@ -0,0 +1,53 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/custom_classes/system_data.dart'; +import 'package:grostore/helpers/shared_value_helper.dart'; +import 'package:grostore/screens/auth/login.dart'; +import 'package:grostore/screens/categories.dart'; +import 'package:grostore/screens/home.dart'; +import 'package:grostore/screens/order/orders.dart'; +import 'package:grostore/screens/profile.dart'; +import 'package:route_transitions/route_transitions.dart'; + +class MainPresenter extends ChangeNotifier { + static BuildContext? context; + + setContext(BuildContext context) { + MainPresenter.context = context; + } + + int bottomAppbarIndex = 0; + + // BottomAppbarIndex bottomAppbarIndex = BottomAppbarIndex(); + + var bottomAppbarChildren = [Home(), Categories(), Orders(), Account()]; + + fetchAll() { + getCartCount(); + } + + void onTapped(int i) { + if ((i == 2)) { + if ((!SystemData.isLogIn)) { + Navigator.push( + context!, MaterialPageRoute(builder: (context) => Login())); + return; + } + } + + if (i == 3) { + language_is_rtl.$ + ? slideLeftWidget(newPage: Account(), context: context!) + : slideRightWidget(newPage: Account(), context: context!); + return; + } + + bottomAppbarIndex = i; + + notifyListeners(); + //print("i$i"); + } + + getCartCount() async { + // Provider.of(context, listen: false).getCount(); + } +} diff --git a/app_code/lib/presenters/order_details_presenter.dart b/app_code/lib/presenters/order_details_presenter.dart new file mode 100644 index 0000000..0994ba1 --- /dev/null +++ b/app_code/lib/presenters/order_details_presenter.dart @@ -0,0 +1,49 @@ + + +import 'package:flutter/cupertino.dart'; +import 'package:grostore/apis/order_api.dart'; +import 'package:grostore/models/order/order_details_response.dart'; + +class OrderDetailsPresenter extends ChangeNotifier{ + static BuildContext? context; + + setContext(BuildContext context) { + OrderDetailsPresenter.context = context; + } + + bool isInitDetails = false; + OrderDetailsInfo? orderInfo ; +static var orderCode= 0; + + + getDetails(code) async { + print(code); + var response = await OrderApi.getDetails(code:code); + if (response.statusCode == 200) { + orderInfo=response.object.data; + isInitDetails = true; + notifyListeners(); + } + } + + fetchAll(code) async { + getDetails(code); + } + + FutureonRefresh(code) { + clearAll(); + return fetchAll(code); + } + + clearAll() { + orderInfo=null; + isInitDetails = false; + notifyListeners(); + } + + initState(code) { + fetchAll(code); + orderCode = code; + notifyListeners(); + } +} \ No newline at end of file diff --git a/app_code/lib/presenters/order_presenter.dart b/app_code/lib/presenters/order_presenter.dart new file mode 100644 index 0000000..8639615 --- /dev/null +++ b/app_code/lib/presenters/order_presenter.dart @@ -0,0 +1,90 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/apis/order_api.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/custom_ui/loading.dart'; +import 'package:grostore/models/order/order_details_response.dart'; +import 'package:grostore/models/order/orders_response.dart'; +import 'package:grostore/models/order/track_order_response.dart'; + +class OrderPresenter extends ChangeNotifier { + static BuildContext? context; + + setContext(BuildContext context) { + OrderPresenter.context = context; + } + + Map searchKey = {}; + int keySelectedIndex = 0; + bool isOrdersInit = false; + List orders = []; + int page = 1; + + TrackInfo? trackInfo; + + TextEditingController trackOrderController = TextEditingController(); + + insetSearchKeys() { + searchKey = { + "all": AppLang.local(context!).all_order, + "order_placed": AppLang.local(context!).pending, + "processing": AppLang.local(context!).processing, + "delivered": AppLang.local(context!).delivered, + "cancelled": AppLang.local(context!).cancelled, + }; + notifyListeners(); + } + + getOrders() async { + var response = await OrderApi.getOrders(searchKey.keys.elementAt(keySelectedIndex), page); + if (response.statusCode == 200) { + orders.addAll(response.object.data); + page++; + isOrdersInit = true; + notifyListeners(); + } + } + + + trackOrder(id,BuildContext context) async { + Loading.show(context); + var response = await OrderApi.trackOrder(id); + Loading.close(); + if (response.statusCode == 200) { + trackInfo=response.object.data; + notifyListeners(); + } + } + + onChangeIndex(int index) { + if (index != keySelectedIndex) { + keySelectedIndex = index; + orders.clear(); + page = 1; + isOrdersInit = false; + notifyListeners(); + getOrders(); + } + } + + fetchAll() async { + getOrders(); + } + + onRefresh() { + clearAll(); + return fetchAll(); + } + + clearAll() { + page = 1; + orders.clear(); + keySelectedIndex = 0; + isOrdersInit = false; + notifyListeners(); + } + + initState() { + insetSearchKeys(); + fetchAll(); + } +} diff --git a/app_code/lib/presenters/page_presenter.dart b/app_code/lib/presenters/page_presenter.dart new file mode 100644 index 0000000..805a525 --- /dev/null +++ b/app_code/lib/presenters/page_presenter.dart @@ -0,0 +1,103 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/apis/order_api.dart'; +import 'package:grostore/apis/page_api.dart'; +import 'package:grostore/apis/refund_api.dart'; +import 'package:grostore/apis/wallet_api.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/models/order/orders_response.dart'; +import 'package:grostore/models/page_response.dart'; +import 'package:grostore/models/refund_response.dart'; +import 'package:grostore/models/wallet_history_response.dart'; +import 'package:webview_flutter/webview_flutter.dart'; + +class PagePresenter extends ChangeNotifier { + static BuildContext? context; + + setContext(BuildContext context) { + PagePresenter.context = context; + } + + bool isInitPageInfo = false; + PageInfo? pageInfo; + + WebViewController controller = WebViewController() + ..setJavaScriptMode(JavaScriptMode.unrestricted); + + getRefundHistory(slug) async { + var response = await PageApi.getPage(slug: slug); + if (response.statusCode == 200) { + pageInfo = response.object.data; + + controller.loadHtmlString(htmlBody(response.object.data.content)); + isInitPageInfo = true; + notifyListeners(); + } + } + + String htmlBody(htmlCode) { + return """ + + + + + Title of the document + + + + +
+$htmlCode +
+ + + +"""; + } + + fetchAll(slug) async { + getRefundHistory(slug); + } + + Future onRefresh(slug) { + clearAll(); + return fetchAll(slug); + } + + clearAll() { + pageInfo = null; + isInitPageInfo = false; + notifyListeners(); + } + + initState(slug) { + fetchAll(slug); + } +} diff --git a/app_code/lib/presenters/payment_presenter.dart b/app_code/lib/presenters/payment_presenter.dart new file mode 100644 index 0000000..2e0a84d --- /dev/null +++ b/app_code/lib/presenters/payment_presenter.dart @@ -0,0 +1,38 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/apis/order_api.dart'; +import 'package:grostore/apis/page_api.dart'; +import 'package:grostore/apis/refund_api.dart'; +import 'package:grostore/apis/wallet_api.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/configs/app_config.dart'; +import 'package:grostore/helpers/shared_value_helper.dart'; +import 'package:grostore/models/order/orders_response.dart'; +import 'package:grostore/models/page_response.dart'; +import 'package:grostore/models/refund_response.dart'; +import 'package:grostore/models/wallet_history_response.dart'; +import 'package:webview_flutter/webview_flutter.dart'; + +class PaymentPresenter extends ChangeNotifier { + static BuildContext? context; + + setContext(BuildContext context) { + PaymentPresenter.context = context; + } + + WebViewController controller = WebViewController() + ..setJavaScriptMode(JavaScriptMode.unrestricted); + + loadUrl(code, method) async { + controller.loadRequest( + Uri.parse( + "${AppConfig.apiUrl}/order/online-payment?code=$code&payment_method=$method"), + headers: {"Authorization": "Bearer ${access_token.$}"}); + + notifyListeners(); + + + } + initState(code, method) { + loadUrl(code, method); + } +} diff --git a/app_code/lib/presenters/product_details_presenter.dart b/app_code/lib/presenters/product_details_presenter.dart new file mode 100644 index 0000000..ed6aefe --- /dev/null +++ b/app_code/lib/presenters/product_details_presenter.dart @@ -0,0 +1,175 @@ +import 'package:cached_network_image/cached_network_image.dart'; +import 'package:carousel_slider/carousel_controller.dart'; +import 'package:grostore/apis/banners_api.dart'; +import 'package:grostore/apis/category_api.dart'; +import 'package:grostore/apis/product_api.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/custom_classes/product_variation_data.dart'; +import 'package:grostore/custom_classes/system_data.dart'; +import 'package:grostore/custom_ui/Button.dart'; +import 'package:grostore/custom_ui/Image_view.dart'; +import 'package:grostore/custom_ui/toast_ui.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; +import 'package:grostore/models/common/category_info.dart'; +import 'package:grostore/models/home_banner_response.dart'; +import 'package:grostore/models/product_details_response.dart'; +import 'package:grostore/models/product_mini_response.dart'; +import 'package:grostore/models/category_response.dart'; +import 'package:grostore/presenters/wishlist_presenter.dart'; +import 'package:provider/provider.dart'; +import 'package:flutter/material.dart'; + +class ProductDetailsPresenter extends ChangeNotifier { + static BuildContext? context; + + setContext(BuildContext context) { + ProductDetailsPresenter.context = context; + } + + String slug = ""; + int currentSlider = 0, quantity = 1; + Variation? selectedVariation; + + + // ScrollController mainScrollController = ScrollController(); + ProductDetailsInfo? productInfo; + List relatedProducts = []; + List variations = []; + + bool isProductInfoInitial = false; + bool isRelatedInitial = false; + + fetchAll(String slug) { + this.slug = slug; + reset(); + fetchProductInfo(slug); + fetchRelatedProduct(slug); + } + + onChangeBannerIndex(index) { + currentSlider = index; + notifyListeners(); + } + + incrementQty() { + if (selectedVariation != null && selectedVariation!.sock > quantity) { + quantity++; + notifyListeners(); + }else{ + ToastUi.show(context!, AppLang.local(context!).product_stock_not_available); + } + + } + + decrementQty() { + if (1 < quantity) { + quantity--; + notifyListeners(); + } + } + + fetchProductInfo(String slug) async { + var response = await ProductApi.details(context!, slug); + if(response.statusCode==200){ + productInfo = response.object.data; + if(SystemData.isLogIn) { + Provider.of(context!,listen: false).checkWishlist(productInfo!.id); + + } + isProductInfoInitial = true; + selectedVariation = productInfo!.variations.first; + productInfo!.variationMaterials.forEach((element) { + List value = []; + element.values.forEach((valueElement) { + var code; + if (valueElement.code != null) { + code = + "0xFF" + valueElement.code!.replaceAll("#", "").toUpperCase(); + } + value.add(ProductVariationValue( + id: valueElement.id, + isChosen: false, + name: valueElement.name, + code: code)); + }); + if (value.isNotEmpty) { + value.first.isChosen = true; + } + variations.add(ProductVariationData( + id: element.id, name: element.name, values: value)); + }); + notifyListeners(); + }else{ + _toastMessage(); + } + } + + _toastMessage(){ + ToastUi.show(context!, AppLang.local(context!).something_went_wrong); + } + + onChangeVariation(int variationIndex, int valueIndex) { + int previousIndex = variations[variationIndex] + .values + .indexWhere((element) => element.isChosen); + variations[variationIndex].values[previousIndex].isChosen = false; + variations[variationIndex].values[valueIndex].isChosen = true; + var variation_key = ""; + variations.forEach((element) { + element.values.forEach((variationValue) { + if (variationValue.isChosen) { + variation_key += "${element.id}:${variationValue.id}/"; + } + }); + }); + + selectedVariation = productInfo!.variations + .firstWhere((element) => element.variationKey == variation_key); + notifyListeners(); + } + + fetchRelatedProduct(slug) async { + var response = await ProductApi.relatedProducts(context!, slug); + if(response.statusCode==200){ + relatedProducts.addAll(response.object.data); + isRelatedInitial = true; + notifyListeners(); + }else{ + _toastMessage(); + } + } + + fetBestSellingProducts() async { + notifyListeners(); + } + + reset() { + currentSlider = 0; + quantity = 1; + // ScrollController mainScrollController = ScrollController(); + productInfo = null; + relatedProducts = []; + variations = []; + + isProductInfoInitial = false; + isRelatedInitial = false; + + notifyListeners(); + } + + Future onRefresh() async { + reset(); + return fetchAll(slug); + } + + changeCurrentSlider(index) { + currentSlider = index; + notifyListeners(); + } + + iniState(slug) { + reset(); + fetchAll(slug); + } + +} diff --git a/app_code/lib/presenters/refund_presenter.dart b/app_code/lib/presenters/refund_presenter.dart new file mode 100644 index 0000000..5b4c031 --- /dev/null +++ b/app_code/lib/presenters/refund_presenter.dart @@ -0,0 +1,63 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/apis/order_api.dart'; +import 'package:grostore/apis/refund_api.dart'; +import 'package:grostore/apis/wallet_api.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/custom_ui/loading.dart'; +import 'package:grostore/custom_ui/toast_ui.dart'; +import 'package:grostore/models/order/orders_response.dart'; +import 'package:grostore/models/refund_response.dart'; +import 'package:grostore/models/wallet_history_response.dart'; +import 'package:grostore/presenters/order_details_presenter.dart'; +import 'package:provider/provider.dart'; + +class RefundPresenter extends ChangeNotifier { + static BuildContext? context; + + setContext(BuildContext context) { + RefundPresenter.context = context; + } + + bool isRefundInit = false; + List refundHistory = []; + int page = 1; + + + getRefundHistory() async { + var response = await RefundApi.getRefundHistory(page); + if (response.statusCode == 200) { + refundHistory.addAll(response.object.data); + page++; + isRefundInit = true; + notifyListeners(); + } + } + Future refundReq(BuildContext context,id,reason) async { + Loading.show(context); + var response = await RefundApi.refundRequest(id,reason); + Loading.close(); + ToastUi.show(context, response.object.message); + return response.object.result; + } + + fetchAll() async { + getRefundHistory(); + } + + FutureonRefresh() { + clearAll(); + return fetchAll(); + } + + clearAll() { + page = 1; + refundHistory.clear(); + isRefundInit = false; + notifyListeners(); + } + + initState() { + clearAll(); + fetchAll(); + } +} diff --git a/app_code/lib/presenters/setting_presenter.dart b/app_code/lib/presenters/setting_presenter.dart new file mode 100644 index 0000000..eeccff5 --- /dev/null +++ b/app_code/lib/presenters/setting_presenter.dart @@ -0,0 +1,83 @@ + +import 'package:flutter/cupertino.dart'; +import 'package:grostore/apis/currency_api.dart'; +import 'package:grostore/apis/language_api.dart'; +import 'package:grostore/custom_classes/system_data.dart'; +import 'package:grostore/models/currency_response.dart'; +import 'package:grostore/models/language_response.dart'; + +import '../helpers/shared_value_helper.dart'; + +class SettingPresenter extends ChangeNotifier{ + + + + Locale _locale=Locale(app_language.$,''); + + List currencyList=[]; + List languageList=[]; + LanguageInfo? selectedLanguage ; + CurrencyInfo? selectedCurrency ; + + fetchCurrencyListData()async{ + currencyList.clear(); + var res = await CurrencyApi().getList(); + + currencyList.addAll(res.object.data); + + print("Currency"); + currencyList.forEach((element) { + if(system_currency.$.isEmpty && element.isDefault){ + print("Currency isDefault"); + onChange(element); + }else + if(system_currency.$.isNotEmpty && element.code == system_currency.$){ + print("Currency not isDefault"); + print(element.toJson()); + onChange(element); + } + }); + + notifyListeners(); + } + + fetchLanguageListData()async{ + languageList.clear(); + var res = await LanguageApi.getLanguages(); + languageList.addAll(res.object.data); + languageList.forEach((element) { + if(app_language.$ == element.code){ + selectedLanguage = element; + } + }); + notifyListeners(); + } + + onChange(CurrencyInfo currency){ + if(currency!=null) { + selectedCurrency = currency; + // SystemData.systemCurrency = currency; + system_currency.$ = currency.code; + system_currency.save(); + notifyListeners(); + } + } + + Locale get locale { + //print("app_mobile_language.isEmpty${app_mobile_language.$.isEmpty}"); + return _locale ; + } + + void setLocale(LanguageInfo languageInfo){ + _locale = Locale(languageInfo.code,''); + selectedLanguage= languageInfo; + notifyListeners(); + } + + + initState(){ + fetchCurrencyListData(); + fetchLanguageListData(); + } + +} \ No newline at end of file diff --git a/app_code/lib/presenters/stock_locations_presenter.dart b/app_code/lib/presenters/stock_locations_presenter.dart new file mode 100644 index 0000000..dc22b0c --- /dev/null +++ b/app_code/lib/presenters/stock_locations_presenter.dart @@ -0,0 +1,58 @@ + + + +import 'package:flutter/cupertino.dart'; +import 'package:grostore/apis/locations_api.dart'; +import 'package:grostore/helpers/shared_value_helper.dart'; +import 'package:grostore/models/locations_response.dart'; + +class StockLocationsPresenter extends ChangeNotifier{ + static BuildContext? context; + setContext(BuildContext context){ + StockLocationsPresenter.context=context; + } + + List locations=[]; + bool isLocationInit=false; + int selectedIndex=0; + + + fetchLocations(BuildContext context) async { + locations =[]; + var res = await LocationApi.getLocations(context); + locations.addAll(res.object.data); + isLocationInit = true; + await stock_location_id.load(); + if(stock_location_id.$.isEmpty){ + locations.forEach((element) { + if(element.isDefault) { + stock_location_id.$ = element.id.toString(); + } + }); + } + + notifyListeners(); + } + + onchange(id){ + stock_location_id.$=id.toString(); + notifyListeners(); + } + + cleanAll(){ + locations=[]; + isLocationInit=false; + } + + initState(){ + cleanAll(); + fetchLocations(context!); + } + + Future onRefresh(){ + cleanAll(); + fetchLocations(context!); + return Future.delayed(Duration.zero); + } + +} \ No newline at end of file diff --git a/app_code/lib/presenters/user_presenter.dart b/app_code/lib/presenters/user_presenter.dart new file mode 100644 index 0000000..ebac153 --- /dev/null +++ b/app_code/lib/presenters/user_presenter.dart @@ -0,0 +1,156 @@ +import 'dart:convert'; +import 'dart:developer' show log; +import 'dart:io'; + +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:grostore/apis/user_api.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/custom_classes/system_data.dart'; +import 'package:grostore/custom_ui/loading.dart'; +import 'package:grostore/custom_ui/toast_ui.dart'; +import 'package:grostore/helpers/route.dart'; +import 'package:grostore/models/user/addresses_response.dart'; +import 'package:grostore/screens/main.dart'; +import 'package:grostore/screens/profile.dart'; +import 'package:image_picker/image_picker.dart'; + +class UserPresenter extends ChangeNotifier { + static BuildContext? context; + + setContext(BuildContext context) { + UserPresenter.context = context; + } + + List addresses = []; + bool isFetchAddress = false; + final TextEditingController nameController = + TextEditingController(text: SystemData.userInfo.name); + + final TextEditingController phoneController = + TextEditingController(text: SystemData.userInfo.phone); + + TextEditingController emailController = + TextEditingController(text: SystemData.userInfo.name); + TextEditingController passwordController = TextEditingController(); + TextEditingController passwordConfirmController = TextEditingController(); + + bool showPassword = false; + bool showConfirmPassword = false; + + //for image uploading + final ImagePicker _picker = ImagePicker(); + XFile? file; + + chooseAndUploadImage(context) async { + final fileX = await _picker.pickImage(source: ImageSource.gallery); + final bytes = await fileX?.length() ?? 0; + final size = bytes / (1024 * 1024); + + if (size < 1) { + file = fileX; + notifyListeners(); + } else { + ToastUi.show3(context, AppLang.local(context).image_mustbe_less_1_mb); + } + } + + Future _onPageRefresh() async {} + + onPressUpdate(BuildContext context) async { + var name = nameController.text.toString(); + var phone = phoneController.text.toString(); + File? tmpFile; + if (file != null) { + tmpFile = File(file!.path); + final bytes = await file?.length() ?? 0; + log("Image size=====>>>>>>>>>>>>>>>"); + log("${(bytes) / (1024 * 1024)}"); + } + + Loading.show(context); + var response = + await UserApi.updateProfile(file: tmpFile, name: name, phone: phone); + Loading.close(); + ToastUi.show(context, response.object.message); + if (response.object.result) { + SystemData.userInfo.name = name; + SystemData.userInfo.phone = phone; + Navigator.of(context).pop(); + Navigator.of(context).pop(); + + //MakeRoute.goAndRemoveAll(context, Account()); + } + } + + onPressUpdatePassword(BuildContext context) async { + var password = passwordController.text.toString(); + var password_confirm = passwordConfirmController.text.toString(); + + var change_password = password != "" || + password_confirm != + ""; // if both fields are empty we will not change user's password + + if (!change_password && password == "") { + ToastUi.show(context, "Password is empty"); + return; + } + if (!change_password && password_confirm == "") { + ToastUi.show(context, "Confirm Password is empty"); + return; + } + if (change_password && password.length < 6) { + ToastUi.show( + context, AppLang.local(context).password_must_be_at_last_6_digit); + return; + } + if (change_password && password != password_confirm) { + ToastUi.show(context, "Password and Confirm Password does not matched!"); + return; + } + + var post_body = jsonEncode({ + "password": "$password", + "password_confirmation": "$password_confirm" + }); + + var res = await UserApi.updatePassword(post_body); + if (res.object.result) { + ToastUi.show(context, "Parolingiz muvaffaqiytli yangilandi"); + } + { + ToastUi.show(context, "Nimadur muammoga sabab bo'ldi."); + } + Navigator.of(context).pop(); + } + + Future refresh() { + return Future(() => 0); + } + + passwordShowHide() { + showPassword = !showPassword; + notifyListeners(); + } + + conPasswordShowHide() { + showConfirmPassword = !showConfirmPassword; + notifyListeners(); + } + + fetchAddresses() async { + var res = await UserApi.getAddresses(); + addresses.clear(); + addresses.addAll(res.data); + isFetchAddress = true; + notifyListeners(); + } + + initState() { + fetchAddresses(); + } + + addAddress() {} + + getCountries() {} +} diff --git a/app_code/lib/presenters/wallet_presenter.dart b/app_code/lib/presenters/wallet_presenter.dart new file mode 100644 index 0000000..890c2ec --- /dev/null +++ b/app_code/lib/presenters/wallet_presenter.dart @@ -0,0 +1,49 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/apis/order_api.dart'; +import 'package:grostore/apis/wallet_api.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/models/order/orders_response.dart'; +import 'package:grostore/models/wallet_history_response.dart'; + +class WalletPresenter extends ChangeNotifier { + static BuildContext? context; + + setContext(BuildContext context) { + WalletPresenter.context = context; + } + + bool isWalletInit = false; + List walletHistory = []; + int page = 1; + + + getWalletHistory() async { + var response = await WalletApi.getWalletHistory(page); + if (response.statusCode == 200) { + walletHistory.addAll(response.object.data); + page++; + isWalletInit = true; + notifyListeners(); + } + } + + fetchAll() async { + getWalletHistory(); + } + +Future onRefresh()async { + clearAll(); + return fetchAll(); + } + + clearAll() { + page = 1; + walletHistory.clear(); + isWalletInit = false; + notifyListeners(); + } + + initState() { + fetchAll(); + } +} diff --git a/app_code/lib/presenters/wishlist_presenter.dart b/app_code/lib/presenters/wishlist_presenter.dart new file mode 100644 index 0000000..eef8e6d --- /dev/null +++ b/app_code/lib/presenters/wishlist_presenter.dart @@ -0,0 +1,96 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_countdown_timer/countdown_timer_controller.dart'; +import 'package:grostore/apis/coupons_api.dart'; +import 'package:grostore/apis/order_api.dart'; +import 'package:grostore/apis/wishlist_api.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/custom_ui/loading.dart'; +import 'package:grostore/custom_ui/toast_ui.dart'; +import 'package:grostore/models/coupon_response.dart'; +import 'package:grostore/models/order/orders_response.dart'; +import 'package:grostore/models/product_mini_response.dart'; +import 'package:grostore/models/wishlist_response.dart'; + +class WishlistPresenter extends ChangeNotifier { + static BuildContext? context; + setContext(BuildContext context) { + WishlistPresenter.context = context; + } + + List wishlists = []; + bool isWishlistInit = false; + bool isAddedWishlist = false; + + + fetchWishlistProducts() async { + var productResponse = await WishlistApi.getWishlist(); + if(productResponse.statusCode==200) { + wishlists.addAll(productResponse.object.data); + isWishlistInit = true; + notifyListeners(); + }else{ + ToastUi.show(context!, AppLang.local(context!).something_went_wrong); + } + + } + + + + addWishlist(id,BuildContext context) async { + var response = await WishlistApi.addWishlist(id); + if(response.statusCode==200) { + ToastUi.show(context, response.object.message); + isAddedWishlist = true; + notifyListeners(); + }else{ + ToastUi.show(context, AppLang.local(context).something_went_wrong); + } + + } + + deleteWishlist(id,BuildContext context) async { + + Loading.show(context); + var response = await WishlistApi.deleteWishlist(id); + Loading.close(); + if(response.statusCode==200) { + ToastUi.show(context, response.object.message); + isAddedWishlist = false; + initState(); + notifyListeners(); + }else{ + ToastUi.show(context, AppLang.local(context).something_went_wrong); + } + } + checkWishlist(id) async { + var response = await WishlistApi.checkWishlist(id); + if(response.statusCode==200) { + isAddedWishlist=response.object.result; + print("isAddedWishlist"); + print(isAddedWishlist); + notifyListeners(); + }else{ + ToastUi.show(context!, AppLang.local(context!).something_went_wrong); + } + } + + fetchAll() async{ + await fetchWishlistProducts(); + } + + clearAll() { + isWishlistInit=false; + wishlists.clear(); + notifyListeners(); + } + + Future reFresh(){ + clearAll(); + return fetchAll(); + } + + initState() { + clearAll(); + fetchAll(); + } +} diff --git a/app_code/lib/screens/address/address_new_or_update.dart b/app_code/lib/screens/address/address_new_or_update.dart new file mode 100644 index 0000000..7149110 --- /dev/null +++ b/app_code/lib/screens/address/address_new_or_update.dart @@ -0,0 +1,459 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/custom_ui/BoxDecorations.dart'; +import 'package:grostore/custom_ui/Button.dart'; +import 'package:grostore/custom_ui/common_appbar.dart'; +import 'package:grostore/custom_ui/input_decorations.dart'; +import 'package:grostore/custom_ui/toast_ui.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; +import 'package:grostore/helpers/route.dart'; +import 'package:grostore/models/city_response.dart'; +import 'package:grostore/models/country_response.dart'; +import 'package:grostore/models/state_response.dart'; +import 'package:grostore/presenters/address_presenter.dart'; +import 'package:grostore/screens/address/addresses.dart'; +import 'package:grostore/screens/profile.dart'; + +class AddressNewOrUpdate extends StatefulWidget { + int? addressId; + + AddressNewOrUpdate({super.key, this.addressId}); + + @override + State createState() => _AddressNewOrUpdateState(); +} + +class _AddressNewOrUpdateState extends State { + AddressPresenter addressPresenter = AddressPresenter(); + + @override + void initState() { + // TODO: implement initState + if (widget.addressId != null) { + WidgetsBinding.instance.addPostFrameCallback((timeStamp) { + addressPresenter.getEditAddressData(widget.addressId, context); + }); + }else{ + addressPresenter.getCountries(); + } + super.initState(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: CommonAppbar.show( + title: widget.addressId == null + ? AppLang.local(context).add_new_address_ucf + : AppLang.local(context).update_address, + context: context), + body: SingleChildScrollView( + child: Padding( + padding: EdgeInsets.all(StyleConfig.padding), + child: ListenableBuilder( + listenable: addressPresenter, + builder: (context, child) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + //buildLabelText(AppLang.local(context).country), + space(size: 10), + // buildButton(AppLang.local(context).select_country, + // addressPresenter.selectedCountry?.name ?? "", () { + // showCountryDialog(); + // }), + countryDropDown(), + space(), + //buildLabelText(AppLang.local(context).state), + //space(size: 10), + // buildButton(AppLang.local(context).select_state, + // addressPresenter.selectedState?.name ?? '', () { + // if (addressPresenter.selectedCountry != null) { + // showStateDialog(); + // } else { + // ToastUi.show(context, + // AppLang.local(context).please_select_a_country); + // } + // }), + stateDropDown(), + space(), + // buildLabelText(AppLang.local(context).city), + // space(size: 10), + // buildButton(AppLang.local(context).select_city, + // addressPresenter.selectedCity?.name ?? '', () { + // if (addressPresenter.selectedState != null) { + // showCityDialog(); + // } else { + // ToastUi.show(context, + // AppLang.local(context).please_select_a_state); + // } + // }), + cityDropDown(), + space(), + isDefaultDropDown(), + space(), + Container( + height: 100, + padding: const EdgeInsets.symmetric( + horizontal: 10, vertical: 10), + decoration: BoxDecorations.customRadius( + radius: BorderRadius.circular(8)) + .copyWith( + border: Border.all(color: ThemeConfig.grey)), + child: TextField( + controller: addressPresenter.addressController, + decoration: const InputDecoration.collapsed( + hintText: "2/5 Elephant Road, New Town"), + ), + ), + space(), + Button( + onPressed: () { + if (widget.addressId != null) { + addressPresenter.updateAddress(context, + id: widget.addressId!, + countryInfo: addressPresenter.selectedCountry, + stateInfo: addressPresenter.selectedState, + cityInfo: addressPresenter.selectedCity, + fullAddress: addressPresenter.addressController.text.trim(), + isDefault: + addressPresenter.defaultAddress == "No" + ? 0 + : 1); + } else { + addressPresenter.addAddress(context, + countryInfo: addressPresenter.selectedCountry, + stateInfo: addressPresenter.selectedState, + cityInfo: addressPresenter.selectedCity, + fullAddress: addressPresenter + .addressController.text + .trim(), + isDefault: + addressPresenter.defaultAddress == "No" + ? 0 + : 1); + } + Navigator.of(context).pop(); + }, + shape: StyleConfig.buttonRadius(8), + color: ThemeConfig.red, + minWidth: getWidth(context), + minHeight: 40.0, + child: Text( + AppLang.local(context).save, + style: StyleConfig.fs14cWhitefwBold, + )) + ], + ); + }), + ), + ), + ); + } + + Text buildLabelText(String text) => Text( + text, + style: StyleConfig.fs14fwBold, + ); + + Widget space({size = 24}) { + return SizedBox( + height: size.toDouble(), + ); + } + + + + Button buildButton(String title, value, onPress) { + return Button( + onPressed: () => onPress(), + color: ThemeConfig.grey, + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.only( + bottomLeft: Radius.circular(8), topLeft: Radius.circular(8))), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Container( + width: 120, + padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 10), + decoration: BoxDecorations.customRadius( + radius: const BorderRadius.only( + bottomLeft: Radius.circular(8), + topLeft: Radius.circular(8)), + color: ThemeConfig.secondaryColor), + child: Text( + title, + style: StyleConfig.fs14cWhitefwNormal, + ), + ), + Container( + constraints: BoxConstraints(maxWidth: getWidth(context) * 0.5), + padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 10), + //decoration: BoxDecorations.customRadius(radius: BorderRadius.only(bottomRight: Radius.circular(8),topRight: Radius.circular(8)),color: ThemeConfig.grey), + child: Text( + value, + style: StyleConfig.fs14cWhitefwNormal, + maxLines: 1, + ), + ), + const Spacer(), + const Icon(Icons.arrow_drop_down_outlined) + ], + )); + } + + Widget countryDropDown(){ + return DropdownButtonFormField( + decoration: InputDecoration( + labelText: AppLang.local(context).select_country, + border: OutlineInputBorder( + borderSide: BorderSide(color: ThemeConfig.accentColor) + ), + ), + value: addressPresenter.selectedCountry, + onChanged: (CountryInfo? country) { + if(country!=null){ + addressPresenter.setSelectedCountry(country); + } + }, + dropdownColor: Colors.white, + items:addressPresenter.countries.map>((e) =>DropdownMenuItem( + value: e, + child: Text(e.name,style: StyleConfig.fs14fwNormal,), + ) ).toList(), + ); + } + + Widget stateDropDown(){ + return DropdownButtonFormField( + decoration: InputDecoration( + labelText: AppLang.local(context).select_state, + border: OutlineInputBorder( + borderSide: BorderSide(color: ThemeConfig.accentColor) + ), + ), + value: addressPresenter.selectedState, + onChanged: (StateInfo? state) { + if(state!=null) { + addressPresenter.setSelectedState(state); + } + }, + dropdownColor: Colors.white, + items:addressPresenter.states.map>((e) =>DropdownMenuItem( + value: e, + child: Text(e.name,style: StyleConfig.fs14fwNormal,), + ) ).toList(), + ); + } + + Widget cityDropDown(){ + return DropdownButtonFormField( + decoration: InputDecoration( + labelText: AppLang.local(context).select_city, + border: OutlineInputBorder( + borderSide: BorderSide(color: ThemeConfig.accentColor) + ), + ), + value: addressPresenter.selectedCity, + onChanged: (CityInfo? city) { + if(city!=null) { + addressPresenter.setSelectedCity(city); + } + }, + dropdownColor: Colors.white, + items:addressPresenter.cities.map>((e) =>DropdownMenuItem( + value: e, + child: Text(e.name,style: StyleConfig.fs14fwNormal,), + ) ).toList(), + ); + } + + Widget isDefaultDropDown(){ + return DropdownButtonFormField( + decoration: InputDecoration( + labelText: AppLang.local(context).default_address, + border: OutlineInputBorder( + borderSide: BorderSide(color: ThemeConfig.accentColor) + ), + ), + onChanged: (String? value) { + if(value!=null) { + addressPresenter.setDefaultAddress(value); + } + }, + value: addressPresenter.defaultAddress, + dropdownColor: Colors.white, + items:["No", "Set Default"].map>((e) =>DropdownMenuItem( + value: e, + child: Text(e,style: StyleConfig.fs14fwNormal,), + ) ).toList(), + ); + } +/* + +showCountryDialog() { + showDialog( + context: context, + builder: (context) => ListenableBuilder( + listenable: addressPresenter, + builder: (context, child) { + return AlertDialog( + title: TextField( + onChanged: (text) { + print(text); + addressPresenter.filterCountry(text); + }, + decoration: InputDecorations.basic(hint_text: "search...")), + content: Container( + height: 250, + child: SingleChildScrollView( + child: Column( + children: List.generate( + addressPresenter.filteredCountries.length, + (index) => Button( + onPressed: () { + Navigator.pop(context); + + }, + child: Container( + constraints: BoxConstraints( + minWidth: getWidth(context)), + padding: const EdgeInsets.symmetric( + horizontal: 10, vertical: 10), + margin: EdgeInsets.only(bottom: 10), + decoration: BoxDecorations.basic(), + child: Text( + addressPresenter + .filteredCountries[index].name, + style: StyleConfig.fs14fwNormal, + )), + ))), + ), + ), + actions: [ + Button( + color: ThemeConfig.grey, + onPressed: () { + Navigator.pop(context); + }, + child: Text( + AppLang.local(context).close, + style: StyleConfig.fs14cWhitefwNormal, + )) + ], + ); + })); + } + showStateDialog() { + showDialog( + context: context, + builder: (context) => ListenableBuilder( + listenable: addressPresenter, + builder: (context, child) { + return AlertDialog( + title: TextField( + onChanged: (text) { + addressPresenter.filterState(text); + }, + decoration: InputDecorations.basic(hint_text: "search...")), + content: Container( + height: 250, + child: SingleChildScrollView( + child: Column( + children: List.generate( + addressPresenter.filteredStates.length, + (index) => Button( + onPressed: () { + Navigator.pop(context); + addressPresenter.setSelectedState( + addressPresenter.filteredStates[index]); + }, + child: Container( + constraints: BoxConstraints( + minWidth: getWidth(context)), + padding: const EdgeInsets.symmetric( + horizontal: 10, vertical: 10), + margin: EdgeInsets.only(bottom: 10), + decoration: BoxDecorations.basic(), + child: Text( + addressPresenter + .filteredStates[index].name, + style: StyleConfig.fs14fwNormal, + )), + ))), + ), + ), + actions: [ + Button( + color: ThemeConfig.grey, + onPressed: () { + Navigator.pop(context); + }, + child: Text( + AppLang.local(context).close, + style: StyleConfig.fs14cWhitefwNormal, + )) + ], + ); + })); + } + + showCityDialog() { + showDialog( + context: context, + builder: (context) => ListenableBuilder( + listenable: addressPresenter, + builder: (context, child) { + return AlertDialog( + title: TextField( + onChanged: (text) { + addressPresenter.filterCity(text); + }, + decoration: InputDecorations.basic(hint_text: "search...")), + content: Container( + height: 250, + child: SingleChildScrollView( + child: Column( + children: List.generate( + addressPresenter.filteredCities.length, + (index) => Button( + onPressed: () { + Navigator.pop(context); + addressPresenter.setSelectedCity( + addressPresenter.filteredCities[index]); + }, + child: Container( + constraints: BoxConstraints( + minWidth: getWidth(context)), + padding: const EdgeInsets.symmetric( + horizontal: 10, vertical: 10), + margin: EdgeInsets.only(bottom: 10), + decoration: BoxDecorations.basic(), + child: Text( + addressPresenter + .filteredCities[index].name, + style: StyleConfig.fs14fwNormal, + )), + ))), + ), + ), + actions: [ + Button( + color: ThemeConfig.grey, + onPressed: () { + Navigator.pop(context); + }, + child: Text( + AppLang.local(context).close, + style: StyleConfig.fs14cWhitefwNormal, + )) + ], + ); + })); + } +*/ + +} diff --git a/app_code/lib/screens/address/addresses.dart b/app_code/lib/screens/address/addresses.dart new file mode 100644 index 0000000..5b4562b --- /dev/null +++ b/app_code/lib/screens/address/addresses.dart @@ -0,0 +1,202 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/custom_ui/Boxdecorations.dart'; +import 'package:grostore/custom_ui/Button.dart'; +import 'package:grostore/custom_ui/common_appbar.dart'; +import 'package:grostore/custom_ui/filter_dropdown.dart'; +import 'package:grostore/custom_ui/shimmers.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; +import 'package:grostore/helpers/route.dart'; +import 'package:grostore/presenters/address_presenter.dart'; +import 'package:grostore/presenters/user_presenter.dart'; +import 'package:grostore/screens/address/address_new_or_update.dart'; +import 'package:grostore/screens/check_out.dart'; +import 'package:provider/provider.dart'; + +class Addresses extends StatefulWidget { + const Addresses({super.key}); + + @override + State createState() => _AddressesState(); +} + +class _AddressesState extends State { + @override + void initState() { + // TODO: implement initState + + WidgetsBinding.instance.addPostFrameCallback((timeStamp) { + Provider.of(context, listen: false).initState(); + }); + + super.initState(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: CommonAppbar.show( + title: AppLang.local(context).address, + context: context, + bottom: PreferredSize( + preferredSize: Size(getWidth(context), 40), + child: Button( + padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 10), + minWidth: getWidth(context) - (StyleConfig.padding * 2), + shape: StyleConfig.buttonRadius(2) + .copyWith(side: BorderSide(color: ThemeConfig.extraDarkGrey)), + onPressed: () { + MakeRoute.go(context, AddressNewOrUpdate()); + }, + child: Text( + AppLang.local(context).add_new_address_ucf, + style: StyleConfig.fs14fwNormal, + ), + ), + ), + ), + body: Consumer(builder: (context, data, child) { + return addresses(data); + }), + ); + } + + Widget addresses(AddressPresenter data) { + return RefreshIndicator( + onRefresh: data.onRefresh, + child: Container( + margin: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + //color: Colors.red, + + width: getWidth(context), + child: data.isFetchAddress + ? ListView.separated( + itemCount: data.addresses.length, + padding: EdgeInsets.symmetric( + horizontal: StyleConfig.padding, vertical: 10), + scrollDirection: Axis.vertical, + itemBuilder: (context, index) { + return Material( + clipBehavior: Clip.antiAlias, + borderRadius: const BorderRadius.all(Radius.circular(10)), + child: InkWell( + onTap: (){ + MakeRoute.goAndRemoveAll(context,const CheckOut()); + }, + child: Container( + padding: const EdgeInsets.all(10), + width: getWidth(context), + decoration: BoxDecorations.shadow(radius: 8).copyWith( + border: Border.all(width: 2, color: ThemeConfig.grey)), + child: Stack( + children: [ + Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + data.addresses[index].address, + style: StyleConfig.fs14fwNormal, + maxLines: 1, + ), + Padding( + padding: const EdgeInsets.only(top: 5.0), + child: Row( + children: [ + Text( + "${AppLang.local(context).city}: ", + style: StyleConfig.fs14fwBold, + ), + Text( + data.addresses[index].cityName, + style: StyleConfig.fs14fwNormal, + ), + ], + ), + ), + Padding( + padding: const EdgeInsets.only(top: 5.0), + child: Row( + children: [ + Text( + "${AppLang.local(context).state}: ", + style: StyleConfig.fs14fwBold, + ), + Text( + data.addresses[index].stateName, + style: StyleConfig.fs14fwNormal, + ), + ], + ), + ), + Padding( + padding: const EdgeInsets.only(top: 5.0), + child: Row( + children: [ + Text( + "${AppLang.local(context).country}: ", + style: StyleConfig.fs14fwBold, + ), + Text( + data.addresses[index].countryName, + style: StyleConfig.fs14fwNormal, + ), + ], + ), + ), + + ], + ), + Positioned( + top: 0, + right: 0, + child: Column( + children: [ + SizedBox( + height: 25, + width: 25, + child: Button( + onPressed: (){ + MakeRoute.go(context, AddressNewOrUpdate(addressId:data.addresses[index].id ,)); + }, + padding: EdgeInsets.zero, + minWidth: 10.0, + minHeight: 10.0, + child:const Icon(Icons.edit,), + ), + ), + const SizedBox(height: 15,), + SizedBox( + height: 25, + width: 25, + child: Button( + onPressed: (){ + data.deleteAddress(data.addresses[index].id , context); + }, + padding: EdgeInsets.zero, + minWidth: 10.0, + minHeight: 10.0, + child:const Icon(Icons.delete,), + ), + ), + ], + )) + ], + ), + ), + ), + ); + }, + separatorBuilder: (context, index) { + return const SizedBox( + height: 10, + ); + }, + ) + : Shimmers.list(10, getWidth(context) * 0.5, 100), + ), + ); + } +} diff --git a/app_code/lib/screens/auth/login.dart b/app_code/lib/screens/auth/login.dart new file mode 100644 index 0000000..d8c4458 --- /dev/null +++ b/app_code/lib/screens/auth/login.dart @@ -0,0 +1,300 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/custom_ui/Button.dart'; +import 'package:grostore/custom_ui/auth_ui.dart'; +import 'package:grostore/custom_ui/input_decorations.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; +import 'package:grostore/helpers/route.dart'; +import 'package:grostore/presenters/auth/auth_presenter.dart'; +import 'package:grostore/screens/auth/password_forget.dart'; +import 'package:grostore/screens/auth/registration.dart'; +import 'package:provider/provider.dart'; +import '../../custom_ui/BoxDecorations.dart'; + +class Login extends StatefulWidget { + const Login({super.key}); + + @override + _LoginState createState() => _LoginState(); +} + +class _LoginState extends State { + + @override + Widget build(BuildContext context) { + Provider.of(context, listen: false).setContext(context); + return AuthScreen.buildScreen( + context, buildBody(context, getWidth(context)) + ); + } + + Widget buildBody(BuildContext context, double screenWidth) { + return Consumer(builder: (context, data, child) { + return Container( + alignment: Alignment.center, + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + width: screenWidth * (3 / 4), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + width: getWidth(context), + padding: const EdgeInsets.only(bottom: 4.0), + child: Text( + AppLang.local(context).welcome_to_back, + style: StyleConfig.fs24fwBold, + textAlign: TextAlign.center, + ), + ), + Padding( + padding: const EdgeInsets.only(bottom: 4.0), + child: Text( + AppLang.local(context).phone, + style: TextStyle( + color: ThemeConfig.fontColor, fontWeight: FontWeight.w600), + ), + ), + + /// #Country change + Padding( + padding: const EdgeInsets.only(bottom: 8.0), + child: Container( + decoration: BoxDecorations.basic( + + ), + height: 36, + child: Row( + children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 14.0), + child: Icon( + Icons.phone, + size: 18, + color: ThemeConfig.mediumGrey, + ), + ), + Text( + "+998", + style: StyleConfig.fs14fwNormal, + ), + // Button( + // minWidth: 80, + // onPressed: () { + // showDialog( + // context: context, + // builder: (context) { + // return buildFilterDialog(data); + // }); + // }, + // child: Row( + // children: [ + // Image.asset( + // "${getAssetFlag(data.regCountry.code.toLowerCase())}.png"), + // + // ], + // ), + // ), + Container( + padding: const EdgeInsets.only(left: 10), + width: getWidth(context) - 200, + child: TextField( + keyboardType: TextInputType.number, + textInputAction: TextInputAction.next, + style: StyleConfig.fs14fwNormal, + decoration: const InputDecoration.collapsed( + hintText: "XX XXX XXX"), + controller: data.loginPhoneNumberController, + ), + ) + ], + )), + ), + // Padding( + // padding: const EdgeInsets.only(bottom: 8.0), + // child: Column( + // crossAxisAlignment: CrossAxisAlignment.end, + // children: [ + // SizedBox( + // height: 36, + // child: TextField( + // controller: data.loginEmailController, + // autofocus: false, + // decoration: InputDecorations.basic( + // prefixIcon: Icon( + // Icons.email_outlined, + // size: 18, + // color: ThemeConfig.mediumGrey, + // ), + // hint_text: "user@example.com"), + // ), + // ), + // ], + // ), + // ), + + // #Password + Padding( + padding: const EdgeInsets.only(bottom: 4.0), + child: Text( + AppLang.local(context).password, + style: TextStyle( + color: ThemeConfig.fontColor, fontWeight: FontWeight.w600), + ), + ), + Padding( + padding: const EdgeInsets.only(bottom: 8.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + SizedBox( + height: 36, + child: TextField( + textInputAction: TextInputAction.search, + controller: data.loginPasswordController, + autofocus: false, + obscureText: true, + enableSuggestions: false, + autocorrect: false, + decoration: InputDecorations.basic( + prefixIcon: Icon( + Icons.lock, + size: 18, + color: ThemeConfig.mediumGrey, + ), + hint_text: "• • • • • • • •"), + ), + ), + Button( + minWidth: 50, + padding: EdgeInsets.zero, + child: Text( + AppLang.local(context).forgot_password_q_ucf, + style: TextStyle( + color: ThemeConfig.blue, + fontStyle: FontStyle.italic), + + ), + onPressed: (){ + MakeRoute.go(context, PasswordForget()); + }, + ) + ], + ), + ), + + // #login Button + Padding( + padding: const EdgeInsets.only(top: 30.0), + child: Container( + height: 45, + child: Button.minSize( + width: getWidth(context), + height: 50, + color: ThemeConfig.red, + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.all(Radius.circular(6.0))), + child: Text( + AppLang.local(context).login, + style: const TextStyle( + color: Colors.white, + fontSize: 14, + fontWeight: FontWeight.w600), + ), + onPressed: () { + data.onPressedLogin(); + }), + ), + ), + + // #register route text + Padding( + padding: const EdgeInsets.only(top: 20.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Center( + child: Text( + AppLang.local(context).not_a_member, + style: + TextStyle(color: ThemeConfig.fontColor, fontSize: 12), + )), + const SizedBox( + width: 10, + ), + Button( + minWidth: 20, + child: Text( + AppLang.local(context).register_now_ucf, + style: TextStyle( + color: ThemeConfig.red, + fontSize: 14, + fontWeight: FontWeight.w600), + ), + onPressed: () { + Navigator.push(context, + MaterialPageRoute(builder: (context) { + return Registration(); + })); + }, + ), + ], + ), + ), + ], + ), + ); + }); + } + + // Country country = Country(name:"Uzbekistan" , dial_code: "+998", code: "+998"); + + // AlertDialog buildFilterDialog(AuthPresenter data) { + // return AlertDialog( + // title: const Text('Search Country'), + // content: Container( + // height: 300, + // child: Column( + // mainAxisSize: MainAxisSize.min, + // children: [ + // TextField( + // onChanged: data.filterCountry, + // decoration: const InputDecoration( + // hintText: 'Search', + // ), + // ), + // const SizedBox(height: 16.0), + // Expanded( + // child: SingleChildScrollView( + // child: Consumer( + // builder: (context, filterData, child) { + // return Column( + // children: List.generate(filterData.filteredCountry.length, + // (index) { + // country = filterData.filteredCountry[index]; + // return ListTile( + // leading: Image.asset( + // getAssetFlag("${country.code.toLowerCase()}.png"), + // height: 30, + // width: 30, + // ), + // title: Text(country.name), + // onTap: () { + // data.onChangeCountry(country); + // Navigator.of(context).pop(); + // filterData.filteredCountry = filterData.country; + // }, + // ); + // }), + // ); + // }), + // ), + // ), + // ], + // ), + // ), + // ); + // } +} diff --git a/app_code/lib/screens/auth/password_forget.dart b/app_code/lib/screens/auth/password_forget.dart new file mode 100644 index 0000000..96631bf --- /dev/null +++ b/app_code/lib/screens/auth/password_forget.dart @@ -0,0 +1,148 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/custom_ui/Button.dart'; +import 'package:grostore/custom_ui/auth_ui.dart'; +import 'package:grostore/custom_ui/input_decorations.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; +import 'package:grostore/helpers/route.dart'; +import 'package:grostore/presenters/auth/auth_presenter.dart'; +import 'package:grostore/screens/auth/password_otp.dart'; +import 'package:provider/provider.dart'; + +import '../../custom_ui/Boxdecorations.dart'; + + +class PasswordForget extends StatefulWidget { + const PasswordForget({super.key}); + + @override + _PasswordForgetState createState() => _PasswordForgetState(); +} + +class _PasswordForgetState extends State { + @override + Widget build(BuildContext context) { + return AuthScreen.buildScreen(context, buildBody(getWidth(context), context)); + } + + Widget buildBody(double screenWidth, BuildContext context) { + return Consumer(builder: (context, data, child) { + return Container( + alignment: Alignment.center, + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + + width: screenWidth * (3 / 4), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + width: getWidth(context), + padding: const EdgeInsets.only(bottom: 4.0), + child: Text( + AppLang.local(context).forgot_password_ucf, + style: StyleConfig.fs24fwBold, + textAlign: TextAlign.center, + ), + ), + Padding( + padding: const EdgeInsets.only(bottom: 4.0), + child: Text( + AppLang.local(context).please_enter_phone, + style: TextStyle( + color: ThemeConfig.fontColor, fontWeight: FontWeight.w600), + ), + ), + Padding( + padding: const EdgeInsets.only(bottom: 8.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + SizedBox( + height: 45, + child: Padding( + padding: const EdgeInsets.only(bottom: 8.0), + child: Container( + decoration: BoxDecorations.basic(), + height: 36, + child: Row( + children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 14.0), + child: Icon( + Icons.phone, + size: 18, + color: ThemeConfig.mediumGrey, + ), + ), + Text( + "+998", + style: StyleConfig.fs14fwNormal, + ), + // Button( + // minWidth: 80, + // onPressed: () { + // showDialog( + // context: context, + // builder: (context) { + // return buildFilterDialog(data); + // }); + // }, + // child: Row( + // children: [ + // Image.asset( + // "${getAssetFlag(data.regCountry.code.toLowerCase())}.png"), + // + // ], + // ), + // ), + Container( + padding: const EdgeInsets.only(left: 10), + width: getWidth(context) - 200, + child: TextField( + style: StyleConfig.fs14fwNormal, + decoration: const InputDecoration.collapsed( + hintText: "XX XXX XXX"), + controller: data.forgetPhoneNumberController, + ), + ) + ], + )), + ), + ), + ], + ), + ), + + Padding( + padding: const EdgeInsets.only(top: 30.0), + child: SizedBox( + height: 45, + child: Button.minSize( + width: getWidth(context), + height: 50, + color: ThemeConfig.red, + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.all(Radius.circular(6.0))), + child: Text( + AppLang.local(context).send, + style:const TextStyle( + color: Colors.white, + fontSize: 14, + fontWeight: FontWeight.w600), + ), + onPressed: () { + data.onPressSendCode(); + // MakeRoute.go(context, PasswordOtp(phone_num:data.loginPhoneNumberController.text,)); + + }), + ), + ), + ], + ), + ); + }); + } +} diff --git a/app_code/lib/screens/auth/password_otp.dart b/app_code/lib/screens/auth/password_otp.dart new file mode 100644 index 0000000..207797e --- /dev/null +++ b/app_code/lib/screens/auth/password_otp.dart @@ -0,0 +1,189 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/custom_ui/Button.dart'; +import 'package:grostore/custom_ui/auth_ui.dart'; +import 'package:grostore/custom_ui/input_decorations.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; +import 'package:grostore/presenters/auth/auth_presenter.dart'; +import 'package:provider/provider.dart'; + +class PasswordOtp extends StatefulWidget { + PasswordOtp({super.key,this.verify_by = "phone",this.phone_num}); + + String? verify_by; + String? phone_num; + + @override + _PasswordOtpState createState() => _PasswordOtpState(); +} + +class _PasswordOtpState extends State { + + + + @override + Widget build(BuildContext context) { + return AuthScreen.buildScreen(context, buildBody(context, getWidth(context))); + } + + + Widget buildBody(BuildContext context, double screenWidth) { + return Consumer(builder: (context, data, child) { + return Container( + alignment: Alignment.center, + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + width: screenWidth * (3 / 4), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + width: getWidth(context), + padding: const EdgeInsets.only(bottom: 4.0), + child: Text( + AppLang.local(context).otp_all_cap, + style: StyleConfig.fs24fwBold, + textAlign: TextAlign.center, + ), + ), + Padding( + padding: const EdgeInsets.only(bottom: 4.0), + child: Text( + AppLang.local(context).otp_all_cap, + style: TextStyle( + color: ThemeConfig.fontColor, fontWeight: FontWeight.w600), + ), + ), + Padding( + padding: const EdgeInsets.only(bottom: 8.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + SizedBox( + height: 36, + child: TextField( + controller: data.otpCodeController, + autofocus: false, + decoration: InputDecorations.basic( + prefixIcon: Icon( + Icons.pin, + size: 18, + color: ThemeConfig.fontColor, + ), + hint_text: "XXX XXX"), + ), + ), + ], + ), + ), + + // Padding( + // padding: const EdgeInsets.only(bottom: 4.0), + // child: Text( + // AppLang.local(context).new_password_ucf, + // style: TextStyle( + // color: ThemeConfig.fontColor, fontWeight: FontWeight.w600), + // ), + // ), + // Padding( + // padding: const EdgeInsets.only(bottom: 8.0), + // child: Container( + // height: 36, + // child: TextField( + // controller: data.otpPasswordController, + // autofocus: false, + // obscureText: true, + // enableSuggestions: false, + // autocorrect: false, + // decoration: InputDecorations.basic( + // prefixIcon: Icon( + // Icons.lock, + // size: 18, + // color: ThemeConfig.fontColor, + // ), + // hint_text: "• • • • • • • •"), + // ), + // ), + // ), + // Padding( + // padding: const EdgeInsets.only(bottom: 4.0), + // child: Text( + // AppLang.local(context).confirm_password_ucf, + // style: TextStyle( + // color: ThemeConfig.fontColor, fontWeight: FontWeight.w600), + // ), + // ), + // Padding( + // padding: const EdgeInsets.only(bottom: 8.0), + // child: Container( + // height: 36, + // child: TextField( + // controller: data.otpPasswordConfirmController, + // autofocus: false, + // obscureText: true, + // enableSuggestions: false, + // autocorrect: false, + // decoration: InputDecorations.basic( + // prefixIcon: Icon( + // Icons.lock, + // size: 18, + // color: ThemeConfig.fontColor, + // ), + // hint_text: "• • • • • • • •"), + // ), + // ), + // ), + + Padding( + padding: const EdgeInsets.only(top: 30.0), + child: SizedBox( + height: 45, + child: Button.minSize( + width: getWidth(context), + height: 50, + color: ThemeConfig.red, + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.all(Radius.circular(6.0))), + child: Text( + AppLang.local(context).send, + style: const TextStyle( + color: Colors.white, + fontSize: 14, + fontWeight: FontWeight.w600), + ), + onPressed: () { + data.onPressOTP(); + }), + ), + ), + // Padding( + // padding: const EdgeInsets.only(top: 20.0), + // child: Row( + // mainAxisAlignment: MainAxisAlignment.center, + // children: [ + // Button( + // minWidth: 20, + // child: Text( + // AppLang.local(context).resend_otp_all_cap, + // style: TextStyle( + // color: ThemeConfig.accentColor, + // fontSize: 14, + // fontWeight: FontWeight.w600), + // ), + // onPressed: () { + // // Navigator.push(context, + // // MaterialPageRoute(builder: (context) { + // // return Registration(); + // // })); + // }, + // ), + // ], + // ), + // ), + ], + ), + ); + }); + } +} diff --git a/app_code/lib/screens/auth/registration.dart b/app_code/lib/screens/auth/registration.dart new file mode 100644 index 0000000..99e39a9 --- /dev/null +++ b/app_code/lib/screens/auth/registration.dart @@ -0,0 +1,347 @@ +import 'package:flutter/gestures.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/constant/country_code.dart'; +import 'package:grostore/constant/country_search.dart'; +import 'package:grostore/custom_ui/Button.dart'; +import 'package:grostore/custom_ui/BoxDecorations.dart'; +import 'package:grostore/custom_ui/input_decorations.dart'; +import 'package:grostore/helpers/common_functions.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; +import 'package:grostore/presenters/auth/auth_presenter.dart'; +import 'package:grostore/screens/auth/login.dart'; +import 'package:intl_phone_number_input/intl_phone_number_input.dart'; +import 'package:provider/provider.dart'; +import '../../custom_ui/auth_ui.dart'; + +class Registration extends StatefulWidget { + @override + _RegistrationState createState() => _RegistrationState(); +} + +class _RegistrationState extends State { + @override + void initState() { + super.initState(); + } + + @override + void dispose() { + super.dispose(); + } + + @override + Widget build(BuildContext context) { + Provider.of(context).setContext(context); + return AuthScreen.buildScreen( + context, buildBody(context, getWidth(context))); + } + + Widget buildBody(BuildContext context, double screenWidth) { + return Consumer(builder: (context, data, child) { + return Container( + alignment: Alignment.center, + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + width: screenWidth * (3 / 4), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + + /// #Create New Account + Container( + width: getWidth(context), + padding: const EdgeInsets.only(bottom: 4.0), + child: Text( + AppLang.local(context).create_new_account_ucf, + style: StyleConfig.fs24fwBold, + textAlign: TextAlign.center, + ), + ), + + /// #Name + Padding( + padding: const EdgeInsets.only(bottom: 4.0), + child: Text( + AppLang.local(context).name, + style: TextStyle( + color: ThemeConfig.fontColor, fontWeight: FontWeight.w600), + ), + ), + Padding( + padding: const EdgeInsets.only(bottom: 8.0), + child: Container( + height: 36, + child: TextField( + controller: data.regNameController, + autofocus: false, + // decoration:InputDecoration( + // focusedBorder: OutlineInputBorder( + // borderRadius: BorderRadius.all(Radius.circular(5)), + // borderSide: BorderSide( + // color: ThemeConfig.red + // ) + // ) + // ) + decoration: InputDecorations.basic( + prefixIcon: Icon( + Icons.person_outline, + size: 18, + color: ThemeConfig.mediumGrey, + ), + hint_text: "Mr.John"), + ), + ), + ), + + /// #Phone Number + Padding( + padding: const EdgeInsets.only(bottom: 4.0), + child: Text( + AppLang.local(context).phone, + style: TextStyle( + color: ThemeConfig.fontColor, fontWeight: FontWeight.w600), + ), + ), + Padding( + padding: const EdgeInsets.only(bottom: 8.0), + child: Container( + decoration: BoxDecorations.basic(), + height: 36, + child: Row( + children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 14.0), + child: Icon( + Icons.phone, + size: 18, + color: ThemeConfig.mediumGrey, + ), + ), + // Button( + // minWidth: 80, + // onPressed: () { + // showDialog( + // context: context, + // builder: (context) { + // return buildFilterDialog(data); + // }); + // }, + // child: Row( + // children: [ + // Padding( + // padding: const EdgeInsets.all(8.0), + // child: Image.asset( + // "${getAssetFlag(data.regCountry.code.toLowerCase())}.png"), + // ), + // Text( + // data.regCountry.dial_code, + // style: StyleConfig.fs14fwNormal, + // ) + // ], + // ), + // ), + Text( + "+998", + style: StyleConfig.fs14fwNormal, + ), + Container( + padding: const EdgeInsets.only(left: 10), + width: getWidth(context) - 200, + child: TextField( + style: StyleConfig.fs14fwNormal, + decoration: const InputDecoration.collapsed( + hintText: "XX XXX XXX"), + controller: data.regPhoneNumberController, + ), + ) + ], + )), + ), + + /// #Password + Padding( + padding: const EdgeInsets.only(bottom: 4.0), + child: Text( + AppLang.local(context).password, + style: TextStyle( + color: ThemeConfig.fontColor, fontWeight: FontWeight.w600), + ), + ), + Padding( + padding: const EdgeInsets.only(bottom: 8.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Container( + height: 36, + child: TextField( + controller: data.regPasswordController, + autofocus: false, + obscureText: true, + enableSuggestions: false, + autocorrect: false, + decoration: InputDecorations.basic( + prefixIcon: Icon( + Icons.lock, + size: 18, + color: ThemeConfig.mediumGrey, + ), + hint_text: "• • • • • • • •"), + ), + ), + Text( + AppLang.local(context).password_must_be_at_last_6_digit, + style: TextStyle( + color: ThemeConfig.lightGrey, + fontStyle: FontStyle.italic), + ) + ], + ), + ), + Padding( + padding: const EdgeInsets.only(bottom: 4.0), + child: Text( + AppLang.local(context).confirm_password_ucf, + style: TextStyle( + color: ThemeConfig.fontColor, fontWeight: FontWeight.w600), + ), + ), + Padding( + padding: const EdgeInsets.only(bottom: 8.0), + child: Container( + height: 36, + child: TextField( + controller: data.regPasswordConfirmController, + autofocus: false, + obscureText: true, + enableSuggestions: false, + autocorrect: false, + decoration: InputDecorations.basic( + prefixIcon: Icon( + Icons.lock, + size: 18, + color: ThemeConfig.mediumGrey, + ), + hint_text: "• • • • • • • •"), + ), + ), + ), + + /// #Send button + Padding( + padding: const EdgeInsets.only(top: 30.0), + child: Container( + height: 45, + child: Button.minSize( + width: getWidth(context), + height: 50, + color: ThemeConfig.red, + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.all(Radius.circular(6.0))), + child: Text( + AppLang.local(context).sign_up_ucf, + style: const TextStyle( + color: Colors.white, + fontSize: 14, + fontWeight: FontWeight.w600), + ), + onPressed: () { + data.onPressSignUp(); + }), + ), + ), + + + /// #Text + Padding( + padding: const EdgeInsets.only(top: 20.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Center( + child: Text( + AppLang.local(context).already_have_an_account, + style: + TextStyle(color: ThemeConfig.fontColor, fontSize: 12), + )), + const SizedBox( + width: 10, + ), + + /// #login route text + Button( + minWidth: 20, + child: Text( + AppLang.local(context).login, + style: TextStyle( + color: ThemeConfig.red, + fontSize: 14, + fontWeight: FontWeight.w600), + ), + onPressed: () { + Navigator.push(context, + MaterialPageRoute(builder: (context) { + return const Login(); + })); + }, + ), + ], + ), + ), + ], + ), + ); + }); + } + // Country country = Country(name:"Uzbekistan" , dial_code: "+998", code: "+998"); + + // AlertDialog buildFilterDialog(AuthPresenter data) { + // return AlertDialog( + // title: const Text('Search Country'), + // content: Container( + // height: 300, + // child: Column( + // mainAxisSize: MainAxisSize.min, + // children: [ + // TextField( + // onChanged: data.filterCountry, + // decoration: const InputDecoration( + // hintText: 'Search', + // ), + // ), + // const SizedBox(height: 16.0), + // Expanded( + // child: SingleChildScrollView( + // child: Consumer( + // builder: (context, filterData, child) { + // return Column( + // children: List.generate(filterData.filteredCountry.length, + // (index) { + // country = filterData.filteredCountry[index]; + // return ListTile( + // leading: Image.asset( + // getAssetFlag("${country.code.toLowerCase()}.png"), + // height: 30, + // width: 30, + // ), + // title: Text(country.name), + // onTap: () { + // // data.onChangeCountry(country); + // Navigator.of(context).pop(); + // filterData.filteredCountry = filterData.country; + // }, + // ); + // }), + // ); + // }), + // ), + // ), + // ], + // ), + // ), + // ); + // } +} diff --git a/app_code/lib/screens/cart.dart b/app_code/lib/screens/cart.dart new file mode 100644 index 0000000..e361ba6 --- /dev/null +++ b/app_code/lib/screens/cart.dart @@ -0,0 +1,316 @@ +import 'package:dotted_line/dotted_line.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/custom_ui/BoxDecorations.dart'; +import 'package:grostore/custom_ui/Button.dart'; +import 'package:grostore/custom_ui/Image_view.dart'; +import 'package:grostore/custom_ui/common_appbar.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; +import 'package:grostore/helpers/route.dart'; +import 'package:grostore/presenters/cart_presenter.dart'; +import 'package:grostore/screens/check_out.dart'; +import 'package:provider/provider.dart'; + +import '../helpers/common_functions.dart'; + +class Cart extends StatefulWidget { + const Cart({Key? key}) : super(key: key); + + @override + State createState() => _CartState(); +} + +class _CartState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: ThemeConfig.xxlightGrey, + appBar: CommonAppbar.show( + title: AppLang.local(context).cart, context: context), + body: SizedBox( + height: getHeight(context), + width: getWidth(context), + child: Stack( + children: [ + Container( + child: Consumer( + builder: (context, data, child) { + if(data.isCartResponseFetch && data.cartResponse.carts.isNotEmpty) { + return ListView.separated( + padding: const EdgeInsets.only(top: 16, bottom: 200), + itemBuilder: (context, index) { + return Container( + margin: EdgeInsets.only( + left: StyleConfig.padding, + right: StyleConfig.padding, + bottom: + index == data.cartResponse.carts.length - 1 + ? 80 + : 0), + decoration: BoxDecorations.shadow(), + width: getWidth(context), + child: Row( + children: [ + Expanded( + child: ImageView( + url: data.cartResponse.carts[index].thumbnailImage, + width: 120, + height: 100, + ), + ), + const SizedBox( + width: 8 + ), + Expanded( + flex:2, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + data.cartResponse.carts[index].category, + style: StyleConfig.fs10, + maxLines: 1, + ), + Text( + data.cartResponse.carts[index].name, + style: StyleConfig.fs14fwBold, + maxLines: 1, + ), + Row( + children: [ + Text( + data.cartResponse.carts[index].unit, + style: StyleConfig.fs12, + maxLines: 1, + ), + Text( + "Narx: ", + style: StyleConfig.fs12, + maxLines: 1, + ), + Text( + showPrice(data.cartResponse.carts[index].price), + style: StyleConfig.fs12, + maxLines: 1, + ), + ], + ), + ], + ), + ), + quantitySection(context, data, index), + ], + ), + ); + }, + separatorBuilder: (context, index) { + print(index); + return Padding( + padding: EdgeInsets.symmetric( + horizontal: StyleConfig.padding), + child: Divider( + height: 1, + color: ThemeConfig.grey, + ), + ); + }, + itemCount: data.cartResponse.carts.length); + } else { + return Center(child: Text(AppLang.local(context).empty,style: StyleConfig.fs16fwBold,)); + } + }, + ), + ), + Consumer(builder: (context, data, child) { + return data.cartResponse.carts.isNotEmpty + ? Positioned( + bottom: 0, + left: 0, + right: 0, + child: Column( + children: [ + + Container( + height: 200, + width: 400, + decoration: BoxDecorations.customRadius( + radius: const BorderRadius.only( + topLeft: Radius.circular(24), + topRight: Radius.circular(24))) + .copyWith(color: ThemeConfig.white), + child: Column( + children: [ + const SizedBox( + height: 16, + ), + Text( + AppLang.local(context).order_info_ucf, + style: StyleConfig.fs16fwBold, + ), + Padding( + padding: EdgeInsets.symmetric( + horizontal: StyleConfig.padding, + vertical: 5), + child: Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Text( + "${AppLang.local(context).subtotal}:", + style: StyleConfig.fs14fwNormal, + ), + Text( + "${showPrice(data.cartResponse.subTotal)}", + style: StyleConfig.fs14fwNormal, + ), + ], + ), + ), + Padding( + padding: EdgeInsets.symmetric( + horizontal: StyleConfig.padding, + vertical: 5), + child: Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Text( + "${AppLang.local(context).coupon_discount_ucf}:", + style: StyleConfig.fs14fwNormal, + ), + Text( + "${showPrice(data.cartResponse.couponDiscount)}", + style: StyleConfig.fs14fwNormal, + ), + ], + ), + ), + + /// Dotted line + Padding( + padding: EdgeInsets.symmetric( + horizontal: StyleConfig.padding, + vertical: 5), + child: DottedLine( + direction: Axis.horizontal, + lineLength: double.infinity, + lineThickness: 1.0, + dashLength: 4.0, + dashColor: ThemeConfig.grey, + //dashGradient: [Colors.red, Colors.blue], + dashRadius: 0.0, + dashGapLength: 4.0, + dashGapColor: Colors.transparent, + //dashGapGradient: [Colors.red, Colors.blue], + dashGapRadius: 0.0, + ), + ), + + Padding( + padding: EdgeInsets.symmetric( + horizontal: StyleConfig.padding, + vertical: 5), + child: Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Text( + "${AppLang.local(context).total}:", + style: StyleConfig.fs14fwNormal, + ), + Text( + "${showPrice(data.cartResponse.total)}", + style: StyleConfig.fs14fwNormal, + ), + ], + ), + ), + Padding( + padding: EdgeInsets.symmetric( + horizontal: StyleConfig.padding), + child: Button( + shape: StyleConfig.buttonRadius(4), + color: ThemeConfig.red, + onPressed: () { + MakeRoute.go(context, const CheckOut()); + }, + padding: const EdgeInsets.symmetric(vertical: 16), + minWidth: getWidth(context), + child: Text( + AppLang.local(context) + .review_n_payment_ucf, + style: StyleConfig.fs16cWhitefwBold, + ), + ), + ) + ], + ), + ), + ], + )) + : const SizedBox.shrink(); + }) + ], + ), + ), + ); + } + + Container quantitySection(BuildContext context, CartPresenter data, index) { + return Container( + // padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + //height: 50, + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Button( + minWidth: 20, + shape: const CircleBorder(), + color: ThemeConfig.fontColor, + padding: const EdgeInsets.all(8), + onPressed: () { + data.updateCart( + cartId: data.cartResponse.carts[index].id, + action: "decrease", + context: context); + }, + child: const Icon( + Icons.remove, + color: ThemeConfig.white, + size: 10, + ), + ), + Container( + padding: const EdgeInsets.symmetric(horizontal: 2), + constraints: const BoxConstraints(minWidth: 40), + alignment: Alignment.center, + child: Text( + "${data.cartResponse.carts[index].quantity}", + style: StyleConfig.fs14fwBold, + )), + Button( + minWidth: 20, + shape: const CircleBorder(), + color: ThemeConfig.red, + padding: const EdgeInsets.all(8), + onPressed: () { + data.updateCart( + cartId: data.cartResponse.carts[index].id, + action: "increase", + context: context); + }, + child: const Icon( + Icons.add, + color: ThemeConfig.white, + size: 10, + ), + ), + ], + ), + ); + } +} diff --git a/app_code/lib/screens/categories.dart b/app_code/lib/screens/categories.dart new file mode 100644 index 0000000..455f8a2 --- /dev/null +++ b/app_code/lib/screens/categories.dart @@ -0,0 +1,80 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/custom_ui/Button.dart'; +import 'package:grostore/custom_ui/category_ui.dart'; +import 'package:grostore/custom_ui/common_appbar.dart'; +import 'package:grostore/custom_ui/shimmers.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; +import 'package:grostore/helpers/route.dart'; +import 'package:grostore/presenters/categories_presenter.dart'; +import 'package:grostore/screens/filter.dart'; +import 'package:provider/provider.dart'; + +class Categories extends StatefulWidget { + Categories({Key? key, this.fromBottomBar = true}) : super(key: key); + bool fromBottomBar; + + @override + State createState() => _CategoriesState(); +} + +class _CategoriesState extends State { + @override + void initState() { + Provider.of(context, listen: false) + .setContext(context); + + WidgetsBinding.instance.addPostFrameCallback((timeStamp) { + Provider.of(context, listen: false).initState(); + }); + + super.initState(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: ThemeConfig.xxlightGrey, + appBar: CommonAppbar.show( + title: AppLang.local(context).categories, + context: context, + showBackButton: !widget.fromBottomBar), + body: Consumer(builder: (context, data, child) { + return RefreshIndicator( + onRefresh: data.onRefresh, + child: data.isCategoryInit + ? GridView.builder( + controller: data.scrollController, + padding: EdgeInsets.only( + left: 10, + right: 10, + top: 10, + bottom: widget.fromBottomBar ? 80 : 10), + itemCount: data.categories.length, + gridDelegate: + const SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 3, + crossAxisSpacing: 16, + mainAxisSpacing: 16, + childAspectRatio: 1), + itemBuilder: (context, index) => Button( + minWidth: getWidth(context), + padding: EdgeInsets.zero, + onPressed: () { + MakeRoute.go( + context, + Filter( + category_id: + data.categories[index].id.toString(), + )); + }, + child: CategoryUi( + img: data.categories[index].thumbnailImage, + name: data.categories[index].name), + )) + : Shimmers.gridShimmer(3, 15)); + }), + ); + } +} diff --git a/app_code/lib/screens/check_out.dart b/app_code/lib/screens/check_out.dart new file mode 100644 index 0000000..7ee5bd4 --- /dev/null +++ b/app_code/lib/screens/check_out.dart @@ -0,0 +1,912 @@ +import 'package:dotted_line/dotted_line.dart'; +import 'package:flutter/material.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/custom_ui/BoxDecorations.dart'; +import 'package:grostore/custom_ui/Button.dart'; +import 'package:grostore/custom_ui/Image_view.dart'; +import 'package:grostore/custom_ui/common_appbar.dart'; +import 'package:grostore/custom_ui/input_decorations.dart'; +// import 'package:grostore/custom_ui/loading.dart'; +import 'package:grostore/custom_ui/shimmers.dart'; +import 'package:grostore/helpers/common_functions.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; +import 'package:grostore/helpers/route.dart'; +import 'package:grostore/models/payment_types_response.dart'; +import 'package:grostore/models/time_slote_response.dart'; +import 'package:grostore/presenters/check_out_presenter.dart'; +import 'package:grostore/screens/address/addresses.dart'; +// import 'package:grostore/presenters/user_presenter.dart'; +// import 'package:grostore/screens/main.dart'; +import 'package:intl/intl.dart'; +import 'package:provider/provider.dart'; + +class CheckOut extends StatefulWidget { + const CheckOut({Key? key}) : super(key: key); + + @override + State createState() => _CheckOutState(); +} + +class _CheckOutState extends State { + bool pay = false; + String dostavka = ''; + @override + void initState() { + Provider.of(context, listen: false) + .init(context); + super.initState(); + } + + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: ThemeConfig.xxlightGrey, + appBar: CommonAppbar.show( + title: AppLang.local(context).check_out_ucf, context: context), + body: SingleChildScrollView( + child: Consumer(builder: (context, data, child) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const SizedBox(height: 24), + + /// #build shipping address + buildShippingAddress(context, data), + const SizedBox(height: 24), + + /// #Billing address + // buildBillingAddress(context, data), + // const SizedBox( + // height: 24 + // ), + + /// #Build Logistics + if (data.logistics.isNotEmpty) + buildLogistic(context, data) + else + Container( + margin: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + padding: const EdgeInsets.all(8), + decoration: BoxDecorations.shadow(radius: 8).copyWith(color: ThemeConfig.red), + child: Text(AppLang.local(context).we_are_not_shipping_to_your_city_now,style: StyleConfig.fs14cWhitefwNormal,)), + const SizedBox(height: 24), + + /// #Prefer Delivery time text + Padding( + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + child: Text( + AppLang.local(context).preferred_delivery_time, + style: StyleConfig.fs16fwBold, + ), + ), + + /// #Prefer Delivery time + data.isFetchTimeSlot?buildDeliveryTime(context, data):timeSlotShimmer(), + const SizedBox(height: 24), + + /// #Personal info + buildPersonalInfo(context,data), + const SizedBox(height: 24), + + /// #Payment Method text + Padding( + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + child: Text( + AppLang.local(context).payment_method, + style: StyleConfig.fs16fwBold, + ), + ), + const SizedBox(height: 10), + + /// #Payment Method Button + Container( + height: 100, + decoration: BoxDecorations.shadow(radius: 8), + margin: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding,vertical: 10), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Expanded( + child: Material( + clipBehavior: Clip.antiAlias, + borderRadius: const BorderRadius.all(Radius.circular(10)), + child: InkWell( + onTap: (){ + pay = !pay; + data.peyMethod("Karta"); + }, + child: Container( + height: MediaQuery.sizeOf(context).height, + width: MediaQuery.sizeOf(context).width, + padding: EdgeInsets.all(5), + alignment: Alignment.center, + decoration: BoxDecoration( + borderRadius: const BorderRadius.all(Radius.circular(10)), + border: Border.all( + width: 1.5, + color:pay ?ThemeConfig.red:ThemeConfig.xxlightGrey + ) + ), + child: Column( + children: [ + Icon(Icons.add_card,color:pay?ThemeConfig.red :ThemeConfig.xlightGrey), + Text(AppLang.local(context).when_receiving_by_card,style:pay? StyleConfig.fs12Red :StyleConfig.fs12cGrey,textAlign: TextAlign.center,), + ], + ), + ), + ), + ), + ), + const SizedBox(width: 20), + Expanded( + child: Material( + clipBehavior: Clip.antiAlias, + borderRadius: const BorderRadius.all(Radius.circular(10)), + child: InkWell( + onTap: (){ + pay = !pay; + data.peyMethod("Naqd pul"); + }, + child: Container( + height: MediaQuery.sizeOf(context).height, + width: MediaQuery.sizeOf(context).width, + alignment: Alignment.center, + padding: EdgeInsets.all(5), + decoration: BoxDecoration( + borderRadius: const BorderRadius.all(Radius.circular(10)), + border: Border.all( + width: 1.5, + color:pay?ThemeConfig.xxlightGrey :ThemeConfig.red + ) + ), + child: Column( + children: [ + Icon(Icons.payments_outlined,color:pay ?ThemeConfig.xxlightGrey :ThemeConfig.red,), + Text(AppLang.local(context).when_receiving_by_cash,style:pay? StyleConfig.fs12cGrey:StyleConfig.fs12Red ,textAlign: TextAlign.center,), + ], + ), + ), + ), + ), + ), + ], + ), + ), + const SizedBox(height: 24), + + + /// #Tips title + Padding( + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + child: Text( + AppLang.local(context).add_tips_for_deliveryman, + style: StyleConfig.fs16fwBold, + ), + ), + const SizedBox( + height: 10 + ), + + /// #tips + Container( + margin: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + padding: EdgeInsets.symmetric( + horizontal: StyleConfig.padding, vertical: 10), + decoration: BoxDecorations.shadow(radius: 8), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + AppLang.local(context).tips, + style: StyleConfig.fs14fwBold, + ), + const SizedBox( + height: 10, + ), + TextField( + controller: data.tipsTxt, + keyboardType: TextInputType.phone, + decoration: InputDecorations.phone(hint_text: AppLang.local(context).tips), + ), + ], + ), + ), + const SizedBox(height: 24), + + /// #Order Summary + Padding( + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + child: Text( + AppLang.local(context).order_summary, + style: StyleConfig.fs16fwBold, + ), + ), + const SizedBox( + height: 10, + ), + Container( + width: getWidth(context), + decoration: BoxDecorations.shadow(radius: 8), + margin: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + padding: EdgeInsets.symmetric( + horizontal: StyleConfig.padding14, + vertical: StyleConfig.padding14), + child: Column( + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "${AppLang.local(context).subtotal} :", + style: StyleConfig.fs14fwNormal, + ), + Text( + showPrice(data.orderSummeryResponse.subTotal), + style: StyleConfig.fs14fwNormal, + ), + ], + ), + const SizedBox(height: 10), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "${AppLang.local(context).delivery_fee_ucf} :", + style: StyleConfig.fs14fwNormal, + ), + Text( + showPrice("${data.orderSummeryResponse.shippingCharge}"), + style: StyleConfig.fs14fwNormal, + ), + ], + ), + const SizedBox( + height: 10, + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "${AppLang.local(context).tax} :", + style: StyleConfig.fs14fwNormal, + ), + Text( + showPrice(data.orderSummeryResponse.tax), + style: StyleConfig.fs14fwNormal, + ), + ], + ), + const SizedBox( + height: 10, + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "${AppLang.local(context).coupon_discount_ucf} :", + style: StyleConfig.fs14fwNormal, + ), + Text( + showPrice(data.orderSummeryResponse.couponDiscount), + style: StyleConfig.fs14fwNormal, + ), + ], + ), + Padding( + padding: const EdgeInsets.symmetric(vertical: 8.0), + child: DottedLine( + direction: Axis.horizontal, + lineLength: double.infinity, + lineThickness: 1.0, + dashLength: 4.0, + dashColor: ThemeConfig.grey, + //dashGradient: [Colors.red, Colors.blue], + dashRadius: 0.0, + dashGapLength: 4.0, + dashGapColor: Colors.transparent, + //dashGapGradient: [Colors.red, Colors.blue], + dashGapRadius: 0.0, + ), + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "${AppLang.local(context).total} :", + style: StyleConfig.fs14fwNormal, + ), + Text( + showPrice("${data.orderSummeryResponse.total} so'm} "), + style: StyleConfig.fs14fwNormal, + ), + ], + ), + ], + ), + ), + const SizedBox( height: 24 ), + + /// #Order contract button + Button( + minWidth: getWidth(context), + color: ThemeConfig.red, + onPressed: (){ + data.placeOrder(context); + }, + padding: const EdgeInsets.symmetric(vertical: 20), + child: Text( + AppLang.local(context).place_order, + // "Place Order", + style: StyleConfig.fs16cWhitefwBold, + ), + ) + ], + ); + }), + ), + ); + } + + // int subster(String text){ + // final a = text.substring(0,6); + // final b = a.split(","); + // final c = "${b[0]}${b[1]}"; + // print("-----------"); + // print("heloH :: $c ::"); + // print("-----------"); + // final e = int.parse(c); + // return e; + // } + + /// #tieslot timer + Widget timeSlotShimmer(){ + return Padding( + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding,vertical: 5), + child: Column( + children: [ + Container( + padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 20), + decoration: BoxDecorations.shadow(radius: 8), + child: Shimmers( + height: 40, + width: getWidth(context), + ), + ), + Container( + padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 20), + decoration: BoxDecorations.shadow(radius: 8), + child: Shimmers( + height: 40, + width: getWidth(context), + ), + ) + ], + ), + ); + } + + /// #Delivery Time + Column buildDeliveryTime(BuildContext context, CheckOutPresenter data) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const SizedBox( + height: 10, + ), + Padding( + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + child: Button( + minWidth: getWidth(context), + onPressed: () { + data.onChangeDeliveryType("regular"); + }, + child:Container( + padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 20), + decoration: BoxDecorations.shadow(radius: 8).copyWith( + border: data.shipping_delivery_type == "regular" + ? Border.all(color: ThemeConfig.red, width: 2) + : null), + child: Row( + children: [ + Icon( + Icons.local_shipping_outlined, + size: 45, + color: ThemeConfig.grey, + ), + const SizedBox( + width: 10, + ), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + AppLang.local(context).reg_delivery, + style: StyleConfig.fs14fwNormal, + ), + SizedBox( + width: 200, + child: Text( + AppLang.local(context).we_will_deliver_your_products_soon, + style: StyleConfig.fs14fwNormal, + overflow: TextOverflow.ellipsis, + ), + ), + ], + ), + ], + ), + ) + , + ), + ), + Button( + minWidth: getWidth(context), + onPressed: () { + data.onChangeDeliveryType("scheduled"); + setState(() {}); + }, + child: Container( + margin: EdgeInsets.symmetric( + horizontal: StyleConfig.padding, vertical: 10), + padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 20), + decoration: BoxDecorations.shadow(radius: 8).copyWith( + border: data.shipping_delivery_type == "scheduled" + ? Border.all(color: ThemeConfig.red, width: 2) + : null), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + width: getWidth(context) * 0.35, + child: Button( + minWidth: getWidth(context) * 0.35, + alignment: Alignment.centerLeft, + child: Text( + DateFormat("d MMM").format(data.selectedDate!), + style: StyleConfig.fs14fwNormal, + ), + onPressed: () async { + DateTime date = await chooseDate(data); + data.onChangeDate(date); + data.onChangeDeliveryType("scheduled"); + setState(() { }); + }, + ), + ), + SizedBox( + width: getWidth(context) * 0.35, + child: Button( + minWidth: getWidth(context), + child: SizedBox( + width: getWidth(context) * 0.35, + child: buildTimeDropDown(data), + ), + ), + ), + ], + ), + ), + ), + ], + ); + } + /// #Date Picker + chooseDate(CheckOutPresenter data) async { + return await showDatePicker( + initialEntryMode: DatePickerEntryMode.calendar, + initialDate: data.selectedDate!, + firstDate: data.firstDate, + lastDate: data.lastDate, + context: context, + ); + } + + /// #Personal information + Column buildPersonalInfo(BuildContext context,CheckOutPresenter data) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + child: Text( + AppLang.local(context).personal_information, + style: StyleConfig.fs16fwBold, + ), + ), + const SizedBox( + height: 10, + ), + Container( + margin: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + padding: EdgeInsets.symmetric( + horizontal: StyleConfig.padding, vertical: 10), + decoration: BoxDecorations.shadow(radius: 8), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + AppLang.local(context).phone, + style: StyleConfig.fs14fwBold, + ), + const SizedBox( + height: 10, + ), + TextField( + controller:data.phoneTxt , + keyboardType: TextInputType.phone, + decoration: InputDecorations.phone(hint_text: "Phone"), + ), + const SizedBox( + height: 10, + ), + Text( + AppLang.local(context).alternative_phone_ucf, + style: StyleConfig.fs14fwBold, + ), + const SizedBox( + height: 10, + ), + TextField( + controller: data.additionalPhoneTxt, + keyboardType: TextInputType.phone, + decoration: InputDecorations.phone( + hint_text: AppLang.local(context).alternative_phone_ucf), + ), + const SizedBox( + height: 10, + ), + Text( + AppLang.local(context).additional_info_ucf, + style: StyleConfig.fs14fwBold, + ), + const SizedBox( + height: 10, + ), + Container( + padding: const EdgeInsets.all(8), + constraints: const BoxConstraints(minHeight: 80), + width: getWidth(context), + decoration: BoxDecorations.basic().copyWith( + border: Border.all(color: ThemeConfig.grey, width: 1)), + child: TextField( + controller: data.additionalInfoTxt, + decoration: InputDecoration.collapsed( + hintText: AppLang.local(context).additional_info_ucf), + ), + ) + ], + ), + ), + ], + ); + } + + /// #build shipping address + Column buildShippingAddress(BuildContext context, CheckOutPresenter data) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + AppLang.local(context).delivery_address_ucf, + style: StyleConfig.fs16fwBold, + ), + Material( + clipBehavior: Clip.antiAlias, + borderRadius: const BorderRadius.all(Radius.circular(10)), + child: InkWell( + onTap: (){ + MakeRoute.go(context, const Addresses()); + }, + child: Container( + alignment: Alignment.center, + padding: const EdgeInsets.all(10), + decoration: BoxDecoration( + borderRadius: const BorderRadius.all(Radius.circular(10)), + border: Border.all( + width: 1, + color: ThemeConfig.red, + ) + ), + child: const Text("Manzil qo'shish"), + ), + ), + ) + ], + ), + ), + + SizedBox( + //color: Colors.red, + height: 150, + width: getWidth(context), + child: data.isFetchDeliveryAddress?ListView.separated( + itemCount: data.addresses.length, + padding: EdgeInsets.symmetric( + horizontal: StyleConfig.padding, vertical: 10), + scrollDirection: Axis.horizontal, + itemBuilder: (context, index) { + return Container( + decoration: BoxDecorations.shadow(radius: 8).copyWith( + border: Border.all( + width: 2, + color: + data.selectedShippingAddress.id == data.addresses[index].id + ? ThemeConfig.red + : ThemeConfig.grey)), + child: Button( + padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 10), + shape: StyleConfig.buttonRadius(8), + minWidth: getWidth(context) * 0.5, + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceAround, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + data.addresses[index].countryName, + style: StyleConfig.fs14fwNormal, + ), + Text( + data.addresses[index].stateName, + style: StyleConfig.fs14fwNormal, + ), + Text( + data.addresses[index].cityName, + style: StyleConfig.fs14fwNormal, + ), + Text( + data.addresses[index].address, + style: StyleConfig.fs14fwNormal, + maxLines: 1, + ), + ], + ), + onPressed: () { + data.onChangeShippingAddress(data.addresses[index]); + }, + ), + ); + }, + separatorBuilder: (context, index) { + return const SizedBox( + width: 10, + ); + }, + ):Shimmers.horizontalList(10, getWidth(context) * 0.5, 100), + ) + ], + ); + } + + /// #Build billing address + Column buildBillingAddress(BuildContext context, CheckOutPresenter data) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + child: Text( + AppLang.local(context).billing_address_ucf, + style: StyleConfig.fs16fwBold, + ), + ), + SizedBox( + //color: Colors.red, + height: 150, + width: getWidth(context), + child: data.isFetchDeliveryAddress?ListView.separated( + itemCount: data.addresses.length, + padding: EdgeInsets.symmetric( + horizontal: StyleConfig.padding, vertical: 10), + scrollDirection: Axis.horizontal, + itemBuilder: (context, index) { + return Container( + decoration: BoxDecorations.shadow(radius: 8).copyWith( + border: Border.all( + width: 2, + color: data.billingAddressId == data.addresses[index].id + ? ThemeConfig.red + : ThemeConfig.grey)), + child: Button( + padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 10), + shape: StyleConfig.buttonRadius(8), + minWidth: getWidth(context) * 0.5, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Text( + data.addresses[index].countryName, + style: StyleConfig.fs14fwNormal, + ), + Text( + data.addresses[index].stateName, + style: StyleConfig.fs14fwNormal, + ), + Text( + data.addresses[index].cityName, + style: StyleConfig.fs14fwNormal, + ), + Text( + data.addresses[index].address, + style: StyleConfig.fs14fwNormal, + ), + ], + ), + onPressed: () { + data.onChangeBillingAddress(data.addresses[index].id); + }, + ), + ); + }, + separatorBuilder: (context, index) { + return const SizedBox( + width: 10, + ); + }, + ):Shimmers.horizontalList(10, getWidth(context) * 0.5, 100), + ), + ], + ); + } + + /// #Build logistics + Column buildLogistic(BuildContext context, CheckOutPresenter data) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + child: Text( + AppLang.local(context).available_logistics_ucf, + style: StyleConfig.fs16fwBold, + ), + ), + SizedBox( + //color: Colors.red, + height: 150, + width: getWidth(context), + child:ListView.separated( + itemCount: data.logistics.length, + padding: EdgeInsets.symmetric( + horizontal: StyleConfig.padding, vertical: 10), + scrollDirection: Axis.horizontal, + itemBuilder: (context, index) { + return Container( + decoration: BoxDecorations.shadow(radius: 8).copyWith( + border: Border.all( + width: 2, + color: + data.selectedLogistic.id == data.logistics[index].id + ? ThemeConfig.red + : ThemeConfig.grey)), + child: Button( + padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 10), + shape: StyleConfig.buttonRadius(8), + minWidth: getWidth(context) * 0.5, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Text( + data.logistics[index].name, + style: StyleConfig.fs14fwNormal, + ), + ImageView( + url: data.logistics[index].image, + height: 40, + width: getWidth(context) * 0.4, + ), + Text( + showPrice(data.logistics[index].price), + style: StyleConfig.fs12, + ), + ], + ), + onPressed: () { + data.onChangeLogistic(data.logistics[index]); + }, + ), + ); + }, + separatorBuilder: (context, index) { + return const SizedBox( + width: 10, + ); + }, + ), + ), + ], + ); + } + + /// #Build time dropdown + Widget buildTimeDropDown(CheckOutPresenter data) { + return DropdownButton( + menuMaxHeight: 300, + isDense: true, + underline: Container(), + isExpanded: true, + onChanged: (TimeSlot? value) { + data.onChangeTimeSlot(value!); + }, + icon: const Icon(Icons.arrow_drop_down), + value: data.selectedTimeslot, + items: data.timeSlots + .map( + (value) => DropdownMenuItem( + value: value, + child: Text( + value.timeline, + ), + ), + ) + .toList(), + ); + } + + /// #Payment Method + Future showPaymentMethods(CheckOutPresenter data)async{ + return showDialog(context: context, builder: (context){ + return AlertDialog( + titlePadding: EdgeInsets.zero, + title: Container( + alignment: Alignment.center, + color: ThemeConfig.accentColor, + padding: const EdgeInsets.symmetric(horizontal: 14,vertical: 24), + child: Text("Choose Payment Method",style: StyleConfig.fs16cWhitefwBold,), + ), + + content:Column( + children: List.generate(data.paymentTypes.length, (index) { + return Column( + children: [ + Button( + minWidth: getWidth(context), + onPressed: (){ + Navigator.pop(context,data.paymentTypes[index]); + }, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Container( + width: getWidth(context)*0.3, + child: Text(data.paymentTypes[index].name,style: StyleConfig.fs14fwBold,)), + Container( + width: getWidth(context)*0.3, + padding: const EdgeInsets.all(8), + child: ImageView.svg(url: data.paymentTypes[index].image,height:50,width: 50), + ), + ], + )) + ], + ); + }), + ) , + actions: [ + Button( + minWidth:getWidth(context), + padding: const EdgeInsets.symmetric(vertical: 20), + color: ThemeConfig.red, + onPressed: (){ + Navigator.pop(context); + }, + child: Text("Close",style: StyleConfig.fs14cWhitefwNormal,), + + ) + ], + ); + + }); + } + +} diff --git a/app_code/lib/screens/coupons.dart b/app_code/lib/screens/coupons.dart new file mode 100644 index 0000000..1c3f32f --- /dev/null +++ b/app_code/lib/screens/coupons.dart @@ -0,0 +1,229 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_countdown_timer/countdown.dart'; +import 'package:flutter_countdown_timer/current_remaining_time.dart'; +import 'package:flutter_countdown_timer/flutter_countdown_timer.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/custom_ui/BoxDecorations.dart'; +import 'package:grostore/custom_ui/Button.dart'; +import 'package:grostore/custom_ui/common_appbar.dart'; +import 'package:grostore/custom_ui/shimmers.dart'; +import 'package:grostore/custom_ui/toast_ui.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; +import 'package:grostore/presenters/coupon_presenter.dart'; +import 'package:provider/provider.dart'; + +class Coupons extends StatefulWidget { + const Coupons({Key? key}) : super(key: key); + + @override + State createState() => _CouponsState(); +} + +class _CouponsState extends State { + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addPostFrameCallback((timeStamp) { + Provider.of(context, listen: false).initState(); + }); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: CommonAppbar.show( + title: AppLang.local(context).coupons, context: context), + body: Consumer(builder: (context, data, child) { + print(data.isCouponsInit); + if (!data.isCouponsInit) { + return Container( + margin: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + child: + Shimmers.list(10, getWidth(context) - StyleConfig.padding, 150), + ); + } + + return ListView.separated( + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + itemBuilder: (context, index) { + return Container( + height: getWidth(context) * 0.5, + width: getWidth(context), + decoration: + BoxDecorations.image(url: data.coupons[index].banner), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Container( + child: Text("UP to ${data.coupons[index].discountValue.toString()}${data.coupons[index].discountType== 'percent'?'%':''} OFF",style: StyleConfig.fs24fwBold.copyWith(color: Colors.red,),), + ), + SizedBox(height: 14,), + Container( + height: 40, + margin: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + decoration: BoxDecoration( + // border: Border.all(), + borderRadius: BorderRadius.circular(8), + color: ThemeConfig.white + ), + child: Row( + children: [ + Padding( + padding: const EdgeInsets.only(left:8 ,right: 8.0), + child: Text(data.coupons[index].code,style: StyleConfig.fs16fwBold,), + ), + Spacer(), + Button( + padding: EdgeInsets.symmetric(horizontal: 10), + color: ThemeConfig.accentColor, + minHeight: 40.0, + minWidth: 10, + shape: StyleConfig.buttonRadius(8), + onPressed: ()async{ + await Clipboard.setData(ClipboardData(text:data.coupons[index].code)); + ToastUi.show(context, "Copied"); + }, + child: Text(AppLang.local(context).copy_code_ucf, + style: StyleConfig.fs14cWhitefwNormal, + ), + ) + ], + ), + ), + SizedBox(height: 14,), + buildCounterRow(data, index) + ], + ), + ); + }, + separatorBuilder: (context, index) => SizedBox( + height: StyleConfig.smSectionSpacer, + ), + itemCount: data.coupons.length); + }), + ); + } + + Row buildCounterRow(CouponPresenter data, int index) { + return Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + CountdownTimer( + controller: data.controller[index], + widgetBuilder: (context, timer) { + return buildCounterContainer(TimerType.day, timer); + }, + ), + CountdownTimer( + controller: data.controller[index], + widgetBuilder: (context, timer) { + return buildCounterContainer(TimerType.hours, timer); + }, + ), + CountdownTimer( + controller: data.controller[index], + widgetBuilder: (context, timer) { + return buildCounterContainer(TimerType.min, timer); + }, + ), + CountdownTimer( + controller: data.controller[index], + widgetBuilder: (context, timer) { + return buildCounterContainer(TimerType.sec, timer); + }, + ), + ], + ); + } + + Container buildCounterContainer(TimerType timerType, CurrentRemainingTime? timer) { + return Container( + width: getWidth(context) / 6, + height: getWidth(context) / 6, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + border: Border.all(color: ThemeConfig.amber, width: 1), + color: ThemeConfig.white), + child:makeCounter(timerType, timer) + ); + } + + makeCounter(TimerType timerType, CurrentRemainingTime? timer){ + if(timerType==TimerType.day){ + return buildCounterDate(timer, context); + }else if(timerType ==TimerType.hours){ + return buildCounterHours(timer, context); + }else if(timerType ==TimerType.min){ + return buildCounterMin(timer, context); + }else { + return buildCounterSec(timer, context); + } + } + + Column buildCounterDate(CurrentRemainingTime? timer, BuildContext context) { + return Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + timer?.days.toString() ?? "", + style: StyleConfig.fs14fwNormal, + ), + Text( + AppLang.local(context).days, + style: StyleConfig.fs14fwNormal, + ), + ], + ); + } + Column buildCounterHours(CurrentRemainingTime? timer, BuildContext context) { + return Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + timer?.hours.toString() ?? "", + style: StyleConfig.fs14fwNormal, + ), + Text( + AppLang.local(context).hours, + style: StyleConfig.fs14fwNormal, + ), + ], + ); + } + Column buildCounterMin(CurrentRemainingTime? timer, BuildContext context) { + return Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + timer?.min.toString() ?? "", + style: StyleConfig.fs14fwNormal, + ), + Text( + AppLang.local(context).min, + style: StyleConfig.fs14fwNormal, + ), + ], + ); + } + Column buildCounterSec(CurrentRemainingTime? timer, BuildContext context) { + return Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + timer?.sec.toString() ?? "", + style: StyleConfig.fs14fwNormal, + ), + Text( + AppLang.local(context).sec, + style: StyleConfig.fs14fwNormal, + ), + ], + ); + } +} +enum TimerType{ + day,hours,min,sec +} \ No newline at end of file diff --git a/app_code/lib/screens/filter.dart b/app_code/lib/screens/filter.dart new file mode 100644 index 0000000..27e0948 --- /dev/null +++ b/app_code/lib/screens/filter.dart @@ -0,0 +1,475 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/custom_classes/system_data.dart'; +import 'package:grostore/custom_ui/Button.dart'; +import 'package:grostore/custom_ui/category_ui.dart'; +import 'package:grostore/custom_ui/common_appbar.dart'; +import 'package:grostore/custom_ui/product_card.dart'; +import 'package:grostore/custom_ui/shimmers.dart'; +import 'package:grostore/helpers/common_functions.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; +import 'package:grostore/helpers/route.dart'; +import 'package:grostore/presenters/cart_presenter.dart'; +import 'package:grostore/presenters/categories_presenter.dart'; +import 'package:grostore/presenters/filter_presenter.dart'; +import 'package:grostore/screens/auth/login.dart'; +import 'package:grostore/screens/cart.dart'; +import 'package:provider/provider.dart'; + +class Filter extends StatefulWidget { + String? searchKey, + sort_by, + max_price, + min_price, + category_id, + tag_id, + per_page; + bool isFocus; + + Filter( + {Key? key, + this.searchKey, + this.sort_by, + this.max_price, + this.min_price, + this.category_id, + this.tag_id, + this.per_page, + this.isFocus=false}) + : super(key: key); + + @override + State createState() => _FilterState(); +} + +class _FilterState extends State { + @override + void initState() { + super.initState(); + Provider.of(context,listen: false).setContext(context); + WidgetsBinding.instance.addPostFrameCallback((timeStamp) { + Provider.of(context,listen: false).clearAll(); + if(!widget.isFocus) { + Provider.of(context, listen: false).setInitData( + min_price: widget.min_price, + max_price: widget.max_price, + category_id: widget.category_id); + Provider.of(context, listen: false).initState(); + } + Provider.of(context, listen: false).getCategories(); + }); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: ThemeConfig.xxlightGrey, + appBar: CommonAppbar.show( + title: AppLang.local(context).filter, + context: context, + bottom: buildSearchOptions(context)), + body: Consumer(builder: (context, data, child) { + return RefreshIndicator( + onRefresh: data.onRefresh, + child:buildProductSection(data), + ); + }), + + /// #Bottom Navigation Bar + bottomNavigationBar:BottomAppBar( + color: ThemeConfig.white, + child: Consumer( + builder: (context, cart, child) { + return Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "Your Cart: ${showPrice(cart.cartResponse.total)}", + style: StyleConfig.fs14fwNormal, + ), + Button( + color: ThemeConfig.red, + padding: const EdgeInsets.symmetric(horizontal: 18,vertical: 8), + shape: StyleConfig.buttonRadius(5), + onPressed: () { + if (SystemData.isLogIn) { + MakeRoute.go(context, const Cart()); + } else { + Navigator.push( + context, MaterialPageRoute(builder: (context) => const Login())); + return; + } + }, + child: Text(AppLang.local(context).go_to_cart,style: StyleConfig.fs14cWhitefwNormal,)) + ], + ); + }, + ), + ) , + /* bottomSheet:BottomSheet( + onClosing: (){}, builder: (context)=>Container( + height: 250, + width: getWidth(context), + color: Colors.red, + child: Consumer( + builder: (context, data, child) { + return Column( + children: [ + spacer(height: 10), + headerTitle(AppLang.local(context).categories), + spacer(height: StyleConfig.xsSectionSpacer), + buildCategorySection(data), + spacer(height: StyleConfig.smSectionSpacer), + headerTitle(AppLang.local(context).price_range_ucf), + RangeSlider( + onChanged: (nPrice) { + data.onChangePrice(nPrice); + print(nPrice); + }, + //onChangeEnd: data.onChangePrice, + + min: 0, + max: 500, + values: data.price, + ), + Padding( + padding: + EdgeInsets.symmetric(horizontal: StyleConfig.padding), + child: Row( + children: [ + Text( + data.price.start.round().toString(), + style: StyleConfig.fs14fwNormal, + ), + SizedBox( + width: StyleConfig.xsSectionSpacer, + ), + Text( + AppLang.local(context).to, + style: StyleConfig.fs14fwNormal, + ), + SizedBox( + width: StyleConfig.xsSectionSpacer, + ), + Text( + data.price.end.round().toString(), + style: StyleConfig.fs14fwNormal, + ), + ], + ), + ) + ], + ); + } + ), + )) +*/ + /*bottomNavigationBar: Container( + color: ThemeConfig.white, + height: 280, + width: getWidth(context), + child: Consumer( + builder: (context, data, child) { + return Column( + mainAxisAlignment: MainAxisAlignment.end, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + spacer(height: 10), + headerTitle(AppLang.local(context).categories), + spacer(height: StyleConfig.xsSectionSpacer), + buildCategorySection(data), + spacer(height: StyleConfig.smSectionSpacer), + headerTitle(AppLang.local(context).price_range_ucf), + RangeSlider( + onChanged: (nPrice) { + data.onChangePrice(nPrice); + }, + min: 0, + max: 500, + values: (data.price), + ), + Padding( + padding: + EdgeInsets.symmetric(horizontal: StyleConfig.padding), + child: Row( + children: [ + Text( + data.price.start.round().toString(), + style: StyleConfig.fs14fwNormal, + ), + SizedBox( + width: StyleConfig.xsSectionSpacer, + ), + Text( + AppLang.local(context).to, + style: StyleConfig.fs14fwNormal, + ), + SizedBox( + width: StyleConfig.xsSectionSpacer, + ), + Text( + data.price.end.round().toString(), + style: StyleConfig.fs14fwNormal, + ), + ], + ), + ), + Spacer(), + Button( + color: ThemeConfig.green, + minWidth: getWidth(context), + padding: EdgeInsets.symmetric(vertical: 14), + onPressed: (){ + + }, + child: Text(AppLang.local(context).filter,style: StyleConfig.fs16cWhitefwBold,)) + ], + ); + } + ), + ),*/ + ); + } + + PreferredSize buildSearchOptions(BuildContext context) { + return PreferredSize( + preferredSize: Size(getWidth(context),50), + child: Consumer( + builder: (context, data, child) { + return Container( + margin: EdgeInsets.symmetric( + horizontal: StyleConfig.padding14, vertical: 10), + width: getWidth(context), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Container( + decoration: BoxDecoration( + border: Border.all(color: ThemeConfig.grey, width: 1), + borderRadius: BorderRadius.circular(8)), + padding: EdgeInsets.symmetric( + horizontal: StyleConfig.xsSectionSpacer, vertical: 10), + + width: getWidth(context)-100, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + SizedBox( + width: getWidth(context)-220, + child: TextField( + autofocus: widget.isFocus, + controller: data.searchTxt, + onEditingComplete: () { + data.clearCategory(); + data.clearPriceRange(); + data.getFilteredProducts(); + }, + decoration: const InputDecoration.collapsed(hintText: "Search"), + ), + ), + SizedBox( + height: 30, + width: 30, + + child: Button( + padding: EdgeInsets.zero, + minWidth: 30, + onPressed: () { + data.clearCategory(); + data.clearPriceRange(); + data.getFilteredProducts(); + }, + child: Icon(Icons.search,size:24,color: ThemeConfig.fontColor,)), + ) + ], + ), + ), + SizedBox( + width: 60, + child: Button( + onPressed: (){ + showFilterDialog(); + }, + shape: StyleConfig.buttonRadius(6), + color: ThemeConfig.red, + padding: const EdgeInsets.symmetric( vertical: 16,horizontal: 10), + minWidth: 40, + child: Text(AppLang.local(context).filter,style: StyleConfig.fs14cWhitefwNormal,)), + ) + ], + ), + ); + } + ), + ); + } + + Widget buildCategorySection(FilterPresenter data) { + return SizedBox( + height: 87, + child: data.isCategoryInit + ? ListView.separated( + scrollDirection: Axis.horizontal, + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + itemBuilder: (context, index) { + return SizedBox( + width: 100, + child: Button( + shape: StyleConfig.buttonRadius(0).copyWith( + side: BorderSide( + color: data.categories[index].id.toString() == + data.selectedCategoryId.toString() + ? ThemeConfig.accentColor + : ThemeConfig.noColor)), + padding: const EdgeInsets.all(5), + onPressed: () { + data.onSelectCategory(data.categories[index].id); + }, + child: CategoryUi( + img: data.categories[index].thumbnailImage, + name: data.categories[index].name), + ), + ); + }, + separatorBuilder: (context, index) { + return const SizedBox( + width: 8, + ); + }, + itemCount: data.categories.length) + : Shimmers.horizontalList(8, 80, 80), + ); + } + + Widget headerTitle(text) { + return Padding( + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + child: Text( + text, + style: StyleConfig.fs16fwBold, + ), + ); + } + + Widget spacer({height = 24}) { + return SizedBox( + height: double.parse(height.toString()), + ); + } + + + Widget buildProductSection(FilterPresenter data){ + return GridView.builder( + controller: data.scrollController, + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding,vertical: StyleConfig.smSectionSpacer), + physics: const AlwaysScrollableScrollPhysics(), + gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 2, + crossAxisSpacing: 16, + mainAxisSpacing: 16, + childAspectRatio: 0.72 + ), + itemCount: data.products.length, + itemBuilder: (context, index) { + return ProductCard( + product: data.products[index],context: this.context,); + }); + } + + showFilterDialog(){ + showDialog(context: context, builder: (context)=>Consumer( + builder: (context,data,child) { + return AlertDialog( + title: Center(child: Text("Filter Form",style: StyleConfig.fs14fwBold,)), + content: Container( + height: getHeight(context)*0.30, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + headerTitle(AppLang.local(context).categories), + spacer(height: StyleConfig.xsSectionSpacer), + SizedBox( + width: getWidth(context), + child: buildCategorySection(data)), + spacer(height: StyleConfig.smSectionSpacer), + headerTitle(AppLang.local(context).price_range_ucf), + RangeSlider( + onChanged: (nPrice) { + data.onChangePrice(nPrice); + }, + min: 0, + max: 500, + values: (data.price), + ), + Padding( + padding: + EdgeInsets.symmetric(horizontal: StyleConfig.padding), + child: Row( + children: [ + Text( + data.price.start.round().toString(), + style: StyleConfig.fs14fwNormal, + ), + SizedBox( + width: StyleConfig.xsSectionSpacer, + ), + Text( + AppLang.local(context).to, + style: StyleConfig.fs14fwNormal, + ), + SizedBox( + width: StyleConfig.xsSectionSpacer, + ), + Text( + data.price.end.round().toString(), + style: StyleConfig.fs14fwNormal, + ), + ], + ), + ), + ], + ), + ), + actions: [ + Button( + shape: StyleConfig.buttonRadius(6), + color: ThemeConfig.grey, + onPressed: (){ + Navigator.pop(context); + }, + child: Text(AppLang.local(context).close,style: StyleConfig.fs12cWhite,)), + Button( + shape: StyleConfig.buttonRadius(6), + color: ThemeConfig.green, + onPressed: (){ + Navigator.pop(context); + data.clearKeyWord(); + data.getFilteredProducts(); + } + , + child: Text(AppLang.local(context).submit,style: StyleConfig.fs12cWhite)) + ], + ); + } + )); + } + +Widget allProductShimmer() { + return GridView.builder( + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 2, + crossAxisSpacing: 16, + mainAxisSpacing: 16, + childAspectRatio: 2/3), + itemCount: 10, + itemBuilder: (context, index) { + return Shimmers(width: 160, height: 186,radius: 8,); + }); + } +} diff --git a/app_code/lib/screens/help_center.dart b/app_code/lib/screens/help_center.dart new file mode 100644 index 0000000..58d9352 --- /dev/null +++ b/app_code/lib/screens/help_center.dart @@ -0,0 +1,100 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/custom_ui/BoxDecorations.dart'; +import 'package:grostore/custom_ui/Button.dart'; +import 'package:grostore/custom_ui/common_appbar.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; +import 'package:grostore/presenters/help_center_presenter.dart'; +import 'package:url_launcher/url_launcher.dart'; + + +class HelpCenter extends StatefulWidget { + const HelpCenter({super.key}); + + @override + State createState() => _HelpCenterState(); +} + +class _HelpCenterState extends State { + HelpCenterPresenter helpCenterPresenter=HelpCenterPresenter(); + + @override + void initState() { + // TODO: implement initState + WidgetsBinding.instance.addPostFrameCallback((timeStamp) { + + helpCenterPresenter.initState(); + }); + + super.initState(); + } + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: ThemeConfig.xxlightGrey, + appBar: CommonAppbar.show(title: AppLang.local(context).help_center_ucf, context: context), + body: Center( + child: ListenableBuilder( + listenable: helpCenterPresenter, + builder: (context,child) { + return Container( + padding: const EdgeInsets.symmetric(horizontal: 10,vertical: 10), + margin: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + height: 200, + width: getWidth(context), + decoration: BoxDecorations.shadow(radius: 8), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Icon(Icons.location_on_outlined), + SizedBox( + width: getWidth(context)*0.7, + child: Text(helpCenterPresenter.helpCenter?.location??"")) + ], + ), + const SizedBox(height: 10,), + Button( + onPressed: (){ + launchUrl(Uri(scheme: 'tel', path: helpCenterPresenter.helpCenter?.contactNumber??"123")); + }, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Icon(Icons.phone), + SizedBox( + width: getWidth(context)*0.7, + child: Text(helpCenterPresenter.helpCenter?.contactNumber??"")) + + ], + ), + ), + Button( + onPressed: (){ + launchUrl(Uri(scheme: 'mailto', path: helpCenterPresenter.helpCenter?.email??"")); + }, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Icon(Icons.email_outlined), + SizedBox( + width: getWidth(context)*0.7, + child: Text(helpCenterPresenter.helpCenter?.email??"")) + ], + ), + ), + + ], + ), + ); + } + ), + ), + + ); + } +} diff --git a/app_code/lib/screens/home.dart b/app_code/lib/screens/home.dart new file mode 100644 index 0000000..3da2d58 --- /dev/null +++ b/app_code/lib/screens/home.dart @@ -0,0 +1,317 @@ + +import 'package:carousel_slider/carousel_slider.dart'; +import 'package:flutter/material.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/custom_ui/BoxDecorations.dart'; +import 'package:grostore/custom_ui/Button.dart'; +import 'package:grostore/custom_ui/category_ui.dart'; +import 'package:grostore/custom_ui/product_card.dart'; +import 'package:grostore/custom_ui/shimmers.dart'; +import 'package:grostore/helpers/common_functions.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; +import 'package:grostore/helpers/route.dart'; +import 'package:grostore/presenters/home_presenter.dart'; +import 'package:grostore/screens/filter.dart'; +import 'package:provider/provider.dart'; + +class Home extends StatefulWidget { + String? id; + + Home({Key? key, this.id}) : super(key: key); + + @override + State createState() => _HomeState(); +} + +class _HomeState extends State { + @override + void initState() { + Provider.of(context,listen: false).setContext(context); + Provider.of(context, listen: false).initState(context); + + super.initState(); + } + + // @override + // void dispose() { + // Provider.of(context, listen: false).dispose(); + // super.dispose(); + // } + + @override + Widget build(BuildContext context) { + return SafeArea( + child: Scaffold( + backgroundColor: ThemeConfig.xxlightGrey, + appBar: buildSearchOption(context), + body: Consumer(builder: (context, data, child) { + return RefreshIndicator( + onRefresh: data.onRefresh, + child: SingleChildScrollView( + controller: data.homeScrollController, + child: SafeArea( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + buildSliderSection(data), + const SizedBox( + height: 14, + ), + Padding( + padding: + EdgeInsets.symmetric(horizontal: StyleConfig.padding), + child: Row( + children: [ + Text( + AppLang.local(context).top_categories_ucf, + style: StyleConfig.fs16fwBold, + ), + const SizedBox( + width: 8, + ), + Image.asset( + getAssetIcon("fire.png"), + height: 20, + width: 20, + ) + ], + ), + ), + const SizedBox( + height: 10, + ), + buildTopCategorySection(data), + const SizedBox( + height: 14, + ), + Padding( + padding: + EdgeInsets.symmetric(horizontal: StyleConfig.padding), + child: Row( + children: [ + Text( + AppLang.local(context).best_selling_products_ucf, + style: StyleConfig.fs16fwBold, + ), + const SizedBox( + width: 8, + ), + Image.asset( + getAssetIcon("fire.png"), + height: 20, + width: 20, + ) + ], + ), + ), + const SizedBox( + height: 10, + ), + SizedBox( + // color: Colors.red, + height:225, + child: buildBestSellingProductSection(data)), + const SizedBox(height: 14,), + Padding( + padding: + EdgeInsets.symmetric(horizontal: StyleConfig.padding), + child: Row( + children: [ + Text( + AppLang.local(context).all_products_ucf, + style: StyleConfig.fs16fwBold, + ), + const SizedBox( + width: 8, + ), + Image.asset( + getAssetIcon("fire.png"), + height: 20, + width: 20, + ) + ], + ), + ), + const SizedBox( + height: 10, + ), + allProducts(data), + const SizedBox( + height: 14, + ), + ], + ), + ), + ), + ); + }), + ), + ); + } + + Container buildTopCategorySection(HomePresenter data) { + return Container( + height: 100, + child: data.isTopCategoryInitial + ? ListView.separated( + scrollDirection: Axis.horizontal, + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + itemBuilder: (context, index) { + return Button( + minWidth: 40, + onPressed: (){ + MakeRoute.go(context, Filter(category_id:data.topCategoryList[index].id.toString() ,)); + }, + child: SizedBox( + width: 100, + child: CategoryUi( + img: data.topCategoryList[index].thumbnailImage, + name: data.topCategoryList[index].name), + ), + ); + }, + separatorBuilder: (context, index) { + return const SizedBox( + width: 8, + ); + }, + itemCount: data.topCategoryList.length) + : categoryShimmer(), + ); + } + + SizedBox buildSliderSection(HomePresenter data) { + return SizedBox( + height: 170, + child: CarouselSlider( + items: + data.isHomeBannerInitial ? data.homeBannerImages : sliderShimmer(), + options: CarouselOptions( + aspectRatio: 2, + viewportFraction: 0.94, + height: 150, + // enlargeCenterPage: true, + scrollDirection: Axis.horizontal, + autoPlay: true, + onPageChanged: (index, reason) { + data.onChangeBannerIndex(index); + }, + ), + ), + ); + } + + PreferredSize buildSearchOption(BuildContext context) { + return PreferredSize( + preferredSize: Size(getWidth(context), 54), + child: Container( + padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 14), + margin: const EdgeInsets.only(top:12, left: 24, right: 24), + width: getWidth(context), + decoration: BoxDecorations.shadow(radius: 6.0), + child: Button( + onPressed: ()=>MakeRoute.go(context, Filter(isFocus: true,)), + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Image.asset( + getAssetIcon("search.png"), + height: 16, + width: 16, + ), + const SizedBox( + width: 8, + ), + Text( + AppLang.local(context).search_product_ucf, + style: StyleConfig.fs12cGrey, + ) + ], + ), + ), + )); + } + + List sliderShimmer() { + return [ + Shimmers(width: getWidth(context) - 40, height: 200), + Shimmers(width: getWidth(context) - 40, height: 200), + Shimmers(width: getWidth(context) - 40, height: 200), + Shimmers(width: getWidth(context) - 40, height: 200), + ]; + } + + ListView categoryShimmer() { + return ListView.separated( + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + scrollDirection: Axis.horizontal, + itemBuilder: (context, index) { + return Shimmers( + width: 76, + height: 87, + radius: 6.0, + ); + }, + separatorBuilder: (context, index) { + return const SizedBox( + width: 8, + height: 10, + ); + }, + itemCount: 10); + } + + Widget allProductShimmer() { + return GridView.builder( + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 2, + crossAxisSpacing: 16, + mainAxisSpacing: 16, + childAspectRatio: 2/3), + itemCount: 10, + itemBuilder: (context, index) { + return Shimmers(width: 160, height: 186,radius: 8,); + }); + } + +Widget buildBestSellingProductSection(HomePresenter data){ + return + data.isBestSellingProductInitial ? + ListView.separated( + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + scrollDirection: Axis.horizontal, + itemBuilder: (context, index) { + return ProductCard( + product: data.bestSellingProductList[index],context: this.context,); + }, + separatorBuilder: (context,index)=>const SizedBox(width: 10,), itemCount: data.bestSellingProductList.length) + :Shimmers.horizontalList(10, 160, 160); + } + + +Widget allProducts(HomePresenter data){ + String datas = ''; + return data.isAllProductInitial?GridView.builder( + padding: EdgeInsets.only(left: StyleConfig.padding,right: StyleConfig.padding,bottom: 20), + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + itemCount: data.products.length, + itemBuilder: (context, index) { + datas = data.products[index].name; + return ProductCard(product: data.products[index],context: this.context,); + }, + gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 2, + crossAxisSpacing: 16, + mainAxisSpacing: 16, + childAspectRatio: 0.72, + // childAspectRatio: 2.1/3 + ), + ):allProductShimmer(); + } +} diff --git a/app_code/lib/screens/landing_pages/auth_model.dart b/app_code/lib/screens/landing_pages/auth_model.dart new file mode 100644 index 0000000..4963a9f --- /dev/null +++ b/app_code/lib/screens/landing_pages/auth_model.dart @@ -0,0 +1,115 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/configs/app_config.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/custom_ui/Button.dart'; +import 'package:grostore/helpers/common_functions.dart'; +import 'package:grostore/helpers/route.dart'; +import 'package:grostore/screens/auth/login.dart'; +import 'package:grostore/screens/auth/registration.dart'; + +import '../../helpers/device_info_helper.dart'; + +class AuthPageModel extends StatelessWidget { + const AuthPageModel({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + width: getWidth(context), + height: getHeight(context), + decoration: BoxDecoration( + //color: ThemeConfig.splashBackgrund, + image: DecorationImage( + image: AssetImage(getAssetImage("splash_background.png")))), + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Spacer(), + Image.asset( + getAssetLogo("img_logo2.png"), + width: 150, + height: 150, + ), + // const SizedBox( + // height: 10, + // ), + // Text( + // AppConfig.appName, + // style: StyleConfig.fs30fwEBold(), + // textAlign: TextAlign.center, + // ), + // const SizedBox( + // height: 64, + // ), + Text( + AppLang.local(context).welcome_to_back, + style: StyleConfig.fs22fwEBold, + textAlign: TextAlign.center, + ), + const SizedBox( + height: 10, + ), + Text( + AppLang.local(context) + .energetically_streamline_one_to_one_web_readiness_before_extensive_meta_services, + style: StyleConfig.fs12cLightfwNormal, + textAlign: TextAlign.center, + ), + const Spacer(), + Row( + children: [ + Button( + shape: RoundedRectangleBorder( + borderRadius: const BorderRadius.all(Radius.circular(5)), + side: BorderSide( + color: ThemeConfig.red + ) + ), + // StyleConfig.buttonRadius(5), + minWidth: getWidth(context) * 0.42, + // color: ThemeConfig.secondaryColor, + padding: EdgeInsets.symmetric( + horizontal: StyleConfig.padding14, + vertical: StyleConfig.padding14), + child: Text( + AppLang.local(context).login, + style: StyleConfig.fs14cRedfwNormal, + ), + onPressed: (){ + MakeRoute.go(context, const Login()); + }, + ), + const Spacer(), + Button( + shape: RoundedRectangleBorder( + borderRadius: const BorderRadius.all(Radius.circular(5)), + side: BorderSide( + color: ThemeConfig.red + ) + ), + // StyleConfig.buttonRadius(5), + minWidth: getWidth(context) * 0.42, + // color: ThemeConfig.secondaryColor, + padding: EdgeInsets.symmetric( + horizontal: StyleConfig.padding14, + vertical: StyleConfig.padding14), + onPressed: (){ + MakeRoute.go(context, Registration()); + }, + child: Text( + AppLang.local(context).register, + style: StyleConfig.fs14cRedfwNormal, + ), + ), + ], + ), + const Spacer(), + ], + ), + ); + } +} diff --git a/app_code/lib/screens/landing_pages/landing_page.dart b/app_code/lib/screens/landing_pages/landing_page.dart new file mode 100644 index 0000000..3603ea2 --- /dev/null +++ b/app_code/lib/screens/landing_pages/landing_page.dart @@ -0,0 +1,105 @@ +import 'package:carousel_slider/carousel_slider.dart'; +import 'package:flutter/material.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/custom_ui/Button.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; +import 'package:grostore/helpers/route.dart'; +import 'package:grostore/helpers/shared_value_helper.dart'; +import 'package:grostore/presenters/landing_page_presenter.dart'; +import 'package:grostore/screens/landing_pages/page_model.dart'; +import 'package:grostore/screens/landing_pages/auth_model.dart'; +import 'package:grostore/screens/main.dart'; +import 'package:provider/provider.dart'; + + +class LandingPage extends StatefulWidget { + const LandingPage({Key? key}) : super(key: key); + + @override + State createState() => _LandingPageState(); +} + +class _LandingPageState extends State { + + + @override + void initState() { + + // ); + //show_landing_page.update((p0) => false); + // TODO: implement initState + super.initState(); + } + + @override + Widget build(BuildContext context) { +Provider.of(context).setContext(context); +Provider.of(context).iniState(); + + return Consumer( + builder: (context,data,child) { + return Scaffold( + body: Column( + children: [ + SizedBox( + height: getHeight(context)*0.88, + child: CarouselSlider( + carouselController:data.controller , + items: data.pages, + options: CarouselOptions( + autoPlay: false, + height: MediaQuery.of(context).size.height, + initialPage: 0, + enableInfiniteScroll: false, + viewportFraction: 1.0, + onPageChanged: (index, reason) { + data.indexChange(index); + }, + ), + ), + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: data.pages.map((page) { + int index = data.pages.indexOf(page); + return AnimatedContainer( + duration: const Duration(milliseconds: 100), + width:data.currentIndex == index? 20:5, + height:5, + margin:const EdgeInsets.symmetric(horizontal: 4), + decoration: BoxDecoration( + // shape: BoxShape.circle, + borderRadius: BorderRadius.circular(5), + color: data.currentIndex == index ? ThemeConfig.red : Colors.grey, + ), + ); + }).toList(), + ), + const Spacer(), + Padding( + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + child: Button( + shape: StyleConfig.buttonRadius(5.0), + color: ThemeConfig.red, + padding: EdgeInsets.symmetric(vertical: StyleConfig.padding14), + minWidth: getWidth(context), + onPressed: (){ + if(data.currentIndex==3) { + MakeRoute.goName(context, "/main"); + } else { + data.onChangeSlider(); + } + }, + child: Text(data.currentIndex==3?AppLang.local(context).skip:AppLang.local(context).next,style: StyleConfig.fs12cWhitefwBold,),), + ), + const SizedBox(height: 14,) + ], + ), + ); + } + ); + } +} + diff --git a/app_code/lib/screens/landing_pages/page_model.dart b/app_code/lib/screens/landing_pages/page_model.dart new file mode 100644 index 0000000..26d83e8 --- /dev/null +++ b/app_code/lib/screens/landing_pages/page_model.dart @@ -0,0 +1,38 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/helpers/common_functions.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; + + +class PageModel extends StatelessWidget { + String img,headerTxt,txt; + PageModel({Key? key,required this.img,required this.headerTxt,required this.txt}) : super(key: key); + + @override + Widget build(BuildContext context) { + AppLang.setContext(context); + return SizedBox( + + child: Center( + child: Column( + children: [ + Image.asset(getAssetImage(img),height: getHeight(context)*0.7,width: getWidth(context),fit: BoxFit.cover,), + Padding( + padding: EdgeInsets.symmetric(horizontal:StyleConfig.padding), + child: Column( + children: [ + Text(headerTxt,style: StyleConfig.fs18BlackfwBold,textAlign: TextAlign.center,), + SizedBox(height: 10,), + Text(txt,style: StyleConfig.fs12cLightfwEBold,textAlign: TextAlign.center,), + ], + ), + ), + + ], + ), + + ), + ); + } +} diff --git a/app_code/lib/screens/main.dart b/app_code/lib/screens/main.dart new file mode 100644 index 0000000..e14964c --- /dev/null +++ b/app_code/lib/screens/main.dart @@ -0,0 +1,165 @@ +import 'package:flutter/material.dart'; +import 'package:badges/badges.dart' as badges; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/custom_classes/system_data.dart'; +import 'package:grostore/helpers/common_functions.dart'; +import 'package:grostore/helpers/route.dart'; +import 'package:grostore/models/product_mini_response.dart'; +import 'package:grostore/presenters/main_persenter.dart'; +import 'package:grostore/presenters/stock_locations_presenter.dart'; +import 'package:grostore/screens/auth/login.dart'; +import 'package:grostore/screens/cart.dart'; +import 'package:provider/provider.dart'; +import '../presenters/cart_presenter.dart'; + +class Main extends StatefulWidget { + const Main({super.key}); + + @override + _MainState createState() => _MainState(); +} + +class _MainState extends State
{ + @override + void initState() { + Provider.of(context, listen: false).setContext(context); + Future.delayed(const Duration(seconds: 1)).then((value) { + Provider.of(context, listen: false) + .fetchLocations(context); + }); + + super.initState(); + } + + + @override + Widget build(BuildContext context) { + return Consumer(builder: (context, data, child) { + return PopScope( + onPopInvoked: (a) async { + if (data.bottomAppbarIndex != 0) { + data.onTapped(0); + } else { + return Future.delayed(Duration.zero); + } + return Future.delayed(Duration.zero); + }, + child: Scaffold( + extendBody: true, + body: data.bottomAppbarChildren[data.bottomAppbarIndex], + bottomNavigationBar: SizedBox( + height: 90, + child: BottomNavigationBar( + type: BottomNavigationBarType.fixed, + onTap: data.onTapped, + currentIndex: data.bottomAppbarIndex, + backgroundColor: Colors.white.withOpacity(0.95), + unselectedItemColor: const Color.fromRGBO(168, 175, 179, 1), + selectedItemColor: ThemeConfig.secondaryColor, + selectedLabelStyle: TextStyle( + fontWeight: FontWeight.w700, + color: ThemeConfig.secondaryColor, + fontSize: 12), + unselectedLabelStyle: const TextStyle( + fontWeight: FontWeight.w400, + color: Color.fromRGBO(168, 175, 179, 1), + fontSize: 12), + items: [ + BottomNavigationBarItem( + icon: Padding( + padding: const EdgeInsets.only(bottom: 8.0), + child: Image.asset( + getAssetIcon("home.png"), + color: data.bottomAppbarIndex == 0 + ? ThemeConfig.secondaryColor + : ThemeConfig.grey, + height: 16, + ), + ), + label: AppLang.local(context).home), + BottomNavigationBarItem( + icon: Padding( + padding: const EdgeInsets.only(bottom: 8.0), + child: Image.asset( + getAssetIcon("categories.png"), + color: data.bottomAppbarIndex == 1 + ? ThemeConfig.secondaryColor + : ThemeConfig.grey, + height: 16, + ), + ), + label: AppLang.local(context).categories), + BottomNavigationBarItem( + icon: Padding( + padding: const EdgeInsets.only(bottom: 8.0), + child: Image.asset( + getAssetIcon("orders.png"), + color: data.bottomAppbarIndex == 2 + ? ThemeConfig.secondaryColor + : const Color.fromRGBO(153, 153, 153, 1), + height: 16, + ), + ), + label: AppLang.local(context).orders), + BottomNavigationBarItem( + icon: Padding( + padding: const EdgeInsets.only(bottom: 8.0), + child: Image.asset( + getAssetIcon("profile.png"), + color: data.bottomAppbarIndex == 3 + ? ThemeConfig.secondaryColor + : ThemeConfig.grey, + height: 16, + ), + ), + label: AppLang.local(context).profile, + ), + ], + ), + ), + floatingActionButton: FloatingActionButton( + onPressed: () { + if (SystemData.isLogIn) { + MakeRoute.go(context, const Cart()); + } else { + Navigator.push( + context, MaterialPageRoute(builder: (context) => const Login())); + return; + } + }, + backgroundColor: ThemeConfig.amber, + child: badges.Badge( + position: badges.BadgePosition.custom(end: 12, bottom: -15), + badgeStyle: badges.BadgeStyle( + shape: badges.BadgeShape.circle, + badgeColor: ThemeConfig.red, + borderRadius: BorderRadius.circular(20), + borderSide: const BorderSide(width: 1, color: ThemeConfig.white) + //padding: EdgeInsets.all(5), + ), + badgeContent: Consumer( + builder: (context, cart, child) { + return Text( + "${cart.cartResponse.cartCount}", + style: const TextStyle(fontSize: 10, color: Colors.white), + ); + }, + ), + child: Padding( + padding: const EdgeInsets.all(10.0), + child: Image.asset( + getAssetIcon("cart.png"), + color: ThemeConfig.white, + height: 20, + ), + ), + ), + ), + floatingActionButtonLocation: + FloatingActionButtonLocation.centerDocked, + ), + ); + }); + } +} diff --git a/app_code/lib/screens/order/order_details.dart b/app_code/lib/screens/order/order_details.dart new file mode 100644 index 0000000..951f106 --- /dev/null +++ b/app_code/lib/screens/order/order_details.dart @@ -0,0 +1,472 @@ +import 'package:dotted_line/dotted_line.dart'; +import 'package:flutter/material.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/custom_ui/BoxDecorations.dart'; +import 'package:grostore/custom_ui/Button.dart'; +import 'package:grostore/custom_ui/common_appbar.dart'; +import 'package:grostore/custom_ui/order_item.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; +import 'package:grostore/presenters/order_details_presenter.dart'; +import 'package:grostore/screens/order/pdf_api.dart'; +import 'package:grostore/screens/order/pdf_invoice_api.dart'; + +import '../../helpers/common_functions.dart'; + +class OrderDetails extends StatefulWidget { + final code; + + const OrderDetails({super.key, this.code}); + + @override + State createState() => _OrderDetailsState(); +} + +class _OrderDetailsState extends State { + OrderDetailsPresenter orderDetailsPresenter = OrderDetailsPresenter(); + + @override + void initState() { + WidgetsBinding.instance.addPostFrameCallback((timeStamp) { + orderDetailsPresenter.initState(widget.code); + }); + super.initState(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: ThemeConfig.xxlightGrey, + appBar: CommonAppbar.show( + title: AppLang.local(context).order_details, context: context), + body: ListenableBuilder( + listenable: orderDetailsPresenter, + builder: (context, child) { + return RefreshIndicator( + onRefresh: () { + return orderDetailsPresenter.onRefresh(widget.code); + }, + child: SingleChildScrollView( + child: orderDetailsPresenter.isInitDetails + ? Container( + padding: EdgeInsets.symmetric( + horizontal: StyleConfig.padding), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const SizedBox(height: 24), + Container( + width: getWidth(context), + decoration: BoxDecorations.shadow(radius: 8), + padding: const EdgeInsets.symmetric( + horizontal: 8, vertical: 8), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + "Buyurtma raqami: ${orderDetailsPresenter.orderInfo?.code ?? ''}", + style: StyleConfig.fs14fwBold, + ), + const SizedBox( + height: 14, + ), + Text( + "Buyurtma sanasi: ${orderDetailsPresenter.orderInfo?.date ?? ''}", + style: StyleConfig.fs14fwBold, + ), + ], + ), + ), + const SizedBox( + height: 14, + ), + Text( + "Billing Address", + style: StyleConfig.fs14fwBold, + ), + const SizedBox( + height: 8, + ), + Container( + padding: const EdgeInsets.symmetric( + horizontal: 8, vertical: 8), + decoration: BoxDecorations.shadow(radius: 8), + child: buildBillingAddress(context)), + const SizedBox( + height: 14, + ), + Text( + "Shipping Address", + style: StyleConfig.fs14fwBold, + ), + const SizedBox( + height: 8, + ), + Container( + decoration: BoxDecorations.shadow(radius: 8), + padding: const EdgeInsets.symmetric( + horizontal: 8, vertical: 8), + child: buildShippingAddress(context)), + const SizedBox( + height: 14, + ), + Text( + "Products", + style: StyleConfig.fs14fwBold, + ), + const SizedBox( + height: 8, + ), + Container( + //decoration: BoxDecorations.shadow(radius: 8), + padding: const EdgeInsets.symmetric( + horizontal: 8, vertical: 8), + child: Column( + children: [ + /*Row( + + children: [ + Container( + width: getWidth(context)*0.35, + child: Text("Product Name")), + Container( + width: getWidth(context)*0.18, + child: Text("Unit Price")), + Container( + width: getWidth(context)*0.1, + child: Text("QTY")), + Container( + width: getWidth(context)*0.18, + child: Text("Total Price")), + ], + ), + Divider(color: ThemeConfig.fontColor,),*/ + GridView.builder( + //padding: EdgeInsets.only(left: StyleConfig.padding,right: StyleConfig.padding,bottom: 20), + shrinkWrap: true, + physics: + const NeverScrollableScrollPhysics(), + gridDelegate: + const SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 2, + crossAxisSpacing: 16, + mainAxisSpacing: 8, + childAspectRatio: 0.62), + itemBuilder: (context, index) => + OrderItem( + context: context, + onReq: (value) { + if (value) { + orderDetailsPresenter + .onRefresh(widget.code); + } + }, + item: orderDetailsPresenter + .orderInfo!.items[index], + ) + /*Container( + child: Row( + + children: [ + Container( + width: getWidth(context)*0.35, + child: Text(orderDetailsPresenter.orderInfo?.items[index].product?.name??"")), + Container( + width: getWidth(context)*0.18, + child: Text(showPrice(orderDetailsPresenter.orderInfo?.items[index].unitPrice??""))), + Container( + width: getWidth(context)*0.1, + child: Text("${orderDetailsPresenter.orderInfo?.items[index].qty??''}")), + Container( + width: getWidth(context)*0.18, + child: Text(showPrice(orderDetailsPresenter.orderInfo?.items[index].totalPrice??""))), + ], + ), + ), + , + separatorBuilder: (context, index) => Column( + children: [ + SizedBox( + height: 15, + ), + Divider(color: ThemeConfig.fontColor,), + ], + )*/ + , + itemCount: orderDetailsPresenter + .orderInfo?.items.length ?? + 0), + ], + ), + ), + const SizedBox( + height: 14, + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "Payment Method", + style: StyleConfig.fs14fwBold, + ), + Text( + orderDetailsPresenter + .orderInfo?.payment_method + .toUpperCase() ?? + "", + style: StyleConfig.fs14fwNormal, + ), + ], + ), + const SizedBox( + height: 14, + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "Sub Total", + style: StyleConfig.fs14fwBold, + ), + Text( + showPrice(orderDetailsPresenter + .orderInfo?.subTotalAmount ?? + ""), + style: StyleConfig.fs14fwNormal, + ), + ], + ), + const SizedBox( + height: 14, + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "Tips", + style: StyleConfig.fs14fwBold, + ), + Text( + showPrice(orderDetailsPresenter + .orderInfo?.totalTips ?? + ""), + style: StyleConfig.fs14fwNormal, + ), + ], + ), + const SizedBox( + height: 14, + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "Shipping Cost", + style: StyleConfig.fs14fwBold, + ), + Text( + showPrice(orderDetailsPresenter + .orderInfo?.totalShippingCost ?? + ""), + style: StyleConfig.fs14fwNormal, + ), + ], + ), + const SizedBox( + height: 14, + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "Coupon Discount", + style: StyleConfig.fs14fwBold, + ), + Text( + showPrice(orderDetailsPresenter + .orderInfo?.couponDiscountAmount ?? + ""), + style: StyleConfig.fs14fwNormal, + ), + ], + ), + const SizedBox( + height: 14, + ), + const DottedLine(), + const SizedBox( + height: 14, + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "Total Price", + style: StyleConfig.fs14fwBold, + ), + Text( + showPrice(orderDetailsPresenter + .orderInfo?.totalPrice ?? + ""), + style: StyleConfig.fs14fwBold + .copyWith(color: ThemeConfig.red), + ), + ], + ), + const SizedBox( + height: 24, + ), + Button( + minHeight: 40.0, + shape: StyleConfig.buttonRadius(10), + minWidth: MediaQuery.sizeOf(context).width, + color: ThemeConfig.red, + child: Text( + AppLang.local(context).download_invoice, + style: StyleConfig.fs14cWhitefwBold, + ), + onPressed: () async { + final pdf = await PdfInvoiceApi.generate(orderDetailsPresenter.orderInfo); + PdfApi.openFile(pdf); + }, + ), + const SizedBox( + height: 30, + ) + ], + ), + ) + : SizedBox( + height: getHeight(context), + child: + const Center(child: CircularProgressIndicator())), + ), + ); + }), + ); + } + + Column buildBillingAddress(BuildContext context) { + return Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + orderDetailsPresenter.orderInfo?.billingAddress?.address ?? "", + style: StyleConfig.fs14fwNormal, + maxLines: 1, + ), + Padding( + padding: const EdgeInsets.only(top: 5.0), + child: Row( + children: [ + Text( + "${AppLang.local(context).city}: ", + style: StyleConfig.fs14fwBold, + ), + Text( + orderDetailsPresenter.orderInfo?.billingAddress?.cityName ?? "", + style: StyleConfig.fs14fwNormal, + ), + ], + ), + ), + Padding( + padding: const EdgeInsets.only(top: 5.0), + child: Row( + children: [ + Text( + "${AppLang.local(context).state}: ", + style: StyleConfig.fs14fwBold, + ), + Text( + orderDetailsPresenter.orderInfo?.billingAddress?.stateName ?? + "", + style: StyleConfig.fs14fwNormal, + ), + ], + ), + ), + Padding( + padding: const EdgeInsets.only(top: 5.0), + child: Row( + children: [ + Text( + "${AppLang.local(context).country}: ", + style: StyleConfig.fs14fwBold, + ), + Text( + orderDetailsPresenter.orderInfo?.billingAddress?.countryName ?? + "", + style: StyleConfig.fs14fwNormal, + ), + ], + ), + ), + ], + ); + } + + Column buildShippingAddress(BuildContext context) { + return Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + orderDetailsPresenter.orderInfo?.shippingAddress?.address ?? "", + style: StyleConfig.fs14fwNormal, + maxLines: 1, + ), + Padding( + padding: const EdgeInsets.only(top: 5.0), + child: Row( + children: [ + Text( + "${AppLang.local(context).city}: ", + style: StyleConfig.fs14fwBold, + ), + Text( + orderDetailsPresenter.orderInfo?.shippingAddress?.cityName ?? + "", + style: StyleConfig.fs14fwNormal, + ), + ], + ), + ), + Padding( + padding: const EdgeInsets.only(top: 5.0), + child: Row( + children: [ + Text( + "${AppLang.local(context).state}: ", + style: StyleConfig.fs14fwBold, + ), + Text( + orderDetailsPresenter.orderInfo?.shippingAddress?.stateName ?? + "", + style: StyleConfig.fs14fwNormal, + ), + ], + ), + ), + Padding( + padding: const EdgeInsets.only(top: 5.0), + child: Row( + children: [ + Text( + "${AppLang.local(context).country}: ", + style: StyleConfig.fs14fwBold, + ), + Text( + orderDetailsPresenter.orderInfo?.shippingAddress?.countryName ?? + "", + style: StyleConfig.fs14fwNormal, + ), + ], + ), + ), + ], + ); + } +} diff --git a/app_code/lib/screens/order/orders.dart b/app_code/lib/screens/order/orders.dart new file mode 100644 index 0000000..ec7feac --- /dev/null +++ b/app_code/lib/screens/order/orders.dart @@ -0,0 +1,148 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/custom_ui/Button.dart'; +import 'package:grostore/custom_ui/common_appbar.dart'; +import 'package:grostore/custom_ui/order_view_model.dart'; +import 'package:grostore/custom_ui/shimmers.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; +import 'package:grostore/helpers/route.dart'; +import 'package:grostore/presenters/order_presenter.dart'; +import 'package:grostore/screens/main.dart'; +import 'package:provider/provider.dart'; + +class Orders extends StatefulWidget { + bool fromBottomBar; + bool fromCheckOut; + + Orders({Key? key, this.fromBottomBar = true,this.fromCheckOut=false}) : super(key: key); + + @override + State createState() => _OrdersState(); +} + +class _OrdersState extends State { +OrderPresenter order = OrderPresenter(); + + @override + void initState() { + super.initState(); + Provider.of(context, listen: false).setContext(context); + WidgetsBinding.instance.addPostFrameCallback((timeStamp) { + Provider.of(context, listen: false).initState(); + }); + } + + + @override + Widget build(BuildContext context) { + return PopScope( + onPopInvoked: (a) async { + if(widget.fromCheckOut){ + MakeRoute.goAndRemoveAll(context, const Main()); + return Future(() => true); + } + return Future(() => true); + }, + child: Scaffold( + backgroundColor: ThemeConfig.xxlightGrey, + appBar: CommonAppbar.show( + title: AppLang.local(context).orders, + context: context, + gotoMain: widget.fromCheckOut, + showBackButton: !widget.fromBottomBar), + body: Consumer(builder: (context, data, child) { + return RefreshIndicator( + onRefresh: () => data.onRefresh(), + child: SingleChildScrollView( + child: Column( + children: [ + const SizedBox( + height: 10, + ), + buildTapbar(context, data), + if (!data.isOrdersInit) + SizedBox( + width: getWidth(context), + height: getHeight(context) - 100, + child: Shimmers.list(10, getWidth(context), 80), + ) + else if (data.isOrdersInit && data.orders.isNotEmpty) + ListView.separated( + padding: EdgeInsets.only( + left: 10, + right: 10, + top: 10, + bottom: widget.fromBottomBar ? 80 : 10), + scrollDirection: Axis.vertical, + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemCount: data.orders.length, + separatorBuilder: (context, index) { + return const SizedBox( + height: 10, + ); + }, + itemBuilder: (context, index) { + return Button( + //padding: EdgeInsets.symmetric(vertical: 10,horizontal: 20), + minWidth: 100, + onPressed: () {}, + child: OrderViewModel( + orderInfo: data.orders[index], + context: context, + )); + }, + ) + else + Container( + height: getHeight(context)-180, + alignment: Alignment.center, + child: Text(AppLang.local(context).data_is_not_available)) + ], + ), + ), + ); + }), + ), + ); + } + + SizedBox buildTapbar(BuildContext context, OrderPresenter data) { + return SizedBox( + // color: Colors.red, + width: getWidth(context), + height: 40, + child: ListView.separated( + padding: const EdgeInsets.symmetric(horizontal: 10), + scrollDirection: Axis.horizontal, + itemCount: data.searchKey.values.length, + separatorBuilder: (context, index) { + return const SizedBox( + width: 10, + ); + }, + itemBuilder: (context, index) { + return Button( + padding: const EdgeInsets.symmetric(vertical: 3, horizontal: 15), + color: data.keySelectedIndex == index + ? ThemeConfig.red + : ThemeConfig.white, + minWidth: 80, + minHeight: 40.0, + shape: StyleConfig.buttonRadius(10), + onPressed: () { + data.onChangeIndex(index); + }, + child: Text( data.searchKey.values.elementAt(index), + style: data.keySelectedIndex == index + ? StyleConfig.fs14cWhitefwBold + : StyleConfig.fs14fwBold, + ), + ); + }, + ), + ); + } +} diff --git a/app_code/lib/screens/order/pdf_api.dart b/app_code/lib/screens/order/pdf_api.dart new file mode 100644 index 0000000..e2313fa --- /dev/null +++ b/app_code/lib/screens/order/pdf_api.dart @@ -0,0 +1,27 @@ +import 'dart:io'; + +import 'package:open_file/open_file.dart'; +import 'package:path_provider/path_provider.dart'; +import 'package:pdf/widgets.dart'; + +class PdfApi { + static Future saveDocument({ + required String name, + required Document pdf, + }) async { + final bytes = await pdf.save(); + + final dir = await getApplicationDocumentsDirectory(); + final file = File('${dir.path}/$name'); + + await file.writeAsBytes(bytes); + + return file; + } + + static Future openFile(File file) async { + final url = file.path; + + await OpenFile.open(url); + } +} diff --git a/app_code/lib/screens/order/pdf_invoice_api.dart b/app_code/lib/screens/order/pdf_invoice_api.dart new file mode 100644 index 0000000..f7d5760 --- /dev/null +++ b/app_code/lib/screens/order/pdf_invoice_api.dart @@ -0,0 +1,152 @@ +import 'dart:io'; +import 'package:flutter/material.dart' show Colors; +import 'package:flutter/services.dart'; +import 'package:grostore/helpers/common_functions.dart'; +import 'package:grostore/screens/order/pdf_api.dart'; +import 'package:pdf/pdf.dart'; +import 'package:pdf/widgets.dart' as pw; +import 'package:pdf/widgets.dart'; + +import '../../models/order/order_details_response.dart'; + +class PdfInvoiceApi { + static Future generate(OrderDetailsInfo? detailsInfo) async { + final img = await rootBundle.load(getAssetLogo("logo2x2.png")); + final imageBytes = img.buffer.asUint8List(); + + final imgQr = await rootBundle.load(getAssetLogo("img.png")); + final qr = imgQr.buffer.asUint8List(); + final pdf = Document(); + + pdf.addPage(MultiPage( + build: (context) => [ + buildLogo(imageBytes), + pw.SizedBox(height: 0.3 * PdfPageFormat.cm), + buildDottedDivider(), + pw.SizedBox(height: 0.5 * PdfPageFormat.cm), + buildAddress( + "${detailsInfo?.shippingAddress?.address}, ${detailsInfo?.shippingAddress?.cityName}, ${detailsInfo?.shippingAddress?.stateName}, ${detailsInfo?.shippingAddress?.countryName}"), + pw.SizedBox(height: 0.3 * PdfPageFormat.cm), + buildPhoneNumber("${detailsInfo?.payment_method}"), + pw.SizedBox(height: 0.5 * PdfPageFormat.cm), + buildDottedDivider(), + pw.SizedBox(height: 0.5 * PdfPageFormat.cm), + buildCheckDate("${detailsInfo?.code}", "${detailsInfo?.date}"), + pw.SizedBox(height: 0.3 * PdfPageFormat.cm), + buildDottedDivider(), + pw.SizedBox(height: 0.5 * PdfPageFormat.cm), + buildItemsList(detailsInfo?.items ?? []), + pw.SizedBox(height: 0.7 * PdfPageFormat.cm), + buildDottedDivider(), + pw.SizedBox(height: 0.5 * PdfPageFormat.cm), + buildSummery(detailsInfo), + buildDottedDivider(), + pw.SizedBox(height: 1.2 * PdfPageFormat.cm), + buildQrCode(qr) + ], + //footer: (context) => buildFooter(invoice), + )); + + return PdfApi.saveDocument(name: 'Check.pdf', pdf: pdf); + } + + static Widget buildLogo(Uint8List image) { + return Row(mainAxisAlignment: pw.MainAxisAlignment.spaceBetween, children: [ + Text("Karvon market", + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold, + )), + pw.Image(pw.MemoryImage(image), height: 40) + ]); + } + + static Widget buildDottedDivider() { + return Row( + children: List.generate( + 800 ~/ 10, + (index) => index % 2 == 0 + ? Expanded( + child: pw.Container(height: 1, color: PdfColor(0, 0, 0)), + ) + : Expanded( + child: Container(height: 2, color: null), + ))); + } + + static Widget buildAddress(String address) { + return pw.Text(address, style: TextStyle(fontSize: 14)); + } + + static Widget buildPhoneNumber(String phoneNumber) { + return pw.Text("To'lov turi: $phoneNumber", style: TextStyle(fontSize: 14)); + } + + static Widget buildCheckDate(String checkNumber, String date) { + return Column( + mainAxisAlignment: pw.MainAxisAlignment.start, + crossAxisAlignment: pw.CrossAxisAlignment.start, + children: [ + Text("Check raqami: $checkNumber", style: TextStyle(fontSize: 14)), + pw.SizedBox(height: 0.2 * PdfPageFormat.cm), + Text("Chiqarilgan: $date", style: TextStyle(fontSize: 14)) + ]); + } + + static Widget buildItemsList(List items) { + return Column( + mainAxisSize: pw.MainAxisSize.min, + mainAxisAlignment: pw.MainAxisAlignment.start, + children: List.generate( + items.length, + (index) => Column( + crossAxisAlignment: pw.CrossAxisAlignment.start, + children: [ + Text("${index + 1}.${items[index].product?.name}", + style: TextStyle( + fontSize: 16, fontWeight: pw.FontWeight.bold)), + pw.SizedBox(height: 0.1 * PdfPageFormat.cm), + Row( + mainAxisAlignment: pw.MainAxisAlignment.spaceAround, + children: [ + Text("Narxi:", + style: TextStyle( + fontSize: 16, fontWeight: pw.FontWeight.normal)), + Text(items[index].unitPrice, + style: TextStyle( + fontSize: 15, fontWeight: pw.FontWeight.normal)), + Text("${items[index].qty} ta", + style: TextStyle( + fontSize: 15, fontWeight: pw.FontWeight.normal)), + Text(items[index].totalPrice, + style: TextStyle( + fontSize: 17, fontWeight: pw.FontWeight.bold)), + ]) + ]), + )); + } + + static Widget buildSummery(OrderDetailsInfo? info) { + return Column( + crossAxisAlignment: pw.CrossAxisAlignment.start, + mainAxisAlignment: pw.MainAxisAlignment.start, + children: [ + Text("Mahsulot narxi: ${info?.subTotalAmount}", + style: TextStyle(fontSize: 15)), + pw.SizedBox(height: 0.2 * PdfPageFormat.cm), + Text("Yuk tashish narxi:${info?.totalShippingCost}", + style: TextStyle(fontSize: 15)), + pw.SizedBox(height: 0.2 * PdfPageFormat.cm), + Text("Chegirmasi: ${info?.couponDiscountAmount}", + style: TextStyle(fontSize: 15)), + pw.SizedBox(height: 0.2 * PdfPageFormat.cm), + Text("Jami narxi: ${info?.totalPrice}", + style: TextStyle(fontSize: 15, fontWeight: pw.FontWeight.bold)), + pw.SizedBox(height: 0.5 * PdfPageFormat.cm), + ]); + } + + static Widget buildQrCode(Uint8List qrcode) { + return pw.Center(child: pw.Image(pw.MemoryImage(qrcode), height: 200)); + } +} diff --git a/app_code/lib/screens/pages.dart b/app_code/lib/screens/pages.dart new file mode 100644 index 0000000..6be993f --- /dev/null +++ b/app_code/lib/screens/pages.dart @@ -0,0 +1,44 @@ + + + +import 'package:flutter/material.dart'; +import 'package:grostore/custom_ui/common_appbar.dart'; +import 'package:grostore/presenters/page_presenter.dart'; +import 'package:webview_flutter/webview_flutter.dart'; + +class Pages extends StatefulWidget { + final String slug; + + const Pages({super.key, required this.slug}); + + @override + State createState() => _PagesState(); +} + +class _PagesState extends State { + PagePresenter pagePresenter = PagePresenter(); + + @override + void initState() { + WidgetsBinding.instance.addPostFrameCallback((timeStamp) { + pagePresenter.initState(widget.slug); + }); + super.initState(); + } + + @override + Widget build(BuildContext context) { + return ListenableBuilder( + listenable: pagePresenter, + builder: (context,child) { + return Scaffold( + appBar: CommonAppbar.show(title: pagePresenter.pageInfo?.title??"", context: context), + body:Padding( + padding: const EdgeInsets.all(8.0), + child: WebViewWidget(controller: pagePresenter.controller,), + ) , + ); + } + ); + } +} diff --git a/app_code/lib/screens/payment.dart b/app_code/lib/screens/payment.dart new file mode 100644 index 0000000..30f09cb --- /dev/null +++ b/app_code/lib/screens/payment.dart @@ -0,0 +1,67 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/configs/app_config.dart'; +import 'package:grostore/custom_ui/common_appbar.dart'; +import 'package:grostore/helpers/route.dart'; +import 'package:grostore/helpers/shared_value_helper.dart'; +import 'package:grostore/presenters/page_presenter.dart'; +import 'package:grostore/presenters/payment_presenter.dart'; +import 'package:grostore/screens/order/orders.dart'; +import 'package:webview_flutter/webview_flutter.dart'; + +class Payment extends StatefulWidget { + final int code; + final String payment_method; + final String title; + + const Payment( + {super.key, + required this.code, + required this.payment_method, + required this.title}); + + @override + State createState() => _PaymentState(); +} + +class _PaymentState extends State { + PaymentPresenter paymentPresenter = PaymentPresenter(); + + @override + void initState() { + // TODO: implement initState + + // WidgetsBinding.instance.addPostFrameCallback((timeStamp) { + // paymentPresenter.initState(widget.code, widget.payment_method); + // }); + paymentPresenter.controller.loadRequest( + Uri.parse( + "${AppConfig.apiUrl}/order/online-payment?code=${widget.code}&payment_method=${widget.payment_method}"), + headers: {"Authorization": "Bearer ${access_token.$}"}); + + paymentPresenter.controller.setNavigationDelegate(NavigationDelegate( + onPageFinished: (page){ + if(page.contains('checkout-complete')||page.contains('success')||page.contains("cancel")||page.contains("callback")){ + MakeRoute.go(context, Orders(fromBottomBar: false,fromCheckOut: true,)); + } + } + )); + super.initState(); + } + + @override + Widget build(BuildContext context) { + return ListenableBuilder( + listenable: paymentPresenter, + builder: (context, child) { + return Scaffold( + appBar: CommonAppbar.show(title: widget.title, context: context), + body: Padding( + padding: const EdgeInsets.all(8.0), + child: WebViewWidget( + controller: paymentPresenter.controller, + ), + ), + ); + }); + } +} diff --git a/app_code/lib/screens/product_details.dart b/app_code/lib/screens/product_details.dart new file mode 100644 index 0000000..8ba7467 --- /dev/null +++ b/app_code/lib/screens/product_details.dart @@ -0,0 +1,548 @@ +import 'package:carousel_slider/carousel_slider.dart'; +import 'package:flutter/material.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/custom_classes/system_data.dart'; +import 'package:grostore/custom_ui/BoxDecorations.dart'; +import 'package:grostore/custom_ui/Button.dart'; +import 'package:grostore/custom_ui/Image_view.dart'; +import 'package:grostore/custom_ui/common_appbar.dart'; +import 'package:grostore/custom_ui/product_card.dart'; +import 'package:grostore/custom_ui/shimmers.dart'; +import 'package:grostore/custom_ui/toast_ui.dart'; +import 'package:grostore/helpers/common_functions.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; +import 'package:grostore/helpers/route.dart'; +import 'package:grostore/presenters/cart_presenter.dart'; +import 'package:grostore/presenters/product_details_presenter.dart'; +import 'package:grostore/presenters/wishlist_presenter.dart'; +import 'package:grostore/screens/auth/login.dart'; +import 'package:grostore/screens/cart.dart'; +import 'package:badges/badges.dart' as badges; +import 'package:provider/provider.dart'; + +class ProductDetails extends StatefulWidget { + late String slug; + + ProductDetails({Key? key, required this.slug}) : super(key: key); + + @override + State createState() => _ProductDetailsState(); +} + +class _ProductDetailsState extends State { + // WishlistPresenter wishlistPresenter = WishlistPresenter(); + + @override + void initState() { + Provider.of(context, listen: false) + .setContext(context); + Future.delayed(const Duration(seconds: 0)).then((value) { + Provider.of(context, listen: false) + .iniState(widget.slug); + }); + + super.initState(); + } + + @override + void dispose() { + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Consumer(builder: (context, data, child) { + return Scaffold( + backgroundColor: ThemeConfig.xxlightGrey, + appBar: CommonAppbar.show( + title: data.productInfo != null ? data.productInfo!.name : "", + context: context), + body: RefreshIndicator( + onRefresh: data.onRefresh, + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + buildSliderSection(data), + buildProductNameSection(context, data), + const SizedBox( + height: 16, + ), + Padding( + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + child: Text( + AppLang.local(context).description, + style: StyleConfig.fs14fwBold, + ), + ), + const SizedBox( + height: 16 + ), + data.isProductInfoInitial + ? Padding( + padding: + EdgeInsets.symmetric(horizontal: StyleConfig.padding), + child: Text( + data.productInfo?.shortDescription??"", + style: StyleConfig.fs14fwNormal.copyWith(height: 1.8), + ), + ) + : Shimmers(width: getWidth(context), height: 150), + const SizedBox( + height: 16, + ), + if (data.productInfo != null) + Container( + padding: + EdgeInsets.symmetric(horizontal: StyleConfig.padding), + child: ListView.separated( + physics:const NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemBuilder: (context, variationIndex) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + data.variations[variationIndex].name, + style: StyleConfig.fs16fwBold, + ), + const SizedBox( + height: 10, + ), + Wrap( + spacing: 10, + children: List.generate( + data.variations[variationIndex].values + .length, (valueIndex) { + return Container( + padding: const EdgeInsets.symmetric( + horizontal: 5, vertical: 5), + decoration: BoxDecorations.shadow(radius: 6) + .copyWith( + border: Border.all( + color: data + .variations[ + variationIndex] + .values[valueIndex] + .isChosen + ? ThemeConfig.accentColor + : ThemeConfig.grey, + width: 2)), + child: InkWell( + onTap: () { + data.onChangeVariation( + variationIndex, valueIndex); + }, + child: data.variations[variationIndex] + .id == + 2 + ? Container( + height: 40, + width: 40, + color: Color(int.parse(data + .variations[variationIndex] + .values[valueIndex] + .code)), + ) + : Text( + data.variations[variationIndex] + .values[valueIndex].name, + style: StyleConfig.fs14fwNormal, + ), + ), + ); + }), + ) + ], + ); + }, + separatorBuilder: (context, index) { + return const SizedBox( + height: 16, + ); + }, + itemCount: data.variations.length), + ), + const SizedBox( + height: 16, + ), + buildPriceAndQuantitySection(context, data), + const SizedBox( + height: 16, + ), + Padding( + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + child: Text( + AppLang.local(context).related_product_ucf, + style: StyleConfig.fs16fwBold, + ), + ), + const SizedBox( + height: 16, + ), + buildRelatedProductSection(data), + ], + ), + ), + ), + /*floatingActionButton: Container( + //margin: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + width: getWidth(context), + height: 70, + //color: Colors.red, + child:Button( + shape: StyleConfig.buttonRadius(10), + color: ThemeConfig.accentColor, + minWidth: getWidth(context)-40, + onPressed: (){}, + child: Text(AppLang.local(context).add_to_cart,style: StyleConfig.fs14cWhitefwNormal,), + ), + ), +*/ + + // floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat, + bottomNavigationBar: data.selectedVariation != null + ? SizedBox( + width: getWidth(context), + height: 50, + child: Button( + color: ThemeConfig.fontColor, + minWidth: getWidth(context) - 40, + onPressed: () { + if (SystemData.isLogIn) { + MakeRoute.go(context, const Cart()); + }else{ + MakeRoute.go(context, const Login()); + } + }, + child: Consumer( + builder: (context,data,child) { + return Padding( + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text("Total: ${showPrice(data.cartResponse.subTotal)}",style: StyleConfig.fs16cWhitefwBold,), + Text( + AppLang.local(context).go_to_cart, + style: StyleConfig.fs16cWhitefwBold, + ), + ], + ), + ); + } + ), + ), + ) + : null, + ); + }); + } + + Widget relatedProductShimmer() { + return GridView.builder( + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 2, + crossAxisSpacing: 16, + mainAxisSpacing: 16, + childAspectRatio: 0.8), + itemCount: 10, + itemBuilder: (context, index) { + return Shimmers( + width: 160, + height: 186, + radius: 8, + ); + }); + } + + Widget buildRelatedProductSection(ProductDetailsPresenter data) { + return data.isRelatedInitial + ? GridView.builder( + padding: EdgeInsets.only( + left: StyleConfig.padding, + right: StyleConfig.padding, + bottom: StyleConfig.padding, + ), + shrinkWrap: true, + physics:const NeverScrollableScrollPhysics(), + gridDelegate:const SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 2, + crossAxisSpacing: 16, + mainAxisSpacing: 16, + childAspectRatio: 0.65 + ), + itemCount: data.relatedProducts.length, + itemBuilder: (context, index) { + return ProductCard( + product: data.relatedProducts[index], + context: this.context, + ); + }) + : relatedProductShimmer(); + } + + Container buildPriceAndQuantitySection( + BuildContext context, ProductDetailsPresenter data) { + return Container( + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + height: 50, + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + AppLang.local(context).price, + style: StyleConfig.fs14fwBold, + ), + const SizedBox( + height: 6, + ), + data.isProductInfoInitial + ? Text(showPrice(data.selectedVariation!.price), + style: StyleConfig.fs16cRedfwBold) + : Shimmers(width: 100, height: 25), + ], + ), + const Spacer(), + + + /// Add to cart or login route + Consumer( + // listenable: wishlistPresenter, + builder: (context,wishlistPresenter,child) { + return Button( + onPressed: () { + if(SystemData.isLogIn) { + if(wishlistPresenter.isAddedWishlist) { + wishlistPresenter.deleteWishlist(data.productInfo!.id,context); + }else{ + wishlistPresenter.addWishlist(data.productInfo!.id, context); + } + + } else { + MakeRoute.go(context,const Login()); + } + }, + child: Icon(wishlistPresenter.isAddedWishlist? Icons.favorite:Icons.favorite_border,color: ThemeConfig.red,size: 35,)); + }, + ), + Button( + minWidth:40, + shape: StyleConfig.buttonRadius(6), + color: ThemeConfig.red, + padding: const EdgeInsets.symmetric(horizontal: 24,vertical: 12), + onPressed: () { + if (SystemData.isLogIn) { + if (data.selectedVariation!.sock > 0) { + Provider.of(context, listen: false) + .addToCart(data.selectedVariation!.id, + data.quantity, context); + } else { + ToastUi.show(context, "Stock out"); + } + }else{ + MakeRoute.go(context, const Login()); + } + + }, + child:Text(AppLang.local(context).add_to_cart,style: StyleConfig.fs12cWhitefwBold,) + /* Icon( + Icons.add_shopping_cart_outlined, + color: ThemeConfig.white, + size: 18, + ),*/ + ), + /*Button( + + minWidth: 30, + shape: CircleBorder(), + color: ThemeConfig.fontColor, + padding: EdgeInsets.all(8), + onPressed: () { + data.decrementQty(); + }, + child: Icon( + Icons.remove, + color: ThemeConfig.white, + size: 18, + ), + ), + Container( + padding: EdgeInsets.symmetric(horizontal: 5), + constraints: BoxConstraints(minWidth: 40), + alignment: Alignment.center, + child: Text( + "${data.quantity}", + style: StyleConfig.fs14fwBold, + )), + Button( + minWidth: 30, + shape: CircleBorder(), + color: ThemeConfig.accentColor, + padding: EdgeInsets.all(8), + onPressed: () { + data.incrementQty(); + }, + child: Icon( + Icons.add, + color: ThemeConfig.white, + size: 18, + ), + ),*/ + ], + ), + ); + } + + Container buildProductNameSection( + BuildContext context, ProductDetailsPresenter data) { + return Container( + height: 60, + width: getWidth(context), + color: ThemeConfig.white, + child: Container( + alignment: Alignment.bottomLeft, + padding: EdgeInsets.only(left: StyleConfig.padding), + decoration: BoxDecorations.customRadius( + radius: const BorderRadius.only(topLeft: Radius.circular(70)), + color: ThemeConfig.xxlightGrey), + child: data.isProductInfoInitial + ? Text( + data.productInfo!.name, + style: StyleConfig.fs20fwBold, + ) + : Shimmers(width: 170, height: 30)), + ); + } + + Widget buildSliderSection(ProductDetailsPresenter data) { + return Container( + height: 200, + decoration: BoxDecorations.customRadius( + radius: const BorderRadius.only(bottomRight: Radius.circular(70))), + child: Column( + children: [ + Stack( + children: [ + CarouselSlider( + items: data.isProductInfoInitial + ? buildImages(data) + : sliderShimmer(), + options: CarouselOptions( + aspectRatio: 1, + height: 150, + enlargeCenterPage: true, + scrollDirection: Axis.horizontal, + autoPlay: true, + onPageChanged: (index, reason) { + data.onChangeBannerIndex(index); + }, + ), + ), + /*Positioned( + right: 10, + top: 10, + child: Button( + onPressed: () { + MakeRoute.go(context, const Cart()); + }, + shape: StyleConfig.buttonRadius(30), + padding: EdgeInsets.all(8), + color:ThemeConfig.amber, + minWidth: 35, + child: badges.Badge( + position: badges.BadgePosition.custom(end: 12, bottom: -15), + badgeStyle: badges.BadgeStyle( + shape: badges.BadgeShape.circle, + badgeColor: ThemeConfig.red, + borderRadius: BorderRadius.circular(20), + borderSide: BorderSide(width: 1, color: ThemeConfig.white) + //padding: EdgeInsets.all(5), + ), + child: Padding( + padding: const EdgeInsets.all(10.0), + child: Image.asset( + getAssetIcon("cart.png"), + color: ThemeConfig.white, + height: 20, + ), + ), + badgeContent: Consumer( + builder: (context, cart, child) { + return Text( + "${cart.cartResponse.cartCount}", + style: TextStyle(fontSize: 10, color: Colors.white), + ); + }, + ), + ), + ) + )*/ + ], + ), + const SizedBox( + height: 24, + ), + if (data.isProductInfoInitial) + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: data.productInfo!.galleryImages.map((page) { + int index = data.productInfo!.galleryImages.indexOf(page); + return AnimatedContainer( + duration: const Duration(milliseconds: 100), + width: data.currentSlider == index ? 20 : 8, + height: 8, + margin: const EdgeInsets.symmetric(horizontal: 4), + decoration: BoxDecoration( + // shape: BoxShape.circle, + borderRadius: BorderRadius.circular(5), + color: data.currentSlider == index + ? ThemeConfig.accentColor + : ThemeConfig.accentColor.withOpacity(0.4), + ), + ); + }).toList(), + ), + ], + ), + ); + } + + Widget imageSample(String data) { + // print(data); + return Container( + margin: const EdgeInsets.symmetric(horizontal: 5), + child: ImageView( + url: data, + width: getWidth(context) - 40, + height: 200, + ), + ); + } + + buildImages(ProductDetailsPresenter data) { + List sliders = []; + data.productInfo!.galleryImages.forEach((image) { + sliders.add(imageSample(image)); + }); + return sliders; + } + + List sliderShimmer() { + return [ + Shimmers(width: getWidth(context) - 40, height: 200), + Shimmers(width: getWidth(context) - 40, height: 200), + Shimmers(width: getWidth(context) - 40, height: 200), + Shimmers(width: getWidth(context) - 40, height: 200), + ]; + } +} diff --git a/app_code/lib/screens/profile.dart b/app_code/lib/screens/profile.dart new file mode 100644 index 0000000..17bde1a --- /dev/null +++ b/app_code/lib/screens/profile.dart @@ -0,0 +1,300 @@ + +import 'package:flutter/material.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/custom_classes/system_data.dart'; +import 'package:grostore/custom_ui/BoxDecorations.dart'; +import 'package:grostore/custom_ui/Button.dart'; +import 'package:grostore/custom_ui/Image_view.dart'; +import 'package:grostore/helpers/common_functions.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; +import 'package:grostore/helpers/route.dart'; +import 'package:grostore/presenters/auth/auth_presenter.dart'; +import 'package:grostore/screens/address/addresses.dart'; +import 'package:grostore/screens/auth/login.dart'; +import 'package:grostore/screens/coupons.dart'; +import 'package:grostore/screens/help_center.dart'; +import 'package:grostore/screens/main.dart'; +import 'package:grostore/screens/order/orders.dart'; +import 'package:grostore/screens/pages.dart'; +import 'package:grostore/screens/profile_edit.dart'; +import 'package:grostore/screens/refund.dart'; +import 'package:grostore/screens/setting.dart'; +import 'package:grostore/screens/stock_locations.dart'; +import 'package:grostore/screens/track_order.dart'; +import 'package:grostore/screens/wallet.dart'; +import 'package:grostore/screens/wishlist.dart'; +import 'package:provider/provider.dart'; +import 'package:route_transitions/route_transitions.dart'; +import 'package:toast/toast.dart'; + +class Account extends StatefulWidget { + const Account({super.key}); + + @override + _AccountState createState() => _AccountState(); +} + +class _AccountState extends State with TickerProviderStateMixin { + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: ThemeConfig.secondaryColor, + // appBar: AppBar( + // backgroundColor: ThemeConfig.accentColor, + // elevation: 0, + // leading: SizedBox.shrink(), + // actions: [ + // buildBackButtonContainer(context), + // ], + // ), + // PreferredSize(preferredSize: Size(getWidth(context),40), + // child: + // ), + body: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const SizedBox(height: 15,), + Expanded( + flex: 1, + child: Container( + height: 80, + width: getWidth(context), + padding: EdgeInsets.symmetric( + horizontal: StyleConfig.padding, vertical: 10), + child:SystemData.isLogIn ? + Row( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: const EdgeInsets.all(15.0), + child: ImageView(url: SystemData.userInfo.avatar,fit: BoxFit.cover, width: 50, height: 50,radius:50), + ), + const SizedBox(width: 14,), + + /// Name and Phone number. + Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + + Text(SystemData.userInfo.name??"JAhongir",style: StyleConfig.fs16cWhitefwBold,), + const SizedBox(height: 10,), + Text(SystemData.userInfo.phone,style: StyleConfig.fs12cWhitefwBold,), + ], + ), + const Spacer(), + Button( + onPressed: (){ + MakeRoute.go(context, ProfileEdit()); + }, + minWidth: 60, + padding: const EdgeInsets.symmetric(horizontal: 10,vertical: 10), + shape: StyleConfig.buttonRadius(8).copyWith( + side: const BorderSide(width: 1, color: ThemeConfig.white)) + // RoundedRectangleBorder(borderRadius: BorderRadius.c), + , + child: Text(AppLang.local(context).edit_profile_ucf, style: StyleConfig.fs12cWhitefwBold,), + ) + ], + ) + : + /// ELSE Condition + Row( + children: [ + Container( + height:50,width: 50, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(45), + color: ThemeConfig.extraDarkGrey + ), + padding: const EdgeInsets.symmetric(horizontal: 14,vertical: 14), + child: Image.asset(getAssetIcon("profile.png"),color: ThemeConfig.lightGrey,), + ), + const SizedBox(width: 10,), + Button(minWidth: 20, + // shape: StyleConfig.buttonRadius(10).copyWith(side: BorderSide(width: 1,color: ThemeConfig.white)) + // RoundedRectangleBorder(borderRadius: BorderRadius.c), + onPressed:(){ + MakeRoute.go(context, const Login()); + }, + child: Text("Login", style: StyleConfig.fs16fwBold.copyWith( + decoration: TextDecoration.underline),), + ) + ], + ), + ), + ), + // SizedBox(height: 20,), + Expanded( + flex: 6, + child: Container( + padding: EdgeInsets.only(left: StyleConfig.padding, + right: StyleConfig.padding, + top: 40), + //height: getHeight(context)-220, + decoration: BoxDecorations.customRadius(radius: const BorderRadius.only( + topLeft: Radius.circular(10), topRight: Radius.circular(10)), + color: ThemeConfig.white), + child: SingleChildScrollView( + child: Column( + children: [ + + optionModel(AppLang + .local(context) + .pick_a_location, getAssetIcon("address.png"), StockLocations()), + if(SystemData.isLogIn) + Column( + children: [ + /// #Voucherva Cupon + // optionModel(AppLang + // .local(context) + // .voucher_n_offers_ucf, getAssetIcon("coupons.png"), + // const Coupons()), + optionModel(AppLang + .local(context) + .favorite, getAssetIcon("favorite.png"), + const Wishlist()), + optionModel(AppLang + .local(context) + .order_n_recording_ucf, getAssetIcon("orders.png"), + Orders(fromBottomBar: false,)), + // optionModel(AppLang + // .local(context) + // .my_profile_ucf, getAssetIcon("profile.png"), + // Container()), + optionModel(AppLang.local(context).address, getAssetIcon("address.png"),const Addresses()), + // optionModel(AppLang + // .local(context) + // .notification, getAssetIcon("notification.png"), + // Container()), + // optionModel(AppLang + // .local(context) + // .security, getAssetIcon("security.png"), + // Container()), + optionModel(AppLang + .local(context) + .track_my_order_ucf, getAssetIcon("track.png"), + const TrackOrder()), + // optionModel(AppLang + // .local(context) + // .wallet_history_ucf, getAssetIcon("wallet.png"), + // const Wallet()), + // optionModel(AppLang + // .local(context) + // .refund_history_ucf, getAssetIcon("refund.png"), + // const Refund()), + + ], + ), + + optionModel(AppLang + .local(context) + .help_center_ucf, getAssetIcon("help_center.png"), + const HelpCenter()), + optionModel(AppLang + .local(context) + .settings, getAssetIcon("setting.png"),const Setting()), + optionModel(AppLang + .local(context) + .terms_n_conditions_ucf, + getAssetIcon("terms_condition.png"), const Pages(slug: "terms-conditions")), + + if(SystemData.isLogIn) + logoutModel(AppLang + .local(context) + .log_out_ucf, getAssetIcon("logout.png"),(){ + Provider.of(context,listen: false).logout(context); + MakeRoute.goAndRemoveAll(context, const Main()); + }), + + if(!SystemData.isLogIn) + optionModel(AppLang + .local(context) + .login, getAssetIcon("login.png"), const Login()), + + ], + ), + ), + + ), + ) + ], + ), + ); + } + + Container buildBackButtonContainer(BuildContext context) { + return Container( + height: 47, + alignment: Alignment.topRight, + child: SizedBox( + width: 47, + child: Button( + minWidth: 0, + padding: EdgeInsets.zero, + onPressed: () { + pop(context); + }, + child: const Icon( + Icons.close, + size: 30, + color: ThemeConfig.white, + ), + ), + ), + ); + } + + + Widget optionModel(String title, String logo, Widget route) { + return Container( + margin: EdgeInsets.only(bottom: StyleConfig.xsSectionSpacer), + height: 50, + child: Button( + minWidth: 50, + onPressed: () { + MakeRoute.go(context, route); + }, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Image.asset(logo, width: 25, height: 25, color: ThemeConfig.extraDarkGrey), + const SizedBox(width: 26,), + Text(title, style: StyleConfig.fs14fwNormal,), + const Spacer(), + // Image.asset(getAssetIcon("next.png"), width: 14, + // height: 14, + // color: ThemeConfig.fontColor), + ], + ), + ), + ); + } + + Widget logoutModel(String title, String logo, dynamic onPress) { + return Container( + margin: EdgeInsets.only(bottom: StyleConfig.padding), + height: 40, + child: Button( + minWidth: 40, + onPressed:onPress, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Image.asset(logo, width: 18, height: 18, color: ThemeConfig.extraDarkGrey), + const SizedBox(width: 26,), + Text(title, style: StyleConfig.fs14fwNormal,), + const Spacer(), + // Image.asset(getAssetIcon("next.png"), width: 14, + // height: 14, + // color: ThemeConfig.fontColor), + ], + ), + ), + ); + } +} \ No newline at end of file diff --git a/app_code/lib/screens/profile_edit.dart b/app_code/lib/screens/profile_edit.dart new file mode 100644 index 0000000..3db8b28 --- /dev/null +++ b/app_code/lib/screens/profile_edit.dart @@ -0,0 +1,465 @@ +import 'dart:convert'; +import 'dart:developer'; +import 'dart:io'; +import 'package:flutter/material.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/custom_classes/system_data.dart'; +import 'package:grostore/custom_ui/BoxDecorations.dart'; +import 'package:grostore/custom_ui/Button.dart'; +import 'package:grostore/custom_ui/Image_view.dart'; +import 'package:grostore/custom_ui/input_decorations.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; +import 'package:grostore/presenters/user_presenter.dart'; +import 'package:provider/provider.dart'; + +class ProfileEdit extends StatefulWidget { + @override + _ProfileEditState createState() => _ProfileEditState(); +} + +class _ProfileEditState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.white, + appBar: buildAppBar(context), + body: Consumer(builder: (context, data, child) { + return buildBody(data); + }), + ); + } + + AppBar buildAppBar(BuildContext context) { + return AppBar( + backgroundColor: Colors.white, + centerTitle: false, + leading: Builder( + builder: (context) => IconButton( + icon: Icon(Icons.arrow_back, color: ThemeConfig.darkGrey), + onPressed: () => Navigator.of(context).pop(), + ), + ), + title: Text( + AppLang.local(context).edit_profile_ucf, + style: TextStyle( + fontSize: 16, + color: ThemeConfig.fontColor, + fontWeight: FontWeight.bold), + ), + elevation: 0.0, + titleSpacing: 0, + ); + } + + Widget buildBody(UserPresenter data) { + return RefreshIndicator( + onRefresh: data.refresh, + color: ThemeConfig.accentColor, + backgroundColor: Colors.white, + //onRefresh: _onPageRefresh, + displacement: 10, + child: CustomScrollView( + physics: const BouncingScrollPhysics( + parent: AlwaysScrollableScrollPhysics()), + slivers: [ + SliverList( + delegate: SliverChildListDelegate([ + buildTopSection(data), + const Padding( + padding: EdgeInsets.symmetric(horizontal: 16.0), + ), + buildProfileForm(data) + ]), + ) + ], + ), + ); + } + + buildTopSection(UserPresenter data) { + log("Data.file is not empty${data.file?.path ?? "NO data"}"); + log("User avatar ${SystemData.userInfo.avatar}"); + return Column( + children: [ + Padding( + padding: const EdgeInsets.only(top: 16.0, bottom: 8.0), + child: Stack( + children: [ + data.file != null + ? ImageView.roundFileImage( + file: File(data.file!.path), + height: 120.0, + width: 120.0, + context: context, + radius: 60) + : ImageView.round( + url: SystemData.userInfo.avatar, + height: 120.0, + width: 120.0, + context: context, + radius: 60), +/* + Container( + width: 120, + height: 120, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(100), + border: Border.all( + color: Color.fromRGBO(112, 112, 112, .3), width: 2), + //shape: BoxShape.rectangle, + ), + child: ClipRRect( + clipBehavior: Clip.hardEdge, + borderRadius: BorderRadius.all(Radius.circular(100.0)), + child: FadeInImage.assetNetwork( + placeholder: 'assets/placeholder.png', + image: "${avatar_original.$}", + fit: BoxFit.fill, + )), + ),*/ + Positioned( + right: 8, + bottom: 8, + child: SizedBox( + width: 24, + height: 24, + child: Button( + padding: const EdgeInsets.all(0), + shape: CircleBorder( + side: BorderSide(color: ThemeConfig.lightGrey), + ), + color: ThemeConfig.lightGrey, + onPressed: () { + data.chooseAndUploadImage(context); + }, + child: Icon( + Icons.edit, + color: ThemeConfig.fontColor, + size: 14, + ), + ), + ), + ) + ], + ), + ), + ], + ); + } + + buildProfileForm(UserPresenter data) { + return Padding( + padding: + const EdgeInsets.only(top: 8.0, bottom: 8.0, left: 16.0, right: 16.0), + child: Container( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + buildBasicInfo(data), + buildChangePassword(data), + ], + ), + ), + ); + } + + Column buildChangePassword(UserPresenter data) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top: 30.0, bottom: 10), + child: Text( + AppLang.local(context).password_change_ucf, + style: StyleConfig.fs14fwBold, + textHeightBehavior: + const TextHeightBehavior(applyHeightToFirstAscent: false), + textAlign: TextAlign.center, + softWrap: false, + ), + ), + Padding( + padding: const EdgeInsets.only(bottom: 4.0), + child: Text( + AppLang.local(context).password, + style: TextStyle( + fontSize: 12, + color: ThemeConfig.fontColor, + fontWeight: FontWeight.normal), + ), + ), + Padding( + padding: const EdgeInsets.only(bottom: 8.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Container( + decoration: BoxDecorations.basic(), + height: 36, + child: TextField( + style: const TextStyle(fontSize: 12), + controller: data.passwordController, + autofocus: false, + obscureText: !data.showPassword, + enableSuggestions: false, + autocorrect: false, + decoration: + InputDecorations.basic(hint_text: "• • • • • • • •") + .copyWith( + enabledBorder: const OutlineInputBorder( + borderSide: BorderSide.none, + ), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: ThemeConfig.accentColor), + ), + suffixIcon: InkWell( + onTap: () { + data.passwordShowHide(); + }, + child: Icon( + data.showPassword + ? Icons.visibility_outlined + : Icons.visibility_off_outlined, + color: ThemeConfig.red, + ), + ), + ), + ), + ), + Padding( + padding: const EdgeInsets.only(top: 4.0), + child: Text( + AppLang.local(context).password_must_be_at_last_6_digit, + style: TextStyle( + color: ThemeConfig.red, fontStyle: FontStyle.italic), + ), + ) + ], + ), + ), + Padding( + padding: const EdgeInsets.only(bottom: 4.0), + child: Text( + AppLang.local(context).confirm_password_ucf, + style: TextStyle( + fontSize: 12, + color: ThemeConfig.fontColor, + fontWeight: FontWeight.normal), + ), + ), + Padding( + padding: const EdgeInsets.only(bottom: 8.0), + child: Container( + decoration: BoxDecorations.basic(), + height: 36, + child: TextField( + controller: data.passwordConfirmController, + autofocus: false, + obscureText: !data.showConfirmPassword, + enableSuggestions: false, + autocorrect: false, + decoration: + InputDecorations.basic(hint_text: "• • • • • • • •").copyWith( + enabledBorder: const OutlineInputBorder( + borderSide: BorderSide.none, + ), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: ThemeConfig.accentColor), + ), + suffixIcon: InkWell( + onTap: () { + data.conPasswordShowHide(); + }, + child: Icon( + data.showConfirmPassword + ? Icons.visibility_outlined + : Icons.visibility_off_outlined, + color: ThemeConfig.red, + ), + )), + ), + ), + ), + Align( + alignment: Alignment.centerRight, + child: Container( + alignment: Alignment.center, + width: 150, + child: Button( + padding: const EdgeInsets.symmetric(vertical: 10), + minWidth: MediaQuery.of(context).size.width, + color: ThemeConfig.red, + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.all(Radius.circular(8.0))), + child: Text( + AppLang.local(context).update_password_ucf, + style: const TextStyle( + color: Colors.white, + fontSize: 14, + fontWeight: FontWeight.w600), + ), + onPressed: () { + data.onPressUpdatePassword(context); + }, + ), + ), + ), + ], + ); + } + + Column buildBasicInfo(UserPresenter data) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(bottom: 18.0), + child: Text( + AppLang.local(context).basic_info, + style: StyleConfig.fs14fwBold, + ), + ), + Padding( + padding: const EdgeInsets.only(bottom: 4.0), + child: Text( + AppLang.local(context).name, + style: TextStyle( + fontSize: 12, + color: ThemeConfig.fontColor, + fontWeight: FontWeight.normal), + ), + ), + Padding( + padding: const EdgeInsets.only(bottom: 14.0), + child: Container( + decoration: BoxDecorations.basic(), + height: 36, + child: TextField( + controller: data.nameController, + autofocus: false, + style: TextStyle(color: ThemeConfig.fontColor, fontSize: 12), + decoration: + InputDecorations.basic(hint_text: "John Doe").copyWith( + enabledBorder: const OutlineInputBorder( + borderSide: BorderSide.none, + ), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: ThemeConfig.accentColor), + ), + ), + ), + ), + ), + Padding( + padding: const EdgeInsets.only(bottom: 4.0), + child: Text( + AppLang.local(context).phone, + style: TextStyle( + fontSize: 12, + color: ThemeConfig.fontColor, + fontWeight: FontWeight.normal), + ), + ), + Padding( + padding: const EdgeInsets.only(bottom: 14.0), + child: Container( + decoration: BoxDecorations.basic(), + height: 36, + child: TextField( + controller: data.phoneController, + autofocus: false, + keyboardType: TextInputType.phone, + style: TextStyle(color: ThemeConfig.fontColor, fontSize: 12), + decoration: + InputDecorations.basic(hint_text: "+01xxxxxxxxxx").copyWith( + enabledBorder: const OutlineInputBorder( + borderSide: BorderSide.none, + ), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: ThemeConfig.red), + ), + ), + ), + ), + ), + Visibility( + visible: true, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(bottom: 4.0), + child: Text( + AppLang.local(context).name, + style: TextStyle( + fontSize: 12, + color: ThemeConfig.fontColor, + fontWeight: FontWeight.normal), + ), + ), + Padding( + padding: const EdgeInsets.only(bottom: 14.0), + child: Container( + decoration: BoxDecorations.basic(), + height: 36, + padding: const EdgeInsets.symmetric(horizontal: 16), + alignment: Alignment.centerLeft, + child: Text( + data.emailController.text, + style: TextStyle(fontSize: 12, color: ThemeConfig.grey), + ) + /*TextField( + style: TextStyle(color:ThemeConfig.grey_153,fontSize: 12), + enabled: false, + enableIMEPersonalizedLearning: true, + controller: _emailController, + autofocus: false, + decoration: InputDecorations.buildInputDecoration_1( + + hint_text: "jhon@example.com").copyWith( + //enabled: false, + labelStyle: TextStyle(color: ThemeConfig.grey_153), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide.none, + ), + + focusedBorder: OutlineInputBorder( + borderSide: BorderSide.none, + + ),), + ),*/ + ), + ), + ], + ), + ), + Align( + alignment: Alignment.centerRight, + child: Container( + alignment: Alignment.center, + width: getWidth(context) / 2.5, + child: Button( + padding: const EdgeInsets.symmetric(vertical: 10), + minWidth: MediaQuery.of(context).size.width, + color: ThemeConfig.red, + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.all(Radius.circular(8.0))), + child: Text( + AppLang.local(context).update_profile_ucf, + style: const TextStyle( + color: Colors.white, + fontSize: 14, + fontWeight: FontWeight.w600), + ), + onPressed: () { + data.onPressUpdate(context); + }, + ), + ), + ), + ], + ); + } +} diff --git a/app_code/lib/screens/refund.dart b/app_code/lib/screens/refund.dart new file mode 100644 index 0000000..2b59260 --- /dev/null +++ b/app_code/lib/screens/refund.dart @@ -0,0 +1,93 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/custom_ui/BoxDecorations.dart'; +import 'package:grostore/custom_ui/common_appbar.dart'; +import 'package:grostore/custom_ui/no_data.dart'; +import 'package:grostore/custom_ui/shimmers.dart'; +import 'package:grostore/helpers/common_functions.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; +import 'package:grostore/presenters/refund_presenter.dart'; +import 'package:grostore/presenters/wallet_presenter.dart'; +import 'package:provider/provider.dart'; + + +class Refund extends StatefulWidget { + const Refund({super.key}); + + @override + State createState() => _RefundState(); +} + +class _RefundState extends State { + + @override + void initState() { + WidgetsBinding.instance.addPostFrameCallback((timeStamp) { + print("object11"); + Provider.of(context,listen: false).initState(); + }); + super.initState(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: CommonAppbar.show(title: AppLang.local(context).refund_history_ucf, context: context), + body: Consumer( + builder: (context,data,child) { + return RefreshIndicator( + onRefresh: data.onRefresh, + child: SingleChildScrollView( + physics: AlwaysScrollableScrollPhysics(), + child: data.isRefundInit && data.refundHistory.isEmpty?const NoData():data.isRefundInit?ListView.separated( + physics: NeverScrollableScrollPhysics(), + shrinkWrap: true, + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + itemBuilder: (context,index)=>Container( + padding: EdgeInsets.symmetric(horizontal: 14,vertical: 10), + decoration: BoxDecorations.shadow(radius: 10), + child: Row( + children: [ + SizedBox( + width: getWidth(context)*0.4, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(data.refundHistory[index].date), + SizedBox(height: 8,), + Text(data.refundHistory[index].orderCode), + SizedBox(height: 8,), + Text(data.refundHistory[index].productName), + ], + ), + ), + Spacer(), + SizedBox( + width: getWidth(context)*0.4, + child: Column( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Text(data.refundHistory[index].status.toUpperCase(),style: StyleConfig.fs14cSecondryfwBold.copyWith(color: data.refundHistory[index].status=="refunded"?ThemeConfig.fontColor:null),), + SizedBox(height: 8,), + Text(showPrice(data.refundHistory[index].amount),style: StyleConfig.fs14fwNormal), + ], + ), + ), + + ], + ), + ), + separatorBuilder: (context,index)=>SizedBox(height: StyleConfig.padding,), itemCount: data.refundHistory.length): + Padding(padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + child: Shimmers.list(15, getWidth(context), 55.0), + ), + ), + ); + } + ), + + ); + } +} diff --git a/app_code/lib/screens/setting.dart b/app_code/lib/screens/setting.dart new file mode 100644 index 0000000..3058dba --- /dev/null +++ b/app_code/lib/screens/setting.dart @@ -0,0 +1,154 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/custom_ui/BoxDecorations.dart'; +import 'package:grostore/custom_ui/common_appbar.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; +import 'package:grostore/models/currency_response.dart'; +import 'package:grostore/models/language_response.dart'; +import 'package:grostore/presenters/setting_presenter.dart'; +import 'package:http/http.dart'; +import 'package:provider/provider.dart'; + +import '../presenters/bloc/lang/lang_bloc.dart'; + +class Setting extends StatefulWidget { + const Setting({super.key}); + + @override + State createState() => _SettingState(); +} + +class _SettingState extends State { + @override + void initState() { + WidgetsBinding.instance.addPostFrameCallback((timeStamp) { + Provider.of(context, listen: false).initState(); + }); + + // TODO: implement initState + super.initState(); + } + + String datas = "uz"; + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: ThemeConfig.xxlightGrey, + appBar: CommonAppbar.show( + title: AppLang.local(context).settings, context: context), + body: Consumer(builder: (context, data, child) { + return Container( + padding: EdgeInsets.symmetric( + horizontal: StyleConfig.padding, + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const SizedBox( + height: 20, + ), + /* DropdownButton( + value: data.selectedLanguage, + icon: const Icon(Icons.arrow_downward), + elevation: 16, + style: const TextStyle(color: Colors.deepPurple), + underline: Container( + height: 2, + color: Colors.deepPurpleAccent, + ), + onChanged: (LanguageInfo? value) { + // This is called when the user selects an item. + if(value!=null) { + data.setLocale(value); + } + }, + items: data.languageList.map>((LanguageInfo value) { + return DropdownMenuItem( + value: value, + child: Text(value.name), + ); + }).toList(), + ),*/ + Text( + AppLang.local(context).currency, + style: StyleConfig.fs14fwBold, + ), + const SizedBox( + height: 14, + ), + Container( + width: getWidth(context), + padding: const EdgeInsets.symmetric(horizontal: 14), + decoration: BoxDecorations.customRadius( + radius: BorderRadius.circular(5)) + .copyWith( + color: ThemeConfig.white, + ), + child: DropdownButton( + isExpanded: true, + value: data.selectedCurrency, + elevation: 16, + underline: const SizedBox.shrink(), + style: const TextStyle(color: Colors.deepPurple), + onChanged: (CurrencyInfo? value) { + // This is called when the user selects an item. + if (value != null) { + data.onChange(value); + } + }, + items: data.currencyList.map>( + (CurrencyInfo value) { + return DropdownMenuItem( + value: value, + child: Row( + children: [ + Text( + value.name, + style: StyleConfig.fs14fwNormal, + ), + ], + ), + ); + }).toList(), + ), + ), + SizedBox(height: 10,), + // BlocBuilder( + // builder: (context, state) { + // return Container( + // height: 100, + // margin: const EdgeInsets.only(top: 20), + // width: getWidth(context), + // padding: const EdgeInsets.symmetric(horizontal: 14), + // decoration: BoxDecoration( + // color: Colors.white, + // borderRadius: BorderRadius.all(Radius.circular(10)), + // ), + // child: DropdownButton( + // value: datas ?? "uz", + // icon: Icon(Icons.arrow_drop_down_rounded), + // style: const TextStyle(color: Colors.deepPurple), + // onChanged: (String? value) { + // datas = value ?? "uz"; + // context + // .read() + // .add(LanguageEvent(locale: Locale(datas))); + // }, + // items: const [ + // DropdownMenuItem(value: "uz", child: Text("Uz")), + // DropdownMenuItem(value: 'en', child: Text("En")), + // DropdownMenuItem(value: "ru", child: Text("Ru")), + // ])); + // }, + // ) + ], + ), + ); + }), + ); + } +} diff --git a/app_code/lib/screens/splash.dart b/app_code/lib/screens/splash.dart new file mode 100644 index 0000000..5ed0426 --- /dev/null +++ b/app_code/lib/screens/splash.dart @@ -0,0 +1,109 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/apis/auth_api.dart'; +import 'package:grostore/apis/setting_api.dart'; +import 'package:grostore/configs/app_config.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/custom_classes/system_data.dart'; +import 'package:grostore/helpers/common_functions.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; +import 'package:grostore/helpers/route.dart'; +import 'package:grostore/helpers/shared_value_helper.dart'; +import 'package:grostore/presenters/auth/auth_presenter.dart'; +import 'package:grostore/presenters/cart_presenter.dart'; +import 'package:grostore/presenters/setting_presenter.dart'; +import 'package:grostore/screens/landing_pages/landing_page.dart'; +import 'package:grostore/screens/main.dart'; +import 'package:provider/provider.dart'; + +class Splash extends StatefulWidget { + const Splash({Key? key}) : super(key: key); + + @override + State createState() => _SplashState(); +} + +class _SplashState extends State { + @override + void initState() { + super.initState(); + getSettings(); + + system_currency.load().then((value){ + + Provider.of(context, listen: false).initState(); + }); + + Future.delayed(const Duration(seconds: 2)).then((value) { + access_token.load(); + show_landing_page.load().then((value) { + checkLogin(); + }); + //Navigator.pushAndRemoveUntil(context, MaterialPageRoute(builder: (context)=>Main()), (route) => false); + }); + } + + checkLogin() async { + await show_landing_page.load(); + var res = await AuthApi.tokenCheck(context); + print("-----}${res.result}{----"); + if (res.result) { + SystemData.isLogIn = true; + SystemData.userInfo = res.user; + await app_language.load(); + await stock_location_id.load(); + Provider.of(context, listen: false).fetchCart(); + } + if (show_landing_page.$) { + show_landing_page.$=false; + show_landing_page.save(); + MakeRoute.goAndRemoveAll(context, const LandingPage()); + } else { + Provider.of(context,listen: false).tokenCheck(context); + + MakeRoute.goAndRemoveAll(context, const Main()); + } + } + + getSettings() async { + var res = await SettingApi.getSettings(); + SystemData.settings = res.object; + } + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Container( + width: getWidth(context), + height: getHeight(context), + decoration: BoxDecoration( + color: ThemeConfig.splashBackground, + image: DecorationImage( + image: AssetImage(getAssetImage("splash_background.png")))), + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Image.asset( + getAssetLogo("logo4x4.png"), + width: 250, + height: 300, + ), + // const SizedBox( + // height: 10, + // ), + // Text( + // AppConfig.appName, + // style: StyleConfig.fs30fwEBold(), + // textAlign: TextAlign.center, + // ), + const SizedBox( + height: 10, + ), + const CircularProgressIndicator() + ], + ), + ), + ); + } +} diff --git a/app_code/lib/screens/stock_locations.dart b/app_code/lib/screens/stock_locations.dart new file mode 100644 index 0000000..9773a16 --- /dev/null +++ b/app_code/lib/screens/stock_locations.dart @@ -0,0 +1,174 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/custom_ui/Boxdecorations.dart'; +import 'package:grostore/custom_ui/common_appbar.dart'; +import 'package:grostore/custom_ui/shimmers.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; +import 'package:grostore/helpers/shared_value_helper.dart'; +import 'package:grostore/presenters/stock_locations_presenter.dart'; +import 'package:toast/toast.dart'; +import 'package:provider/provider.dart'; + +class StockLocations extends StatefulWidget { + StockLocations({Key? key}) : super(key: key); + + @override + _StockLocationsState createState() => _StockLocationsState(); +} + +class _StockLocationsState extends State { + + + + @override + void initState() { + // TODO: implement initState + super.initState(); +Provider.of(context,listen: false).setContext(context); + } + @override + void dispose() { + super.dispose(); + } + +@override + void didChangeDependencies() { + + super.didChangeDependencies(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.white, + appBar: buildAppBar(context), + body: Consumer( + builder: (context,data,child) { + return RefreshIndicator( + //color: MyTheme.accent_color, + backgroundColor: Colors.white, + onRefresh: data.onRefresh, + displacement: 0, + child: CustomScrollView( + physics: const BouncingScrollPhysics( + parent: AlwaysScrollableScrollPhysics()), + slivers: [ + SliverList( + delegate: SliverChildListDelegate([ + Padding( + padding: const EdgeInsets.all(18.0), + child: buildLanguageMethodList(data), + ), + ]), + ) + ], + ), + ); + } + )); + } + + AppBar buildAppBar(BuildContext context) { + return CommonAppbar.show(title: AppLang.local(context).locations, context: context); + } + + buildLanguageMethodList(StockLocationsPresenter data) { + if (!data.isLocationInit && data.locations.isEmpty) { + return SingleChildScrollView( + child: Shimmers.list(10, getWidth(context), 20)); + } else if (data.locations.isNotEmpty) { + return SingleChildScrollView( + child: ListView.separated( + separatorBuilder: (context, index) { + return const SizedBox( + height: 14, + ); + }, + itemCount: data.locations.length, + scrollDirection: Axis.vertical, + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemBuilder: (context, index) { + return buildCard(index,data); + }, + ), + ); + } else if (data.isLocationInit && data.locations.isEmpty) { + return Container( + height: 100, + child: Center( + child: Text( + AppLang.local(context).data_is_not_available, + style: TextStyle(color: ThemeConfig.fontColor), + ))); + } + } + + GestureDetector buildCard(index,StockLocationsPresenter data) { + return GestureDetector( + onTap: () { + print(data.locations[index].id); + data.onchange(data.locations[index].id); + }, + child: Stack( + children: [ + AnimatedContainer( + duration: const Duration(milliseconds: 400), + decoration: BoxDecorations.basic().copyWith( + border: Border.all( + color: stock_location_id.$ == data.locations[index].id.toString() + ? ThemeConfig.accentColor: ThemeConfig.lightGrey, + width: stock_location_id.$ == data.locations[index].id.toString() ? 1.0 : 0.0)), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Container( + width: 150, + height: 50, + alignment: Alignment.center, + child: Padding( + padding: const EdgeInsets.only(left: 8.0), + child: Text( + "${data.locations[index].name}", + textAlign: TextAlign.left, + overflow: TextOverflow.ellipsis, + style: TextStyle( + color: ThemeConfig.fontColor, + fontSize: 14, + height: 1.6, + fontWeight: FontWeight.bold), + ), + ), + ), + ]), + ), + // Positioned( + // left: 16, + // top: 16, + // child: buildCheckContainer(data.selectedIndex == index), + // ) + + ], + ), + ); + } + + // Container buildCheckContainer(bool check) { + // return check + // ? Container( + // height: 16, + // width: 16, + // decoration: BoxDecoration( + // borderRadius: BorderRadius.circular(16.0), color: Colors.green), + // child: Padding( + // padding: const EdgeInsets.all(3), + // child: Icon(Icons.check, color: Colors.white, size: 10), + // ), + // ) + // : Container(); + // } + +} diff --git a/app_code/lib/screens/track_order.dart b/app_code/lib/screens/track_order.dart new file mode 100644 index 0000000..7cda20e --- /dev/null +++ b/app_code/lib/screens/track_order.dart @@ -0,0 +1,186 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/custom_classes/system_data.dart'; +import 'package:grostore/custom_ui/BoxDecorations.dart'; +import 'package:grostore/custom_ui/Button.dart'; +import 'package:grostore/custom_ui/common_appbar.dart'; +import 'package:grostore/custom_ui/input_decorations.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; +import 'package:grostore/presenters/order_presenter.dart'; + +class TrackOrder extends StatefulWidget { + const TrackOrder({super.key}); + + @override + State createState() => _TrackOrderState(); +} + +class _TrackOrderState extends State { + OrderPresenter orderPresenter = OrderPresenter(); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: CommonAppbar.show( + title: AppLang.local(context).track_my_order_ucf, context: context), + body: ListenableBuilder( + listenable: orderPresenter, + builder: (context, child) { + return Container( + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + child: Column( + children: [ + Container( + decoration: BoxDecorations.shadow(), + child: Row( + children: [ + Container( + decoration: BoxDecoration( + color: ThemeConfig.grey, + borderRadius: const BorderRadius.only( + topLeft: Radius.circular(6), + bottomLeft: Radius.circular(6), + )), + padding: const EdgeInsets.symmetric( + horizontal: 10, vertical: 10), + child: + Text(SystemData.settings?.orderCodePrefix ?? ""), + ), + Container( + padding: const EdgeInsets.symmetric(horizontal: 6), + width: getWidth(context) * 0.5, + child: TextField( + onSubmitted: (text) { + orderPresenter.trackOrder(text.trim(), context); + }, + controller: orderPresenter.trackOrderController, + decoration: const InputDecoration.collapsed( + hintText: "123456")), + ), + Spacer(), + SizedBox( + width: 40, + height: 40, + child: Button( + onPressed: () { + orderPresenter.trackOrder( + orderPresenter.trackOrderController.text + .trim(), + context); + }, + child: Icon(Icons.search))), + ], + ), + ), + SizedBox(height: 24,), + + if(orderPresenter.trackInfo!=null) + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(AppLang.local(context).order_tracking,style: StyleConfig.fs16fwBold,), + SizedBox(height: 14,), + Container( + decoration: BoxDecorations.shadow(radius: 5) + .copyWith(border: Border.all(color: ThemeConfig.grey)), + child: Column( + children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 8.0,vertical: 8), + child: Row( + children: [ + SizedBox( + width: getWidth(context) * 0.25, + child: Text( + AppLang.local(context).date, + style: StyleConfig.fs14fwBold, + )), + SizedBox( + width: getWidth(context) * 0.55, + child: Text( + AppLang.local(context).note, + style: StyleConfig.fs14fwBold, + )), + ], + ), + ), + Container( + width: getWidth(context), + height: 1, + color: ThemeConfig.grey, + ), + Column( + children: List.generate( + orderPresenter.trackInfo?.orderUpdates.length ?? 0, + (index) => Column( + children: [ + SizedBox( + height: 10, + ), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 8.0), + child: Row( + children: [ + SizedBox( + width: getWidth(context) * 0.25, + child: Text(orderPresenter.trackInfo + ?.orderUpdates[index].date ?? + "")), + SizedBox( + width: getWidth(context) * 0.55, + child: Text(orderPresenter.trackInfo + ?.orderUpdates[index].note ?? + "")), + ], + ), + ), + SizedBox( + height: 10, + ), + Container( + width: getWidth(context), + height: 1, + color: ThemeConfig.grey, + ), + ], + ), + ), + ), + Column( + children: [ + SizedBox( + height: 10, + ), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 8.0), + child: Row( + children: [ + SizedBox( + width: getWidth(context) * 0.25, + child: Text(orderPresenter.trackInfo?.createdDate ?? + "")), + SizedBox( + width: getWidth(context) * 0.55, + child: Text(AppLang.local(context).order_has_been_placed)), + ], + ), + ), + SizedBox( + height: 10, + ), + ], + ), + ], + ), + ), + ], + ) + ], + ), + ); + }), + ); + } +} diff --git a/app_code/lib/screens/wallet.dart b/app_code/lib/screens/wallet.dart new file mode 100644 index 0000000..00f27bc --- /dev/null +++ b/app_code/lib/screens/wallet.dart @@ -0,0 +1,81 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/custom_ui/BoxDecorations.dart'; +import 'package:grostore/custom_ui/common_appbar.dart'; +import 'package:grostore/custom_ui/shimmers.dart'; +import 'package:grostore/helpers/device_info_helper.dart'; +import 'package:grostore/presenters/wallet_presenter.dart'; +import 'package:provider/provider.dart'; + + +class Wallet extends StatefulWidget { + const Wallet({super.key}); + + @override + State createState() => _WalletState(); +} + +class _WalletState extends State { + + @override + void initState() { + WidgetsBinding.instance.addPostFrameCallback((timeStamp) { + Provider.of(context,listen: false).initState(); + }); + super.initState(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: CommonAppbar.show(title: AppLang.local(context).wallet_history_ucf, context: context), + body: Consumer( + builder: (context,data,child) { + return RefreshIndicator( + onRefresh: data.onRefresh, + child: SingleChildScrollView( + physics: const AlwaysScrollableScrollPhysics(), + child: data.isWalletInit && data.walletHistory.isEmpty? + SizedBox( + height: getHeight(context), + child: Center( + child: Text(AppLang.local(context).data_is_not_available), + ), + ) + : data.isWalletInit? + ListView.separated( + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + itemBuilder: (context,index)=>Container( + padding: const EdgeInsets.symmetric(horizontal: 14,vertical: 10), + decoration: BoxDecorations.shadow(radius: 10), + child: Row( + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(data.walletHistory[index].date), + const SizedBox(height: 8,), + Text(data.walletHistory[index].paymentMethod), + ], + ), + const Spacer(), + Text(data.walletHistory[index].amount,style: StyleConfig.fs14cSecondryfwBold,), + ], + ), + ), + separatorBuilder: (context,index)=>SizedBox(height: StyleConfig.padding,), itemCount: data.walletHistory.length): + + Padding(padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding), + child: Shimmers.list(15, getWidth(context), 55.0), + ), + ), + ); + } + ), + + ); + } +} diff --git a/app_code/lib/screens/wishlist.dart b/app_code/lib/screens/wishlist.dart new file mode 100644 index 0000000..fdc0a3d --- /dev/null +++ b/app_code/lib/screens/wishlist.dart @@ -0,0 +1,90 @@ +import 'package:flutter/material.dart'; +import 'package:grostore/app_lang.dart'; +import 'package:grostore/configs/style_config.dart'; +import 'package:grostore/configs/theme_config.dart'; +import 'package:grostore/custom_ui/Button.dart'; +import 'package:grostore/custom_ui/common_appbar.dart'; +import 'package:grostore/custom_ui/shimmers.dart'; +import 'package:grostore/presenters/wishlist_presenter.dart'; +import 'package:provider/provider.dart'; +import '../custom_ui/product_card.dart'; + + + +class Wishlist extends StatefulWidget { + const Wishlist({Key? key}) : super(key: key); + + @override + State createState() => _WishlistState(); +} + +class _WishlistState extends State { + + WishlistPresenter data = WishlistPresenter(); + + @override + void initState() { + // TODO: implement initState + Provider.of(context,listen: false).setContext(context); + WidgetsBinding.instance.addPostFrameCallback((timeStamp) { + // Provider.of(context,listen: false).initState(); + data.initState(); + }); + super.initState(); + } + + @override + Widget build(BuildContext context) { + return + Scaffold( + appBar: CommonAppbar.show(title: AppLang.local(context).wishlist, context: context), + body: ListenableBuilder( + listenable: data, + builder: (context,child) { + return Container( + child: data.isWishlistInit?buildProductSection():Shimmers.gridShimmer(2, 10), + ); + } + ), + ); + } + Widget buildProductSection(){ + return RefreshIndicator( + onRefresh: data.reFresh, + child: GridView.builder( + padding: EdgeInsets.symmetric(horizontal: StyleConfig.padding,vertical: StyleConfig.smSectionSpacer), + physics: const AlwaysScrollableScrollPhysics(), + gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 2, + crossAxisSpacing: 16, + mainAxisSpacing: 16, + childAspectRatio: 0.8), + itemCount: data.wishlists.length, + itemBuilder: (context, index) { + return Stack( + fit: StackFit.expand, + children: [ + ProductCard( + product: data.wishlists[index].product,context: this.context,), + Positioned( + right: 0, + top: 0, + child: Button( + shape: StyleConfig.buttonRadius(25), + color: ThemeConfig.lightGrey, + onPressed: (){ + data.deleteWishlist(data.wishlists[index].product.id,context); + }, + minWidth: 10.0, + minHeight: 10.0, + padding: const EdgeInsets.all(5), + child: const Icon(Icons.delete,size: 24,color: Colors.red,), + + ), + ) + ], + ); + }), + ); + } +} diff --git a/app_code/lv285CbD9t3L_1024_500.png b/app_code/lv285CbD9t3L_1024_500.png new file mode 100644 index 0000000..5eaaa8c Binary files /dev/null and b/app_code/lv285CbD9t3L_1024_500.png differ diff --git a/app_code/pubspec.lock b/app_code/pubspec.lock new file mode 100644 index 0000000..bfed090 --- /dev/null +++ b/app_code/pubspec.lock @@ -0,0 +1,1151 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + archive: + dependency: transitive + description: + name: archive + sha256: "2fde1607386ab523f7a36bb3e7edb43bd58e6edaf2ffb29d8a6d578b297fdbbd" + url: "https://pub.dev" + source: hosted + version: "4.0.7" + args: + dependency: transitive + description: + name: args + sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 + url: "https://pub.dev" + source: hosted + version: "2.7.0" + async: + dependency: transitive + description: + name: async + sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb" + url: "https://pub.dev" + source: hosted + version: "2.13.0" + back_button_interceptor: + dependency: transitive + description: + name: back_button_interceptor + sha256: "8354b03320043db546e3f446af171faaa71384100486444113628f7db1e7fe9b" + url: "https://pub.dev" + source: hosted + version: "7.0.3" + badges: + dependency: "direct main" + description: + name: badges + sha256: a7b6bbd60dce418df0db3058b53f9d083c22cdb5132a052145dc267494df0b84 + url: "https://pub.dev" + source: hosted + version: "3.1.2" + barcode: + dependency: transitive + description: + name: barcode + sha256: "7b6729c37e3b7f34233e2318d866e8c48ddb46c1f7ad01ff7bb2a8de1da2b9f4" + url: "https://pub.dev" + source: hosted + version: "2.2.9" + bidi: + dependency: transitive + description: + name: bidi + sha256: "77f475165e94b261745cf1032c751e2032b8ed92ccb2bf5716036db79320637d" + url: "https://pub.dev" + source: hosted + version: "2.0.13" + bloc: + dependency: transitive + description: + name: bloc + sha256: a2cebb899f91d36eeeaa55c7b20b5915db5a9df1b8fd4a3c9c825e22e474537d + url: "https://pub.dev" + source: hosted + version: "9.1.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + cached_network_image: + dependency: "direct main" + description: + name: cached_network_image + sha256: "7c1183e361e5c8b0a0f21a28401eecdbde252441106a9816400dd4c2b2424916" + url: "https://pub.dev" + source: hosted + version: "3.4.1" + cached_network_image_platform_interface: + dependency: transitive + description: + name: cached_network_image_platform_interface + sha256: "35814b016e37fbdc91f7ae18c8caf49ba5c88501813f73ce8a07027a395e2829" + url: "https://pub.dev" + source: hosted + version: "4.1.1" + cached_network_image_web: + dependency: transitive + description: + name: cached_network_image_web + sha256: "980842f4e8e2535b8dbd3d5ca0b1f0ba66bf61d14cc3a17a9b4788a3685ba062" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + calendar_date_picker2: + dependency: "direct main" + description: + name: calendar_date_picker2 + sha256: "9c9b5586fb512bf1181d7f3a6273bffa9e65a4e16689902e112771e7d71d063b" + url: "https://pub.dev" + source: hosted + version: "2.0.1" + carousel_slider: + dependency: "direct main" + description: + name: carousel_slider + sha256: bcc61735345c9ab5cb81073896579e735f81e35fd588907a393143ea986be8ff + url: "https://pub.dev" + source: hosted + version: "5.1.1" + characters: + dependency: transitive + description: + name: characters + sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 + url: "https://pub.dev" + source: hosted + version: "1.4.0" + clock: + dependency: transitive + description: + name: clock + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b + url: "https://pub.dev" + source: hosted + version: "1.1.2" + collection: + dependency: transitive + description: + name: collection + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" + url: "https://pub.dev" + source: hosted + version: "1.19.1" + cross_file: + dependency: transitive + description: + name: cross_file + sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" + url: "https://pub.dev" + source: hosted + version: "0.3.4+2" + crypto: + dependency: transitive + description: + name: crypto + sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" + url: "https://pub.dev" + source: hosted + version: "3.0.6" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 + url: "https://pub.dev" + source: hosted + version: "1.0.8" + dlibphonenumber: + dependency: transitive + description: + name: dlibphonenumber + sha256: c48b5ba336e4e6414d6465b30a7efe64e1130c8a45ddd3cbacfc713b8bbc8aba + url: "https://pub.dev" + source: hosted + version: "1.1.49" + dotted_line: + dependency: "direct main" + description: + name: dotted_line + sha256: "41e3d655939559815daa1370fc1e07673a205fa628cf40ce3af45d90029a77b6" + url: "https://pub.dev" + source: hosted + version: "3.2.3" + equatable: + dependency: "direct main" + description: + name: equatable + sha256: "567c64b3cb4cf82397aac55f4f0cbd3ca20d77c6c03bedbc4ceaddc08904aef7" + url: "https://pub.dev" + source: hosted + version: "2.0.7" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" + url: "https://pub.dev" + source: hosted + version: "1.3.3" + ffi: + dependency: transitive + description: + name: ffi + sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + file: + dependency: transitive + description: + name: file + sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 + url: "https://pub.dev" + source: hosted + version: "7.0.1" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33" + url: "https://pub.dev" + source: hosted + version: "0.9.3+2" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: "19124ff4a3d8864fdc62072b6a2ef6c222d55a3404fe14893a3c02744907b60c" + url: "https://pub.dev" + source: hosted + version: "0.9.4+4" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b + url: "https://pub.dev" + source: hosted + version: "2.6.2" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: "320fcfb6f33caa90f0b58380489fc5ac05d99ee94b61aa96ec2bff0ba81d3c2b" + url: "https://pub.dev" + source: hosted + version: "0.9.3+4" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be + url: "https://pub.dev" + source: hosted + version: "1.1.1" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_bloc: + dependency: "direct main" + description: + name: flutter_bloc + sha256: cf51747952201a455a1c840f8171d273be009b932c75093020f9af64f2123e38 + url: "https://pub.dev" + source: hosted + version: "9.1.1" + flutter_cache_manager: + dependency: transitive + description: + name: flutter_cache_manager + sha256: "400b6592f16a4409a7f2bb929a9a7e38c72cceb8ffb99ee57bbf2cb2cecf8386" + url: "https://pub.dev" + source: hosted + version: "3.4.1" + flutter_countdown_timer: + dependency: "direct main" + description: + name: flutter_countdown_timer + sha256: dfcbd7d6f76a5589f78f3f3ba2f9ea2e199368eccc1adce4153ce985b9587bc5 + url: "https://pub.dev" + source: hosted + version: "4.1.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: "3105dc8492f6183fb076ccf1f351ac3d60564bff92e20bfc4af9cc1651f4e7e1" + url: "https://pub.dev" + source: hosted + version: "6.0.0" + flutter_localizations: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_plugin_android_lifecycle: + dependency: transitive + description: + name: flutter_plugin_android_lifecycle + sha256: "306f0596590e077338312f38837f595c04f28d6cdeeac392d3d74df2f0003687" + url: "https://pub.dev" + source: hosted + version: "2.0.32" + flutter_svg: + dependency: "direct main" + description: + name: flutter_svg + sha256: b9c2ad5872518a27507ab432d1fb97e8813b05f0fc693f9d40fad06d073e0678 + url: "https://pub.dev" + source: hosted + version: "2.2.1" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + go_router: + dependency: "direct main" + description: + name: go_router + sha256: e1d7ffb0db475e6e845eb58b44768f50b830e23960e3df6908924acd8f7f70ea + url: "https://pub.dev" + source: hosted + version: "16.2.5" + google_fonts: + dependency: "direct main" + description: + name: google_fonts + sha256: "517b20870220c48752eafa0ba1a797a092fb22df0d89535fd9991e86ee2cdd9c" + url: "https://pub.dev" + source: hosted + version: "6.3.2" + http: + dependency: "direct main" + description: + name: http + sha256: bb2ce4590bc2667c96f318d68cac1b5a7987ec819351d32b1c987239a815e007 + url: "https://pub.dev" + source: hosted + version: "1.5.0" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" + url: "https://pub.dev" + source: hosted + version: "4.1.2" + icons_launcher: + dependency: "direct dev" + description: + name: icons_launcher + sha256: "6317d56a73ee528f1dd570d7cd7be120ce58014e0fe635d141ada3d88782f58d" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + image: + dependency: transitive + description: + name: image + sha256: "4e973fcf4caae1a4be2fa0a13157aa38a8f9cb049db6529aa00b4d71abc4d928" + url: "https://pub.dev" + source: hosted + version: "4.5.4" + image_picker: + dependency: "direct main" + description: + name: image_picker + sha256: "736eb56a911cf24d1859315ad09ddec0b66104bc41a7f8c5b96b4e2620cf5041" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: "58a85e6f09fe9c4484d53d18a0bd6271b72c53fce1d05e6f745ae36d8c18efca" + url: "https://pub.dev" + source: hosted + version: "0.8.13+5" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: "40c2a6a0da15556dc0f8e38a3246064a971a9f512386c3339b89f76db87269b6" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: eb06fe30bab4c4497bad449b66448f50edcc695f1c59408e78aa3a8059eb8f0e + url: "https://pub.dev" + source: hosted + version: "0.8.13" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "1f81c5f2046b9ab724f85523e4af65be1d47b038160a8c8deed909762c308ed4" + url: "https://pub.dev" + source: hosted + version: "0.2.2" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: d58cd9d67793d52beefd6585b12050af0a7663c0c2a6ece0fb110a35d6955e04 + url: "https://pub.dev" + source: hosted + version: "0.2.2" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: "9f143b0dba3e459553209e20cc425c9801af48e6dfa4f01a0fcf927be3f41665" + url: "https://pub.dev" + source: hosted + version: "2.11.0" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: d248c86554a72b5495a31c56f060cf73a41c7ff541689327b1a7dbccc33adfae + url: "https://pub.dev" + source: hosted + version: "0.2.2" + intl: + dependency: "direct main" + description: + name: intl + sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5" + url: "https://pub.dev" + source: hosted + version: "0.20.2" + intl_phone_number_input: + dependency: "direct main" + description: + name: intl_phone_number_input + sha256: "9d4d7f174cfc3a85b238e0b465ec0e7232fc0815a779e5a58fbf118dee26dfa0" + url: "https://pub.dev" + source: hosted + version: "0.7.5" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" + url: "https://pub.dev" + source: hosted + version: "11.0.2" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" + url: "https://pub.dev" + source: hosted + version: "3.0.10" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + lints: + dependency: transitive + description: + name: lints + sha256: a5e2b223cb7c9c8efdc663ef484fdd95bb243bff242ef5b13e26883547fce9a0 + url: "https://pub.dev" + source: hosted + version: "6.0.0" + logger: + dependency: transitive + description: + name: logger + sha256: a7967e31b703831a893bbc3c3dd11db08126fe5f369b5c648a36f821979f5be3 + url: "https://pub.dev" + source: hosted + version: "2.6.2" + logging: + dependency: transitive + description: + name: logging + sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 + url: "https://pub.dev" + source: hosted + version: "1.3.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 + url: "https://pub.dev" + source: hosted + version: "0.12.17" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec + url: "https://pub.dev" + source: hosted + version: "0.11.1" + meta: + dependency: transitive + description: + name: meta + sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c + url: "https://pub.dev" + source: hosted + version: "1.16.0" + mime: + dependency: transitive + description: + name: mime + sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6" + url: "https://pub.dev" + source: hosted + version: "2.0.0" + nested: + dependency: transitive + description: + name: nested + sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + octo_image: + dependency: transitive + description: + name: octo_image + sha256: "34faa6639a78c7e3cbe79be6f9f96535867e879748ade7d17c9b1ae7536293bd" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + one_context: + dependency: "direct main" + description: + name: one_context + sha256: bafae468bdb5d1089736c4e97582b85abd994a80b65c5becb6956a31c59d69e4 + url: "https://pub.dev" + source: hosted + version: "4.1.0" + open_file: + dependency: "direct main" + description: + name: open_file + sha256: d17e2bddf5b278cb2ae18393d0496aa4f162142ba97d1a9e0c30d476adf99c0e + url: "https://pub.dev" + source: hosted + version: "3.5.10" + open_file_android: + dependency: transitive + description: + name: open_file_android + sha256: "58141fcaece2f453a9684509a7275f231ac0e3d6ceb9a5e6de310a7dff9084aa" + url: "https://pub.dev" + source: hosted + version: "1.0.6" + open_file_ios: + dependency: transitive + description: + name: open_file_ios + sha256: "02996f01e5f6863832068e97f8f3a5ef9b613516db6897f373b43b79849e4d07" + url: "https://pub.dev" + source: hosted + version: "1.0.3" + open_file_linux: + dependency: transitive + description: + name: open_file_linux + sha256: d189f799eecbb139c97f8bc7d303f9e720954fa4e0fa1b0b7294767e5f2d7550 + url: "https://pub.dev" + source: hosted + version: "0.0.5" + open_file_mac: + dependency: transitive + description: + name: open_file_mac + sha256: "1440b1e37ceb0642208cfeb2c659c6cda27b25187a90635c9d1acb7d0584d324" + url: "https://pub.dev" + source: hosted + version: "1.0.3" + open_file_platform_interface: + dependency: transitive + description: + name: open_file_platform_interface + sha256: "101b424ca359632699a7e1213e83d025722ab668b9fd1412338221bf9b0e5757" + url: "https://pub.dev" + source: hosted + version: "1.0.3" + open_file_web: + dependency: transitive + description: + name: open_file_web + sha256: e3dbc9584856283dcb30aef5720558b90f88036360bd078e494ab80a80130c4f + url: "https://pub.dev" + source: hosted + version: "0.0.4" + open_file_windows: + dependency: transitive + description: + name: open_file_windows + sha256: d26c31ddf935a94a1a3aa43a23f4fff8a5ff4eea395fe7a8cb819cf55431c875 + url: "https://pub.dev" + source: hosted + version: "0.0.3" + path: + dependency: transitive + description: + name: path + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" + url: "https://pub.dev" + source: hosted + version: "1.9.1" + path_parsing: + dependency: transitive + description: + name: path_parsing + sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + path_provider: + dependency: "direct main" + description: + name: path_provider + sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd" + url: "https://pub.dev" + source: hosted + version: "2.1.5" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: e122c5ea805bb6773bb12ce667611265980940145be920cd09a4b0ec0285cb16 + url: "https://pub.dev" + source: hosted + version: "2.2.20" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: "16eef174aacb07e09c351502740fa6254c165757638eba1e9116b0a781201bbd" + url: "https://pub.dev" + source: hosted + version: "2.4.2" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 + url: "https://pub.dev" + source: hosted + version: "2.2.1" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 + url: "https://pub.dev" + source: hosted + version: "2.3.0" + pdf: + dependency: "direct main" + description: + name: pdf + sha256: "28eacad99bffcce2e05bba24e50153890ad0255294f4dd78a17075a2ba5c8416" + url: "https://pub.dev" + source: hosted + version: "3.11.3" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: "1a97266a94f7350d30ae522c0af07890c70b8e62c71e8e3920d1db4d23c057d1" + url: "https://pub.dev" + source: hosted + version: "7.0.1" + platform: + dependency: transitive + description: + name: platform + sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984" + url: "https://pub.dev" + source: hosted + version: "3.1.6" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.dev" + source: hosted + version: "2.1.8" + posix: + dependency: transitive + description: + name: posix + sha256: "6323a5b0fa688b6a010df4905a56b00181479e6d10534cecfecede2aa55add61" + url: "https://pub.dev" + source: hosted + version: "6.0.3" + protobuf: + dependency: transitive + description: + name: protobuf + sha256: "826d6a306be26f29e5cd9faeb0c97aad5897270341dab6dbd7b8acd675937006" + url: "https://pub.dev" + source: hosted + version: "5.0.0" + provider: + dependency: "direct main" + description: + name: provider + sha256: "4e82183fa20e5ca25703ead7e05de9e4cceed1fbd1eadc1ac3cb6f565a09f272" + url: "https://pub.dev" + source: hosted + version: "6.1.5+1" + qr: + dependency: transitive + description: + name: qr + sha256: "5a1d2586170e172b8a8c8470bbbffd5eb0cd38a66c0d77155ea138d3af3a4445" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + rename: + dependency: "direct dev" + description: + name: rename + sha256: da5f4d67f8c68f066ad04edfd6585495dbe595f2baf3b1999eb6af1805d79539 + url: "https://pub.dev" + source: hosted + version: "3.1.0" + route_transitions: + dependency: "direct main" + description: + name: route_transitions + sha256: "42f89f161b6c8ab4b497f23af3d684985b2bfd5c73e1a0240e8b5a2aca7b3812" + url: "https://pub.dev" + source: hosted + version: "2.0.1" + rxdart: + dependency: transitive + description: + name: rxdart + sha256: "5c3004a4a8dbb94bd4bf5412a4def4acdaa12e12f269737a5751369e12d1a962" + url: "https://pub.dev" + source: hosted + version: "0.28.0" + shared_preferences: + dependency: transitive + description: + name: shared_preferences + sha256: "6e8bf70b7fef813df4e9a36f658ac46d107db4b4cfe1048b477d4e453a8159f5" + url: "https://pub.dev" + source: hosted + version: "2.5.3" + shared_preferences_android: + dependency: transitive + description: + name: shared_preferences_android + sha256: "34266009473bf71d748912da4bf62d439185226c03e01e2d9687bc65bbfcb713" + url: "https://pub.dev" + source: hosted + version: "2.4.15" + shared_preferences_foundation: + dependency: transitive + description: + name: shared_preferences_foundation + sha256: "6a52cfcdaeac77cad8c97b539ff688ccfc458c007b4db12be584fbe5c0e49e03" + url: "https://pub.dev" + source: hosted + version: "2.5.4" + shared_preferences_linux: + dependency: transitive + description: + name: shared_preferences_linux + sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + shared_preferences_platform_interface: + dependency: transitive + description: + name: shared_preferences_platform_interface + sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + shared_preferences_web: + dependency: transitive + description: + name: shared_preferences_web + sha256: c49bd060261c9a3f0ff445892695d6212ff603ef3115edbb448509d407600019 + url: "https://pub.dev" + source: hosted + version: "2.4.3" + shared_preferences_windows: + dependency: transitive + description: + name: shared_preferences_windows + sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + shared_value: + dependency: "direct main" + description: + name: shared_value + sha256: "264a7de41096e10f5e471f92948d0b648217ecc86549cd3096319541cfd2b515" + url: "https://pub.dev" + source: hosted + version: "3.0.0" + shimmer: + dependency: "direct main" + description: + name: shimmer + sha256: "5f88c883a22e9f9f299e5ba0e4f7e6054857224976a5d9f839d4ebdc94a14ac9" + url: "https://pub.dev" + source: hosted + version: "3.0.0" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + source_span: + dependency: transitive + description: + name: source_span + sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c" + url: "https://pub.dev" + source: hosted + version: "1.10.1" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" + sqflite: + dependency: transitive + description: + name: sqflite + sha256: e2297b1da52f127bc7a3da11439985d9b536f75070f3325e62ada69a5c585d03 + url: "https://pub.dev" + source: hosted + version: "2.4.2" + sqflite_android: + dependency: transitive + description: + name: sqflite_android + sha256: ecd684501ebc2ae9a83536e8b15731642b9570dc8623e0073d227d0ee2bfea88 + url: "https://pub.dev" + source: hosted + version: "2.4.2+2" + sqflite_common: + dependency: transitive + description: + name: sqflite_common + sha256: "6ef422a4525ecc601db6c0a2233ff448c731307906e92cabc9ba292afaae16a6" + url: "https://pub.dev" + source: hosted + version: "2.5.6" + sqflite_darwin: + dependency: transitive + description: + name: sqflite_darwin + sha256: "279832e5cde3fe99e8571879498c9211f3ca6391b0d818df4e17d9fff5c6ccb3" + url: "https://pub.dev" + source: hosted + version: "2.4.2" + sqflite_platform_interface: + dependency: transitive + description: + name: sqflite_platform_interface + sha256: "8dd4515c7bdcae0a785b0062859336de775e8c65db81ae33dd5445f35be61920" + url: "https://pub.dev" + source: hosted + version: "2.4.0" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" + url: "https://pub.dev" + source: hosted + version: "1.12.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" + url: "https://pub.dev" + source: hosted + version: "1.4.1" + synchronized: + dependency: transitive + description: + name: synchronized + sha256: c254ade258ec8282947a0acbbc90b9575b4f19673533ee46f2f6e9b3aeefd7c0 + url: "https://pub.dev" + source: hosted + version: "3.4.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" + url: "https://pub.dev" + source: hosted + version: "1.2.2" + test_api: + dependency: transitive + description: + name: test_api + sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00" + url: "https://pub.dev" + source: hosted + version: "0.7.6" + toast: + dependency: "direct main" + description: + name: toast + sha256: "12433091e3e5a25b3a25f670126e42547c9ade135de30ad9ace45d1ddccd57c9" + url: "https://pub.dev" + source: hosted + version: "0.3.0" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 + url: "https://pub.dev" + source: hosted + version: "1.4.0" + universal_io: + dependency: transitive + description: + name: universal_io + sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + url_launcher: + dependency: "direct main" + description: + name: url_launcher + sha256: f6a7e5c4835bb4e3026a04793a4199ca2d14c739ec378fdfe23fc8075d0439f8 + url: "https://pub.dev" + source: hosted + version: "6.3.2" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: "5c8b6c2d89a78f5a1cca70a73d9d5f86c701b36b42f9c9dac7bad592113c28e9" + url: "https://pub.dev" + source: hosted + version: "6.3.24" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: d80b3f567a617cb923546034cc94bfe44eb15f989fe670b37f26abdb9d939cb7 + url: "https://pub.dev" + source: hosted + version: "6.3.4" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: c043a77d6600ac9c38300567f33ef12b0ef4f4783a2c1f00231d2b1941fea13f + url: "https://pub.dev" + source: hosted + version: "3.2.3" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "3284b6d2ac454cf34f114e1d3319866fdd1e19cdc329999057e44ffe936cfa77" + url: "https://pub.dev" + source: hosted + version: "3.1.4" + uuid: + dependency: transitive + description: + name: uuid + sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff + url: "https://pub.dev" + source: hosted + version: "4.5.1" + vector_graphics: + dependency: transitive + description: + name: vector_graphics + sha256: a4f059dc26fc8295b5921376600a194c4ec7d55e72f2fe4c7d2831e103d461e6 + url: "https://pub.dev" + source: hosted + version: "1.1.19" + vector_graphics_codec: + dependency: transitive + description: + name: vector_graphics_codec + sha256: "99fd9fbd34d9f9a32efd7b6a6aae14125d8237b10403b422a6a6dfeac2806146" + url: "https://pub.dev" + source: hosted + version: "1.1.13" + vector_graphics_compiler: + dependency: transitive + description: + name: vector_graphics_compiler + sha256: d354a7ec6931e6047785f4db12a1f61ec3d43b207fc0790f863818543f8ff0dc + url: "https://pub.dev" + source: hosted + version: "1.1.19" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b + url: "https://pub.dev" + source: hosted + version: "2.2.0" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "45caa6c5917fa127b5dbcfbd1fa60b14e583afdc08bfc96dda38886ca252eb60" + url: "https://pub.dev" + source: hosted + version: "15.0.2" + web: + dependency: transitive + description: + name: web + sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" + url: "https://pub.dev" + source: hosted + version: "1.1.1" + webview_flutter: + dependency: "direct main" + description: + name: webview_flutter + sha256: c3e4fe614b1c814950ad07186007eff2f2e5dd2935eba7b9a9a1af8e5885f1ba + url: "https://pub.dev" + source: hosted + version: "4.13.0" + webview_flutter_android: + dependency: transitive + description: + name: webview_flutter_android + sha256: e5201c620eb2637dca88a756961fae4a7191bb30b4f2271e08b746405ffdf3fd + url: "https://pub.dev" + source: hosted + version: "4.10.5" + webview_flutter_platform_interface: + dependency: transitive + description: + name: webview_flutter_platform_interface + sha256: "63d26ee3aca7256a83ccb576a50272edd7cfc80573a4305caa98985feb493ee0" + url: "https://pub.dev" + source: hosted + version: "2.14.0" + webview_flutter_wkwebview: + dependency: transitive + description: + name: webview_flutter_wkwebview + sha256: fea63576b3b7e02b2df8b78ba92b48ed66caec2bb041e9a0b1cbd586d5d80bfd + url: "https://pub.dev" + source: hosted + version: "3.23.1" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + xml: + dependency: transitive + description: + name: xml + sha256: "971043b3a0d3da28727e40ed3e0b5d18b742fa5a68665cca88e74b7876d5e025" + url: "https://pub.dev" + source: hosted + version: "6.6.1" + yaml: + dependency: transitive + description: + name: yaml + sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce + url: "https://pub.dev" + source: hosted + version: "3.1.3" +sdks: + dart: ">=3.9.0 <4.0.0" + flutter: ">=3.35.0" diff --git a/app_code/pubspec.yaml b/app_code/pubspec.yaml new file mode 100644 index 0000000..2e8a7c0 --- /dev/null +++ b/app_code/pubspec.yaml @@ -0,0 +1,91 @@ +name: grostore +description: Grostore Flutter App + +publish_to: 'none' + +version: 1.2.4+5 + +environment: + sdk: '>=3.2.6 <4.0.0' + +dependencies: + flutter: + sdk: flutter + flutter_localizations: + sdk: flutter + intl: ^0.20.2 + + + cupertino_icons: ^1.0.2 + provider: ^6.0.5 + route_transitions: ^2.0.1 + shared_value: ^3.0.0 + http: ^1.5.0 + intl_phone_number_input: ^0.7.3+1 + toast: ^0.3.0 + go_router: ^16.2.5 + one_context: ^4.1.0 + badges: ^3.1.1 + cached_network_image: ^3.2.3 + shimmer: ^3.0.0 + dotted_line: ^3.1.0 + flutter_svg: ^2.0.5 + google_fonts: ^6.3.2 + flutter_countdown_timer: ^4.1.0 + url_launcher: ^6.1.11 + webview_flutter: ^4.2.2 + image_picker: ^1.2.0 + flutter_bloc: ^9.1.1 + equatable: ^2.0.5 + calendar_date_picker2: ^2.0.1 + carousel_slider: ^5.1.1 + open_file: ^3.5.10 + path_provider: ^2.1.5 + pdf: +icons_launcher: + image_path: "assets/logos/logo_a.png" + platforms: + android: + enable: true + ios: + enable: true + +dev_dependencies: + flutter_test: + sdk: flutter + + + flutter_lints: ^6.0.0 + rename: ^3.0.1 + icons_launcher: ^3.0.3 + + +flutter: + + + generate: true + uses-material-design: true + + + + assets: + - assets/ + - assets/icons/ + - assets/logos/ + - assets/images/ + - assets/flags/ + + + + + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 diff --git a/app_code/temp_apk/AndroidManifest.xml b/app_code/temp_apk/AndroidManifest.xml new file mode 100644 index 0000000..a6cda0c Binary files /dev/null and b/app_code/temp_apk/AndroidManifest.xml differ diff --git a/app_code/temp_apk/DebugProbesKt.bin b/app_code/temp_apk/DebugProbesKt.bin new file mode 100644 index 0000000..9d171f3 Binary files /dev/null and b/app_code/temp_apk/DebugProbesKt.bin differ diff --git a/app_code/temp_apk/META-INF/androidx.activity_activity-ktx.version b/app_code/temp_apk/META-INF/androidx.activity_activity-ktx.version new file mode 100644 index 0000000..4dae298 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.activity_activity-ktx.version @@ -0,0 +1 @@ +1.10.1 diff --git a/app_code/temp_apk/META-INF/androidx.activity_activity.version b/app_code/temp_apk/META-INF/androidx.activity_activity.version new file mode 100644 index 0000000..4dae298 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.activity_activity.version @@ -0,0 +1 @@ +1.10.1 diff --git a/app_code/temp_apk/META-INF/androidx.annotation_annotation-experimental.version b/app_code/temp_apk/META-INF/androidx.annotation_annotation-experimental.version new file mode 100644 index 0000000..347f583 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.annotation_annotation-experimental.version @@ -0,0 +1 @@ +1.4.1 diff --git a/app_code/temp_apk/META-INF/androidx.appcompat_appcompat-resources.version b/app_code/temp_apk/META-INF/androidx.appcompat_appcompat-resources.version new file mode 100644 index 0000000..9c6d629 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.appcompat_appcompat-resources.version @@ -0,0 +1 @@ +1.6.1 diff --git a/app_code/temp_apk/META-INF/androidx.appcompat_appcompat.version b/app_code/temp_apk/META-INF/androidx.appcompat_appcompat.version new file mode 100644 index 0000000..9c6d629 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.appcompat_appcompat.version @@ -0,0 +1 @@ +1.6.1 diff --git a/app_code/temp_apk/META-INF/androidx.arch.core_core-runtime.version b/app_code/temp_apk/META-INF/androidx.arch.core_core-runtime.version new file mode 100644 index 0000000..f62db83 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.arch.core_core-runtime.version @@ -0,0 +1 @@ +task ':arch:core:core-runtime:writeVersionFile' property 'version' diff --git a/app_code/temp_apk/META-INF/androidx.asynclayoutinflater_asynclayoutinflater.version b/app_code/temp_apk/META-INF/androidx.asynclayoutinflater_asynclayoutinflater.version new file mode 100644 index 0000000..3eefcb9 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.asynclayoutinflater_asynclayoutinflater.version @@ -0,0 +1 @@ +1.0.0 diff --git a/app_code/temp_apk/META-INF/androidx.browser_browser.version b/app_code/temp_apk/META-INF/androidx.browser_browser.version new file mode 100644 index 0000000..27f9cd3 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.browser_browser.version @@ -0,0 +1 @@ +1.8.0 diff --git a/app_code/temp_apk/META-INF/androidx.coordinatorlayout_coordinatorlayout.version b/app_code/temp_apk/META-INF/androidx.coordinatorlayout_coordinatorlayout.version new file mode 100644 index 0000000..3eefcb9 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.coordinatorlayout_coordinatorlayout.version @@ -0,0 +1 @@ +1.0.0 diff --git a/app_code/temp_apk/META-INF/androidx.core_core-ktx.version b/app_code/temp_apk/META-INF/androidx.core_core-ktx.version new file mode 100644 index 0000000..b50dd27 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.core_core-ktx.version @@ -0,0 +1 @@ +1.13.1 diff --git a/app_code/temp_apk/META-INF/androidx.core_core-viewtree.version b/app_code/temp_apk/META-INF/androidx.core_core-viewtree.version new file mode 100644 index 0000000..3eefcb9 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.core_core-viewtree.version @@ -0,0 +1 @@ +1.0.0 diff --git a/app_code/temp_apk/META-INF/androidx.core_core.version b/app_code/temp_apk/META-INF/androidx.core_core.version new file mode 100644 index 0000000..b50dd27 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.core_core.version @@ -0,0 +1 @@ +1.13.1 diff --git a/app_code/temp_apk/META-INF/androidx.cursoradapter_cursoradapter.version b/app_code/temp_apk/META-INF/androidx.cursoradapter_cursoradapter.version new file mode 100644 index 0000000..3eefcb9 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.cursoradapter_cursoradapter.version @@ -0,0 +1 @@ +1.0.0 diff --git a/app_code/temp_apk/META-INF/androidx.customview_customview.version b/app_code/temp_apk/META-INF/androidx.customview_customview.version new file mode 100644 index 0000000..9084fa2 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.customview_customview.version @@ -0,0 +1 @@ +1.1.0 diff --git a/app_code/temp_apk/META-INF/androidx.datastore_datastore-core.version b/app_code/temp_apk/META-INF/androidx.datastore_datastore-core.version new file mode 100644 index 0000000..2bf1ca5 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.datastore_datastore-core.version @@ -0,0 +1 @@ +1.1.7 diff --git a/app_code/temp_apk/META-INF/androidx.datastore_datastore-preferences-core.version b/app_code/temp_apk/META-INF/androidx.datastore_datastore-preferences-core.version new file mode 100644 index 0000000..2bf1ca5 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.datastore_datastore-preferences-core.version @@ -0,0 +1 @@ +1.1.7 diff --git a/app_code/temp_apk/META-INF/androidx.datastore_datastore-preferences.version b/app_code/temp_apk/META-INF/androidx.datastore_datastore-preferences.version new file mode 100644 index 0000000..2bf1ca5 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.datastore_datastore-preferences.version @@ -0,0 +1 @@ +1.1.7 diff --git a/app_code/temp_apk/META-INF/androidx.datastore_datastore.version b/app_code/temp_apk/META-INF/androidx.datastore_datastore.version new file mode 100644 index 0000000..2bf1ca5 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.datastore_datastore.version @@ -0,0 +1 @@ +1.1.7 diff --git a/app_code/temp_apk/META-INF/androidx.documentfile_documentfile.version b/app_code/temp_apk/META-INF/androidx.documentfile_documentfile.version new file mode 100644 index 0000000..3eefcb9 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.documentfile_documentfile.version @@ -0,0 +1 @@ +1.0.0 diff --git a/app_code/temp_apk/META-INF/androidx.drawerlayout_drawerlayout.version b/app_code/temp_apk/META-INF/androidx.drawerlayout_drawerlayout.version new file mode 100644 index 0000000..3eefcb9 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.drawerlayout_drawerlayout.version @@ -0,0 +1 @@ +1.0.0 diff --git a/app_code/temp_apk/META-INF/androidx.emoji2_emoji2-views-helper.version b/app_code/temp_apk/META-INF/androidx.emoji2_emoji2-views-helper.version new file mode 100644 index 0000000..26aaba0 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.emoji2_emoji2-views-helper.version @@ -0,0 +1 @@ +1.2.0 diff --git a/app_code/temp_apk/META-INF/androidx.emoji2_emoji2.version b/app_code/temp_apk/META-INF/androidx.emoji2_emoji2.version new file mode 100644 index 0000000..26aaba0 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.emoji2_emoji2.version @@ -0,0 +1 @@ +1.2.0 diff --git a/app_code/temp_apk/META-INF/androidx.exifinterface_exifinterface.version b/app_code/temp_apk/META-INF/androidx.exifinterface_exifinterface.version new file mode 100644 index 0000000..347f583 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.exifinterface_exifinterface.version @@ -0,0 +1 @@ +1.4.1 diff --git a/app_code/temp_apk/META-INF/androidx.fragment_fragment-ktx.version b/app_code/temp_apk/META-INF/androidx.fragment_fragment-ktx.version new file mode 100644 index 0000000..943f9cb --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.fragment_fragment-ktx.version @@ -0,0 +1 @@ +1.7.1 diff --git a/app_code/temp_apk/META-INF/androidx.fragment_fragment.version b/app_code/temp_apk/META-INF/androidx.fragment_fragment.version new file mode 100644 index 0000000..943f9cb --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.fragment_fragment.version @@ -0,0 +1 @@ +1.7.1 diff --git a/app_code/temp_apk/META-INF/androidx.interpolator_interpolator.version b/app_code/temp_apk/META-INF/androidx.interpolator_interpolator.version new file mode 100644 index 0000000..3eefcb9 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.interpolator_interpolator.version @@ -0,0 +1 @@ +1.0.0 diff --git a/app_code/temp_apk/META-INF/androidx.legacy_legacy-support-core-ui.version b/app_code/temp_apk/META-INF/androidx.legacy_legacy-support-core-ui.version new file mode 100644 index 0000000..3eefcb9 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.legacy_legacy-support-core-ui.version @@ -0,0 +1 @@ +1.0.0 diff --git a/app_code/temp_apk/META-INF/androidx.legacy_legacy-support-core-utils.version b/app_code/temp_apk/META-INF/androidx.legacy_legacy-support-core-utils.version new file mode 100644 index 0000000..3eefcb9 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.legacy_legacy-support-core-utils.version @@ -0,0 +1 @@ +1.0.0 diff --git a/app_code/temp_apk/META-INF/androidx.lifecycle_lifecycle-livedata-core-ktx.version b/app_code/temp_apk/META-INF/androidx.lifecycle_lifecycle-livedata-core-ktx.version new file mode 100644 index 0000000..24ba9a3 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.lifecycle_lifecycle-livedata-core-ktx.version @@ -0,0 +1 @@ +2.7.0 diff --git a/app_code/temp_apk/META-INF/androidx.lifecycle_lifecycle-livedata-core.version b/app_code/temp_apk/META-INF/androidx.lifecycle_lifecycle-livedata-core.version new file mode 100644 index 0000000..24ba9a3 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.lifecycle_lifecycle-livedata-core.version @@ -0,0 +1 @@ +2.7.0 diff --git a/app_code/temp_apk/META-INF/androidx.lifecycle_lifecycle-livedata.version b/app_code/temp_apk/META-INF/androidx.lifecycle_lifecycle-livedata.version new file mode 100644 index 0000000..24ba9a3 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.lifecycle_lifecycle-livedata.version @@ -0,0 +1 @@ +2.7.0 diff --git a/app_code/temp_apk/META-INF/androidx.lifecycle_lifecycle-process.version b/app_code/temp_apk/META-INF/androidx.lifecycle_lifecycle-process.version new file mode 100644 index 0000000..24ba9a3 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.lifecycle_lifecycle-process.version @@ -0,0 +1 @@ +2.7.0 diff --git a/app_code/temp_apk/META-INF/androidx.lifecycle_lifecycle-runtime-ktx.version b/app_code/temp_apk/META-INF/androidx.lifecycle_lifecycle-runtime-ktx.version new file mode 100644 index 0000000..24ba9a3 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.lifecycle_lifecycle-runtime-ktx.version @@ -0,0 +1 @@ +2.7.0 diff --git a/app_code/temp_apk/META-INF/androidx.lifecycle_lifecycle-runtime.version b/app_code/temp_apk/META-INF/androidx.lifecycle_lifecycle-runtime.version new file mode 100644 index 0000000..24ba9a3 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.lifecycle_lifecycle-runtime.version @@ -0,0 +1 @@ +2.7.0 diff --git a/app_code/temp_apk/META-INF/androidx.lifecycle_lifecycle-viewmodel-ktx.version b/app_code/temp_apk/META-INF/androidx.lifecycle_lifecycle-viewmodel-ktx.version new file mode 100644 index 0000000..24ba9a3 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.lifecycle_lifecycle-viewmodel-ktx.version @@ -0,0 +1 @@ +2.7.0 diff --git a/app_code/temp_apk/META-INF/androidx.lifecycle_lifecycle-viewmodel-savedstate.version b/app_code/temp_apk/META-INF/androidx.lifecycle_lifecycle-viewmodel-savedstate.version new file mode 100644 index 0000000..24ba9a3 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.lifecycle_lifecycle-viewmodel-savedstate.version @@ -0,0 +1 @@ +2.7.0 diff --git a/app_code/temp_apk/META-INF/androidx.lifecycle_lifecycle-viewmodel.version b/app_code/temp_apk/META-INF/androidx.lifecycle_lifecycle-viewmodel.version new file mode 100644 index 0000000..24ba9a3 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.lifecycle_lifecycle-viewmodel.version @@ -0,0 +1 @@ +2.7.0 diff --git a/app_code/temp_apk/META-INF/androidx.loader_loader.version b/app_code/temp_apk/META-INF/androidx.loader_loader.version new file mode 100644 index 0000000..3eefcb9 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.loader_loader.version @@ -0,0 +1 @@ +1.0.0 diff --git a/app_code/temp_apk/META-INF/androidx.localbroadcastmanager_localbroadcastmanager.version b/app_code/temp_apk/META-INF/androidx.localbroadcastmanager_localbroadcastmanager.version new file mode 100644 index 0000000..3eefcb9 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.localbroadcastmanager_localbroadcastmanager.version @@ -0,0 +1 @@ +1.0.0 diff --git a/app_code/temp_apk/META-INF/androidx.preference_preference.version b/app_code/temp_apk/META-INF/androidx.preference_preference.version new file mode 100644 index 0000000..6085e94 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.preference_preference.version @@ -0,0 +1 @@ +1.2.1 diff --git a/app_code/temp_apk/META-INF/androidx.print_print.version b/app_code/temp_apk/META-INF/androidx.print_print.version new file mode 100644 index 0000000..3eefcb9 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.print_print.version @@ -0,0 +1 @@ +1.0.0 diff --git a/app_code/temp_apk/META-INF/androidx.profileinstaller_profileinstaller.version b/app_code/temp_apk/META-INF/androidx.profileinstaller_profileinstaller.version new file mode 100644 index 0000000..88c5fb8 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.profileinstaller_profileinstaller.version @@ -0,0 +1 @@ +1.4.0 diff --git a/app_code/temp_apk/META-INF/androidx.recyclerview_recyclerview.version b/app_code/temp_apk/META-INF/androidx.recyclerview_recyclerview.version new file mode 100644 index 0000000..3eefcb9 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.recyclerview_recyclerview.version @@ -0,0 +1 @@ +1.0.0 diff --git a/app_code/temp_apk/META-INF/androidx.savedstate_savedstate-ktx.version b/app_code/temp_apk/META-INF/androidx.savedstate_savedstate-ktx.version new file mode 100644 index 0000000..6085e94 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.savedstate_savedstate-ktx.version @@ -0,0 +1 @@ +1.2.1 diff --git a/app_code/temp_apk/META-INF/androidx.savedstate_savedstate.version b/app_code/temp_apk/META-INF/androidx.savedstate_savedstate.version new file mode 100644 index 0000000..6085e94 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.savedstate_savedstate.version @@ -0,0 +1 @@ +1.2.1 diff --git a/app_code/temp_apk/META-INF/androidx.slidingpanelayout_slidingpanelayout.version b/app_code/temp_apk/META-INF/androidx.slidingpanelayout_slidingpanelayout.version new file mode 100644 index 0000000..26aaba0 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.slidingpanelayout_slidingpanelayout.version @@ -0,0 +1 @@ +1.2.0 diff --git a/app_code/temp_apk/META-INF/androidx.startup_startup-runtime.version b/app_code/temp_apk/META-INF/androidx.startup_startup-runtime.version new file mode 100644 index 0000000..524cb55 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.startup_startup-runtime.version @@ -0,0 +1 @@ +1.1.1 diff --git a/app_code/temp_apk/META-INF/androidx.swiperefreshlayout_swiperefreshlayout.version b/app_code/temp_apk/META-INF/androidx.swiperefreshlayout_swiperefreshlayout.version new file mode 100644 index 0000000..3eefcb9 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.swiperefreshlayout_swiperefreshlayout.version @@ -0,0 +1 @@ +1.0.0 diff --git a/app_code/temp_apk/META-INF/androidx.tracing_tracing.version b/app_code/temp_apk/META-INF/androidx.tracing_tracing.version new file mode 100644 index 0000000..26aaba0 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.tracing_tracing.version @@ -0,0 +1 @@ +1.2.0 diff --git a/app_code/temp_apk/META-INF/androidx.transition_transition.version b/app_code/temp_apk/META-INF/androidx.transition_transition.version new file mode 100644 index 0000000..347f583 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.transition_transition.version @@ -0,0 +1 @@ +1.4.1 diff --git a/app_code/temp_apk/META-INF/androidx.vectordrawable_vectordrawable-animated.version b/app_code/temp_apk/META-INF/androidx.vectordrawable_vectordrawable-animated.version new file mode 100644 index 0000000..9084fa2 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.vectordrawable_vectordrawable-animated.version @@ -0,0 +1 @@ +1.1.0 diff --git a/app_code/temp_apk/META-INF/androidx.vectordrawable_vectordrawable.version b/app_code/temp_apk/META-INF/androidx.vectordrawable_vectordrawable.version new file mode 100644 index 0000000..9084fa2 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.vectordrawable_vectordrawable.version @@ -0,0 +1 @@ +1.1.0 diff --git a/app_code/temp_apk/META-INF/androidx.versionedparcelable_versionedparcelable.version b/app_code/temp_apk/META-INF/androidx.versionedparcelable_versionedparcelable.version new file mode 100644 index 0000000..524cb55 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.versionedparcelable_versionedparcelable.version @@ -0,0 +1 @@ +1.1.1 diff --git a/app_code/temp_apk/META-INF/androidx.viewpager_viewpager.version b/app_code/temp_apk/META-INF/androidx.viewpager_viewpager.version new file mode 100644 index 0000000..3eefcb9 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.viewpager_viewpager.version @@ -0,0 +1 @@ +1.0.0 diff --git a/app_code/temp_apk/META-INF/androidx.webkit_webkit.version b/app_code/temp_apk/META-INF/androidx.webkit_webkit.version new file mode 100644 index 0000000..850e742 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.webkit_webkit.version @@ -0,0 +1 @@ +1.14.0 diff --git a/app_code/temp_apk/META-INF/androidx.window.extensions.core_core.version b/app_code/temp_apk/META-INF/androidx.window.extensions.core_core.version new file mode 100644 index 0000000..3eefcb9 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.window.extensions.core_core.version @@ -0,0 +1 @@ +1.0.0 diff --git a/app_code/temp_apk/META-INF/androidx.window_window-java.version b/app_code/temp_apk/META-INF/androidx.window_window-java.version new file mode 100644 index 0000000..26aaba0 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.window_window-java.version @@ -0,0 +1 @@ +1.2.0 diff --git a/app_code/temp_apk/META-INF/androidx.window_window.version b/app_code/temp_apk/META-INF/androidx.window_window.version new file mode 100644 index 0000000..26aaba0 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx.window_window.version @@ -0,0 +1 @@ +1.2.0 diff --git a/app_code/temp_apk/META-INF/androidx/annotation/annotation/LICENSE.txt b/app_code/temp_apk/META-INF/androidx/annotation/annotation/LICENSE.txt new file mode 100644 index 0000000..e454a52 --- /dev/null +++ b/app_code/temp_apk/META-INF/androidx/annotation/annotation/LICENSE.txt @@ -0,0 +1,178 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + diff --git a/app_code/temp_apk/META-INF/com/android/build/gradle/app-metadata.properties b/app_code/temp_apk/META-INF/com/android/build/gradle/app-metadata.properties new file mode 100644 index 0000000..d33ece8 --- /dev/null +++ b/app_code/temp_apk/META-INF/com/android/build/gradle/app-metadata.properties @@ -0,0 +1,2 @@ +appMetadataVersion=1.1 +androidGradlePluginVersion=8.12.0 diff --git a/app_code/temp_apk/META-INF/kotlinx_coroutines_android.version b/app_code/temp_apk/META-INF/kotlinx_coroutines_android.version new file mode 100644 index 0000000..bbf649f --- /dev/null +++ b/app_code/temp_apk/META-INF/kotlinx_coroutines_android.version @@ -0,0 +1 @@ +1.7.3 \ No newline at end of file diff --git a/app_code/temp_apk/META-INF/kotlinx_coroutines_core.version b/app_code/temp_apk/META-INF/kotlinx_coroutines_core.version new file mode 100644 index 0000000..bbf649f --- /dev/null +++ b/app_code/temp_apk/META-INF/kotlinx_coroutines_core.version @@ -0,0 +1 @@ +1.7.3 \ No newline at end of file diff --git a/app_code/temp_apk/META-INF/services/kotlinx.coroutines.CoroutineExceptionHandler b/app_code/temp_apk/META-INF/services/kotlinx.coroutines.CoroutineExceptionHandler new file mode 100644 index 0000000..dfbb423 --- /dev/null +++ b/app_code/temp_apk/META-INF/services/kotlinx.coroutines.CoroutineExceptionHandler @@ -0,0 +1 @@ +kotlinx.coroutines.android.AndroidExceptionPreHandler diff --git a/app_code/temp_apk/META-INF/services/kotlinx.coroutines.internal.MainDispatcherFactory b/app_code/temp_apk/META-INF/services/kotlinx.coroutines.internal.MainDispatcherFactory new file mode 100644 index 0000000..d700530 --- /dev/null +++ b/app_code/temp_apk/META-INF/services/kotlinx.coroutines.internal.MainDispatcherFactory @@ -0,0 +1 @@ +kotlinx.coroutines.android.AndroidDispatcherFactory diff --git a/app_code/temp_apk/META-INF/version-control-info.textproto b/app_code/temp_apk/META-INF/version-control-info.textproto new file mode 100644 index 0000000..3674301 --- /dev/null +++ b/app_code/temp_apk/META-INF/version-control-info.textproto @@ -0,0 +1 @@ +generate_error_reason: NO_SUPPORTED_VCS_FOUND diff --git a/app_code/temp_apk/assets/dexopt/baseline.prof b/app_code/temp_apk/assets/dexopt/baseline.prof new file mode 100644 index 0000000..c4e8e61 Binary files /dev/null and b/app_code/temp_apk/assets/dexopt/baseline.prof differ diff --git a/app_code/temp_apk/assets/dexopt/baseline.profm b/app_code/temp_apk/assets/dexopt/baseline.profm new file mode 100644 index 0000000..b37a214 Binary files /dev/null and b/app_code/temp_apk/assets/dexopt/baseline.profm differ diff --git a/app_code/temp_apk/assets/flutter_assets/AssetManifest.bin b/app_code/temp_apk/assets/flutter_assets/AssetManifest.bin new file mode 100644 index 0000000..abc1c95 --- /dev/null +++ b/app_code/temp_apk/assets/flutter_assets/AssetManifest.bin @@ -0,0 +1 @@ + þ%assets/flags/ad.png  assetassets/flags/ad.pngassets/flags/ae.png  assetassets/flags/ae.pngassets/flags/af.png  assetassets/flags/af.pngassets/flags/ag.png  assetassets/flags/ag.pngassets/flags/ai.png  assetassets/flags/ai.pngassets/flags/al.png  assetassets/flags/al.pngassets/flags/am.png  assetassets/flags/am.pngassets/flags/an.png  assetassets/flags/an.pngassets/flags/ao.png  assetassets/flags/ao.pngassets/flags/aq.png  assetassets/flags/aq.pngassets/flags/ar.png  assetassets/flags/ar.pngassets/flags/as.png  assetassets/flags/as.pngassets/flags/at.png  assetassets/flags/at.pngassets/flags/au.png  assetassets/flags/au.pngassets/flags/aw.png  assetassets/flags/aw.pngassets/flags/ax.png  assetassets/flags/ax.pngassets/flags/az.png  assetassets/flags/az.pngassets/flags/ba.png  assetassets/flags/ba.pngassets/flags/bb.png  assetassets/flags/bb.pngassets/flags/bd.png  assetassets/flags/bd.pngassets/flags/be.png  assetassets/flags/be.pngassets/flags/bf.png  assetassets/flags/bf.pngassets/flags/bg.png  assetassets/flags/bg.pngassets/flags/bh.png  assetassets/flags/bh.pngassets/flags/bi.png  assetassets/flags/bi.pngassets/flags/bj.png  assetassets/flags/bj.pngassets/flags/bl.png  assetassets/flags/bl.pngassets/flags/bm.png  assetassets/flags/bm.pngassets/flags/bn.png  assetassets/flags/bn.pngassets/flags/bo.png  assetassets/flags/bo.pngassets/flags/bq.png  assetassets/flags/bq.pngassets/flags/br.png  assetassets/flags/br.pngassets/flags/bs.png  assetassets/flags/bs.pngassets/flags/bt.png  assetassets/flags/bt.pngassets/flags/bv.png  assetassets/flags/bv.pngassets/flags/bw.png  assetassets/flags/bw.pngassets/flags/by.png  assetassets/flags/by.pngassets/flags/bz.png  assetassets/flags/bz.pngassets/flags/ca.png  assetassets/flags/ca.pngassets/flags/cc.png  assetassets/flags/cc.pngassets/flags/cd.png  assetassets/flags/cd.pngassets/flags/cf.png  assetassets/flags/cf.pngassets/flags/cg.png  assetassets/flags/cg.pngassets/flags/ch.png  assetassets/flags/ch.pngassets/flags/ci.png  assetassets/flags/ci.pngassets/flags/ck.png  assetassets/flags/ck.pngassets/flags/cl.png  assetassets/flags/cl.pngassets/flags/cm.png  assetassets/flags/cm.pngassets/flags/cn.png  assetassets/flags/cn.pngassets/flags/co.png  assetassets/flags/co.pngassets/flags/cr.png  assetassets/flags/cr.pngassets/flags/cu.png  assetassets/flags/cu.pngassets/flags/cv.png  assetassets/flags/cv.pngassets/flags/cw.png  assetassets/flags/cw.pngassets/flags/cx.png  assetassets/flags/cx.pngassets/flags/cy.png  assetassets/flags/cy.pngassets/flags/cz.png  assetassets/flags/cz.pngassets/flags/de.png  assetassets/flags/de.pngassets/flags/dj.png  assetassets/flags/dj.pngassets/flags/dk.png  assetassets/flags/dk.pngassets/flags/dm.png  assetassets/flags/dm.pngassets/flags/do.png  assetassets/flags/do.pngassets/flags/dz.png  assetassets/flags/dz.pngassets/flags/ec.png  assetassets/flags/ec.pngassets/flags/ee.png  assetassets/flags/ee.pngassets/flags/eg.png  assetassets/flags/eg.pngassets/flags/eh.png  assetassets/flags/eh.pngassets/flags/er.png  assetassets/flags/er.pngassets/flags/es.png  assetassets/flags/es.pngassets/flags/et.png  assetassets/flags/et.pngassets/flags/eu.png  assetassets/flags/eu.pngassets/flags/fi.png  assetassets/flags/fi.pngassets/flags/fj.png  assetassets/flags/fj.pngassets/flags/fk.png  assetassets/flags/fk.pngassets/flags/fm.png  assetassets/flags/fm.pngassets/flags/fo.png  assetassets/flags/fo.pngassets/flags/fr.png  assetassets/flags/fr.pngassets/flags/ga.png  assetassets/flags/ga.pngassets/flags/gb-eng.png  assetassets/flags/gb-eng.pngassets/flags/gb-nir.png  assetassets/flags/gb-nir.pngassets/flags/gb-sct.png  assetassets/flags/gb-sct.pngassets/flags/gb-wls.png  assetassets/flags/gb-wls.pngassets/flags/gb.png  assetassets/flags/gb.pngassets/flags/gd.png  assetassets/flags/gd.pngassets/flags/ge.png  assetassets/flags/ge.pngassets/flags/gf.png  assetassets/flags/gf.pngassets/flags/gg.png  assetassets/flags/gg.pngassets/flags/gh.png  assetassets/flags/gh.pngassets/flags/gi.png  assetassets/flags/gi.pngassets/flags/gl.png  assetassets/flags/gl.pngassets/flags/gm.png  assetassets/flags/gm.pngassets/flags/gn.png  assetassets/flags/gn.pngassets/flags/gp.png  assetassets/flags/gp.pngassets/flags/gq.png  assetassets/flags/gq.pngassets/flags/gr.png  assetassets/flags/gr.pngassets/flags/gs.png  assetassets/flags/gs.pngassets/flags/gt.png  assetassets/flags/gt.pngassets/flags/gu.png  assetassets/flags/gu.pngassets/flags/gw.png  assetassets/flags/gw.pngassets/flags/gy.png  assetassets/flags/gy.pngassets/flags/hk.png  assetassets/flags/hk.pngassets/flags/hm.png  assetassets/flags/hm.pngassets/flags/hn.png  assetassets/flags/hn.pngassets/flags/hr.png  assetassets/flags/hr.pngassets/flags/ht.png  assetassets/flags/ht.pngassets/flags/hu.png  assetassets/flags/hu.pngassets/flags/id.png  assetassets/flags/id.pngassets/flags/ie.png  assetassets/flags/ie.pngassets/flags/il.png  assetassets/flags/il.pngassets/flags/im.png  assetassets/flags/im.pngassets/flags/in.png  assetassets/flags/in.pngassets/flags/io.png  assetassets/flags/io.pngassets/flags/iq.png  assetassets/flags/iq.pngassets/flags/ir.png  assetassets/flags/ir.pngassets/flags/is.png  assetassets/flags/is.pngassets/flags/it.png  assetassets/flags/it.pngassets/flags/je.png  assetassets/flags/je.pngassets/flags/jm.png  assetassets/flags/jm.pngassets/flags/jo.png  assetassets/flags/jo.pngassets/flags/jp.png  assetassets/flags/jp.pngassets/flags/ke.png  assetassets/flags/ke.pngassets/flags/kg.png  assetassets/flags/kg.pngassets/flags/kh.png  assetassets/flags/kh.pngassets/flags/ki.png  assetassets/flags/ki.pngassets/flags/km.png  assetassets/flags/km.pngassets/flags/kn.png  assetassets/flags/kn.pngassets/flags/kp.png  assetassets/flags/kp.pngassets/flags/kr.png  assetassets/flags/kr.pngassets/flags/kw.png  assetassets/flags/kw.pngassets/flags/ky.png  assetassets/flags/ky.pngassets/flags/kz.png  assetassets/flags/kz.pngassets/flags/la.png  assetassets/flags/la.pngassets/flags/lb.png  assetassets/flags/lb.pngassets/flags/lc.png  assetassets/flags/lc.pngassets/flags/li.png  assetassets/flags/li.pngassets/flags/lk.png  assetassets/flags/lk.pngassets/flags/lr.png  assetassets/flags/lr.pngassets/flags/ls.png  assetassets/flags/ls.pngassets/flags/lt.png  assetassets/flags/lt.pngassets/flags/lu.png  assetassets/flags/lu.pngassets/flags/lv.png  assetassets/flags/lv.pngassets/flags/ly.png  assetassets/flags/ly.pngassets/flags/ma.png  assetassets/flags/ma.pngassets/flags/mc.png  assetassets/flags/mc.pngassets/flags/md.png  assetassets/flags/md.pngassets/flags/me.png  assetassets/flags/me.pngassets/flags/mf.png  assetassets/flags/mf.pngassets/flags/mg.png  assetassets/flags/mg.pngassets/flags/mh.png  assetassets/flags/mh.pngassets/flags/mk.png  assetassets/flags/mk.pngassets/flags/ml.png  assetassets/flags/ml.pngassets/flags/mm.png  assetassets/flags/mm.pngassets/flags/mn.png  assetassets/flags/mn.pngassets/flags/mo.png  assetassets/flags/mo.pngassets/flags/mp.png  assetassets/flags/mp.pngassets/flags/mq.png  assetassets/flags/mq.pngassets/flags/mr.png  assetassets/flags/mr.pngassets/flags/ms.png  assetassets/flags/ms.pngassets/flags/mt.png  assetassets/flags/mt.pngassets/flags/mu.png  assetassets/flags/mu.pngassets/flags/mv.png  assetassets/flags/mv.pngassets/flags/mw.png  assetassets/flags/mw.pngassets/flags/mx.png  assetassets/flags/mx.pngassets/flags/my.png  assetassets/flags/my.pngassets/flags/mz.png  assetassets/flags/mz.pngassets/flags/na.png  assetassets/flags/na.pngassets/flags/nc.png  assetassets/flags/nc.pngassets/flags/ne.png  assetassets/flags/ne.pngassets/flags/nf.png  assetassets/flags/nf.pngassets/flags/ng.png  assetassets/flags/ng.pngassets/flags/ni.png  assetassets/flags/ni.pngassets/flags/nl.png  assetassets/flags/nl.pngassets/flags/no.png  assetassets/flags/no.pngassets/flags/np.png  assetassets/flags/np.pngassets/flags/nr.png  assetassets/flags/nr.pngassets/flags/nu.png  assetassets/flags/nu.pngassets/flags/nz.png  assetassets/flags/nz.pngassets/flags/om.png  assetassets/flags/om.pngassets/flags/pa.png  assetassets/flags/pa.pngassets/flags/pe.png  assetassets/flags/pe.pngassets/flags/pf.png  assetassets/flags/pf.pngassets/flags/pg.png  assetassets/flags/pg.pngassets/flags/ph.png  assetassets/flags/ph.pngassets/flags/pk.png  assetassets/flags/pk.pngassets/flags/pl.png  assetassets/flags/pl.pngassets/flags/pm.png  assetassets/flags/pm.pngassets/flags/pn.png  assetassets/flags/pn.pngassets/flags/pr.png  assetassets/flags/pr.pngassets/flags/ps.png  assetassets/flags/ps.pngassets/flags/pt.png  assetassets/flags/pt.pngassets/flags/pw.png  assetassets/flags/pw.pngassets/flags/py.png  assetassets/flags/py.pngassets/flags/qa.png  assetassets/flags/qa.pngassets/flags/re.png  assetassets/flags/re.pngassets/flags/ro.png  assetassets/flags/ro.pngassets/flags/rs.png  assetassets/flags/rs.pngassets/flags/ru.png  assetassets/flags/ru.pngassets/flags/rw.png  assetassets/flags/rw.pngassets/flags/sa.png  assetassets/flags/sa.pngassets/flags/sb.png  assetassets/flags/sb.pngassets/flags/sc.png  assetassets/flags/sc.pngassets/flags/sd.png  assetassets/flags/sd.pngassets/flags/se.png  assetassets/flags/se.pngassets/flags/sg.png  assetassets/flags/sg.pngassets/flags/sh.png  assetassets/flags/sh.pngassets/flags/si.png  assetassets/flags/si.pngassets/flags/sj.png  assetassets/flags/sj.pngassets/flags/sk.png  assetassets/flags/sk.pngassets/flags/sl.png  assetassets/flags/sl.pngassets/flags/sm.png  assetassets/flags/sm.pngassets/flags/sn.png  assetassets/flags/sn.pngassets/flags/so.png  assetassets/flags/so.pngassets/flags/sr.png  assetassets/flags/sr.pngassets/flags/ss.png  assetassets/flags/ss.pngassets/flags/st.png  assetassets/flags/st.pngassets/flags/sv.png  assetassets/flags/sv.pngassets/flags/sx.png  assetassets/flags/sx.pngassets/flags/sy.png  assetassets/flags/sy.pngassets/flags/sz.png  assetassets/flags/sz.pngassets/flags/tc.png  assetassets/flags/tc.pngassets/flags/td.png  assetassets/flags/td.pngassets/flags/tf.png  assetassets/flags/tf.pngassets/flags/tg.png  assetassets/flags/tg.pngassets/flags/th.png  assetassets/flags/th.pngassets/flags/tj.png  assetassets/flags/tj.pngassets/flags/tk.png  assetassets/flags/tk.pngassets/flags/tl.png  assetassets/flags/tl.pngassets/flags/tm.png  assetassets/flags/tm.pngassets/flags/tn.png  assetassets/flags/tn.pngassets/flags/to.png  assetassets/flags/to.pngassets/flags/tr.png  assetassets/flags/tr.pngassets/flags/tt.png  assetassets/flags/tt.pngassets/flags/tv.png  assetassets/flags/tv.pngassets/flags/tw.png  assetassets/flags/tw.pngassets/flags/tz.png  assetassets/flags/tz.pngassets/flags/ua.png  assetassets/flags/ua.pngassets/flags/ug.png  assetassets/flags/ug.pngassets/flags/um.png  assetassets/flags/um.pngassets/flags/us.png  assetassets/flags/us.pngassets/flags/uy.png  assetassets/flags/uy.pngassets/flags/uz.png  assetassets/flags/uz.pngassets/flags/va.png  assetassets/flags/va.pngassets/flags/vc.png  assetassets/flags/vc.pngassets/flags/ve.png  assetassets/flags/ve.pngassets/flags/vg.png  assetassets/flags/vg.pngassets/flags/vi.png  assetassets/flags/vi.pngassets/flags/vn.png  assetassets/flags/vn.pngassets/flags/vu.png  assetassets/flags/vu.pngassets/flags/wf.png  assetassets/flags/wf.pngassets/flags/ws.png  assetassets/flags/ws.pngassets/flags/xk.png  assetassets/flags/xk.pngassets/flags/ye.png  assetassets/flags/ye.pngassets/flags/yt.png  assetassets/flags/yt.pngassets/flags/za.png  assetassets/flags/za.pngassets/flags/zm.png  assetassets/flags/zm.pngassets/flags/zw.png  assetassets/flags/zw.pngassets/icons/address.png  assetassets/icons/address.pngassets/icons/cart.png  assetassets/icons/cart.pngassets/icons/categories.png  assetassets/icons/categories.pngassets/icons/coupons.png  assetassets/icons/coupons.pngassets/icons/delete.png  assetassets/icons/delete.pngassets/icons/favorite.png  assetassets/icons/favorite.pngassets/icons/fire.png  assetassets/icons/fire.pngassets/icons/help_center.png  assetassets/icons/help_center.pngassets/icons/home.png  assetassets/icons/home.pngassets/icons/login.png  assetassets/icons/login.pngassets/icons/logout.png  assetassets/icons/logout.pngassets/icons/next.png  assetassets/icons/next.pngassets/icons/notification.png  assetassets/icons/notification.pngassets/icons/orders.png  assetassets/icons/orders.pngassets/icons/profile.png  assetassets/icons/profile.pngassets/icons/refund.png  assetassets/icons/refund.pngassets/icons/search.png  assetassets/icons/search.pngassets/icons/security.png  assetassets/icons/security.pngassets/icons/setting.png  assetassets/icons/setting.png assets/icons/terms_condition.png  asset assets/icons/terms_condition.pngassets/icons/track.png  assetassets/icons/track.pngassets/icons/wallet.png  assetassets/icons/wallet.png!assets/images/auth_background.png  asset!assets/images/auth_background.pngassets/images/landing_img1.png  assetassets/images/landing_img1.pngassets/images/landing_img2.png  assetassets/images/landing_img2.pngassets/images/landing_img3.png  assetassets/images/landing_img3.png#assets/images/splash_background.png  asset#assets/images/splash_background.pngassets/logos/img.png  assetassets/logos/img.pngassets/logos/img_logo.png  assetassets/logos/img_logo.pngassets/logos/img_logo2.png  assetassets/logos/img_logo2.pngassets/logos/logo.png  assetassets/logos/logo.pngassets/logos/logo2x2.png  assetassets/logos/logo2x2.pngassets/logos/logo4x4.png  assetassets/logos/logo4x4.pngassets/logos/logo_a.png  assetassets/logos/logo_a.png2packages/cupertino_icons/assets/CupertinoIcons.ttf  asset2packages/cupertino_icons/assets/CupertinoIcons.ttf4packages/intl_phone_number_input/assets/flags/ad.png  asset4packages/intl_phone_number_input/assets/flags/ad.png4packages/intl_phone_number_input/assets/flags/ae.png  asset4packages/intl_phone_number_input/assets/flags/ae.png4packages/intl_phone_number_input/assets/flags/af.png  asset4packages/intl_phone_number_input/assets/flags/af.png4packages/intl_phone_number_input/assets/flags/ag.png  asset4packages/intl_phone_number_input/assets/flags/ag.png4packages/intl_phone_number_input/assets/flags/ai.png  asset4packages/intl_phone_number_input/assets/flags/ai.png4packages/intl_phone_number_input/assets/flags/al.png  asset4packages/intl_phone_number_input/assets/flags/al.png4packages/intl_phone_number_input/assets/flags/am.png  asset4packages/intl_phone_number_input/assets/flags/am.png4packages/intl_phone_number_input/assets/flags/an.png  asset4packages/intl_phone_number_input/assets/flags/an.png4packages/intl_phone_number_input/assets/flags/ao.png  asset4packages/intl_phone_number_input/assets/flags/ao.png4packages/intl_phone_number_input/assets/flags/aq.png  asset4packages/intl_phone_number_input/assets/flags/aq.png4packages/intl_phone_number_input/assets/flags/ar.png  asset4packages/intl_phone_number_input/assets/flags/ar.png4packages/intl_phone_number_input/assets/flags/as.png  asset4packages/intl_phone_number_input/assets/flags/as.png4packages/intl_phone_number_input/assets/flags/at.png  asset4packages/intl_phone_number_input/assets/flags/at.png4packages/intl_phone_number_input/assets/flags/au.png  asset4packages/intl_phone_number_input/assets/flags/au.png4packages/intl_phone_number_input/assets/flags/aw.png  asset4packages/intl_phone_number_input/assets/flags/aw.png4packages/intl_phone_number_input/assets/flags/ax.png  asset4packages/intl_phone_number_input/assets/flags/ax.png4packages/intl_phone_number_input/assets/flags/az.png  asset4packages/intl_phone_number_input/assets/flags/az.png4packages/intl_phone_number_input/assets/flags/ba.png  asset4packages/intl_phone_number_input/assets/flags/ba.png4packages/intl_phone_number_input/assets/flags/bb.png  asset4packages/intl_phone_number_input/assets/flags/bb.png4packages/intl_phone_number_input/assets/flags/bd.png  asset4packages/intl_phone_number_input/assets/flags/bd.png4packages/intl_phone_number_input/assets/flags/be.png  asset4packages/intl_phone_number_input/assets/flags/be.png4packages/intl_phone_number_input/assets/flags/bf.png  asset4packages/intl_phone_number_input/assets/flags/bf.png4packages/intl_phone_number_input/assets/flags/bg.png  asset4packages/intl_phone_number_input/assets/flags/bg.png4packages/intl_phone_number_input/assets/flags/bh.png  asset4packages/intl_phone_number_input/assets/flags/bh.png4packages/intl_phone_number_input/assets/flags/bi.png  asset4packages/intl_phone_number_input/assets/flags/bi.png4packages/intl_phone_number_input/assets/flags/bj.png  asset4packages/intl_phone_number_input/assets/flags/bj.png4packages/intl_phone_number_input/assets/flags/bl.png  asset4packages/intl_phone_number_input/assets/flags/bl.png4packages/intl_phone_number_input/assets/flags/bm.png  asset4packages/intl_phone_number_input/assets/flags/bm.png4packages/intl_phone_number_input/assets/flags/bn.png  asset4packages/intl_phone_number_input/assets/flags/bn.png4packages/intl_phone_number_input/assets/flags/bo.png  asset4packages/intl_phone_number_input/assets/flags/bo.png4packages/intl_phone_number_input/assets/flags/bq.png  asset4packages/intl_phone_number_input/assets/flags/bq.png4packages/intl_phone_number_input/assets/flags/br.png  asset4packages/intl_phone_number_input/assets/flags/br.png4packages/intl_phone_number_input/assets/flags/bs.png  asset4packages/intl_phone_number_input/assets/flags/bs.png4packages/intl_phone_number_input/assets/flags/bt.png  asset4packages/intl_phone_number_input/assets/flags/bt.png4packages/intl_phone_number_input/assets/flags/bv.png  asset4packages/intl_phone_number_input/assets/flags/bv.png4packages/intl_phone_number_input/assets/flags/bw.png  asset4packages/intl_phone_number_input/assets/flags/bw.png4packages/intl_phone_number_input/assets/flags/by.png  asset4packages/intl_phone_number_input/assets/flags/by.png4packages/intl_phone_number_input/assets/flags/bz.png  asset4packages/intl_phone_number_input/assets/flags/bz.png4packages/intl_phone_number_input/assets/flags/ca.png  asset4packages/intl_phone_number_input/assets/flags/ca.png4packages/intl_phone_number_input/assets/flags/cc.png  asset4packages/intl_phone_number_input/assets/flags/cc.png4packages/intl_phone_number_input/assets/flags/cd.png  asset4packages/intl_phone_number_input/assets/flags/cd.png4packages/intl_phone_number_input/assets/flags/cf.png  asset4packages/intl_phone_number_input/assets/flags/cf.png4packages/intl_phone_number_input/assets/flags/cg.png  asset4packages/intl_phone_number_input/assets/flags/cg.png4packages/intl_phone_number_input/assets/flags/ch.png  asset4packages/intl_phone_number_input/assets/flags/ch.png4packages/intl_phone_number_input/assets/flags/ci.png  asset4packages/intl_phone_number_input/assets/flags/ci.png4packages/intl_phone_number_input/assets/flags/ck.png  asset4packages/intl_phone_number_input/assets/flags/ck.png4packages/intl_phone_number_input/assets/flags/cl.png  asset4packages/intl_phone_number_input/assets/flags/cl.png4packages/intl_phone_number_input/assets/flags/cm.png  asset4packages/intl_phone_number_input/assets/flags/cm.png4packages/intl_phone_number_input/assets/flags/cn.png  asset4packages/intl_phone_number_input/assets/flags/cn.png4packages/intl_phone_number_input/assets/flags/co.png  asset4packages/intl_phone_number_input/assets/flags/co.png4packages/intl_phone_number_input/assets/flags/cr.png  asset4packages/intl_phone_number_input/assets/flags/cr.png4packages/intl_phone_number_input/assets/flags/cu.png  asset4packages/intl_phone_number_input/assets/flags/cu.png4packages/intl_phone_number_input/assets/flags/cv.png  asset4packages/intl_phone_number_input/assets/flags/cv.png4packages/intl_phone_number_input/assets/flags/cw.png  asset4packages/intl_phone_number_input/assets/flags/cw.png4packages/intl_phone_number_input/assets/flags/cx.png  asset4packages/intl_phone_number_input/assets/flags/cx.png4packages/intl_phone_number_input/assets/flags/cy.png  asset4packages/intl_phone_number_input/assets/flags/cy.png4packages/intl_phone_number_input/assets/flags/cz.png  asset4packages/intl_phone_number_input/assets/flags/cz.png4packages/intl_phone_number_input/assets/flags/de.png  asset4packages/intl_phone_number_input/assets/flags/de.png4packages/intl_phone_number_input/assets/flags/dj.png  asset4packages/intl_phone_number_input/assets/flags/dj.png4packages/intl_phone_number_input/assets/flags/dk.png  asset4packages/intl_phone_number_input/assets/flags/dk.png4packages/intl_phone_number_input/assets/flags/dm.png  asset4packages/intl_phone_number_input/assets/flags/dm.png4packages/intl_phone_number_input/assets/flags/do.png  asset4packages/intl_phone_number_input/assets/flags/do.png4packages/intl_phone_number_input/assets/flags/dz.png  asset4packages/intl_phone_number_input/assets/flags/dz.png4packages/intl_phone_number_input/assets/flags/ec.png  asset4packages/intl_phone_number_input/assets/flags/ec.png4packages/intl_phone_number_input/assets/flags/ee.png  asset4packages/intl_phone_number_input/assets/flags/ee.png4packages/intl_phone_number_input/assets/flags/eg.png  asset4packages/intl_phone_number_input/assets/flags/eg.png4packages/intl_phone_number_input/assets/flags/eh.png  asset4packages/intl_phone_number_input/assets/flags/eh.png4packages/intl_phone_number_input/assets/flags/er.png  asset4packages/intl_phone_number_input/assets/flags/er.png4packages/intl_phone_number_input/assets/flags/es.png  asset4packages/intl_phone_number_input/assets/flags/es.png4packages/intl_phone_number_input/assets/flags/et.png  asset4packages/intl_phone_number_input/assets/flags/et.png4packages/intl_phone_number_input/assets/flags/eu.png  asset4packages/intl_phone_number_input/assets/flags/eu.png4packages/intl_phone_number_input/assets/flags/fi.png  asset4packages/intl_phone_number_input/assets/flags/fi.png4packages/intl_phone_number_input/assets/flags/fj.png  asset4packages/intl_phone_number_input/assets/flags/fj.png4packages/intl_phone_number_input/assets/flags/fk.png  asset4packages/intl_phone_number_input/assets/flags/fk.png4packages/intl_phone_number_input/assets/flags/fm.png  asset4packages/intl_phone_number_input/assets/flags/fm.png4packages/intl_phone_number_input/assets/flags/fo.png  asset4packages/intl_phone_number_input/assets/flags/fo.png4packages/intl_phone_number_input/assets/flags/fr.png  asset4packages/intl_phone_number_input/assets/flags/fr.png4packages/intl_phone_number_input/assets/flags/ga.png  asset4packages/intl_phone_number_input/assets/flags/ga.png8packages/intl_phone_number_input/assets/flags/gb-eng.png  asset8packages/intl_phone_number_input/assets/flags/gb-eng.png8packages/intl_phone_number_input/assets/flags/gb-nir.png  asset8packages/intl_phone_number_input/assets/flags/gb-nir.png8packages/intl_phone_number_input/assets/flags/gb-sct.png  asset8packages/intl_phone_number_input/assets/flags/gb-sct.png8packages/intl_phone_number_input/assets/flags/gb-wls.png  asset8packages/intl_phone_number_input/assets/flags/gb-wls.png4packages/intl_phone_number_input/assets/flags/gb.png  asset4packages/intl_phone_number_input/assets/flags/gb.png4packages/intl_phone_number_input/assets/flags/gd.png  asset4packages/intl_phone_number_input/assets/flags/gd.png4packages/intl_phone_number_input/assets/flags/ge.png  asset4packages/intl_phone_number_input/assets/flags/ge.png4packages/intl_phone_number_input/assets/flags/gf.png  asset4packages/intl_phone_number_input/assets/flags/gf.png4packages/intl_phone_number_input/assets/flags/gg.png  asset4packages/intl_phone_number_input/assets/flags/gg.png4packages/intl_phone_number_input/assets/flags/gh.png  asset4packages/intl_phone_number_input/assets/flags/gh.png4packages/intl_phone_number_input/assets/flags/gi.png  asset4packages/intl_phone_number_input/assets/flags/gi.png4packages/intl_phone_number_input/assets/flags/gl.png  asset4packages/intl_phone_number_input/assets/flags/gl.png4packages/intl_phone_number_input/assets/flags/gm.png  asset4packages/intl_phone_number_input/assets/flags/gm.png4packages/intl_phone_number_input/assets/flags/gn.png  asset4packages/intl_phone_number_input/assets/flags/gn.png4packages/intl_phone_number_input/assets/flags/gp.png  asset4packages/intl_phone_number_input/assets/flags/gp.png4packages/intl_phone_number_input/assets/flags/gq.png  asset4packages/intl_phone_number_input/assets/flags/gq.png4packages/intl_phone_number_input/assets/flags/gr.png  asset4packages/intl_phone_number_input/assets/flags/gr.png4packages/intl_phone_number_input/assets/flags/gs.png  asset4packages/intl_phone_number_input/assets/flags/gs.png4packages/intl_phone_number_input/assets/flags/gt.png  asset4packages/intl_phone_number_input/assets/flags/gt.png4packages/intl_phone_number_input/assets/flags/gu.png  asset4packages/intl_phone_number_input/assets/flags/gu.png4packages/intl_phone_number_input/assets/flags/gw.png  asset4packages/intl_phone_number_input/assets/flags/gw.png4packages/intl_phone_number_input/assets/flags/gy.png  asset4packages/intl_phone_number_input/assets/flags/gy.png4packages/intl_phone_number_input/assets/flags/hk.png  asset4packages/intl_phone_number_input/assets/flags/hk.png4packages/intl_phone_number_input/assets/flags/hm.png  asset4packages/intl_phone_number_input/assets/flags/hm.png4packages/intl_phone_number_input/assets/flags/hn.png  asset4packages/intl_phone_number_input/assets/flags/hn.png4packages/intl_phone_number_input/assets/flags/hr.png  asset4packages/intl_phone_number_input/assets/flags/hr.png4packages/intl_phone_number_input/assets/flags/ht.png  asset4packages/intl_phone_number_input/assets/flags/ht.png4packages/intl_phone_number_input/assets/flags/hu.png  asset4packages/intl_phone_number_input/assets/flags/hu.png4packages/intl_phone_number_input/assets/flags/id.png  asset4packages/intl_phone_number_input/assets/flags/id.png4packages/intl_phone_number_input/assets/flags/ie.png  asset4packages/intl_phone_number_input/assets/flags/ie.png4packages/intl_phone_number_input/assets/flags/il.png  asset4packages/intl_phone_number_input/assets/flags/il.png4packages/intl_phone_number_input/assets/flags/im.png  asset4packages/intl_phone_number_input/assets/flags/im.png4packages/intl_phone_number_input/assets/flags/in.png  asset4packages/intl_phone_number_input/assets/flags/in.png4packages/intl_phone_number_input/assets/flags/io.png  asset4packages/intl_phone_number_input/assets/flags/io.png4packages/intl_phone_number_input/assets/flags/iq.png  asset4packages/intl_phone_number_input/assets/flags/iq.png4packages/intl_phone_number_input/assets/flags/ir.png  asset4packages/intl_phone_number_input/assets/flags/ir.png4packages/intl_phone_number_input/assets/flags/is.png  asset4packages/intl_phone_number_input/assets/flags/is.png4packages/intl_phone_number_input/assets/flags/it.png  asset4packages/intl_phone_number_input/assets/flags/it.png4packages/intl_phone_number_input/assets/flags/je.png  asset4packages/intl_phone_number_input/assets/flags/je.png4packages/intl_phone_number_input/assets/flags/jm.png  asset4packages/intl_phone_number_input/assets/flags/jm.png4packages/intl_phone_number_input/assets/flags/jo.png  asset4packages/intl_phone_number_input/assets/flags/jo.png4packages/intl_phone_number_input/assets/flags/jp.png  asset4packages/intl_phone_number_input/assets/flags/jp.png4packages/intl_phone_number_input/assets/flags/ke.png  asset4packages/intl_phone_number_input/assets/flags/ke.png4packages/intl_phone_number_input/assets/flags/kg.png  asset4packages/intl_phone_number_input/assets/flags/kg.png4packages/intl_phone_number_input/assets/flags/kh.png  asset4packages/intl_phone_number_input/assets/flags/kh.png4packages/intl_phone_number_input/assets/flags/ki.png  asset4packages/intl_phone_number_input/assets/flags/ki.png4packages/intl_phone_number_input/assets/flags/km.png  asset4packages/intl_phone_number_input/assets/flags/km.png4packages/intl_phone_number_input/assets/flags/kn.png  asset4packages/intl_phone_number_input/assets/flags/kn.png4packages/intl_phone_number_input/assets/flags/kp.png  asset4packages/intl_phone_number_input/assets/flags/kp.png4packages/intl_phone_number_input/assets/flags/kr.png  asset4packages/intl_phone_number_input/assets/flags/kr.png4packages/intl_phone_number_input/assets/flags/kw.png  asset4packages/intl_phone_number_input/assets/flags/kw.png4packages/intl_phone_number_input/assets/flags/ky.png  asset4packages/intl_phone_number_input/assets/flags/ky.png4packages/intl_phone_number_input/assets/flags/kz.png  asset4packages/intl_phone_number_input/assets/flags/kz.png4packages/intl_phone_number_input/assets/flags/la.png  asset4packages/intl_phone_number_input/assets/flags/la.png4packages/intl_phone_number_input/assets/flags/lb.png  asset4packages/intl_phone_number_input/assets/flags/lb.png4packages/intl_phone_number_input/assets/flags/lc.png  asset4packages/intl_phone_number_input/assets/flags/lc.png4packages/intl_phone_number_input/assets/flags/li.png  asset4packages/intl_phone_number_input/assets/flags/li.png4packages/intl_phone_number_input/assets/flags/lk.png  asset4packages/intl_phone_number_input/assets/flags/lk.png4packages/intl_phone_number_input/assets/flags/lr.png  asset4packages/intl_phone_number_input/assets/flags/lr.png4packages/intl_phone_number_input/assets/flags/ls.png  asset4packages/intl_phone_number_input/assets/flags/ls.png4packages/intl_phone_number_input/assets/flags/lt.png  asset4packages/intl_phone_number_input/assets/flags/lt.png4packages/intl_phone_number_input/assets/flags/lu.png  asset4packages/intl_phone_number_input/assets/flags/lu.png4packages/intl_phone_number_input/assets/flags/lv.png  asset4packages/intl_phone_number_input/assets/flags/lv.png4packages/intl_phone_number_input/assets/flags/ly.png  asset4packages/intl_phone_number_input/assets/flags/ly.png4packages/intl_phone_number_input/assets/flags/ma.png  asset4packages/intl_phone_number_input/assets/flags/ma.png4packages/intl_phone_number_input/assets/flags/mc.png  asset4packages/intl_phone_number_input/assets/flags/mc.png4packages/intl_phone_number_input/assets/flags/md.png  asset4packages/intl_phone_number_input/assets/flags/md.png4packages/intl_phone_number_input/assets/flags/me.png  asset4packages/intl_phone_number_input/assets/flags/me.png4packages/intl_phone_number_input/assets/flags/mf.png  asset4packages/intl_phone_number_input/assets/flags/mf.png4packages/intl_phone_number_input/assets/flags/mg.png  asset4packages/intl_phone_number_input/assets/flags/mg.png4packages/intl_phone_number_input/assets/flags/mh.png  asset4packages/intl_phone_number_input/assets/flags/mh.png4packages/intl_phone_number_input/assets/flags/mk.png  asset4packages/intl_phone_number_input/assets/flags/mk.png4packages/intl_phone_number_input/assets/flags/ml.png  asset4packages/intl_phone_number_input/assets/flags/ml.png4packages/intl_phone_number_input/assets/flags/mm.png  asset4packages/intl_phone_number_input/assets/flags/mm.png4packages/intl_phone_number_input/assets/flags/mn.png  asset4packages/intl_phone_number_input/assets/flags/mn.png4packages/intl_phone_number_input/assets/flags/mo.png  asset4packages/intl_phone_number_input/assets/flags/mo.png4packages/intl_phone_number_input/assets/flags/mp.png  asset4packages/intl_phone_number_input/assets/flags/mp.png4packages/intl_phone_number_input/assets/flags/mq.png  asset4packages/intl_phone_number_input/assets/flags/mq.png4packages/intl_phone_number_input/assets/flags/mr.png  asset4packages/intl_phone_number_input/assets/flags/mr.png4packages/intl_phone_number_input/assets/flags/ms.png  asset4packages/intl_phone_number_input/assets/flags/ms.png4packages/intl_phone_number_input/assets/flags/mt.png  asset4packages/intl_phone_number_input/assets/flags/mt.png4packages/intl_phone_number_input/assets/flags/mu.png  asset4packages/intl_phone_number_input/assets/flags/mu.png4packages/intl_phone_number_input/assets/flags/mv.png  asset4packages/intl_phone_number_input/assets/flags/mv.png4packages/intl_phone_number_input/assets/flags/mw.png  asset4packages/intl_phone_number_input/assets/flags/mw.png4packages/intl_phone_number_input/assets/flags/mx.png  asset4packages/intl_phone_number_input/assets/flags/mx.png4packages/intl_phone_number_input/assets/flags/my.png  asset4packages/intl_phone_number_input/assets/flags/my.png4packages/intl_phone_number_input/assets/flags/mz.png  asset4packages/intl_phone_number_input/assets/flags/mz.png4packages/intl_phone_number_input/assets/flags/na.png  asset4packages/intl_phone_number_input/assets/flags/na.png4packages/intl_phone_number_input/assets/flags/nc.png  asset4packages/intl_phone_number_input/assets/flags/nc.png4packages/intl_phone_number_input/assets/flags/ne.png  asset4packages/intl_phone_number_input/assets/flags/ne.png4packages/intl_phone_number_input/assets/flags/nf.png  asset4packages/intl_phone_number_input/assets/flags/nf.png4packages/intl_phone_number_input/assets/flags/ng.png  asset4packages/intl_phone_number_input/assets/flags/ng.png4packages/intl_phone_number_input/assets/flags/ni.png  asset4packages/intl_phone_number_input/assets/flags/ni.png4packages/intl_phone_number_input/assets/flags/nl.png  asset4packages/intl_phone_number_input/assets/flags/nl.png4packages/intl_phone_number_input/assets/flags/no.png  asset4packages/intl_phone_number_input/assets/flags/no.png4packages/intl_phone_number_input/assets/flags/np.png  asset4packages/intl_phone_number_input/assets/flags/np.png4packages/intl_phone_number_input/assets/flags/nr.png  asset4packages/intl_phone_number_input/assets/flags/nr.png4packages/intl_phone_number_input/assets/flags/nu.png  asset4packages/intl_phone_number_input/assets/flags/nu.png4packages/intl_phone_number_input/assets/flags/nz.png  asset4packages/intl_phone_number_input/assets/flags/nz.png4packages/intl_phone_number_input/assets/flags/om.png  asset4packages/intl_phone_number_input/assets/flags/om.png4packages/intl_phone_number_input/assets/flags/pa.png  asset4packages/intl_phone_number_input/assets/flags/pa.png4packages/intl_phone_number_input/assets/flags/pe.png  asset4packages/intl_phone_number_input/assets/flags/pe.png4packages/intl_phone_number_input/assets/flags/pf.png  asset4packages/intl_phone_number_input/assets/flags/pf.png4packages/intl_phone_number_input/assets/flags/pg.png  asset4packages/intl_phone_number_input/assets/flags/pg.png4packages/intl_phone_number_input/assets/flags/ph.png  asset4packages/intl_phone_number_input/assets/flags/ph.png4packages/intl_phone_number_input/assets/flags/pk.png  asset4packages/intl_phone_number_input/assets/flags/pk.png4packages/intl_phone_number_input/assets/flags/pl.png  asset4packages/intl_phone_number_input/assets/flags/pl.png4packages/intl_phone_number_input/assets/flags/pm.png  asset4packages/intl_phone_number_input/assets/flags/pm.png4packages/intl_phone_number_input/assets/flags/pn.png  asset4packages/intl_phone_number_input/assets/flags/pn.png4packages/intl_phone_number_input/assets/flags/pr.png  asset4packages/intl_phone_number_input/assets/flags/pr.png4packages/intl_phone_number_input/assets/flags/ps.png  asset4packages/intl_phone_number_input/assets/flags/ps.png4packages/intl_phone_number_input/assets/flags/pt.png  asset4packages/intl_phone_number_input/assets/flags/pt.png4packages/intl_phone_number_input/assets/flags/pw.png  asset4packages/intl_phone_number_input/assets/flags/pw.png4packages/intl_phone_number_input/assets/flags/py.png  asset4packages/intl_phone_number_input/assets/flags/py.png4packages/intl_phone_number_input/assets/flags/qa.png  asset4packages/intl_phone_number_input/assets/flags/qa.png4packages/intl_phone_number_input/assets/flags/re.png  asset4packages/intl_phone_number_input/assets/flags/re.png4packages/intl_phone_number_input/assets/flags/ro.png  asset4packages/intl_phone_number_input/assets/flags/ro.png4packages/intl_phone_number_input/assets/flags/rs.png  asset4packages/intl_phone_number_input/assets/flags/rs.png4packages/intl_phone_number_input/assets/flags/ru.png  asset4packages/intl_phone_number_input/assets/flags/ru.png4packages/intl_phone_number_input/assets/flags/rw.png  asset4packages/intl_phone_number_input/assets/flags/rw.png4packages/intl_phone_number_input/assets/flags/sa.png  asset4packages/intl_phone_number_input/assets/flags/sa.png4packages/intl_phone_number_input/assets/flags/sb.png  asset4packages/intl_phone_number_input/assets/flags/sb.png4packages/intl_phone_number_input/assets/flags/sc.png  asset4packages/intl_phone_number_input/assets/flags/sc.png4packages/intl_phone_number_input/assets/flags/sd.png  asset4packages/intl_phone_number_input/assets/flags/sd.png4packages/intl_phone_number_input/assets/flags/se.png  asset4packages/intl_phone_number_input/assets/flags/se.png4packages/intl_phone_number_input/assets/flags/sg.png  asset4packages/intl_phone_number_input/assets/flags/sg.png4packages/intl_phone_number_input/assets/flags/sh.png  asset4packages/intl_phone_number_input/assets/flags/sh.png4packages/intl_phone_number_input/assets/flags/si.png  asset4packages/intl_phone_number_input/assets/flags/si.png4packages/intl_phone_number_input/assets/flags/sj.png  asset4packages/intl_phone_number_input/assets/flags/sj.png4packages/intl_phone_number_input/assets/flags/sk.png  asset4packages/intl_phone_number_input/assets/flags/sk.png4packages/intl_phone_number_input/assets/flags/sl.png  asset4packages/intl_phone_number_input/assets/flags/sl.png4packages/intl_phone_number_input/assets/flags/sm.png  asset4packages/intl_phone_number_input/assets/flags/sm.png4packages/intl_phone_number_input/assets/flags/sn.png  asset4packages/intl_phone_number_input/assets/flags/sn.png4packages/intl_phone_number_input/assets/flags/so.png  asset4packages/intl_phone_number_input/assets/flags/so.png4packages/intl_phone_number_input/assets/flags/sr.png  asset4packages/intl_phone_number_input/assets/flags/sr.png4packages/intl_phone_number_input/assets/flags/ss.png  asset4packages/intl_phone_number_input/assets/flags/ss.png4packages/intl_phone_number_input/assets/flags/st.png  asset4packages/intl_phone_number_input/assets/flags/st.png4packages/intl_phone_number_input/assets/flags/sv.png  asset4packages/intl_phone_number_input/assets/flags/sv.png4packages/intl_phone_number_input/assets/flags/sx.png  asset4packages/intl_phone_number_input/assets/flags/sx.png4packages/intl_phone_number_input/assets/flags/sy.png  asset4packages/intl_phone_number_input/assets/flags/sy.png4packages/intl_phone_number_input/assets/flags/sz.png  asset4packages/intl_phone_number_input/assets/flags/sz.png4packages/intl_phone_number_input/assets/flags/tc.png  asset4packages/intl_phone_number_input/assets/flags/tc.png4packages/intl_phone_number_input/assets/flags/td.png  asset4packages/intl_phone_number_input/assets/flags/td.png4packages/intl_phone_number_input/assets/flags/tf.png  asset4packages/intl_phone_number_input/assets/flags/tf.png4packages/intl_phone_number_input/assets/flags/tg.png  asset4packages/intl_phone_number_input/assets/flags/tg.png4packages/intl_phone_number_input/assets/flags/th.png  asset4packages/intl_phone_number_input/assets/flags/th.png4packages/intl_phone_number_input/assets/flags/tj.png  asset4packages/intl_phone_number_input/assets/flags/tj.png4packages/intl_phone_number_input/assets/flags/tk.png  asset4packages/intl_phone_number_input/assets/flags/tk.png4packages/intl_phone_number_input/assets/flags/tl.png  asset4packages/intl_phone_number_input/assets/flags/tl.png4packages/intl_phone_number_input/assets/flags/tm.png  asset4packages/intl_phone_number_input/assets/flags/tm.png4packages/intl_phone_number_input/assets/flags/tn.png  asset4packages/intl_phone_number_input/assets/flags/tn.png4packages/intl_phone_number_input/assets/flags/to.png  asset4packages/intl_phone_number_input/assets/flags/to.png4packages/intl_phone_number_input/assets/flags/tr.png  asset4packages/intl_phone_number_input/assets/flags/tr.png4packages/intl_phone_number_input/assets/flags/tt.png  asset4packages/intl_phone_number_input/assets/flags/tt.png4packages/intl_phone_number_input/assets/flags/tv.png  asset4packages/intl_phone_number_input/assets/flags/tv.png4packages/intl_phone_number_input/assets/flags/tw.png  asset4packages/intl_phone_number_input/assets/flags/tw.png4packages/intl_phone_number_input/assets/flags/tz.png  asset4packages/intl_phone_number_input/assets/flags/tz.png4packages/intl_phone_number_input/assets/flags/ua.png  asset4packages/intl_phone_number_input/assets/flags/ua.png4packages/intl_phone_number_input/assets/flags/ug.png  asset4packages/intl_phone_number_input/assets/flags/ug.png4packages/intl_phone_number_input/assets/flags/um.png  asset4packages/intl_phone_number_input/assets/flags/um.png4packages/intl_phone_number_input/assets/flags/us.png  asset4packages/intl_phone_number_input/assets/flags/us.png4packages/intl_phone_number_input/assets/flags/uy.png  asset4packages/intl_phone_number_input/assets/flags/uy.png4packages/intl_phone_number_input/assets/flags/uz.png  asset4packages/intl_phone_number_input/assets/flags/uz.png4packages/intl_phone_number_input/assets/flags/va.png  asset4packages/intl_phone_number_input/assets/flags/va.png4packages/intl_phone_number_input/assets/flags/vc.png  asset4packages/intl_phone_number_input/assets/flags/vc.png4packages/intl_phone_number_input/assets/flags/ve.png  asset4packages/intl_phone_number_input/assets/flags/ve.png4packages/intl_phone_number_input/assets/flags/vg.png  asset4packages/intl_phone_number_input/assets/flags/vg.png4packages/intl_phone_number_input/assets/flags/vi.png  asset4packages/intl_phone_number_input/assets/flags/vi.png4packages/intl_phone_number_input/assets/flags/vn.png  asset4packages/intl_phone_number_input/assets/flags/vn.png4packages/intl_phone_number_input/assets/flags/vu.png  asset4packages/intl_phone_number_input/assets/flags/vu.png4packages/intl_phone_number_input/assets/flags/wf.png  asset4packages/intl_phone_number_input/assets/flags/wf.png4packages/intl_phone_number_input/assets/flags/ws.png  asset4packages/intl_phone_number_input/assets/flags/ws.png4packages/intl_phone_number_input/assets/flags/xk.png  asset4packages/intl_phone_number_input/assets/flags/xk.png4packages/intl_phone_number_input/assets/flags/ye.png  asset4packages/intl_phone_number_input/assets/flags/ye.png4packages/intl_phone_number_input/assets/flags/yt.png  asset4packages/intl_phone_number_input/assets/flags/yt.png4packages/intl_phone_number_input/assets/flags/za.png  asset4packages/intl_phone_number_input/assets/flags/za.png4packages/intl_phone_number_input/assets/flags/zm.png  asset4packages/intl_phone_number_input/assets/flags/zm.png4packages/intl_phone_number_input/assets/flags/zw.png  asset4packages/intl_phone_number_input/assets/flags/zw.png"packages/toast/assets/toastify.css  asset"packages/toast/assets/toastify.css!packages/toast/assets/toastify.js  asset!packages/toast/assets/toastify.js \ No newline at end of file diff --git a/app_code/temp_apk/assets/flutter_assets/AssetManifest.json b/app_code/temp_apk/assets/flutter_assets/AssetManifest.json new file mode 100644 index 0000000..e7f7f18 --- /dev/null +++ b/app_code/temp_apk/assets/flutter_assets/AssetManifest.json @@ -0,0 +1 @@ +{"assets/flags/ad.png":["assets/flags/ad.png"],"assets/flags/ae.png":["assets/flags/ae.png"],"assets/flags/af.png":["assets/flags/af.png"],"assets/flags/ag.png":["assets/flags/ag.png"],"assets/flags/ai.png":["assets/flags/ai.png"],"assets/flags/al.png":["assets/flags/al.png"],"assets/flags/am.png":["assets/flags/am.png"],"assets/flags/an.png":["assets/flags/an.png"],"assets/flags/ao.png":["assets/flags/ao.png"],"assets/flags/aq.png":["assets/flags/aq.png"],"assets/flags/ar.png":["assets/flags/ar.png"],"assets/flags/as.png":["assets/flags/as.png"],"assets/flags/at.png":["assets/flags/at.png"],"assets/flags/au.png":["assets/flags/au.png"],"assets/flags/aw.png":["assets/flags/aw.png"],"assets/flags/ax.png":["assets/flags/ax.png"],"assets/flags/az.png":["assets/flags/az.png"],"assets/flags/ba.png":["assets/flags/ba.png"],"assets/flags/bb.png":["assets/flags/bb.png"],"assets/flags/bd.png":["assets/flags/bd.png"],"assets/flags/be.png":["assets/flags/be.png"],"assets/flags/bf.png":["assets/flags/bf.png"],"assets/flags/bg.png":["assets/flags/bg.png"],"assets/flags/bh.png":["assets/flags/bh.png"],"assets/flags/bi.png":["assets/flags/bi.png"],"assets/flags/bj.png":["assets/flags/bj.png"],"assets/flags/bl.png":["assets/flags/bl.png"],"assets/flags/bm.png":["assets/flags/bm.png"],"assets/flags/bn.png":["assets/flags/bn.png"],"assets/flags/bo.png":["assets/flags/bo.png"],"assets/flags/bq.png":["assets/flags/bq.png"],"assets/flags/br.png":["assets/flags/br.png"],"assets/flags/bs.png":["assets/flags/bs.png"],"assets/flags/bt.png":["assets/flags/bt.png"],"assets/flags/bv.png":["assets/flags/bv.png"],"assets/flags/bw.png":["assets/flags/bw.png"],"assets/flags/by.png":["assets/flags/by.png"],"assets/flags/bz.png":["assets/flags/bz.png"],"assets/flags/ca.png":["assets/flags/ca.png"],"assets/flags/cc.png":["assets/flags/cc.png"],"assets/flags/cd.png":["assets/flags/cd.png"],"assets/flags/cf.png":["assets/flags/cf.png"],"assets/flags/cg.png":["assets/flags/cg.png"],"assets/flags/ch.png":["assets/flags/ch.png"],"assets/flags/ci.png":["assets/flags/ci.png"],"assets/flags/ck.png":["assets/flags/ck.png"],"assets/flags/cl.png":["assets/flags/cl.png"],"assets/flags/cm.png":["assets/flags/cm.png"],"assets/flags/cn.png":["assets/flags/cn.png"],"assets/flags/co.png":["assets/flags/co.png"],"assets/flags/cr.png":["assets/flags/cr.png"],"assets/flags/cu.png":["assets/flags/cu.png"],"assets/flags/cv.png":["assets/flags/cv.png"],"assets/flags/cw.png":["assets/flags/cw.png"],"assets/flags/cx.png":["assets/flags/cx.png"],"assets/flags/cy.png":["assets/flags/cy.png"],"assets/flags/cz.png":["assets/flags/cz.png"],"assets/flags/de.png":["assets/flags/de.png"],"assets/flags/dj.png":["assets/flags/dj.png"],"assets/flags/dk.png":["assets/flags/dk.png"],"assets/flags/dm.png":["assets/flags/dm.png"],"assets/flags/do.png":["assets/flags/do.png"],"assets/flags/dz.png":["assets/flags/dz.png"],"assets/flags/ec.png":["assets/flags/ec.png"],"assets/flags/ee.png":["assets/flags/ee.png"],"assets/flags/eg.png":["assets/flags/eg.png"],"assets/flags/eh.png":["assets/flags/eh.png"],"assets/flags/er.png":["assets/flags/er.png"],"assets/flags/es.png":["assets/flags/es.png"],"assets/flags/et.png":["assets/flags/et.png"],"assets/flags/eu.png":["assets/flags/eu.png"],"assets/flags/fi.png":["assets/flags/fi.png"],"assets/flags/fj.png":["assets/flags/fj.png"],"assets/flags/fk.png":["assets/flags/fk.png"],"assets/flags/fm.png":["assets/flags/fm.png"],"assets/flags/fo.png":["assets/flags/fo.png"],"assets/flags/fr.png":["assets/flags/fr.png"],"assets/flags/ga.png":["assets/flags/ga.png"],"assets/flags/gb-eng.png":["assets/flags/gb-eng.png"],"assets/flags/gb-nir.png":["assets/flags/gb-nir.png"],"assets/flags/gb-sct.png":["assets/flags/gb-sct.png"],"assets/flags/gb-wls.png":["assets/flags/gb-wls.png"],"assets/flags/gb.png":["assets/flags/gb.png"],"assets/flags/gd.png":["assets/flags/gd.png"],"assets/flags/ge.png":["assets/flags/ge.png"],"assets/flags/gf.png":["assets/flags/gf.png"],"assets/flags/gg.png":["assets/flags/gg.png"],"assets/flags/gh.png":["assets/flags/gh.png"],"assets/flags/gi.png":["assets/flags/gi.png"],"assets/flags/gl.png":["assets/flags/gl.png"],"assets/flags/gm.png":["assets/flags/gm.png"],"assets/flags/gn.png":["assets/flags/gn.png"],"assets/flags/gp.png":["assets/flags/gp.png"],"assets/flags/gq.png":["assets/flags/gq.png"],"assets/flags/gr.png":["assets/flags/gr.png"],"assets/flags/gs.png":["assets/flags/gs.png"],"assets/flags/gt.png":["assets/flags/gt.png"],"assets/flags/gu.png":["assets/flags/gu.png"],"assets/flags/gw.png":["assets/flags/gw.png"],"assets/flags/gy.png":["assets/flags/gy.png"],"assets/flags/hk.png":["assets/flags/hk.png"],"assets/flags/hm.png":["assets/flags/hm.png"],"assets/flags/hn.png":["assets/flags/hn.png"],"assets/flags/hr.png":["assets/flags/hr.png"],"assets/flags/ht.png":["assets/flags/ht.png"],"assets/flags/hu.png":["assets/flags/hu.png"],"assets/flags/id.png":["assets/flags/id.png"],"assets/flags/ie.png":["assets/flags/ie.png"],"assets/flags/il.png":["assets/flags/il.png"],"assets/flags/im.png":["assets/flags/im.png"],"assets/flags/in.png":["assets/flags/in.png"],"assets/flags/io.png":["assets/flags/io.png"],"assets/flags/iq.png":["assets/flags/iq.png"],"assets/flags/ir.png":["assets/flags/ir.png"],"assets/flags/is.png":["assets/flags/is.png"],"assets/flags/it.png":["assets/flags/it.png"],"assets/flags/je.png":["assets/flags/je.png"],"assets/flags/jm.png":["assets/flags/jm.png"],"assets/flags/jo.png":["assets/flags/jo.png"],"assets/flags/jp.png":["assets/flags/jp.png"],"assets/flags/ke.png":["assets/flags/ke.png"],"assets/flags/kg.png":["assets/flags/kg.png"],"assets/flags/kh.png":["assets/flags/kh.png"],"assets/flags/ki.png":["assets/flags/ki.png"],"assets/flags/km.png":["assets/flags/km.png"],"assets/flags/kn.png":["assets/flags/kn.png"],"assets/flags/kp.png":["assets/flags/kp.png"],"assets/flags/kr.png":["assets/flags/kr.png"],"assets/flags/kw.png":["assets/flags/kw.png"],"assets/flags/ky.png":["assets/flags/ky.png"],"assets/flags/kz.png":["assets/flags/kz.png"],"assets/flags/la.png":["assets/flags/la.png"],"assets/flags/lb.png":["assets/flags/lb.png"],"assets/flags/lc.png":["assets/flags/lc.png"],"assets/flags/li.png":["assets/flags/li.png"],"assets/flags/lk.png":["assets/flags/lk.png"],"assets/flags/lr.png":["assets/flags/lr.png"],"assets/flags/ls.png":["assets/flags/ls.png"],"assets/flags/lt.png":["assets/flags/lt.png"],"assets/flags/lu.png":["assets/flags/lu.png"],"assets/flags/lv.png":["assets/flags/lv.png"],"assets/flags/ly.png":["assets/flags/ly.png"],"assets/flags/ma.png":["assets/flags/ma.png"],"assets/flags/mc.png":["assets/flags/mc.png"],"assets/flags/md.png":["assets/flags/md.png"],"assets/flags/me.png":["assets/flags/me.png"],"assets/flags/mf.png":["assets/flags/mf.png"],"assets/flags/mg.png":["assets/flags/mg.png"],"assets/flags/mh.png":["assets/flags/mh.png"],"assets/flags/mk.png":["assets/flags/mk.png"],"assets/flags/ml.png":["assets/flags/ml.png"],"assets/flags/mm.png":["assets/flags/mm.png"],"assets/flags/mn.png":["assets/flags/mn.png"],"assets/flags/mo.png":["assets/flags/mo.png"],"assets/flags/mp.png":["assets/flags/mp.png"],"assets/flags/mq.png":["assets/flags/mq.png"],"assets/flags/mr.png":["assets/flags/mr.png"],"assets/flags/ms.png":["assets/flags/ms.png"],"assets/flags/mt.png":["assets/flags/mt.png"],"assets/flags/mu.png":["assets/flags/mu.png"],"assets/flags/mv.png":["assets/flags/mv.png"],"assets/flags/mw.png":["assets/flags/mw.png"],"assets/flags/mx.png":["assets/flags/mx.png"],"assets/flags/my.png":["assets/flags/my.png"],"assets/flags/mz.png":["assets/flags/mz.png"],"assets/flags/na.png":["assets/flags/na.png"],"assets/flags/nc.png":["assets/flags/nc.png"],"assets/flags/ne.png":["assets/flags/ne.png"],"assets/flags/nf.png":["assets/flags/nf.png"],"assets/flags/ng.png":["assets/flags/ng.png"],"assets/flags/ni.png":["assets/flags/ni.png"],"assets/flags/nl.png":["assets/flags/nl.png"],"assets/flags/no.png":["assets/flags/no.png"],"assets/flags/np.png":["assets/flags/np.png"],"assets/flags/nr.png":["assets/flags/nr.png"],"assets/flags/nu.png":["assets/flags/nu.png"],"assets/flags/nz.png":["assets/flags/nz.png"],"assets/flags/om.png":["assets/flags/om.png"],"assets/flags/pa.png":["assets/flags/pa.png"],"assets/flags/pe.png":["assets/flags/pe.png"],"assets/flags/pf.png":["assets/flags/pf.png"],"assets/flags/pg.png":["assets/flags/pg.png"],"assets/flags/ph.png":["assets/flags/ph.png"],"assets/flags/pk.png":["assets/flags/pk.png"],"assets/flags/pl.png":["assets/flags/pl.png"],"assets/flags/pm.png":["assets/flags/pm.png"],"assets/flags/pn.png":["assets/flags/pn.png"],"assets/flags/pr.png":["assets/flags/pr.png"],"assets/flags/ps.png":["assets/flags/ps.png"],"assets/flags/pt.png":["assets/flags/pt.png"],"assets/flags/pw.png":["assets/flags/pw.png"],"assets/flags/py.png":["assets/flags/py.png"],"assets/flags/qa.png":["assets/flags/qa.png"],"assets/flags/re.png":["assets/flags/re.png"],"assets/flags/ro.png":["assets/flags/ro.png"],"assets/flags/rs.png":["assets/flags/rs.png"],"assets/flags/ru.png":["assets/flags/ru.png"],"assets/flags/rw.png":["assets/flags/rw.png"],"assets/flags/sa.png":["assets/flags/sa.png"],"assets/flags/sb.png":["assets/flags/sb.png"],"assets/flags/sc.png":["assets/flags/sc.png"],"assets/flags/sd.png":["assets/flags/sd.png"],"assets/flags/se.png":["assets/flags/se.png"],"assets/flags/sg.png":["assets/flags/sg.png"],"assets/flags/sh.png":["assets/flags/sh.png"],"assets/flags/si.png":["assets/flags/si.png"],"assets/flags/sj.png":["assets/flags/sj.png"],"assets/flags/sk.png":["assets/flags/sk.png"],"assets/flags/sl.png":["assets/flags/sl.png"],"assets/flags/sm.png":["assets/flags/sm.png"],"assets/flags/sn.png":["assets/flags/sn.png"],"assets/flags/so.png":["assets/flags/so.png"],"assets/flags/sr.png":["assets/flags/sr.png"],"assets/flags/ss.png":["assets/flags/ss.png"],"assets/flags/st.png":["assets/flags/st.png"],"assets/flags/sv.png":["assets/flags/sv.png"],"assets/flags/sx.png":["assets/flags/sx.png"],"assets/flags/sy.png":["assets/flags/sy.png"],"assets/flags/sz.png":["assets/flags/sz.png"],"assets/flags/tc.png":["assets/flags/tc.png"],"assets/flags/td.png":["assets/flags/td.png"],"assets/flags/tf.png":["assets/flags/tf.png"],"assets/flags/tg.png":["assets/flags/tg.png"],"assets/flags/th.png":["assets/flags/th.png"],"assets/flags/tj.png":["assets/flags/tj.png"],"assets/flags/tk.png":["assets/flags/tk.png"],"assets/flags/tl.png":["assets/flags/tl.png"],"assets/flags/tm.png":["assets/flags/tm.png"],"assets/flags/tn.png":["assets/flags/tn.png"],"assets/flags/to.png":["assets/flags/to.png"],"assets/flags/tr.png":["assets/flags/tr.png"],"assets/flags/tt.png":["assets/flags/tt.png"],"assets/flags/tv.png":["assets/flags/tv.png"],"assets/flags/tw.png":["assets/flags/tw.png"],"assets/flags/tz.png":["assets/flags/tz.png"],"assets/flags/ua.png":["assets/flags/ua.png"],"assets/flags/ug.png":["assets/flags/ug.png"],"assets/flags/um.png":["assets/flags/um.png"],"assets/flags/us.png":["assets/flags/us.png"],"assets/flags/uy.png":["assets/flags/uy.png"],"assets/flags/uz.png":["assets/flags/uz.png"],"assets/flags/va.png":["assets/flags/va.png"],"assets/flags/vc.png":["assets/flags/vc.png"],"assets/flags/ve.png":["assets/flags/ve.png"],"assets/flags/vg.png":["assets/flags/vg.png"],"assets/flags/vi.png":["assets/flags/vi.png"],"assets/flags/vn.png":["assets/flags/vn.png"],"assets/flags/vu.png":["assets/flags/vu.png"],"assets/flags/wf.png":["assets/flags/wf.png"],"assets/flags/ws.png":["assets/flags/ws.png"],"assets/flags/xk.png":["assets/flags/xk.png"],"assets/flags/ye.png":["assets/flags/ye.png"],"assets/flags/yt.png":["assets/flags/yt.png"],"assets/flags/za.png":["assets/flags/za.png"],"assets/flags/zm.png":["assets/flags/zm.png"],"assets/flags/zw.png":["assets/flags/zw.png"],"assets/icons/address.png":["assets/icons/address.png"],"assets/icons/cart.png":["assets/icons/cart.png"],"assets/icons/categories.png":["assets/icons/categories.png"],"assets/icons/coupons.png":["assets/icons/coupons.png"],"assets/icons/delete.png":["assets/icons/delete.png"],"assets/icons/favorite.png":["assets/icons/favorite.png"],"assets/icons/fire.png":["assets/icons/fire.png"],"assets/icons/help_center.png":["assets/icons/help_center.png"],"assets/icons/home.png":["assets/icons/home.png"],"assets/icons/login.png":["assets/icons/login.png"],"assets/icons/logout.png":["assets/icons/logout.png"],"assets/icons/next.png":["assets/icons/next.png"],"assets/icons/notification.png":["assets/icons/notification.png"],"assets/icons/orders.png":["assets/icons/orders.png"],"assets/icons/profile.png":["assets/icons/profile.png"],"assets/icons/refund.png":["assets/icons/refund.png"],"assets/icons/search.png":["assets/icons/search.png"],"assets/icons/security.png":["assets/icons/security.png"],"assets/icons/setting.png":["assets/icons/setting.png"],"assets/icons/terms_condition.png":["assets/icons/terms_condition.png"],"assets/icons/track.png":["assets/icons/track.png"],"assets/icons/wallet.png":["assets/icons/wallet.png"],"assets/images/auth_background.png":["assets/images/auth_background.png"],"assets/images/landing_img1.png":["assets/images/landing_img1.png"],"assets/images/landing_img2.png":["assets/images/landing_img2.png"],"assets/images/landing_img3.png":["assets/images/landing_img3.png"],"assets/images/splash_background.png":["assets/images/splash_background.png"],"assets/logos/img.png":["assets/logos/img.png"],"assets/logos/img_logo.png":["assets/logos/img_logo.png"],"assets/logos/img_logo2.png":["assets/logos/img_logo2.png"],"assets/logos/logo.png":["assets/logos/logo.png"],"assets/logos/logo2x2.png":["assets/logos/logo2x2.png"],"assets/logos/logo4x4.png":["assets/logos/logo4x4.png"],"assets/logos/logo_a.png":["assets/logos/logo_a.png"],"packages/cupertino_icons/assets/CupertinoIcons.ttf":["packages/cupertino_icons/assets/CupertinoIcons.ttf"],"packages/intl_phone_number_input/assets/flags/ad.png":["packages/intl_phone_number_input/assets/flags/ad.png"],"packages/intl_phone_number_input/assets/flags/ae.png":["packages/intl_phone_number_input/assets/flags/ae.png"],"packages/intl_phone_number_input/assets/flags/af.png":["packages/intl_phone_number_input/assets/flags/af.png"],"packages/intl_phone_number_input/assets/flags/ag.png":["packages/intl_phone_number_input/assets/flags/ag.png"],"packages/intl_phone_number_input/assets/flags/ai.png":["packages/intl_phone_number_input/assets/flags/ai.png"],"packages/intl_phone_number_input/assets/flags/al.png":["packages/intl_phone_number_input/assets/flags/al.png"],"packages/intl_phone_number_input/assets/flags/am.png":["packages/intl_phone_number_input/assets/flags/am.png"],"packages/intl_phone_number_input/assets/flags/an.png":["packages/intl_phone_number_input/assets/flags/an.png"],"packages/intl_phone_number_input/assets/flags/ao.png":["packages/intl_phone_number_input/assets/flags/ao.png"],"packages/intl_phone_number_input/assets/flags/aq.png":["packages/intl_phone_number_input/assets/flags/aq.png"],"packages/intl_phone_number_input/assets/flags/ar.png":["packages/intl_phone_number_input/assets/flags/ar.png"],"packages/intl_phone_number_input/assets/flags/as.png":["packages/intl_phone_number_input/assets/flags/as.png"],"packages/intl_phone_number_input/assets/flags/at.png":["packages/intl_phone_number_input/assets/flags/at.png"],"packages/intl_phone_number_input/assets/flags/au.png":["packages/intl_phone_number_input/assets/flags/au.png"],"packages/intl_phone_number_input/assets/flags/aw.png":["packages/intl_phone_number_input/assets/flags/aw.png"],"packages/intl_phone_number_input/assets/flags/ax.png":["packages/intl_phone_number_input/assets/flags/ax.png"],"packages/intl_phone_number_input/assets/flags/az.png":["packages/intl_phone_number_input/assets/flags/az.png"],"packages/intl_phone_number_input/assets/flags/ba.png":["packages/intl_phone_number_input/assets/flags/ba.png"],"packages/intl_phone_number_input/assets/flags/bb.png":["packages/intl_phone_number_input/assets/flags/bb.png"],"packages/intl_phone_number_input/assets/flags/bd.png":["packages/intl_phone_number_input/assets/flags/bd.png"],"packages/intl_phone_number_input/assets/flags/be.png":["packages/intl_phone_number_input/assets/flags/be.png"],"packages/intl_phone_number_input/assets/flags/bf.png":["packages/intl_phone_number_input/assets/flags/bf.png"],"packages/intl_phone_number_input/assets/flags/bg.png":["packages/intl_phone_number_input/assets/flags/bg.png"],"packages/intl_phone_number_input/assets/flags/bh.png":["packages/intl_phone_number_input/assets/flags/bh.png"],"packages/intl_phone_number_input/assets/flags/bi.png":["packages/intl_phone_number_input/assets/flags/bi.png"],"packages/intl_phone_number_input/assets/flags/bj.png":["packages/intl_phone_number_input/assets/flags/bj.png"],"packages/intl_phone_number_input/assets/flags/bl.png":["packages/intl_phone_number_input/assets/flags/bl.png"],"packages/intl_phone_number_input/assets/flags/bm.png":["packages/intl_phone_number_input/assets/flags/bm.png"],"packages/intl_phone_number_input/assets/flags/bn.png":["packages/intl_phone_number_input/assets/flags/bn.png"],"packages/intl_phone_number_input/assets/flags/bo.png":["packages/intl_phone_number_input/assets/flags/bo.png"],"packages/intl_phone_number_input/assets/flags/bq.png":["packages/intl_phone_number_input/assets/flags/bq.png"],"packages/intl_phone_number_input/assets/flags/br.png":["packages/intl_phone_number_input/assets/flags/br.png"],"packages/intl_phone_number_input/assets/flags/bs.png":["packages/intl_phone_number_input/assets/flags/bs.png"],"packages/intl_phone_number_input/assets/flags/bt.png":["packages/intl_phone_number_input/assets/flags/bt.png"],"packages/intl_phone_number_input/assets/flags/bv.png":["packages/intl_phone_number_input/assets/flags/bv.png"],"packages/intl_phone_number_input/assets/flags/bw.png":["packages/intl_phone_number_input/assets/flags/bw.png"],"packages/intl_phone_number_input/assets/flags/by.png":["packages/intl_phone_number_input/assets/flags/by.png"],"packages/intl_phone_number_input/assets/flags/bz.png":["packages/intl_phone_number_input/assets/flags/bz.png"],"packages/intl_phone_number_input/assets/flags/ca.png":["packages/intl_phone_number_input/assets/flags/ca.png"],"packages/intl_phone_number_input/assets/flags/cc.png":["packages/intl_phone_number_input/assets/flags/cc.png"],"packages/intl_phone_number_input/assets/flags/cd.png":["packages/intl_phone_number_input/assets/flags/cd.png"],"packages/intl_phone_number_input/assets/flags/cf.png":["packages/intl_phone_number_input/assets/flags/cf.png"],"packages/intl_phone_number_input/assets/flags/cg.png":["packages/intl_phone_number_input/assets/flags/cg.png"],"packages/intl_phone_number_input/assets/flags/ch.png":["packages/intl_phone_number_input/assets/flags/ch.png"],"packages/intl_phone_number_input/assets/flags/ci.png":["packages/intl_phone_number_input/assets/flags/ci.png"],"packages/intl_phone_number_input/assets/flags/ck.png":["packages/intl_phone_number_input/assets/flags/ck.png"],"packages/intl_phone_number_input/assets/flags/cl.png":["packages/intl_phone_number_input/assets/flags/cl.png"],"packages/intl_phone_number_input/assets/flags/cm.png":["packages/intl_phone_number_input/assets/flags/cm.png"],"packages/intl_phone_number_input/assets/flags/cn.png":["packages/intl_phone_number_input/assets/flags/cn.png"],"packages/intl_phone_number_input/assets/flags/co.png":["packages/intl_phone_number_input/assets/flags/co.png"],"packages/intl_phone_number_input/assets/flags/cr.png":["packages/intl_phone_number_input/assets/flags/cr.png"],"packages/intl_phone_number_input/assets/flags/cu.png":["packages/intl_phone_number_input/assets/flags/cu.png"],"packages/intl_phone_number_input/assets/flags/cv.png":["packages/intl_phone_number_input/assets/flags/cv.png"],"packages/intl_phone_number_input/assets/flags/cw.png":["packages/intl_phone_number_input/assets/flags/cw.png"],"packages/intl_phone_number_input/assets/flags/cx.png":["packages/intl_phone_number_input/assets/flags/cx.png"],"packages/intl_phone_number_input/assets/flags/cy.png":["packages/intl_phone_number_input/assets/flags/cy.png"],"packages/intl_phone_number_input/assets/flags/cz.png":["packages/intl_phone_number_input/assets/flags/cz.png"],"packages/intl_phone_number_input/assets/flags/de.png":["packages/intl_phone_number_input/assets/flags/de.png"],"packages/intl_phone_number_input/assets/flags/dj.png":["packages/intl_phone_number_input/assets/flags/dj.png"],"packages/intl_phone_number_input/assets/flags/dk.png":["packages/intl_phone_number_input/assets/flags/dk.png"],"packages/intl_phone_number_input/assets/flags/dm.png":["packages/intl_phone_number_input/assets/flags/dm.png"],"packages/intl_phone_number_input/assets/flags/do.png":["packages/intl_phone_number_input/assets/flags/do.png"],"packages/intl_phone_number_input/assets/flags/dz.png":["packages/intl_phone_number_input/assets/flags/dz.png"],"packages/intl_phone_number_input/assets/flags/ec.png":["packages/intl_phone_number_input/assets/flags/ec.png"],"packages/intl_phone_number_input/assets/flags/ee.png":["packages/intl_phone_number_input/assets/flags/ee.png"],"packages/intl_phone_number_input/assets/flags/eg.png":["packages/intl_phone_number_input/assets/flags/eg.png"],"packages/intl_phone_number_input/assets/flags/eh.png":["packages/intl_phone_number_input/assets/flags/eh.png"],"packages/intl_phone_number_input/assets/flags/er.png":["packages/intl_phone_number_input/assets/flags/er.png"],"packages/intl_phone_number_input/assets/flags/es.png":["packages/intl_phone_number_input/assets/flags/es.png"],"packages/intl_phone_number_input/assets/flags/et.png":["packages/intl_phone_number_input/assets/flags/et.png"],"packages/intl_phone_number_input/assets/flags/eu.png":["packages/intl_phone_number_input/assets/flags/eu.png"],"packages/intl_phone_number_input/assets/flags/fi.png":["packages/intl_phone_number_input/assets/flags/fi.png"],"packages/intl_phone_number_input/assets/flags/fj.png":["packages/intl_phone_number_input/assets/flags/fj.png"],"packages/intl_phone_number_input/assets/flags/fk.png":["packages/intl_phone_number_input/assets/flags/fk.png"],"packages/intl_phone_number_input/assets/flags/fm.png":["packages/intl_phone_number_input/assets/flags/fm.png"],"packages/intl_phone_number_input/assets/flags/fo.png":["packages/intl_phone_number_input/assets/flags/fo.png"],"packages/intl_phone_number_input/assets/flags/fr.png":["packages/intl_phone_number_input/assets/flags/fr.png"],"packages/intl_phone_number_input/assets/flags/ga.png":["packages/intl_phone_number_input/assets/flags/ga.png"],"packages/intl_phone_number_input/assets/flags/gb-eng.png":["packages/intl_phone_number_input/assets/flags/gb-eng.png"],"packages/intl_phone_number_input/assets/flags/gb-nir.png":["packages/intl_phone_number_input/assets/flags/gb-nir.png"],"packages/intl_phone_number_input/assets/flags/gb-sct.png":["packages/intl_phone_number_input/assets/flags/gb-sct.png"],"packages/intl_phone_number_input/assets/flags/gb-wls.png":["packages/intl_phone_number_input/assets/flags/gb-wls.png"],"packages/intl_phone_number_input/assets/flags/gb.png":["packages/intl_phone_number_input/assets/flags/gb.png"],"packages/intl_phone_number_input/assets/flags/gd.png":["packages/intl_phone_number_input/assets/flags/gd.png"],"packages/intl_phone_number_input/assets/flags/ge.png":["packages/intl_phone_number_input/assets/flags/ge.png"],"packages/intl_phone_number_input/assets/flags/gf.png":["packages/intl_phone_number_input/assets/flags/gf.png"],"packages/intl_phone_number_input/assets/flags/gg.png":["packages/intl_phone_number_input/assets/flags/gg.png"],"packages/intl_phone_number_input/assets/flags/gh.png":["packages/intl_phone_number_input/assets/flags/gh.png"],"packages/intl_phone_number_input/assets/flags/gi.png":["packages/intl_phone_number_input/assets/flags/gi.png"],"packages/intl_phone_number_input/assets/flags/gl.png":["packages/intl_phone_number_input/assets/flags/gl.png"],"packages/intl_phone_number_input/assets/flags/gm.png":["packages/intl_phone_number_input/assets/flags/gm.png"],"packages/intl_phone_number_input/assets/flags/gn.png":["packages/intl_phone_number_input/assets/flags/gn.png"],"packages/intl_phone_number_input/assets/flags/gp.png":["packages/intl_phone_number_input/assets/flags/gp.png"],"packages/intl_phone_number_input/assets/flags/gq.png":["packages/intl_phone_number_input/assets/flags/gq.png"],"packages/intl_phone_number_input/assets/flags/gr.png":["packages/intl_phone_number_input/assets/flags/gr.png"],"packages/intl_phone_number_input/assets/flags/gs.png":["packages/intl_phone_number_input/assets/flags/gs.png"],"packages/intl_phone_number_input/assets/flags/gt.png":["packages/intl_phone_number_input/assets/flags/gt.png"],"packages/intl_phone_number_input/assets/flags/gu.png":["packages/intl_phone_number_input/assets/flags/gu.png"],"packages/intl_phone_number_input/assets/flags/gw.png":["packages/intl_phone_number_input/assets/flags/gw.png"],"packages/intl_phone_number_input/assets/flags/gy.png":["packages/intl_phone_number_input/assets/flags/gy.png"],"packages/intl_phone_number_input/assets/flags/hk.png":["packages/intl_phone_number_input/assets/flags/hk.png"],"packages/intl_phone_number_input/assets/flags/hm.png":["packages/intl_phone_number_input/assets/flags/hm.png"],"packages/intl_phone_number_input/assets/flags/hn.png":["packages/intl_phone_number_input/assets/flags/hn.png"],"packages/intl_phone_number_input/assets/flags/hr.png":["packages/intl_phone_number_input/assets/flags/hr.png"],"packages/intl_phone_number_input/assets/flags/ht.png":["packages/intl_phone_number_input/assets/flags/ht.png"],"packages/intl_phone_number_input/assets/flags/hu.png":["packages/intl_phone_number_input/assets/flags/hu.png"],"packages/intl_phone_number_input/assets/flags/id.png":["packages/intl_phone_number_input/assets/flags/id.png"],"packages/intl_phone_number_input/assets/flags/ie.png":["packages/intl_phone_number_input/assets/flags/ie.png"],"packages/intl_phone_number_input/assets/flags/il.png":["packages/intl_phone_number_input/assets/flags/il.png"],"packages/intl_phone_number_input/assets/flags/im.png":["packages/intl_phone_number_input/assets/flags/im.png"],"packages/intl_phone_number_input/assets/flags/in.png":["packages/intl_phone_number_input/assets/flags/in.png"],"packages/intl_phone_number_input/assets/flags/io.png":["packages/intl_phone_number_input/assets/flags/io.png"],"packages/intl_phone_number_input/assets/flags/iq.png":["packages/intl_phone_number_input/assets/flags/iq.png"],"packages/intl_phone_number_input/assets/flags/ir.png":["packages/intl_phone_number_input/assets/flags/ir.png"],"packages/intl_phone_number_input/assets/flags/is.png":["packages/intl_phone_number_input/assets/flags/is.png"],"packages/intl_phone_number_input/assets/flags/it.png":["packages/intl_phone_number_input/assets/flags/it.png"],"packages/intl_phone_number_input/assets/flags/je.png":["packages/intl_phone_number_input/assets/flags/je.png"],"packages/intl_phone_number_input/assets/flags/jm.png":["packages/intl_phone_number_input/assets/flags/jm.png"],"packages/intl_phone_number_input/assets/flags/jo.png":["packages/intl_phone_number_input/assets/flags/jo.png"],"packages/intl_phone_number_input/assets/flags/jp.png":["packages/intl_phone_number_input/assets/flags/jp.png"],"packages/intl_phone_number_input/assets/flags/ke.png":["packages/intl_phone_number_input/assets/flags/ke.png"],"packages/intl_phone_number_input/assets/flags/kg.png":["packages/intl_phone_number_input/assets/flags/kg.png"],"packages/intl_phone_number_input/assets/flags/kh.png":["packages/intl_phone_number_input/assets/flags/kh.png"],"packages/intl_phone_number_input/assets/flags/ki.png":["packages/intl_phone_number_input/assets/flags/ki.png"],"packages/intl_phone_number_input/assets/flags/km.png":["packages/intl_phone_number_input/assets/flags/km.png"],"packages/intl_phone_number_input/assets/flags/kn.png":["packages/intl_phone_number_input/assets/flags/kn.png"],"packages/intl_phone_number_input/assets/flags/kp.png":["packages/intl_phone_number_input/assets/flags/kp.png"],"packages/intl_phone_number_input/assets/flags/kr.png":["packages/intl_phone_number_input/assets/flags/kr.png"],"packages/intl_phone_number_input/assets/flags/kw.png":["packages/intl_phone_number_input/assets/flags/kw.png"],"packages/intl_phone_number_input/assets/flags/ky.png":["packages/intl_phone_number_input/assets/flags/ky.png"],"packages/intl_phone_number_input/assets/flags/kz.png":["packages/intl_phone_number_input/assets/flags/kz.png"],"packages/intl_phone_number_input/assets/flags/la.png":["packages/intl_phone_number_input/assets/flags/la.png"],"packages/intl_phone_number_input/assets/flags/lb.png":["packages/intl_phone_number_input/assets/flags/lb.png"],"packages/intl_phone_number_input/assets/flags/lc.png":["packages/intl_phone_number_input/assets/flags/lc.png"],"packages/intl_phone_number_input/assets/flags/li.png":["packages/intl_phone_number_input/assets/flags/li.png"],"packages/intl_phone_number_input/assets/flags/lk.png":["packages/intl_phone_number_input/assets/flags/lk.png"],"packages/intl_phone_number_input/assets/flags/lr.png":["packages/intl_phone_number_input/assets/flags/lr.png"],"packages/intl_phone_number_input/assets/flags/ls.png":["packages/intl_phone_number_input/assets/flags/ls.png"],"packages/intl_phone_number_input/assets/flags/lt.png":["packages/intl_phone_number_input/assets/flags/lt.png"],"packages/intl_phone_number_input/assets/flags/lu.png":["packages/intl_phone_number_input/assets/flags/lu.png"],"packages/intl_phone_number_input/assets/flags/lv.png":["packages/intl_phone_number_input/assets/flags/lv.png"],"packages/intl_phone_number_input/assets/flags/ly.png":["packages/intl_phone_number_input/assets/flags/ly.png"],"packages/intl_phone_number_input/assets/flags/ma.png":["packages/intl_phone_number_input/assets/flags/ma.png"],"packages/intl_phone_number_input/assets/flags/mc.png":["packages/intl_phone_number_input/assets/flags/mc.png"],"packages/intl_phone_number_input/assets/flags/md.png":["packages/intl_phone_number_input/assets/flags/md.png"],"packages/intl_phone_number_input/assets/flags/me.png":["packages/intl_phone_number_input/assets/flags/me.png"],"packages/intl_phone_number_input/assets/flags/mf.png":["packages/intl_phone_number_input/assets/flags/mf.png"],"packages/intl_phone_number_input/assets/flags/mg.png":["packages/intl_phone_number_input/assets/flags/mg.png"],"packages/intl_phone_number_input/assets/flags/mh.png":["packages/intl_phone_number_input/assets/flags/mh.png"],"packages/intl_phone_number_input/assets/flags/mk.png":["packages/intl_phone_number_input/assets/flags/mk.png"],"packages/intl_phone_number_input/assets/flags/ml.png":["packages/intl_phone_number_input/assets/flags/ml.png"],"packages/intl_phone_number_input/assets/flags/mm.png":["packages/intl_phone_number_input/assets/flags/mm.png"],"packages/intl_phone_number_input/assets/flags/mn.png":["packages/intl_phone_number_input/assets/flags/mn.png"],"packages/intl_phone_number_input/assets/flags/mo.png":["packages/intl_phone_number_input/assets/flags/mo.png"],"packages/intl_phone_number_input/assets/flags/mp.png":["packages/intl_phone_number_input/assets/flags/mp.png"],"packages/intl_phone_number_input/assets/flags/mq.png":["packages/intl_phone_number_input/assets/flags/mq.png"],"packages/intl_phone_number_input/assets/flags/mr.png":["packages/intl_phone_number_input/assets/flags/mr.png"],"packages/intl_phone_number_input/assets/flags/ms.png":["packages/intl_phone_number_input/assets/flags/ms.png"],"packages/intl_phone_number_input/assets/flags/mt.png":["packages/intl_phone_number_input/assets/flags/mt.png"],"packages/intl_phone_number_input/assets/flags/mu.png":["packages/intl_phone_number_input/assets/flags/mu.png"],"packages/intl_phone_number_input/assets/flags/mv.png":["packages/intl_phone_number_input/assets/flags/mv.png"],"packages/intl_phone_number_input/assets/flags/mw.png":["packages/intl_phone_number_input/assets/flags/mw.png"],"packages/intl_phone_number_input/assets/flags/mx.png":["packages/intl_phone_number_input/assets/flags/mx.png"],"packages/intl_phone_number_input/assets/flags/my.png":["packages/intl_phone_number_input/assets/flags/my.png"],"packages/intl_phone_number_input/assets/flags/mz.png":["packages/intl_phone_number_input/assets/flags/mz.png"],"packages/intl_phone_number_input/assets/flags/na.png":["packages/intl_phone_number_input/assets/flags/na.png"],"packages/intl_phone_number_input/assets/flags/nc.png":["packages/intl_phone_number_input/assets/flags/nc.png"],"packages/intl_phone_number_input/assets/flags/ne.png":["packages/intl_phone_number_input/assets/flags/ne.png"],"packages/intl_phone_number_input/assets/flags/nf.png":["packages/intl_phone_number_input/assets/flags/nf.png"],"packages/intl_phone_number_input/assets/flags/ng.png":["packages/intl_phone_number_input/assets/flags/ng.png"],"packages/intl_phone_number_input/assets/flags/ni.png":["packages/intl_phone_number_input/assets/flags/ni.png"],"packages/intl_phone_number_input/assets/flags/nl.png":["packages/intl_phone_number_input/assets/flags/nl.png"],"packages/intl_phone_number_input/assets/flags/no.png":["packages/intl_phone_number_input/assets/flags/no.png"],"packages/intl_phone_number_input/assets/flags/np.png":["packages/intl_phone_number_input/assets/flags/np.png"],"packages/intl_phone_number_input/assets/flags/nr.png":["packages/intl_phone_number_input/assets/flags/nr.png"],"packages/intl_phone_number_input/assets/flags/nu.png":["packages/intl_phone_number_input/assets/flags/nu.png"],"packages/intl_phone_number_input/assets/flags/nz.png":["packages/intl_phone_number_input/assets/flags/nz.png"],"packages/intl_phone_number_input/assets/flags/om.png":["packages/intl_phone_number_input/assets/flags/om.png"],"packages/intl_phone_number_input/assets/flags/pa.png":["packages/intl_phone_number_input/assets/flags/pa.png"],"packages/intl_phone_number_input/assets/flags/pe.png":["packages/intl_phone_number_input/assets/flags/pe.png"],"packages/intl_phone_number_input/assets/flags/pf.png":["packages/intl_phone_number_input/assets/flags/pf.png"],"packages/intl_phone_number_input/assets/flags/pg.png":["packages/intl_phone_number_input/assets/flags/pg.png"],"packages/intl_phone_number_input/assets/flags/ph.png":["packages/intl_phone_number_input/assets/flags/ph.png"],"packages/intl_phone_number_input/assets/flags/pk.png":["packages/intl_phone_number_input/assets/flags/pk.png"],"packages/intl_phone_number_input/assets/flags/pl.png":["packages/intl_phone_number_input/assets/flags/pl.png"],"packages/intl_phone_number_input/assets/flags/pm.png":["packages/intl_phone_number_input/assets/flags/pm.png"],"packages/intl_phone_number_input/assets/flags/pn.png":["packages/intl_phone_number_input/assets/flags/pn.png"],"packages/intl_phone_number_input/assets/flags/pr.png":["packages/intl_phone_number_input/assets/flags/pr.png"],"packages/intl_phone_number_input/assets/flags/ps.png":["packages/intl_phone_number_input/assets/flags/ps.png"],"packages/intl_phone_number_input/assets/flags/pt.png":["packages/intl_phone_number_input/assets/flags/pt.png"],"packages/intl_phone_number_input/assets/flags/pw.png":["packages/intl_phone_number_input/assets/flags/pw.png"],"packages/intl_phone_number_input/assets/flags/py.png":["packages/intl_phone_number_input/assets/flags/py.png"],"packages/intl_phone_number_input/assets/flags/qa.png":["packages/intl_phone_number_input/assets/flags/qa.png"],"packages/intl_phone_number_input/assets/flags/re.png":["packages/intl_phone_number_input/assets/flags/re.png"],"packages/intl_phone_number_input/assets/flags/ro.png":["packages/intl_phone_number_input/assets/flags/ro.png"],"packages/intl_phone_number_input/assets/flags/rs.png":["packages/intl_phone_number_input/assets/flags/rs.png"],"packages/intl_phone_number_input/assets/flags/ru.png":["packages/intl_phone_number_input/assets/flags/ru.png"],"packages/intl_phone_number_input/assets/flags/rw.png":["packages/intl_phone_number_input/assets/flags/rw.png"],"packages/intl_phone_number_input/assets/flags/sa.png":["packages/intl_phone_number_input/assets/flags/sa.png"],"packages/intl_phone_number_input/assets/flags/sb.png":["packages/intl_phone_number_input/assets/flags/sb.png"],"packages/intl_phone_number_input/assets/flags/sc.png":["packages/intl_phone_number_input/assets/flags/sc.png"],"packages/intl_phone_number_input/assets/flags/sd.png":["packages/intl_phone_number_input/assets/flags/sd.png"],"packages/intl_phone_number_input/assets/flags/se.png":["packages/intl_phone_number_input/assets/flags/se.png"],"packages/intl_phone_number_input/assets/flags/sg.png":["packages/intl_phone_number_input/assets/flags/sg.png"],"packages/intl_phone_number_input/assets/flags/sh.png":["packages/intl_phone_number_input/assets/flags/sh.png"],"packages/intl_phone_number_input/assets/flags/si.png":["packages/intl_phone_number_input/assets/flags/si.png"],"packages/intl_phone_number_input/assets/flags/sj.png":["packages/intl_phone_number_input/assets/flags/sj.png"],"packages/intl_phone_number_input/assets/flags/sk.png":["packages/intl_phone_number_input/assets/flags/sk.png"],"packages/intl_phone_number_input/assets/flags/sl.png":["packages/intl_phone_number_input/assets/flags/sl.png"],"packages/intl_phone_number_input/assets/flags/sm.png":["packages/intl_phone_number_input/assets/flags/sm.png"],"packages/intl_phone_number_input/assets/flags/sn.png":["packages/intl_phone_number_input/assets/flags/sn.png"],"packages/intl_phone_number_input/assets/flags/so.png":["packages/intl_phone_number_input/assets/flags/so.png"],"packages/intl_phone_number_input/assets/flags/sr.png":["packages/intl_phone_number_input/assets/flags/sr.png"],"packages/intl_phone_number_input/assets/flags/ss.png":["packages/intl_phone_number_input/assets/flags/ss.png"],"packages/intl_phone_number_input/assets/flags/st.png":["packages/intl_phone_number_input/assets/flags/st.png"],"packages/intl_phone_number_input/assets/flags/sv.png":["packages/intl_phone_number_input/assets/flags/sv.png"],"packages/intl_phone_number_input/assets/flags/sx.png":["packages/intl_phone_number_input/assets/flags/sx.png"],"packages/intl_phone_number_input/assets/flags/sy.png":["packages/intl_phone_number_input/assets/flags/sy.png"],"packages/intl_phone_number_input/assets/flags/sz.png":["packages/intl_phone_number_input/assets/flags/sz.png"],"packages/intl_phone_number_input/assets/flags/tc.png":["packages/intl_phone_number_input/assets/flags/tc.png"],"packages/intl_phone_number_input/assets/flags/td.png":["packages/intl_phone_number_input/assets/flags/td.png"],"packages/intl_phone_number_input/assets/flags/tf.png":["packages/intl_phone_number_input/assets/flags/tf.png"],"packages/intl_phone_number_input/assets/flags/tg.png":["packages/intl_phone_number_input/assets/flags/tg.png"],"packages/intl_phone_number_input/assets/flags/th.png":["packages/intl_phone_number_input/assets/flags/th.png"],"packages/intl_phone_number_input/assets/flags/tj.png":["packages/intl_phone_number_input/assets/flags/tj.png"],"packages/intl_phone_number_input/assets/flags/tk.png":["packages/intl_phone_number_input/assets/flags/tk.png"],"packages/intl_phone_number_input/assets/flags/tl.png":["packages/intl_phone_number_input/assets/flags/tl.png"],"packages/intl_phone_number_input/assets/flags/tm.png":["packages/intl_phone_number_input/assets/flags/tm.png"],"packages/intl_phone_number_input/assets/flags/tn.png":["packages/intl_phone_number_input/assets/flags/tn.png"],"packages/intl_phone_number_input/assets/flags/to.png":["packages/intl_phone_number_input/assets/flags/to.png"],"packages/intl_phone_number_input/assets/flags/tr.png":["packages/intl_phone_number_input/assets/flags/tr.png"],"packages/intl_phone_number_input/assets/flags/tt.png":["packages/intl_phone_number_input/assets/flags/tt.png"],"packages/intl_phone_number_input/assets/flags/tv.png":["packages/intl_phone_number_input/assets/flags/tv.png"],"packages/intl_phone_number_input/assets/flags/tw.png":["packages/intl_phone_number_input/assets/flags/tw.png"],"packages/intl_phone_number_input/assets/flags/tz.png":["packages/intl_phone_number_input/assets/flags/tz.png"],"packages/intl_phone_number_input/assets/flags/ua.png":["packages/intl_phone_number_input/assets/flags/ua.png"],"packages/intl_phone_number_input/assets/flags/ug.png":["packages/intl_phone_number_input/assets/flags/ug.png"],"packages/intl_phone_number_input/assets/flags/um.png":["packages/intl_phone_number_input/assets/flags/um.png"],"packages/intl_phone_number_input/assets/flags/us.png":["packages/intl_phone_number_input/assets/flags/us.png"],"packages/intl_phone_number_input/assets/flags/uy.png":["packages/intl_phone_number_input/assets/flags/uy.png"],"packages/intl_phone_number_input/assets/flags/uz.png":["packages/intl_phone_number_input/assets/flags/uz.png"],"packages/intl_phone_number_input/assets/flags/va.png":["packages/intl_phone_number_input/assets/flags/va.png"],"packages/intl_phone_number_input/assets/flags/vc.png":["packages/intl_phone_number_input/assets/flags/vc.png"],"packages/intl_phone_number_input/assets/flags/ve.png":["packages/intl_phone_number_input/assets/flags/ve.png"],"packages/intl_phone_number_input/assets/flags/vg.png":["packages/intl_phone_number_input/assets/flags/vg.png"],"packages/intl_phone_number_input/assets/flags/vi.png":["packages/intl_phone_number_input/assets/flags/vi.png"],"packages/intl_phone_number_input/assets/flags/vn.png":["packages/intl_phone_number_input/assets/flags/vn.png"],"packages/intl_phone_number_input/assets/flags/vu.png":["packages/intl_phone_number_input/assets/flags/vu.png"],"packages/intl_phone_number_input/assets/flags/wf.png":["packages/intl_phone_number_input/assets/flags/wf.png"],"packages/intl_phone_number_input/assets/flags/ws.png":["packages/intl_phone_number_input/assets/flags/ws.png"],"packages/intl_phone_number_input/assets/flags/xk.png":["packages/intl_phone_number_input/assets/flags/xk.png"],"packages/intl_phone_number_input/assets/flags/ye.png":["packages/intl_phone_number_input/assets/flags/ye.png"],"packages/intl_phone_number_input/assets/flags/yt.png":["packages/intl_phone_number_input/assets/flags/yt.png"],"packages/intl_phone_number_input/assets/flags/za.png":["packages/intl_phone_number_input/assets/flags/za.png"],"packages/intl_phone_number_input/assets/flags/zm.png":["packages/intl_phone_number_input/assets/flags/zm.png"],"packages/intl_phone_number_input/assets/flags/zw.png":["packages/intl_phone_number_input/assets/flags/zw.png"],"packages/toast/assets/toastify.css":["packages/toast/assets/toastify.css"],"packages/toast/assets/toastify.js":["packages/toast/assets/toastify.js"]} \ No newline at end of file diff --git a/app_code/temp_apk/assets/flutter_assets/FontManifest.json b/app_code/temp_apk/assets/flutter_assets/FontManifest.json new file mode 100644 index 0000000..464ab58 --- /dev/null +++ b/app_code/temp_apk/assets/flutter_assets/FontManifest.json @@ -0,0 +1 @@ +[{"family":"MaterialIcons","fonts":[{"asset":"fonts/MaterialIcons-Regular.otf"}]},{"family":"packages/cupertino_icons/CupertinoIcons","fonts":[{"asset":"packages/cupertino_icons/assets/CupertinoIcons.ttf"}]}] \ No newline at end of file diff --git a/app_code/temp_apk/assets/flutter_assets/NOTICES.Z b/app_code/temp_apk/assets/flutter_assets/NOTICES.Z new file mode 100644 index 0000000..89a9a53 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/NOTICES.Z differ diff --git a/app_code/temp_apk/assets/flutter_assets/NativeAssetsManifest.json b/app_code/temp_apk/assets/flutter_assets/NativeAssetsManifest.json new file mode 100644 index 0000000..523bfc7 --- /dev/null +++ b/app_code/temp_apk/assets/flutter_assets/NativeAssetsManifest.json @@ -0,0 +1 @@ +{"format-version":[1,0,0],"native-assets":{}} \ No newline at end of file diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ad.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ad.png new file mode 100644 index 0000000..fdc41f6 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ad.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ae.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ae.png new file mode 100644 index 0000000..8e0ae66 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ae.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/af.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/af.png new file mode 100644 index 0000000..bb620b1 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/af.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ag.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ag.png new file mode 100644 index 0000000..3579ff1 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ag.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ai.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ai.png new file mode 100644 index 0000000..1aca2ec Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ai.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/al.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/al.png new file mode 100644 index 0000000..f070896 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/al.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/am.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/am.png new file mode 100644 index 0000000..9dd35f0 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/am.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/an.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/an.png new file mode 100644 index 0000000..cd6b451 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/an.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ao.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ao.png new file mode 100644 index 0000000..197cdc6 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ao.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/aq.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/aq.png new file mode 100644 index 0000000..827282f Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/aq.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ar.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ar.png new file mode 100644 index 0000000..846a2bc Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ar.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/as.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/as.png new file mode 100644 index 0000000..c2af5ea Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/as.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/at.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/at.png new file mode 100644 index 0000000..05dbd1d Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/at.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/au.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/au.png new file mode 100644 index 0000000..7181dc5 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/au.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/aw.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/aw.png new file mode 100644 index 0000000..efe03a9 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/aw.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ax.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ax.png new file mode 100644 index 0000000..c3df4ad Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ax.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/az.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/az.png new file mode 100644 index 0000000..5bc4a0f Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/az.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ba.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ba.png new file mode 100644 index 0000000..09cec0d Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ba.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/bb.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/bb.png new file mode 100644 index 0000000..ed7731e Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/bb.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/bd.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/bd.png new file mode 100644 index 0000000..c24170c Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/bd.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/be.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/be.png new file mode 100644 index 0000000..202c489 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/be.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/bf.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/bf.png new file mode 100644 index 0000000..9a3d8d1 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/bf.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/bg.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/bg.png new file mode 100644 index 0000000..ab3eb4f Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/bg.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/bh.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/bh.png new file mode 100644 index 0000000..62011b8 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/bh.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/bi.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/bi.png new file mode 100644 index 0000000..f4de108 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/bi.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/bj.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/bj.png new file mode 100644 index 0000000..83c9474 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/bj.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/bl.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/bl.png new file mode 100644 index 0000000..6320925 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/bl.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/bm.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/bm.png new file mode 100644 index 0000000..5e87c6a Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/bm.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/bn.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/bn.png new file mode 100644 index 0000000..1006d68 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/bn.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/bo.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/bo.png new file mode 100644 index 0000000..17d56dc Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/bo.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/bq.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/bq.png new file mode 100644 index 0000000..f545dc8 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/bq.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/br.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/br.png new file mode 100644 index 0000000..8b18eb2 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/br.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/bs.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/bs.png new file mode 100644 index 0000000..6bdc618 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/bs.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/bt.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/bt.png new file mode 100644 index 0000000..013a6a3 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/bt.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/bv.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/bv.png new file mode 100644 index 0000000..b7a42f4 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/bv.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/bw.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/bw.png new file mode 100644 index 0000000..04446c4 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/bw.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/by.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/by.png new file mode 100644 index 0000000..5633bdd Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/by.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/bz.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/bz.png new file mode 100644 index 0000000..0ea4c76 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/bz.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ca.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ca.png new file mode 100644 index 0000000..5c7340a Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ca.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/cc.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/cc.png new file mode 100644 index 0000000..9191430 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/cc.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/cd.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/cd.png new file mode 100644 index 0000000..7e85a3d Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/cd.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/cf.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/cf.png new file mode 100644 index 0000000..6fdd1dc Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/cf.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/cg.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/cg.png new file mode 100644 index 0000000..79d62cf Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/cg.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ch.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ch.png new file mode 100644 index 0000000..031d1f7 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ch.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ci.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ci.png new file mode 100644 index 0000000..97a79e2 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ci.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ck.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ck.png new file mode 100644 index 0000000..8c1d086 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ck.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/cl.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/cl.png new file mode 100644 index 0000000..2bd971d Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/cl.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/cm.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/cm.png new file mode 100644 index 0000000..fa35a32 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/cm.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/cn.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/cn.png new file mode 100644 index 0000000..ca5a8b3 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/cn.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/co.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/co.png new file mode 100644 index 0000000..6fcfd96 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/co.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/cr.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/cr.png new file mode 100644 index 0000000..d4a25c2 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/cr.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/cu.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/cu.png new file mode 100644 index 0000000..000b773 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/cu.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/cv.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/cv.png new file mode 100644 index 0000000..1684576 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/cv.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/cw.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/cw.png new file mode 100644 index 0000000..aa7b8c8 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/cw.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/cx.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/cx.png new file mode 100644 index 0000000..826b230 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/cx.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/cy.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/cy.png new file mode 100644 index 0000000..39055d7 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/cy.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/cz.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/cz.png new file mode 100644 index 0000000..8c679f2 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/cz.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/de.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/de.png new file mode 100644 index 0000000..f078fdf Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/de.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/dj.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/dj.png new file mode 100644 index 0000000..64ab04e Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/dj.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/dk.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/dk.png new file mode 100644 index 0000000..5f907ce Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/dk.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/dm.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/dm.png new file mode 100644 index 0000000..307e374 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/dm.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/do.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/do.png new file mode 100644 index 0000000..16160a3 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/do.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/dz.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/dz.png new file mode 100644 index 0000000..0de1256 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/dz.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ec.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ec.png new file mode 100644 index 0000000..96d84f7 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ec.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ee.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ee.png new file mode 100644 index 0000000..56aed18 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ee.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/eg.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/eg.png new file mode 100644 index 0000000..a5320a6 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/eg.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/eh.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/eh.png new file mode 100644 index 0000000..24bdb35 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/eh.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/er.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/er.png new file mode 100644 index 0000000..bd47590 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/er.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/es.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/es.png new file mode 100644 index 0000000..23e7141 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/es.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/et.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/et.png new file mode 100644 index 0000000..258e32d Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/et.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/eu.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/eu.png new file mode 100644 index 0000000..0018b6c Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/eu.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/fi.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/fi.png new file mode 100644 index 0000000..7c1f908 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/fi.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/fj.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/fj.png new file mode 100644 index 0000000..6d9a4e1 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/fj.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/fk.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/fk.png new file mode 100644 index 0000000..fc9b5db Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/fk.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/fm.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/fm.png new file mode 100644 index 0000000..8f5b150 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/fm.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/fo.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/fo.png new file mode 100644 index 0000000..6a1e048 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/fo.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/fr.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/fr.png new file mode 100644 index 0000000..6a196cb Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/fr.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ga.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ga.png new file mode 100644 index 0000000..dcade00 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ga.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/gb-eng.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/gb-eng.png new file mode 100644 index 0000000..b534e62 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/gb-eng.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/gb-nir.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/gb-nir.png new file mode 100644 index 0000000..8a020a8 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/gb-nir.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/gb-sct.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/gb-sct.png new file mode 100644 index 0000000..7f5f28f Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/gb-sct.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/gb-wls.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/gb-wls.png new file mode 100644 index 0000000..9571ac5 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/gb-wls.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/gb.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/gb.png new file mode 100644 index 0000000..23e1574 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/gb.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/gd.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/gd.png new file mode 100644 index 0000000..2c070dd Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/gd.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ge.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ge.png new file mode 100644 index 0000000..1cc5204 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ge.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/gf.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/gf.png new file mode 100644 index 0000000..54c2d5e Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/gf.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/gg.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/gg.png new file mode 100644 index 0000000..e734304 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/gg.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/gh.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/gh.png new file mode 100644 index 0000000..a8ef8c4 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/gh.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/gi.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/gi.png new file mode 100644 index 0000000..ca2b8da Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/gi.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/gl.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/gl.png new file mode 100644 index 0000000..3a8ce02 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/gl.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/gm.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/gm.png new file mode 100644 index 0000000..2a70b15 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/gm.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/gn.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/gn.png new file mode 100644 index 0000000..609fd66 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/gn.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/gp.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/gp.png new file mode 100644 index 0000000..6a196cb Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/gp.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/gq.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/gq.png new file mode 100644 index 0000000..60a82d9 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/gq.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/gr.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/gr.png new file mode 100644 index 0000000..ac2f75c Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/gr.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/gs.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/gs.png new file mode 100644 index 0000000..60d421b Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/gs.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/gt.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/gt.png new file mode 100644 index 0000000..4971a58 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/gt.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/gu.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/gu.png new file mode 100644 index 0000000..cdca8e9 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/gu.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/gw.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/gw.png new file mode 100644 index 0000000..1472f23 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/gw.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/gy.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/gy.png new file mode 100644 index 0000000..36279ec Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/gy.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/hk.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/hk.png new file mode 100644 index 0000000..92123c5 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/hk.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/hm.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/hm.png new file mode 100644 index 0000000..fff75ea Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/hm.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/hn.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/hn.png new file mode 100644 index 0000000..9935964 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/hn.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/hr.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/hr.png new file mode 100644 index 0000000..8396e00 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/hr.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ht.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ht.png new file mode 100644 index 0000000..43e208b Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ht.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/hu.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/hu.png new file mode 100644 index 0000000..d181d5d Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/hu.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/id.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/id.png new file mode 100644 index 0000000..072bd8c Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/id.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ie.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ie.png new file mode 100644 index 0000000..10fbab9 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ie.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/il.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/il.png new file mode 100644 index 0000000..32aba13 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/il.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/im.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/im.png new file mode 100644 index 0000000..f54a464 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/im.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/in.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/in.png new file mode 100644 index 0000000..be3710d Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/in.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/io.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/io.png new file mode 100644 index 0000000..c7eddc7 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/io.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/iq.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/iq.png new file mode 100644 index 0000000..273672a Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/iq.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ir.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ir.png new file mode 100644 index 0000000..e218c83 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ir.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/is.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/is.png new file mode 100644 index 0000000..ff6cb99 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/is.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/it.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/it.png new file mode 100644 index 0000000..3f5e25b Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/it.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/je.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/je.png new file mode 100644 index 0000000..0e26cb9 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/je.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/jm.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/jm.png new file mode 100644 index 0000000..4768ee5 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/jm.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/jo.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/jo.png new file mode 100644 index 0000000..d5b39da Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/jo.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/jp.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/jp.png new file mode 100644 index 0000000..253e485 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/jp.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ke.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ke.png new file mode 100644 index 0000000..3017b3b Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ke.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/kg.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/kg.png new file mode 100644 index 0000000..65111f5 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/kg.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/kh.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/kh.png new file mode 100644 index 0000000..74106c5 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/kh.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ki.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ki.png new file mode 100644 index 0000000..cdbac2f Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ki.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/km.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/km.png new file mode 100644 index 0000000..22d9760 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/km.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/kn.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/kn.png new file mode 100644 index 0000000..be0a586 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/kn.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/kp.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/kp.png new file mode 100644 index 0000000..1d9ca5e Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/kp.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/kr.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/kr.png new file mode 100644 index 0000000..fd9b58d Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/kr.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/kw.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/kw.png new file mode 100644 index 0000000..a939061 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/kw.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ky.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ky.png new file mode 100644 index 0000000..47c5580 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ky.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/kz.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/kz.png new file mode 100644 index 0000000..b3bb7f0 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/kz.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/la.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/la.png new file mode 100644 index 0000000..006e38f Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/la.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/lb.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/lb.png new file mode 100644 index 0000000..a2d62a8 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/lb.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/lc.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/lc.png new file mode 100644 index 0000000..40948b6 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/lc.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/li.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/li.png new file mode 100644 index 0000000..8d73ed8 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/li.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/lk.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/lk.png new file mode 100644 index 0000000..fb62738 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/lk.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/lr.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/lr.png new file mode 100644 index 0000000..b20d7f0 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/lr.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ls.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ls.png new file mode 100644 index 0000000..75d9ce3 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ls.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/lt.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/lt.png new file mode 100644 index 0000000..c8bed37 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/lt.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/lu.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/lu.png new file mode 100644 index 0000000..0937120 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/lu.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/lv.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/lv.png new file mode 100644 index 0000000..5447b3f Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/lv.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ly.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ly.png new file mode 100644 index 0000000..d898e49 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ly.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ma.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ma.png new file mode 100644 index 0000000..a0e0290 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ma.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/mc.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/mc.png new file mode 100644 index 0000000..f40ca3e Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/mc.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/md.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/md.png new file mode 100644 index 0000000..f8408e2 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/md.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/me.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/me.png new file mode 100644 index 0000000..1d56855 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/me.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/mf.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/mf.png new file mode 100644 index 0000000..6a196cb Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/mf.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/mg.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/mg.png new file mode 100644 index 0000000..21ccba3 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/mg.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/mh.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/mh.png new file mode 100644 index 0000000..e7f88ed Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/mh.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/mk.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/mk.png new file mode 100644 index 0000000..e670919 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/mk.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ml.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ml.png new file mode 100644 index 0000000..f0e9990 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ml.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/mm.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/mm.png new file mode 100644 index 0000000..09363b3 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/mm.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/mn.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/mn.png new file mode 100644 index 0000000..0d30b3e Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/mn.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/mo.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/mo.png new file mode 100644 index 0000000..4a731ce Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/mo.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/mp.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/mp.png new file mode 100644 index 0000000..a7aa3cd Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/mp.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/mq.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/mq.png new file mode 100644 index 0000000..2d396ea Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/mq.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/mr.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/mr.png new file mode 100644 index 0000000..cc1960f Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/mr.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ms.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ms.png new file mode 100644 index 0000000..e51480c Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ms.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/mt.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/mt.png new file mode 100644 index 0000000..18ec071 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/mt.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/mu.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/mu.png new file mode 100644 index 0000000..b416546 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/mu.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/mv.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/mv.png new file mode 100644 index 0000000..a011b78 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/mv.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/mw.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/mw.png new file mode 100644 index 0000000..5821977 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/mw.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/mx.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/mx.png new file mode 100644 index 0000000..db28a24 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/mx.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/my.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/my.png new file mode 100644 index 0000000..6fe220e Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/my.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/mz.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/mz.png new file mode 100644 index 0000000..81c587d Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/mz.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/na.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/na.png new file mode 100644 index 0000000..1a4f709 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/na.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/nc.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/nc.png new file mode 100644 index 0000000..a0ecb85 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/nc.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ne.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ne.png new file mode 100644 index 0000000..fa8859a Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ne.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/nf.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/nf.png new file mode 100644 index 0000000..3c94505 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/nf.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ng.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ng.png new file mode 100644 index 0000000..fd111eb Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ng.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ni.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ni.png new file mode 100644 index 0000000..fa96478 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ni.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/nl.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/nl.png new file mode 100644 index 0000000..f545dc8 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/nl.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/no.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/no.png new file mode 100644 index 0000000..b7a42f4 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/no.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/np.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/np.png new file mode 100644 index 0000000..7f2ffbe Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/np.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/nr.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/nr.png new file mode 100644 index 0000000..abaae23 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/nr.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/nu.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/nu.png new file mode 100644 index 0000000..2aa41ac Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/nu.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/nz.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/nz.png new file mode 100644 index 0000000..c8263c3 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/nz.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/om.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/om.png new file mode 100644 index 0000000..4945850 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/om.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/pa.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/pa.png new file mode 100644 index 0000000..a3e57a5 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/pa.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/pe.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/pe.png new file mode 100644 index 0000000..2bed96a Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/pe.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/pf.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/pf.png new file mode 100644 index 0000000..9bf2ac4 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/pf.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/pg.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/pg.png new file mode 100644 index 0000000..c18cc5c Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/pg.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ph.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ph.png new file mode 100644 index 0000000..6f73a4f Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ph.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/pk.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/pk.png new file mode 100644 index 0000000..b2355db Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/pk.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/pl.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/pl.png new file mode 100644 index 0000000..e335edb Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/pl.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/pm.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/pm.png new file mode 100644 index 0000000..6a196cb Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/pm.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/pn.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/pn.png new file mode 100644 index 0000000..65acfc1 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/pn.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/pr.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/pr.png new file mode 100644 index 0000000..37f3b64 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/pr.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ps.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ps.png new file mode 100644 index 0000000..cac9ec7 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ps.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/pt.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/pt.png new file mode 100644 index 0000000..56379a6 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/pt.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/pw.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/pw.png new file mode 100644 index 0000000..41b95b8 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/pw.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/py.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/py.png new file mode 100644 index 0000000..f9d7cc9 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/py.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/qa.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/qa.png new file mode 100644 index 0000000..93f3eda Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/qa.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/re.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/re.png new file mode 100644 index 0000000..6a196cb Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/re.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ro.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ro.png new file mode 100644 index 0000000..b8c25ce Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ro.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/rs.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/rs.png new file mode 100644 index 0000000..1c93130 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/rs.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ru.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ru.png new file mode 100644 index 0000000..9739ab6 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ru.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/rw.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/rw.png new file mode 100644 index 0000000..c01b9a6 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/rw.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/sa.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/sa.png new file mode 100644 index 0000000..c1b1f70 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/sa.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/sb.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/sb.png new file mode 100644 index 0000000..ef529e1 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/sb.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/sc.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/sc.png new file mode 100644 index 0000000..a743a48 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/sc.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/sd.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/sd.png new file mode 100644 index 0000000..117ad21 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/sd.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/se.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/se.png new file mode 100644 index 0000000..b6fcc62 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/se.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/sg.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/sg.png new file mode 100644 index 0000000..65a0422 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/sg.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/sh.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/sh.png new file mode 100644 index 0000000..f77da1f Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/sh.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/si.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/si.png new file mode 100644 index 0000000..a837d2c Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/si.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/sj.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/sj.png new file mode 100644 index 0000000..b7a42f4 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/sj.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/sk.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/sk.png new file mode 100644 index 0000000..5ed1348 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/sk.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/sl.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/sl.png new file mode 100644 index 0000000..4f8d54e Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/sl.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/sm.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/sm.png new file mode 100644 index 0000000..7ce4715 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/sm.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/sn.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/sn.png new file mode 100644 index 0000000..719c1ef Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/sn.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/so.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/so.png new file mode 100644 index 0000000..6e784b1 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/so.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/sr.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/sr.png new file mode 100644 index 0000000..9a054f0 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/sr.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ss.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ss.png new file mode 100644 index 0000000..5833883 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ss.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/st.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/st.png new file mode 100644 index 0000000..133edbc Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/st.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/sv.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/sv.png new file mode 100644 index 0000000..acd4a36 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/sv.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/sx.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/sx.png new file mode 100644 index 0000000..3e347b0 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/sx.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/sy.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/sy.png new file mode 100644 index 0000000..45655a5 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/sy.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/sz.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/sz.png new file mode 100644 index 0000000..5b413eb Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/sz.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/tc.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/tc.png new file mode 100644 index 0000000..698a4cd Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/tc.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/td.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/td.png new file mode 100644 index 0000000..b835dc2 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/td.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/tf.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/tf.png new file mode 100644 index 0000000..5189a18 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/tf.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/tg.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/tg.png new file mode 100644 index 0000000..028167a Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/tg.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/th.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/th.png new file mode 100644 index 0000000..cd0af74 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/th.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/tj.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/tj.png new file mode 100644 index 0000000..6cb3339 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/tj.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/tk.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/tk.png new file mode 100644 index 0000000..a960307 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/tk.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/tl.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/tl.png new file mode 100644 index 0000000..ba93417 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/tl.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/tm.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/tm.png new file mode 100644 index 0000000..b46f2a2 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/tm.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/tn.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/tn.png new file mode 100644 index 0000000..0d6a976 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/tn.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/to.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/to.png new file mode 100644 index 0000000..ab11e51 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/to.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/tr.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/tr.png new file mode 100644 index 0000000..2b0614c Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/tr.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/tt.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/tt.png new file mode 100644 index 0000000..9b4575f Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/tt.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/tv.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/tv.png new file mode 100644 index 0000000..8d68ead Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/tv.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/tw.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/tw.png new file mode 100644 index 0000000..ec71c10 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/tw.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/tz.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/tz.png new file mode 100644 index 0000000..0c67a2a Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/tz.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ua.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ua.png new file mode 100644 index 0000000..42b2cde Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ua.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ug.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ug.png new file mode 100644 index 0000000..4d040f8 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ug.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/um.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/um.png new file mode 100644 index 0000000..ed2d8d0 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/um.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/us.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/us.png new file mode 100644 index 0000000..4e47eaa Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/us.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/uy.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/uy.png new file mode 100644 index 0000000..7b5670b Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/uy.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/uz.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/uz.png new file mode 100644 index 0000000..97b1a53 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/uz.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/va.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/va.png new file mode 100644 index 0000000..dcdc3a7 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/va.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/vc.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/vc.png new file mode 100644 index 0000000..4c13bc2 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/vc.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ve.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ve.png new file mode 100644 index 0000000..cc80484 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ve.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/vg.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/vg.png new file mode 100644 index 0000000..9cd84e2 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/vg.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/vi.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/vi.png new file mode 100644 index 0000000..e9127a8 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/vi.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/vn.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/vn.png new file mode 100644 index 0000000..cbf65d4 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/vn.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/vu.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/vu.png new file mode 100644 index 0000000..5876456 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/vu.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/wf.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/wf.png new file mode 100644 index 0000000..ffd56d4 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/wf.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ws.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ws.png new file mode 100644 index 0000000..18c5b86 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ws.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/xk.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/xk.png new file mode 100644 index 0000000..883b9ea Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/xk.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/ye.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/ye.png new file mode 100644 index 0000000..c094f80 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/ye.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/yt.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/yt.png new file mode 100644 index 0000000..6a196cb Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/yt.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/za.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/za.png new file mode 100644 index 0000000..110c48d Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/za.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/zm.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/zm.png new file mode 100644 index 0000000..b647058 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/zm.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/flags/zw.png b/app_code/temp_apk/assets/flutter_assets/assets/flags/zw.png new file mode 100644 index 0000000..f502027 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/flags/zw.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/icons/address.png b/app_code/temp_apk/assets/flutter_assets/assets/icons/address.png new file mode 100644 index 0000000..db09fe1 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/icons/address.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/icons/cart.png b/app_code/temp_apk/assets/flutter_assets/assets/icons/cart.png new file mode 100644 index 0000000..6f0d739 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/icons/cart.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/icons/categories.png b/app_code/temp_apk/assets/flutter_assets/assets/icons/categories.png new file mode 100644 index 0000000..8e45c13 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/icons/categories.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/icons/coupons.png b/app_code/temp_apk/assets/flutter_assets/assets/icons/coupons.png new file mode 100644 index 0000000..c29a107 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/icons/coupons.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/icons/delete.png b/app_code/temp_apk/assets/flutter_assets/assets/icons/delete.png new file mode 100644 index 0000000..cb960c0 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/icons/delete.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/icons/favorite.png b/app_code/temp_apk/assets/flutter_assets/assets/icons/favorite.png new file mode 100644 index 0000000..b3b12e2 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/icons/favorite.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/icons/fire.png b/app_code/temp_apk/assets/flutter_assets/assets/icons/fire.png new file mode 100644 index 0000000..41ea59e Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/icons/fire.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/icons/help_center.png b/app_code/temp_apk/assets/flutter_assets/assets/icons/help_center.png new file mode 100644 index 0000000..162dde2 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/icons/help_center.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/icons/home.png b/app_code/temp_apk/assets/flutter_assets/assets/icons/home.png new file mode 100644 index 0000000..806a997 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/icons/home.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/icons/login.png b/app_code/temp_apk/assets/flutter_assets/assets/icons/login.png new file mode 100644 index 0000000..15da809 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/icons/login.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/icons/logout.png b/app_code/temp_apk/assets/flutter_assets/assets/icons/logout.png new file mode 100644 index 0000000..ab050bb Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/icons/logout.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/icons/next.png b/app_code/temp_apk/assets/flutter_assets/assets/icons/next.png new file mode 100644 index 0000000..5755876 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/icons/next.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/icons/notification.png b/app_code/temp_apk/assets/flutter_assets/assets/icons/notification.png new file mode 100644 index 0000000..e70acfa Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/icons/notification.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/icons/orders.png b/app_code/temp_apk/assets/flutter_assets/assets/icons/orders.png new file mode 100644 index 0000000..0ae861d Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/icons/orders.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/icons/profile.png b/app_code/temp_apk/assets/flutter_assets/assets/icons/profile.png new file mode 100644 index 0000000..7590b38 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/icons/profile.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/icons/refund.png b/app_code/temp_apk/assets/flutter_assets/assets/icons/refund.png new file mode 100644 index 0000000..a6ab3a3 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/icons/refund.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/icons/search.png b/app_code/temp_apk/assets/flutter_assets/assets/icons/search.png new file mode 100644 index 0000000..9bf95df Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/icons/search.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/icons/security.png b/app_code/temp_apk/assets/flutter_assets/assets/icons/security.png new file mode 100644 index 0000000..f424f12 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/icons/security.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/icons/setting.png b/app_code/temp_apk/assets/flutter_assets/assets/icons/setting.png new file mode 100644 index 0000000..184d226 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/icons/setting.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/icons/terms_condition.png b/app_code/temp_apk/assets/flutter_assets/assets/icons/terms_condition.png new file mode 100644 index 0000000..1adb40e Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/icons/terms_condition.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/icons/track.png b/app_code/temp_apk/assets/flutter_assets/assets/icons/track.png new file mode 100644 index 0000000..a75424c Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/icons/track.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/icons/wallet.png b/app_code/temp_apk/assets/flutter_assets/assets/icons/wallet.png new file mode 100644 index 0000000..12e8c49 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/icons/wallet.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/images/auth_background.png b/app_code/temp_apk/assets/flutter_assets/assets/images/auth_background.png new file mode 100644 index 0000000..0a81198 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/images/auth_background.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/images/landing_img1.png b/app_code/temp_apk/assets/flutter_assets/assets/images/landing_img1.png new file mode 100644 index 0000000..94dfedb Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/images/landing_img1.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/images/landing_img2.png b/app_code/temp_apk/assets/flutter_assets/assets/images/landing_img2.png new file mode 100644 index 0000000..d619cb9 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/images/landing_img2.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/images/landing_img3.png b/app_code/temp_apk/assets/flutter_assets/assets/images/landing_img3.png new file mode 100644 index 0000000..21d36b6 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/images/landing_img3.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/images/splash_background.png b/app_code/temp_apk/assets/flutter_assets/assets/images/splash_background.png new file mode 100644 index 0000000..a61b878 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/images/splash_background.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/logos/img.png b/app_code/temp_apk/assets/flutter_assets/assets/logos/img.png new file mode 100644 index 0000000..9629e02 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/logos/img.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/logos/img_logo.png b/app_code/temp_apk/assets/flutter_assets/assets/logos/img_logo.png new file mode 100644 index 0000000..1898c02 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/logos/img_logo.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/logos/img_logo2.png b/app_code/temp_apk/assets/flutter_assets/assets/logos/img_logo2.png new file mode 100644 index 0000000..5628825 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/logos/img_logo2.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/logos/logo.png b/app_code/temp_apk/assets/flutter_assets/assets/logos/logo.png new file mode 100644 index 0000000..80f7706 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/logos/logo.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/logos/logo2x2.png b/app_code/temp_apk/assets/flutter_assets/assets/logos/logo2x2.png new file mode 100644 index 0000000..9d822d5 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/logos/logo2x2.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/logos/logo4x4.png b/app_code/temp_apk/assets/flutter_assets/assets/logos/logo4x4.png new file mode 100644 index 0000000..1cbbeb6 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/logos/logo4x4.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/assets/logos/logo_a.png b/app_code/temp_apk/assets/flutter_assets/assets/logos/logo_a.png new file mode 100644 index 0000000..527c009 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/assets/logos/logo_a.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/fonts/MaterialIcons-Regular.otf b/app_code/temp_apk/assets/flutter_assets/fonts/MaterialIcons-Regular.otf new file mode 100644 index 0000000..151f866 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/fonts/MaterialIcons-Regular.otf differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/cupertino_icons/assets/CupertinoIcons.ttf b/app_code/temp_apk/assets/flutter_assets/packages/cupertino_icons/assets/CupertinoIcons.ttf new file mode 100644 index 0000000..d580ce7 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/cupertino_icons/assets/CupertinoIcons.ttf differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ad.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ad.png new file mode 100644 index 0000000..fdc41f6 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ad.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ae.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ae.png new file mode 100644 index 0000000..8e0ae66 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ae.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/af.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/af.png new file mode 100644 index 0000000..bb620b1 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/af.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ag.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ag.png new file mode 100644 index 0000000..3579ff1 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ag.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ai.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ai.png new file mode 100644 index 0000000..1aca2ec Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ai.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/al.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/al.png new file mode 100644 index 0000000..f070896 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/al.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/am.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/am.png new file mode 100644 index 0000000..9dd35f0 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/am.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/an.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/an.png new file mode 100644 index 0000000..cd6b451 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/an.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ao.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ao.png new file mode 100644 index 0000000..197cdc6 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ao.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/aq.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/aq.png new file mode 100644 index 0000000..827282f Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/aq.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ar.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ar.png new file mode 100644 index 0000000..846a2bc Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ar.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/as.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/as.png new file mode 100644 index 0000000..c2af5ea Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/as.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/at.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/at.png new file mode 100644 index 0000000..05dbd1d Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/at.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/au.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/au.png new file mode 100644 index 0000000..7181dc5 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/au.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/aw.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/aw.png new file mode 100644 index 0000000..efe03a9 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/aw.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ax.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ax.png new file mode 100644 index 0000000..c3df4ad Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ax.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/az.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/az.png new file mode 100644 index 0000000..5bc4a0f Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/az.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ba.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ba.png new file mode 100644 index 0000000..09cec0d Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ba.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bb.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bb.png new file mode 100644 index 0000000..ed7731e Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bb.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bd.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bd.png new file mode 100644 index 0000000..c24170c Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bd.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/be.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/be.png new file mode 100644 index 0000000..202c489 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/be.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bf.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bf.png new file mode 100644 index 0000000..9a3d8d1 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bf.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bg.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bg.png new file mode 100644 index 0000000..ab3eb4f Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bg.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bh.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bh.png new file mode 100644 index 0000000..62011b8 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bh.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bi.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bi.png new file mode 100644 index 0000000..f4de108 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bi.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bj.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bj.png new file mode 100644 index 0000000..83c9474 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bj.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bl.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bl.png new file mode 100644 index 0000000..6320925 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bl.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bm.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bm.png new file mode 100644 index 0000000..5e87c6a Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bm.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bn.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bn.png new file mode 100644 index 0000000..1006d68 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bn.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bo.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bo.png new file mode 100644 index 0000000..17d56dc Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bo.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bq.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bq.png new file mode 100644 index 0000000..f545dc8 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bq.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/br.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/br.png new file mode 100644 index 0000000..8b18eb2 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/br.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bs.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bs.png new file mode 100644 index 0000000..6bdc618 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bs.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bt.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bt.png new file mode 100644 index 0000000..013a6a3 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bt.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bv.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bv.png new file mode 100644 index 0000000..b7a42f4 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bv.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bw.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bw.png new file mode 100644 index 0000000..04446c4 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bw.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/by.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/by.png new file mode 100644 index 0000000..5633bdd Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/by.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bz.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bz.png new file mode 100644 index 0000000..0ea4c76 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/bz.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ca.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ca.png new file mode 100644 index 0000000..5c7340a Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ca.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cc.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cc.png new file mode 100644 index 0000000..9191430 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cc.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cd.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cd.png new file mode 100644 index 0000000..7e85a3d Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cd.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cf.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cf.png new file mode 100644 index 0000000..6fdd1dc Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cf.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cg.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cg.png new file mode 100644 index 0000000..79d62cf Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cg.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ch.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ch.png new file mode 100644 index 0000000..031d1f7 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ch.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ci.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ci.png new file mode 100644 index 0000000..97a79e2 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ci.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ck.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ck.png new file mode 100644 index 0000000..8c1d086 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ck.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cl.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cl.png new file mode 100644 index 0000000..2bd971d Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cl.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cm.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cm.png new file mode 100644 index 0000000..fa35a32 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cm.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cn.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cn.png new file mode 100644 index 0000000..ca5a8b3 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cn.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/co.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/co.png new file mode 100644 index 0000000..6fcfd96 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/co.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cr.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cr.png new file mode 100644 index 0000000..d4a25c2 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cr.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cu.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cu.png new file mode 100644 index 0000000..000b773 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cu.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cv.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cv.png new file mode 100644 index 0000000..1684576 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cv.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cw.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cw.png new file mode 100644 index 0000000..aa7b8c8 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cw.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cx.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cx.png new file mode 100644 index 0000000..826b230 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cx.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cy.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cy.png new file mode 100644 index 0000000..39055d7 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cy.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cz.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cz.png new file mode 100644 index 0000000..8c679f2 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/cz.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/de.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/de.png new file mode 100644 index 0000000..f078fdf Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/de.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/dj.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/dj.png new file mode 100644 index 0000000..64ab04e Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/dj.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/dk.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/dk.png new file mode 100644 index 0000000..5f907ce Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/dk.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/dm.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/dm.png new file mode 100644 index 0000000..307e374 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/dm.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/do.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/do.png new file mode 100644 index 0000000..16160a3 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/do.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/dz.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/dz.png new file mode 100644 index 0000000..0de1256 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/dz.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ec.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ec.png new file mode 100644 index 0000000..96d84f7 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ec.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ee.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ee.png new file mode 100644 index 0000000..56aed18 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ee.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/eg.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/eg.png new file mode 100644 index 0000000..a5320a6 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/eg.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/eh.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/eh.png new file mode 100644 index 0000000..24bdb35 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/eh.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/er.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/er.png new file mode 100644 index 0000000..bd47590 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/er.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/es.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/es.png new file mode 100644 index 0000000..23e7141 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/es.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/et.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/et.png new file mode 100644 index 0000000..258e32d Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/et.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/eu.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/eu.png new file mode 100644 index 0000000..0018b6c Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/eu.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/fi.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/fi.png new file mode 100644 index 0000000..7c1f908 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/fi.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/fj.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/fj.png new file mode 100644 index 0000000..6d9a4e1 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/fj.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/fk.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/fk.png new file mode 100644 index 0000000..fc9b5db Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/fk.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/fm.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/fm.png new file mode 100644 index 0000000..8f5b150 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/fm.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/fo.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/fo.png new file mode 100644 index 0000000..6a1e048 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/fo.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/fr.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/fr.png new file mode 100644 index 0000000..6a196cb Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/fr.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ga.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ga.png new file mode 100644 index 0000000..dcade00 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ga.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gb-eng.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gb-eng.png new file mode 100644 index 0000000..b534e62 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gb-eng.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gb-nir.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gb-nir.png new file mode 100644 index 0000000..8a020a8 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gb-nir.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gb-sct.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gb-sct.png new file mode 100644 index 0000000..7f5f28f Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gb-sct.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gb-wls.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gb-wls.png new file mode 100644 index 0000000..9571ac5 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gb-wls.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gb.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gb.png new file mode 100644 index 0000000..23e1574 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gb.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gd.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gd.png new file mode 100644 index 0000000..2c070dd Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gd.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ge.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ge.png new file mode 100644 index 0000000..1cc5204 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ge.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gf.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gf.png new file mode 100644 index 0000000..54c2d5e Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gf.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gg.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gg.png new file mode 100644 index 0000000..e734304 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gg.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gh.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gh.png new file mode 100644 index 0000000..a8ef8c4 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gh.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gi.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gi.png new file mode 100644 index 0000000..ca2b8da Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gi.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gl.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gl.png new file mode 100644 index 0000000..3a8ce02 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gl.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gm.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gm.png new file mode 100644 index 0000000..2a70b15 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gm.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gn.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gn.png new file mode 100644 index 0000000..609fd66 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gn.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gp.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gp.png new file mode 100644 index 0000000..6a196cb Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gp.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gq.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gq.png new file mode 100644 index 0000000..60a82d9 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gq.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gr.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gr.png new file mode 100644 index 0000000..ac2f75c Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gr.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gs.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gs.png new file mode 100644 index 0000000..60d421b Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gs.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gt.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gt.png new file mode 100644 index 0000000..4971a58 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gt.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gu.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gu.png new file mode 100644 index 0000000..cdca8e9 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gu.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gw.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gw.png new file mode 100644 index 0000000..1472f23 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gw.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gy.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gy.png new file mode 100644 index 0000000..36279ec Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/gy.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/hk.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/hk.png new file mode 100644 index 0000000..92123c5 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/hk.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/hm.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/hm.png new file mode 100644 index 0000000..fff75ea Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/hm.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/hn.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/hn.png new file mode 100644 index 0000000..9935964 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/hn.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/hr.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/hr.png new file mode 100644 index 0000000..8396e00 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/hr.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ht.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ht.png new file mode 100644 index 0000000..43e208b Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ht.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/hu.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/hu.png new file mode 100644 index 0000000..d181d5d Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/hu.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/id.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/id.png new file mode 100644 index 0000000..072bd8c Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/id.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ie.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ie.png new file mode 100644 index 0000000..10fbab9 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ie.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/il.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/il.png new file mode 100644 index 0000000..32aba13 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/il.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/im.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/im.png new file mode 100644 index 0000000..f54a464 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/im.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/in.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/in.png new file mode 100644 index 0000000..be3710d Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/in.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/io.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/io.png new file mode 100644 index 0000000..c7eddc7 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/io.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/iq.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/iq.png new file mode 100644 index 0000000..273672a Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/iq.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ir.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ir.png new file mode 100644 index 0000000..e218c83 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ir.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/is.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/is.png new file mode 100644 index 0000000..ff6cb99 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/is.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/it.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/it.png new file mode 100644 index 0000000..3f5e25b Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/it.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/je.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/je.png new file mode 100644 index 0000000..0e26cb9 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/je.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/jm.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/jm.png new file mode 100644 index 0000000..4768ee5 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/jm.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/jo.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/jo.png new file mode 100644 index 0000000..d5b39da Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/jo.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/jp.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/jp.png new file mode 100644 index 0000000..253e485 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/jp.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ke.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ke.png new file mode 100644 index 0000000..3017b3b Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ke.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/kg.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/kg.png new file mode 100644 index 0000000..65111f5 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/kg.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/kh.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/kh.png new file mode 100644 index 0000000..74106c5 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/kh.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ki.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ki.png new file mode 100644 index 0000000..cdbac2f Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ki.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/km.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/km.png new file mode 100644 index 0000000..22d9760 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/km.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/kn.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/kn.png new file mode 100644 index 0000000..be0a586 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/kn.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/kp.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/kp.png new file mode 100644 index 0000000..1d9ca5e Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/kp.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/kr.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/kr.png new file mode 100644 index 0000000..fd9b58d Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/kr.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/kw.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/kw.png new file mode 100644 index 0000000..a939061 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/kw.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ky.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ky.png new file mode 100644 index 0000000..47c5580 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ky.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/kz.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/kz.png new file mode 100644 index 0000000..b3bb7f0 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/kz.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/la.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/la.png new file mode 100644 index 0000000..006e38f Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/la.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/lb.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/lb.png new file mode 100644 index 0000000..a2d62a8 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/lb.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/lc.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/lc.png new file mode 100644 index 0000000..40948b6 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/lc.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/li.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/li.png new file mode 100644 index 0000000..8d73ed8 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/li.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/lk.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/lk.png new file mode 100644 index 0000000..fb62738 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/lk.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/lr.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/lr.png new file mode 100644 index 0000000..b20d7f0 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/lr.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ls.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ls.png new file mode 100644 index 0000000..75d9ce3 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ls.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/lt.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/lt.png new file mode 100644 index 0000000..c8bed37 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/lt.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/lu.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/lu.png new file mode 100644 index 0000000..0937120 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/lu.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/lv.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/lv.png new file mode 100644 index 0000000..5447b3f Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/lv.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ly.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ly.png new file mode 100644 index 0000000..d898e49 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ly.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ma.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ma.png new file mode 100644 index 0000000..a0e0290 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ma.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mc.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mc.png new file mode 100644 index 0000000..f40ca3e Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mc.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/md.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/md.png new file mode 100644 index 0000000..f8408e2 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/md.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/me.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/me.png new file mode 100644 index 0000000..1d56855 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/me.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mf.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mf.png new file mode 100644 index 0000000..6a196cb Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mf.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mg.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mg.png new file mode 100644 index 0000000..21ccba3 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mg.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mh.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mh.png new file mode 100644 index 0000000..e7f88ed Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mh.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mk.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mk.png new file mode 100644 index 0000000..e670919 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mk.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ml.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ml.png new file mode 100644 index 0000000..f0e9990 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ml.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mm.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mm.png new file mode 100644 index 0000000..09363b3 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mm.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mn.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mn.png new file mode 100644 index 0000000..0d30b3e Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mn.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mo.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mo.png new file mode 100644 index 0000000..4a731ce Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mo.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mp.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mp.png new file mode 100644 index 0000000..a7aa3cd Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mp.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mq.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mq.png new file mode 100644 index 0000000..2d396ea Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mq.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mr.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mr.png new file mode 100644 index 0000000..cc1960f Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mr.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ms.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ms.png new file mode 100644 index 0000000..e51480c Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ms.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mt.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mt.png new file mode 100644 index 0000000..18ec071 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mt.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mu.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mu.png new file mode 100644 index 0000000..b416546 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mu.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mv.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mv.png new file mode 100644 index 0000000..a011b78 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mv.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mw.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mw.png new file mode 100644 index 0000000..5821977 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mw.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mx.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mx.png new file mode 100644 index 0000000..db28a24 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mx.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/my.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/my.png new file mode 100644 index 0000000..6fe220e Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/my.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mz.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mz.png new file mode 100644 index 0000000..81c587d Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/mz.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/na.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/na.png new file mode 100644 index 0000000..1a4f709 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/na.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/nc.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/nc.png new file mode 100644 index 0000000..a0ecb85 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/nc.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ne.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ne.png new file mode 100644 index 0000000..fa8859a Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ne.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/nf.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/nf.png new file mode 100644 index 0000000..3c94505 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/nf.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ng.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ng.png new file mode 100644 index 0000000..fd111eb Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ng.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ni.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ni.png new file mode 100644 index 0000000..fa96478 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ni.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/nl.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/nl.png new file mode 100644 index 0000000..f545dc8 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/nl.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/no.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/no.png new file mode 100644 index 0000000..b7a42f4 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/no.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/np.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/np.png new file mode 100644 index 0000000..7f2ffbe Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/np.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/nr.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/nr.png new file mode 100644 index 0000000..abaae23 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/nr.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/nu.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/nu.png new file mode 100644 index 0000000..2aa41ac Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/nu.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/nz.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/nz.png new file mode 100644 index 0000000..c8263c3 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/nz.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/om.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/om.png new file mode 100644 index 0000000..4945850 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/om.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/pa.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/pa.png new file mode 100644 index 0000000..a3e57a5 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/pa.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/pe.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/pe.png new file mode 100644 index 0000000..2bed96a Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/pe.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/pf.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/pf.png new file mode 100644 index 0000000..9bf2ac4 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/pf.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/pg.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/pg.png new file mode 100644 index 0000000..c18cc5c Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/pg.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ph.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ph.png new file mode 100644 index 0000000..6f73a4f Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ph.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/pk.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/pk.png new file mode 100644 index 0000000..b2355db Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/pk.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/pl.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/pl.png new file mode 100644 index 0000000..e335edb Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/pl.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/pm.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/pm.png new file mode 100644 index 0000000..6a196cb Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/pm.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/pn.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/pn.png new file mode 100644 index 0000000..65acfc1 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/pn.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/pr.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/pr.png new file mode 100644 index 0000000..37f3b64 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/pr.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ps.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ps.png new file mode 100644 index 0000000..cac9ec7 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ps.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/pt.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/pt.png new file mode 100644 index 0000000..56379a6 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/pt.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/pw.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/pw.png new file mode 100644 index 0000000..41b95b8 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/pw.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/py.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/py.png new file mode 100644 index 0000000..f9d7cc9 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/py.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/qa.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/qa.png new file mode 100644 index 0000000..93f3eda Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/qa.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/re.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/re.png new file mode 100644 index 0000000..6a196cb Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/re.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ro.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ro.png new file mode 100644 index 0000000..b8c25ce Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ro.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/rs.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/rs.png new file mode 100644 index 0000000..1c93130 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/rs.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ru.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ru.png new file mode 100644 index 0000000..9739ab6 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ru.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/rw.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/rw.png new file mode 100644 index 0000000..c01b9a6 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/rw.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sa.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sa.png new file mode 100644 index 0000000..c1b1f70 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sa.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sb.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sb.png new file mode 100644 index 0000000..ef529e1 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sb.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sc.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sc.png new file mode 100644 index 0000000..a743a48 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sc.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sd.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sd.png new file mode 100644 index 0000000..117ad21 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sd.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/se.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/se.png new file mode 100644 index 0000000..b6fcc62 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/se.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sg.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sg.png new file mode 100644 index 0000000..65a0422 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sg.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sh.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sh.png new file mode 100644 index 0000000..f77da1f Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sh.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/si.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/si.png new file mode 100644 index 0000000..a837d2c Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/si.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sj.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sj.png new file mode 100644 index 0000000..b7a42f4 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sj.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sk.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sk.png new file mode 100644 index 0000000..5ed1348 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sk.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sl.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sl.png new file mode 100644 index 0000000..4f8d54e Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sl.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sm.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sm.png new file mode 100644 index 0000000..7ce4715 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sm.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sn.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sn.png new file mode 100644 index 0000000..719c1ef Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sn.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/so.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/so.png new file mode 100644 index 0000000..6e784b1 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/so.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sr.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sr.png new file mode 100644 index 0000000..9a054f0 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sr.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ss.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ss.png new file mode 100644 index 0000000..5833883 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ss.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/st.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/st.png new file mode 100644 index 0000000..133edbc Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/st.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sv.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sv.png new file mode 100644 index 0000000..acd4a36 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sv.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sx.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sx.png new file mode 100644 index 0000000..3e347b0 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sx.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sy.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sy.png new file mode 100644 index 0000000..e9f9335 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sy.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sz.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sz.png new file mode 100644 index 0000000..5b413eb Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/sz.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tc.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tc.png new file mode 100644 index 0000000..698a4cd Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tc.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/td.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/td.png new file mode 100644 index 0000000..b835dc2 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/td.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tf.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tf.png new file mode 100644 index 0000000..5189a18 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tf.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tg.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tg.png new file mode 100644 index 0000000..028167a Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tg.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/th.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/th.png new file mode 100644 index 0000000..cd0af74 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/th.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tj.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tj.png new file mode 100644 index 0000000..6cb3339 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tj.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tk.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tk.png new file mode 100644 index 0000000..a960307 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tk.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tl.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tl.png new file mode 100644 index 0000000..ba93417 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tl.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tm.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tm.png new file mode 100644 index 0000000..b46f2a2 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tm.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tn.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tn.png new file mode 100644 index 0000000..0d6a976 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tn.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/to.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/to.png new file mode 100644 index 0000000..ab11e51 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/to.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tr.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tr.png new file mode 100644 index 0000000..2b0614c Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tr.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tt.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tt.png new file mode 100644 index 0000000..9b4575f Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tt.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tv.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tv.png new file mode 100644 index 0000000..8d68ead Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tv.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tw.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tw.png new file mode 100644 index 0000000..ec71c10 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tw.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tz.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tz.png new file mode 100644 index 0000000..0c67a2a Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/tz.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ua.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ua.png new file mode 100644 index 0000000..42b2cde Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ua.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ug.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ug.png new file mode 100644 index 0000000..4d040f8 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ug.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/um.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/um.png new file mode 100644 index 0000000..ed2d8d0 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/um.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/us.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/us.png new file mode 100644 index 0000000..4e47eaa Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/us.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/uy.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/uy.png new file mode 100644 index 0000000..7b5670b Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/uy.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/uz.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/uz.png new file mode 100644 index 0000000..97b1a53 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/uz.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/va.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/va.png new file mode 100644 index 0000000..dcdc3a7 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/va.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/vc.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/vc.png new file mode 100644 index 0000000..4c13bc2 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/vc.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ve.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ve.png new file mode 100644 index 0000000..cc80484 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ve.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/vg.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/vg.png new file mode 100644 index 0000000..9cd84e2 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/vg.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/vi.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/vi.png new file mode 100644 index 0000000..e9127a8 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/vi.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/vn.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/vn.png new file mode 100644 index 0000000..cbf65d4 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/vn.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/vu.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/vu.png new file mode 100644 index 0000000..5876456 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/vu.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/wf.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/wf.png new file mode 100644 index 0000000..ffd56d4 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/wf.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ws.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ws.png new file mode 100644 index 0000000..18c5b86 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ws.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/xk.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/xk.png new file mode 100644 index 0000000..883b9ea Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/xk.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ye.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ye.png new file mode 100644 index 0000000..c094f80 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/ye.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/yt.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/yt.png new file mode 100644 index 0000000..6a196cb Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/yt.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/za.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/za.png new file mode 100644 index 0000000..110c48d Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/za.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/zm.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/zm.png new file mode 100644 index 0000000..b647058 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/zm.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/zw.png b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/zw.png new file mode 100644 index 0000000..f502027 Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/packages/intl_phone_number_input/assets/flags/zw.png differ diff --git a/app_code/temp_apk/assets/flutter_assets/packages/toast/assets/toastify.css b/app_code/temp_apk/assets/flutter_assets/packages/toast/assets/toastify.css new file mode 100644 index 0000000..2d0471e --- /dev/null +++ b/app_code/temp_apk/assets/flutter_assets/packages/toast/assets/toastify.css @@ -0,0 +1,14 @@ +/** + * Minified by jsDelivr using clean-css v4.2.3. + * Original file: /npm/toastify-js@1.9.3/src/toastify.css + * + * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files + */ +/*! + * Toastify js 1.9.3 + * https://github.com/apvarun/toastify-js + * @license MIT licensed + * + * Copyright (C) 2018 Varun A P + */ +.toastify{padding:12px 20px;color:#fff;display:inline-block;box-shadow:0 3px 6px -1px rgba(0,0,0,.12),0 10px 36px -4px rgba(77,96,232,.3);background:-webkit-linear-gradient(315deg,#73a5ff,#5477f5);background:linear-gradient(135deg,#73a5ff,#5477f5);position:fixed;opacity:0;transition:all .4s cubic-bezier(.215,.61,.355,1);border-radius:2px;cursor:pointer;text-decoration:none;max-width:calc(50% - 20px);z-index:2147483647}.toastify.on{opacity:1}.toast-close{opacity:.4;padding:0 5px}.toastify-right{right:15px}.toastify-left{left:15px}.toastify-top{top:-150px}.toastify-bottom{bottom:-150px}.toastify-rounded{border-radius:25px}.toastify-avatar{width:1.5em;height:1.5em;margin:-7px 5px;border-radius:2px}.toastify-center{margin-left:auto;margin-right:auto;left:0;right:0;max-width:fit-content;max-width:-moz-fit-content}@media only screen and (max-width:360px){.toastify-left,.toastify-right{margin-left:auto;margin-right:auto;left:0;right:0;max-width:fit-content}} \ No newline at end of file diff --git a/app_code/temp_apk/assets/flutter_assets/packages/toast/assets/toastify.js b/app_code/temp_apk/assets/flutter_assets/packages/toast/assets/toastify.js new file mode 100644 index 0000000..acdff00 --- /dev/null +++ b/app_code/temp_apk/assets/flutter_assets/packages/toast/assets/toastify.js @@ -0,0 +1,14 @@ +/** + * Minified by jsDelivr using Terser v5.3.0. + * Original file: /npm/toastify-js@1.9.3/src/toastify.js + * + * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files + */ +/*! + * Toastify js 1.9.3 + * https://github.com/apvarun/toastify-js + * @license MIT licensed + * + * Copyright (C) 2018 Varun A P + */ +!function(t,o){"object"==typeof module&&module.exports?module.exports=o():t.Toastify=o()}(this,(function(t){var o=function(t){return new o.lib.init(t)};function i(t,o){return o.offset[t]?isNaN(o.offset[t])?o.offset[t]:o.offset[t]+"px":"0px"}function s(t,o){return!(!t||"string"!=typeof o)&&!!(t.className&&t.className.trim().split(/\s+/gi).indexOf(o)>-1)}return o.lib=o.prototype={toastify:"1.9.3",constructor:o,init:function(t){return t||(t={}),this.options={},this.toastElement=null,this.options.text=t.text||"Hi there!",this.options.node=t.node,this.options.duration=0===t.duration?0:t.duration||3e3,this.options.selector=t.selector,this.options.callback=t.callback||function(){},this.options.destination=t.destination,this.options.newWindow=t.newWindow||!1,this.options.close=t.close||!1,this.options.gravity="bottom"===t.gravity?"toastify-bottom":"toastify-top",this.options.positionLeft=t.positionLeft||!1,this.options.position=t.position||"",this.options.backgroundColor=t.backgroundColor,this.options.avatar=t.avatar||"",this.options.className=t.className||"",this.options.stopOnFocus=void 0===t.stopOnFocus||t.stopOnFocus,this.options.onClick=t.onClick,this.options.offset=t.offset||{x:0,y:0},this},buildToast:function(){if(!this.options)throw"Toastify is not initialized";var t=document.createElement("div");if(t.className="toastify on "+this.options.className,this.options.position?t.className+=" toastify-"+this.options.position:!0===this.options.positionLeft?(t.className+=" toastify-left",console.warn("Property `positionLeft` will be depreciated in further versions. Please use `position` instead.")):t.className+=" toastify-right",t.className+=" "+this.options.gravity,this.options.backgroundColor&&(t.style.background=this.options.backgroundColor),this.options.node&&this.options.node.nodeType===Node.ELEMENT_NODE)t.appendChild(this.options.node);else if(t.innerHTML=this.options.text,""!==this.options.avatar){var o=document.createElement("img");o.src=this.options.avatar,o.className="toastify-avatar","left"==this.options.position||!0===this.options.positionLeft?t.appendChild(o):t.insertAdjacentElement("afterbegin",o)}if(!0===this.options.close){var s=document.createElement("span");s.innerHTML="✖",s.className="toast-close",s.addEventListener("click",function(t){t.stopPropagation(),this.removeElement(this.toastElement),window.clearTimeout(this.toastElement.timeOutValue)}.bind(this));var n=window.innerWidth>0?window.innerWidth:screen.width;("left"==this.options.position||!0===this.options.positionLeft)&&n>360?t.insertAdjacentElement("afterbegin",s):t.appendChild(s)}if(this.options.stopOnFocus&&this.options.duration>0){var e=this;t.addEventListener("mouseover",(function(o){window.clearTimeout(t.timeOutValue)})),t.addEventListener("mouseleave",(function(){t.timeOutValue=window.setTimeout((function(){e.removeElement(t)}),e.options.duration)}))}if(void 0!==this.options.destination&&t.addEventListener("click",function(t){t.stopPropagation(),!0===this.options.newWindow?window.open(this.options.destination,"_blank"):window.location=this.options.destination}.bind(this)),"function"==typeof this.options.onClick&&void 0===this.options.destination&&t.addEventListener("click",function(t){t.stopPropagation(),this.options.onClick()}.bind(this)),"object"==typeof this.options.offset){var a=i("x",this.options),p=i("y",this.options),r="left"==this.options.position?a:"-"+a,l="toastify-top"==this.options.gravity?p:"-"+p;t.style.transform="translate("+r+","+l+")"}return t},showToast:function(){var t;if(this.toastElement=this.buildToast(),!(t=void 0===this.options.selector?document.body:document.getElementById(this.options.selector)))throw"Root element is not defined";return t.insertBefore(this.toastElement,t.firstChild),o.reposition(),this.options.duration>0&&(this.toastElement.timeOutValue=window.setTimeout(function(){this.removeElement(this.toastElement)}.bind(this),this.options.duration)),this},hideToast:function(){this.toastElement.timeOutValue&&clearTimeout(this.toastElement.timeOutValue),this.removeElement(this.toastElement)},removeElement:function(t){t.className=t.className.replace(" on",""),window.setTimeout(function(){this.options.node&&this.options.node.parentNode&&this.options.node.parentNode.removeChild(this.options.node),t.parentNode&&t.parentNode.removeChild(t),this.options.callback.call(t),o.reposition()}.bind(this),400)}},o.reposition=function(){for(var t,o={top:15,bottom:15},i={top:15,bottom:15},n={top:15,bottom:15},e=document.getElementsByClassName("toastify"),a=0;a0?window.innerWidth:screen.width)<=360?(e[a].style[t]=n[t]+"px",n[t]+=p+15):!0===s(e[a],"toastify-left")?(e[a].style[t]=o[t]+"px",o[t]+=p+15):(e[a].style[t]=i[t]+"px",i[t]+=p+15)}return this},o.lib.init.prototype=o.lib,o})); \ No newline at end of file diff --git a/app_code/temp_apk/assets/flutter_assets/shaders/ink_sparkle.frag b/app_code/temp_apk/assets/flutter_assets/shaders/ink_sparkle.frag new file mode 100644 index 0000000..5c91a6c Binary files /dev/null and b/app_code/temp_apk/assets/flutter_assets/shaders/ink_sparkle.frag differ diff --git a/app_code/temp_apk/classes.dex b/app_code/temp_apk/classes.dex new file mode 100644 index 0000000..c57d6ce Binary files /dev/null and b/app_code/temp_apk/classes.dex differ diff --git a/app_code/temp_apk/classes2.dex b/app_code/temp_apk/classes2.dex new file mode 100644 index 0000000..d581df6 Binary files /dev/null and b/app_code/temp_apk/classes2.dex differ diff --git a/app_code/temp_apk/kotlin-tooling-metadata.json b/app_code/temp_apk/kotlin-tooling-metadata.json new file mode 100644 index 0000000..98022fe --- /dev/null +++ b/app_code/temp_apk/kotlin-tooling-metadata.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": "1.1.0", + "buildSystem": "Gradle", + "buildSystemVersion": "8.13", + "buildPlugin": "org.jetbrains.kotlin.gradle.plugin.KotlinAndroidPluginWrapper", + "buildPluginVersion": "2.2.20", + "projectSettings": { + "isHmppEnabled": true, + "isCompatibilityMetadataVariantEnabled": false, + "isKPMEnabled": false + }, + "projectTargets": [ + { + "target": "org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget", + "platformType": "androidJvm", + "extras": { + "android": { + "sourceCompatibility": "1.8", + "targetCompatibility": "1.8" + } + } + } + ] +} \ No newline at end of file diff --git a/app_code/temp_apk/kotlin/annotation/annotation.kotlin_builtins b/app_code/temp_apk/kotlin/annotation/annotation.kotlin_builtins new file mode 100644 index 0000000..b910c9d Binary files /dev/null and b/app_code/temp_apk/kotlin/annotation/annotation.kotlin_builtins differ diff --git a/app_code/temp_apk/kotlin/collections/collections.kotlin_builtins b/app_code/temp_apk/kotlin/collections/collections.kotlin_builtins new file mode 100644 index 0000000..0936395 Binary files /dev/null and b/app_code/temp_apk/kotlin/collections/collections.kotlin_builtins differ diff --git a/app_code/temp_apk/kotlin/concurrent/atomics/atomics.kotlin_builtins b/app_code/temp_apk/kotlin/concurrent/atomics/atomics.kotlin_builtins new file mode 100644 index 0000000..03d3ed2 Binary files /dev/null and b/app_code/temp_apk/kotlin/concurrent/atomics/atomics.kotlin_builtins differ diff --git a/app_code/temp_apk/kotlin/coroutines/coroutines.kotlin_builtins b/app_code/temp_apk/kotlin/coroutines/coroutines.kotlin_builtins new file mode 100644 index 0000000..f18d190 Binary files /dev/null and b/app_code/temp_apk/kotlin/coroutines/coroutines.kotlin_builtins differ diff --git a/app_code/temp_apk/kotlin/internal/internal.kotlin_builtins b/app_code/temp_apk/kotlin/internal/internal.kotlin_builtins new file mode 100644 index 0000000..531f730 Binary files /dev/null and b/app_code/temp_apk/kotlin/internal/internal.kotlin_builtins differ diff --git a/app_code/temp_apk/kotlin/kotlin.kotlin_builtins b/app_code/temp_apk/kotlin/kotlin.kotlin_builtins new file mode 100644 index 0000000..82790cc Binary files /dev/null and b/app_code/temp_apk/kotlin/kotlin.kotlin_builtins differ diff --git a/app_code/temp_apk/kotlin/ranges/ranges.kotlin_builtins b/app_code/temp_apk/kotlin/ranges/ranges.kotlin_builtins new file mode 100644 index 0000000..7b6c454 Binary files /dev/null and b/app_code/temp_apk/kotlin/ranges/ranges.kotlin_builtins differ diff --git a/app_code/temp_apk/kotlin/reflect/reflect.kotlin_builtins b/app_code/temp_apk/kotlin/reflect/reflect.kotlin_builtins new file mode 100644 index 0000000..df8c199 Binary files /dev/null and b/app_code/temp_apk/kotlin/reflect/reflect.kotlin_builtins differ diff --git a/app_code/temp_apk/lib/arm64-v8a/libapp.so b/app_code/temp_apk/lib/arm64-v8a/libapp.so new file mode 100644 index 0000000..b75f623 Binary files /dev/null and b/app_code/temp_apk/lib/arm64-v8a/libapp.so differ diff --git a/app_code/temp_apk/lib/arm64-v8a/libdatastore_shared_counter.so b/app_code/temp_apk/lib/arm64-v8a/libdatastore_shared_counter.so new file mode 100644 index 0000000..6405638 Binary files /dev/null and b/app_code/temp_apk/lib/arm64-v8a/libdatastore_shared_counter.so differ diff --git a/app_code/temp_apk/lib/arm64-v8a/libflutter.so b/app_code/temp_apk/lib/arm64-v8a/libflutter.so new file mode 100644 index 0000000..f582531 Binary files /dev/null and b/app_code/temp_apk/lib/arm64-v8a/libflutter.so differ diff --git a/app_code/temp_apk/lib/armeabi-v7a/libapp.so b/app_code/temp_apk/lib/armeabi-v7a/libapp.so new file mode 100644 index 0000000..63dedad Binary files /dev/null and b/app_code/temp_apk/lib/armeabi-v7a/libapp.so differ diff --git a/app_code/temp_apk/lib/armeabi-v7a/libdatastore_shared_counter.so b/app_code/temp_apk/lib/armeabi-v7a/libdatastore_shared_counter.so new file mode 100644 index 0000000..1d1833c Binary files /dev/null and b/app_code/temp_apk/lib/armeabi-v7a/libdatastore_shared_counter.so differ diff --git a/app_code/temp_apk/lib/armeabi-v7a/libflutter.so b/app_code/temp_apk/lib/armeabi-v7a/libflutter.so new file mode 100644 index 0000000..41f76b8 Binary files /dev/null and b/app_code/temp_apk/lib/armeabi-v7a/libflutter.so differ diff --git a/app_code/temp_apk/lib/x86_64/libapp.so b/app_code/temp_apk/lib/x86_64/libapp.so new file mode 100644 index 0000000..1858a28 Binary files /dev/null and b/app_code/temp_apk/lib/x86_64/libapp.so differ diff --git a/app_code/temp_apk/lib/x86_64/libdatastore_shared_counter.so b/app_code/temp_apk/lib/x86_64/libdatastore_shared_counter.so new file mode 100644 index 0000000..7490ad3 Binary files /dev/null and b/app_code/temp_apk/lib/x86_64/libdatastore_shared_counter.so differ diff --git a/app_code/temp_apk/lib/x86_64/libflutter.so b/app_code/temp_apk/lib/x86_64/libflutter.so new file mode 100644 index 0000000..aec190d Binary files /dev/null and b/app_code/temp_apk/lib/x86_64/libflutter.so differ diff --git a/app_code/temp_apk/res/-B.png b/app_code/temp_apk/res/-B.png new file mode 100644 index 0000000..4902520 Binary files /dev/null and b/app_code/temp_apk/res/-B.png differ diff --git a/app_code/temp_apk/res/-N.png b/app_code/temp_apk/res/-N.png new file mode 100644 index 0000000..6c8f6a4 Binary files /dev/null and b/app_code/temp_apk/res/-N.png differ diff --git a/app_code/temp_apk/res/0E.xml b/app_code/temp_apk/res/0E.xml new file mode 100644 index 0000000..e67d020 Binary files /dev/null and b/app_code/temp_apk/res/0E.xml differ diff --git a/app_code/temp_apk/res/0K.xml b/app_code/temp_apk/res/0K.xml new file mode 100644 index 0000000..064a532 Binary files /dev/null and b/app_code/temp_apk/res/0K.xml differ diff --git a/app_code/temp_apk/res/0M.xml b/app_code/temp_apk/res/0M.xml new file mode 100644 index 0000000..193b180 Binary files /dev/null and b/app_code/temp_apk/res/0M.xml differ diff --git a/app_code/temp_apk/res/0S.xml b/app_code/temp_apk/res/0S.xml new file mode 100644 index 0000000..0973411 Binary files /dev/null and b/app_code/temp_apk/res/0S.xml differ diff --git a/app_code/temp_apk/res/0Z.png b/app_code/temp_apk/res/0Z.png new file mode 100644 index 0000000..fb766fc Binary files /dev/null and b/app_code/temp_apk/res/0Z.png differ diff --git a/app_code/temp_apk/res/0c.9.png b/app_code/temp_apk/res/0c.9.png new file mode 100644 index 0000000..37d45ee Binary files /dev/null and b/app_code/temp_apk/res/0c.9.png differ diff --git a/app_code/temp_apk/res/0x.9.png b/app_code/temp_apk/res/0x.9.png new file mode 100644 index 0000000..ca8fb5e Binary files /dev/null and b/app_code/temp_apk/res/0x.9.png differ diff --git a/app_code/temp_apk/res/1I.9.png b/app_code/temp_apk/res/1I.9.png new file mode 100644 index 0000000..b3c03ab Binary files /dev/null and b/app_code/temp_apk/res/1I.9.png differ diff --git a/app_code/temp_apk/res/1J.9.png b/app_code/temp_apk/res/1J.9.png new file mode 100644 index 0000000..0f29cab Binary files /dev/null and b/app_code/temp_apk/res/1J.9.png differ diff --git a/app_code/temp_apk/res/1e.9.png b/app_code/temp_apk/res/1e.9.png new file mode 100644 index 0000000..8d47402 Binary files /dev/null and b/app_code/temp_apk/res/1e.9.png differ diff --git a/app_code/temp_apk/res/1x.xml b/app_code/temp_apk/res/1x.xml new file mode 100644 index 0000000..f82b57a Binary files /dev/null and b/app_code/temp_apk/res/1x.xml differ diff --git a/app_code/temp_apk/res/27.xml b/app_code/temp_apk/res/27.xml new file mode 100644 index 0000000..0223f74 Binary files /dev/null and b/app_code/temp_apk/res/27.xml differ diff --git a/app_code/temp_apk/res/2K.9.png b/app_code/temp_apk/res/2K.9.png new file mode 100644 index 0000000..a36a60d Binary files /dev/null and b/app_code/temp_apk/res/2K.9.png differ diff --git a/app_code/temp_apk/res/2P.png b/app_code/temp_apk/res/2P.png new file mode 100644 index 0000000..9b67079 Binary files /dev/null and b/app_code/temp_apk/res/2P.png differ diff --git a/app_code/temp_apk/res/2d.png b/app_code/temp_apk/res/2d.png new file mode 100644 index 0000000..9280f82 Binary files /dev/null and b/app_code/temp_apk/res/2d.png differ diff --git a/app_code/temp_apk/res/2f.xml b/app_code/temp_apk/res/2f.xml new file mode 100644 index 0000000..5ae4ef7 Binary files /dev/null and b/app_code/temp_apk/res/2f.xml differ diff --git a/app_code/temp_apk/res/2j.xml b/app_code/temp_apk/res/2j.xml new file mode 100644 index 0000000..58da521 Binary files /dev/null and b/app_code/temp_apk/res/2j.xml differ diff --git a/app_code/temp_apk/res/33.9.png b/app_code/temp_apk/res/33.9.png new file mode 100644 index 0000000..7825f73 Binary files /dev/null and b/app_code/temp_apk/res/33.9.png differ diff --git a/app_code/temp_apk/res/3A.xml b/app_code/temp_apk/res/3A.xml new file mode 100644 index 0000000..2c1ef73 Binary files /dev/null and b/app_code/temp_apk/res/3A.xml differ diff --git a/app_code/temp_apk/res/3W.xml b/app_code/temp_apk/res/3W.xml new file mode 100644 index 0000000..4f4fb7d Binary files /dev/null and b/app_code/temp_apk/res/3W.xml differ diff --git a/app_code/temp_apk/res/3u.9.png b/app_code/temp_apk/res/3u.9.png new file mode 100644 index 0000000..86c0117 Binary files /dev/null and b/app_code/temp_apk/res/3u.9.png differ diff --git a/app_code/temp_apk/res/42.9.png b/app_code/temp_apk/res/42.9.png new file mode 100644 index 0000000..d1bffd0 Binary files /dev/null and b/app_code/temp_apk/res/42.9.png differ diff --git a/app_code/temp_apk/res/46.xml b/app_code/temp_apk/res/46.xml new file mode 100644 index 0000000..57f2c98 Binary files /dev/null and b/app_code/temp_apk/res/46.xml differ diff --git a/app_code/temp_apk/res/49.png b/app_code/temp_apk/res/49.png new file mode 100644 index 0000000..6178c45 Binary files /dev/null and b/app_code/temp_apk/res/49.png differ diff --git a/app_code/temp_apk/res/4B.xml b/app_code/temp_apk/res/4B.xml new file mode 100644 index 0000000..a050f2f Binary files /dev/null and b/app_code/temp_apk/res/4B.xml differ diff --git a/app_code/temp_apk/res/4F.xml b/app_code/temp_apk/res/4F.xml new file mode 100644 index 0000000..1b0fbd4 Binary files /dev/null and b/app_code/temp_apk/res/4F.xml differ diff --git a/app_code/temp_apk/res/4_.xml b/app_code/temp_apk/res/4_.xml new file mode 100644 index 0000000..ee1c5f6 Binary files /dev/null and b/app_code/temp_apk/res/4_.xml differ diff --git a/app_code/temp_apk/res/4k.png b/app_code/temp_apk/res/4k.png new file mode 100644 index 0000000..d8d6d7f Binary files /dev/null and b/app_code/temp_apk/res/4k.png differ diff --git a/app_code/temp_apk/res/4u.xml b/app_code/temp_apk/res/4u.xml new file mode 100644 index 0000000..a3e2269 Binary files /dev/null and b/app_code/temp_apk/res/4u.xml differ diff --git a/app_code/temp_apk/res/4z.xml b/app_code/temp_apk/res/4z.xml new file mode 100644 index 0000000..568861a Binary files /dev/null and b/app_code/temp_apk/res/4z.xml differ diff --git a/app_code/temp_apk/res/5D.9.png b/app_code/temp_apk/res/5D.9.png new file mode 100644 index 0000000..2d873b2 Binary files /dev/null and b/app_code/temp_apk/res/5D.9.png differ diff --git a/app_code/temp_apk/res/5P.png b/app_code/temp_apk/res/5P.png new file mode 100644 index 0000000..f9c404c Binary files /dev/null and b/app_code/temp_apk/res/5P.png differ diff --git a/app_code/temp_apk/res/5T.xml b/app_code/temp_apk/res/5T.xml new file mode 100644 index 0000000..ad05750 Binary files /dev/null and b/app_code/temp_apk/res/5T.xml differ diff --git a/app_code/temp_apk/res/5U.png b/app_code/temp_apk/res/5U.png new file mode 100644 index 0000000..183c9ac Binary files /dev/null and b/app_code/temp_apk/res/5U.png differ diff --git a/app_code/temp_apk/res/5c.png b/app_code/temp_apk/res/5c.png new file mode 100644 index 0000000..9128e62 Binary files /dev/null and b/app_code/temp_apk/res/5c.png differ diff --git a/app_code/temp_apk/res/5v.png b/app_code/temp_apk/res/5v.png new file mode 100644 index 0000000..4ab76bb Binary files /dev/null and b/app_code/temp_apk/res/5v.png differ diff --git a/app_code/temp_apk/res/5z.xml b/app_code/temp_apk/res/5z.xml new file mode 100644 index 0000000..1cc928c Binary files /dev/null and b/app_code/temp_apk/res/5z.xml differ diff --git a/app_code/temp_apk/res/62.9.png b/app_code/temp_apk/res/62.9.png new file mode 100644 index 0000000..d316b36 Binary files /dev/null and b/app_code/temp_apk/res/62.9.png differ diff --git a/app_code/temp_apk/res/65.9.png b/app_code/temp_apk/res/65.9.png new file mode 100644 index 0000000..fe7cc75 Binary files /dev/null and b/app_code/temp_apk/res/65.9.png differ diff --git a/app_code/temp_apk/res/6P.png b/app_code/temp_apk/res/6P.png new file mode 100644 index 0000000..7de879b Binary files /dev/null and b/app_code/temp_apk/res/6P.png differ diff --git a/app_code/temp_apk/res/6Q.xml b/app_code/temp_apk/res/6Q.xml new file mode 100644 index 0000000..07f4d34 Binary files /dev/null and b/app_code/temp_apk/res/6Q.xml differ diff --git a/app_code/temp_apk/res/6d.png b/app_code/temp_apk/res/6d.png new file mode 100644 index 0000000..ad960ce Binary files /dev/null and b/app_code/temp_apk/res/6d.png differ diff --git a/app_code/temp_apk/res/6t.png b/app_code/temp_apk/res/6t.png new file mode 100644 index 0000000..9911008 Binary files /dev/null and b/app_code/temp_apk/res/6t.png differ diff --git a/app_code/temp_apk/res/71.png b/app_code/temp_apk/res/71.png new file mode 100644 index 0000000..41f7240 Binary files /dev/null and b/app_code/temp_apk/res/71.png differ diff --git a/app_code/temp_apk/res/7C.9.png b/app_code/temp_apk/res/7C.9.png new file mode 100644 index 0000000..4490bc3 Binary files /dev/null and b/app_code/temp_apk/res/7C.9.png differ diff --git a/app_code/temp_apk/res/7G.xml b/app_code/temp_apk/res/7G.xml new file mode 100644 index 0000000..f733e2a Binary files /dev/null and b/app_code/temp_apk/res/7G.xml differ diff --git a/app_code/temp_apk/res/7H.xml b/app_code/temp_apk/res/7H.xml new file mode 100644 index 0000000..aacb2ae Binary files /dev/null and b/app_code/temp_apk/res/7H.xml differ diff --git a/app_code/temp_apk/res/7I.9.png b/app_code/temp_apk/res/7I.9.png new file mode 100644 index 0000000..7448268 Binary files /dev/null and b/app_code/temp_apk/res/7I.9.png differ diff --git a/app_code/temp_apk/res/7N.xml b/app_code/temp_apk/res/7N.xml new file mode 100644 index 0000000..edfe214 Binary files /dev/null and b/app_code/temp_apk/res/7N.xml differ diff --git a/app_code/temp_apk/res/7V.png b/app_code/temp_apk/res/7V.png new file mode 100644 index 0000000..99a723b Binary files /dev/null and b/app_code/temp_apk/res/7V.png differ diff --git a/app_code/temp_apk/res/7_.9.png b/app_code/temp_apk/res/7_.9.png new file mode 100644 index 0000000..ff52bf7 Binary files /dev/null and b/app_code/temp_apk/res/7_.9.png differ diff --git a/app_code/temp_apk/res/7i.png b/app_code/temp_apk/res/7i.png new file mode 100644 index 0000000..9218981 Binary files /dev/null and b/app_code/temp_apk/res/7i.png differ diff --git a/app_code/temp_apk/res/7m.png b/app_code/temp_apk/res/7m.png new file mode 100644 index 0000000..7d87965 Binary files /dev/null and b/app_code/temp_apk/res/7m.png differ diff --git a/app_code/temp_apk/res/7o.9.png b/app_code/temp_apk/res/7o.9.png new file mode 100644 index 0000000..9b822f2 Binary files /dev/null and b/app_code/temp_apk/res/7o.9.png differ diff --git a/app_code/temp_apk/res/80.xml b/app_code/temp_apk/res/80.xml new file mode 100644 index 0000000..5b14a95 Binary files /dev/null and b/app_code/temp_apk/res/80.xml differ diff --git a/app_code/temp_apk/res/8G.xml b/app_code/temp_apk/res/8G.xml new file mode 100644 index 0000000..003b053 Binary files /dev/null and b/app_code/temp_apk/res/8G.xml differ diff --git a/app_code/temp_apk/res/8c.png b/app_code/temp_apk/res/8c.png new file mode 100644 index 0000000..b111bec Binary files /dev/null and b/app_code/temp_apk/res/8c.png differ diff --git a/app_code/temp_apk/res/8h.9.png b/app_code/temp_apk/res/8h.9.png new file mode 100644 index 0000000..836dbf4 Binary files /dev/null and b/app_code/temp_apk/res/8h.9.png differ diff --git a/app_code/temp_apk/res/8h.png b/app_code/temp_apk/res/8h.png new file mode 100644 index 0000000..c11cb2e Binary files /dev/null and b/app_code/temp_apk/res/8h.png differ diff --git a/app_code/temp_apk/res/8t.xml b/app_code/temp_apk/res/8t.xml new file mode 100644 index 0000000..870ecfe Binary files /dev/null and b/app_code/temp_apk/res/8t.xml differ diff --git a/app_code/temp_apk/res/9P.xml b/app_code/temp_apk/res/9P.xml new file mode 100644 index 0000000..7be63ec Binary files /dev/null and b/app_code/temp_apk/res/9P.xml differ diff --git a/app_code/temp_apk/res/9T.xml b/app_code/temp_apk/res/9T.xml new file mode 100644 index 0000000..a22d529 Binary files /dev/null and b/app_code/temp_apk/res/9T.xml differ diff --git a/app_code/temp_apk/res/9T1.xml b/app_code/temp_apk/res/9T1.xml new file mode 100644 index 0000000..14cade5 Binary files /dev/null and b/app_code/temp_apk/res/9T1.xml differ diff --git a/app_code/temp_apk/res/9T2.xml b/app_code/temp_apk/res/9T2.xml new file mode 100644 index 0000000..f90426c Binary files /dev/null and b/app_code/temp_apk/res/9T2.xml differ diff --git a/app_code/temp_apk/res/9V.xml b/app_code/temp_apk/res/9V.xml new file mode 100644 index 0000000..6fc42a5 Binary files /dev/null and b/app_code/temp_apk/res/9V.xml differ diff --git a/app_code/temp_apk/res/9X.9.png b/app_code/temp_apk/res/9X.9.png new file mode 100644 index 0000000..b46eab6 Binary files /dev/null and b/app_code/temp_apk/res/9X.9.png differ diff --git a/app_code/temp_apk/res/9m.xml b/app_code/temp_apk/res/9m.xml new file mode 100644 index 0000000..b0498a4 Binary files /dev/null and b/app_code/temp_apk/res/9m.xml differ diff --git a/app_code/temp_apk/res/9n.9.png b/app_code/temp_apk/res/9n.9.png new file mode 100644 index 0000000..18bd826 Binary files /dev/null and b/app_code/temp_apk/res/9n.9.png differ diff --git a/app_code/temp_apk/res/9w.png b/app_code/temp_apk/res/9w.png new file mode 100644 index 0000000..6bbdc9c Binary files /dev/null and b/app_code/temp_apk/res/9w.png differ diff --git a/app_code/temp_apk/res/9z.png b/app_code/temp_apk/res/9z.png new file mode 100644 index 0000000..8c82ec3 Binary files /dev/null and b/app_code/temp_apk/res/9z.png differ diff --git a/app_code/temp_apk/res/9z.xml b/app_code/temp_apk/res/9z.xml new file mode 100644 index 0000000..f98ea7e Binary files /dev/null and b/app_code/temp_apk/res/9z.xml differ diff --git a/app_code/temp_apk/res/A1.xml b/app_code/temp_apk/res/A1.xml new file mode 100644 index 0000000..4747597 Binary files /dev/null and b/app_code/temp_apk/res/A1.xml differ diff --git a/app_code/temp_apk/res/A4.xml b/app_code/temp_apk/res/A4.xml new file mode 100644 index 0000000..ea7c12e Binary files /dev/null and b/app_code/temp_apk/res/A4.xml differ diff --git a/app_code/temp_apk/res/Ac.xml b/app_code/temp_apk/res/Ac.xml new file mode 100644 index 0000000..8545fe0 Binary files /dev/null and b/app_code/temp_apk/res/Ac.xml differ diff --git a/app_code/temp_apk/res/Ag.png b/app_code/temp_apk/res/Ag.png new file mode 100644 index 0000000..01ac620 Binary files /dev/null and b/app_code/temp_apk/res/Ag.png differ diff --git a/app_code/temp_apk/res/BG.9.png b/app_code/temp_apk/res/BG.9.png new file mode 100644 index 0000000..36088e8 Binary files /dev/null and b/app_code/temp_apk/res/BG.9.png differ diff --git a/app_code/temp_apk/res/BJ.xml b/app_code/temp_apk/res/BJ.xml new file mode 100644 index 0000000..6cf341b Binary files /dev/null and b/app_code/temp_apk/res/BJ.xml differ diff --git a/app_code/temp_apk/res/BJ1.xml b/app_code/temp_apk/res/BJ1.xml new file mode 100644 index 0000000..e5dc796 Binary files /dev/null and b/app_code/temp_apk/res/BJ1.xml differ diff --git a/app_code/temp_apk/res/BL.9.png b/app_code/temp_apk/res/BL.9.png new file mode 100644 index 0000000..0b79a6a Binary files /dev/null and b/app_code/temp_apk/res/BL.9.png differ diff --git a/app_code/temp_apk/res/BM.png b/app_code/temp_apk/res/BM.png new file mode 100644 index 0000000..1bff7fa Binary files /dev/null and b/app_code/temp_apk/res/BM.png differ diff --git a/app_code/temp_apk/res/BT.png b/app_code/temp_apk/res/BT.png new file mode 100644 index 0000000..4658a99 Binary files /dev/null and b/app_code/temp_apk/res/BT.png differ diff --git a/app_code/temp_apk/res/BW.xml b/app_code/temp_apk/res/BW.xml new file mode 100644 index 0000000..064a532 Binary files /dev/null and b/app_code/temp_apk/res/BW.xml differ diff --git a/app_code/temp_apk/res/Bd.xml b/app_code/temp_apk/res/Bd.xml new file mode 100644 index 0000000..143bc84 Binary files /dev/null and b/app_code/temp_apk/res/Bd.xml differ diff --git a/app_code/temp_apk/res/Be.xml b/app_code/temp_apk/res/Be.xml new file mode 100644 index 0000000..90bef51 Binary files /dev/null and b/app_code/temp_apk/res/Be.xml differ diff --git a/app_code/temp_apk/res/CK.9.png b/app_code/temp_apk/res/CK.9.png new file mode 100644 index 0000000..8965f3e Binary files /dev/null and b/app_code/temp_apk/res/CK.9.png differ diff --git a/app_code/temp_apk/res/C_.9.png b/app_code/temp_apk/res/C_.9.png new file mode 100644 index 0000000..5ba1c45 Binary files /dev/null and b/app_code/temp_apk/res/C_.9.png differ diff --git a/app_code/temp_apk/res/Cg.xml b/app_code/temp_apk/res/Cg.xml new file mode 100644 index 0000000..4f6864f Binary files /dev/null and b/app_code/temp_apk/res/Cg.xml differ diff --git a/app_code/temp_apk/res/Ci.xml b/app_code/temp_apk/res/Ci.xml new file mode 100644 index 0000000..39d3fba Binary files /dev/null and b/app_code/temp_apk/res/Ci.xml differ diff --git a/app_code/temp_apk/res/Ck.png b/app_code/temp_apk/res/Ck.png new file mode 100644 index 0000000..f6829f4 Binary files /dev/null and b/app_code/temp_apk/res/Ck.png differ diff --git a/app_code/temp_apk/res/D-.xml b/app_code/temp_apk/res/D-.xml new file mode 100644 index 0000000..5c026e2 Binary files /dev/null and b/app_code/temp_apk/res/D-.xml differ diff --git a/app_code/temp_apk/res/D-1.xml b/app_code/temp_apk/res/D-1.xml new file mode 100644 index 0000000..0e21ea0 Binary files /dev/null and b/app_code/temp_apk/res/D-1.xml differ diff --git a/app_code/temp_apk/res/D5.xml b/app_code/temp_apk/res/D5.xml new file mode 100644 index 0000000..c96eded Binary files /dev/null and b/app_code/temp_apk/res/D5.xml differ diff --git a/app_code/temp_apk/res/DL.9.png b/app_code/temp_apk/res/DL.9.png new file mode 100644 index 0000000..ece3b12 Binary files /dev/null and b/app_code/temp_apk/res/DL.9.png differ diff --git a/app_code/temp_apk/res/DV.xml b/app_code/temp_apk/res/DV.xml new file mode 100644 index 0000000..c6df26c Binary files /dev/null and b/app_code/temp_apk/res/DV.xml differ diff --git a/app_code/temp_apk/res/DZ.xml b/app_code/temp_apk/res/DZ.xml new file mode 100644 index 0000000..9df959e Binary files /dev/null and b/app_code/temp_apk/res/DZ.xml differ diff --git a/app_code/temp_apk/res/D_.9.png b/app_code/temp_apk/res/D_.9.png new file mode 100644 index 0000000..eecf0f8 Binary files /dev/null and b/app_code/temp_apk/res/D_.9.png differ diff --git a/app_code/temp_apk/res/EA.9.png b/app_code/temp_apk/res/EA.9.png new file mode 100644 index 0000000..b46e520 Binary files /dev/null and b/app_code/temp_apk/res/EA.9.png differ diff --git a/app_code/temp_apk/res/EP.png b/app_code/temp_apk/res/EP.png new file mode 100644 index 0000000..55b8b36 Binary files /dev/null and b/app_code/temp_apk/res/EP.png differ diff --git a/app_code/temp_apk/res/EZ.xml b/app_code/temp_apk/res/EZ.xml new file mode 100644 index 0000000..e38784f Binary files /dev/null and b/app_code/temp_apk/res/EZ.xml differ diff --git a/app_code/temp_apk/res/Ec.png b/app_code/temp_apk/res/Ec.png new file mode 100644 index 0000000..64aacd7 Binary files /dev/null and b/app_code/temp_apk/res/Ec.png differ diff --git a/app_code/temp_apk/res/Eg.xml b/app_code/temp_apk/res/Eg.xml new file mode 100644 index 0000000..1ab02e6 Binary files /dev/null and b/app_code/temp_apk/res/Eg.xml differ diff --git a/app_code/temp_apk/res/Em.png b/app_code/temp_apk/res/Em.png new file mode 100644 index 0000000..33176cc Binary files /dev/null and b/app_code/temp_apk/res/Em.png differ diff --git a/app_code/temp_apk/res/F8.xml b/app_code/temp_apk/res/F8.xml new file mode 100644 index 0000000..59a7959 Binary files /dev/null and b/app_code/temp_apk/res/F8.xml differ diff --git a/app_code/temp_apk/res/FS.png b/app_code/temp_apk/res/FS.png new file mode 100644 index 0000000..11205ce Binary files /dev/null and b/app_code/temp_apk/res/FS.png differ diff --git a/app_code/temp_apk/res/FT.xml b/app_code/temp_apk/res/FT.xml new file mode 100644 index 0000000..f6d6e7c Binary files /dev/null and b/app_code/temp_apk/res/FT.xml differ diff --git a/app_code/temp_apk/res/FW.png b/app_code/temp_apk/res/FW.png new file mode 100644 index 0000000..d934b60 Binary files /dev/null and b/app_code/temp_apk/res/FW.png differ diff --git a/app_code/temp_apk/res/Ff.png b/app_code/temp_apk/res/Ff.png new file mode 100644 index 0000000..ed526fd Binary files /dev/null and b/app_code/temp_apk/res/Ff.png differ diff --git a/app_code/temp_apk/res/Fu.xml b/app_code/temp_apk/res/Fu.xml new file mode 100644 index 0000000..b73e1d8 Binary files /dev/null and b/app_code/temp_apk/res/Fu.xml differ diff --git a/app_code/temp_apk/res/G2.9.png b/app_code/temp_apk/res/G2.9.png new file mode 100644 index 0000000..5bbba1c Binary files /dev/null and b/app_code/temp_apk/res/G2.9.png differ diff --git a/app_code/temp_apk/res/G2.xml b/app_code/temp_apk/res/G2.xml new file mode 100644 index 0000000..46f7278 Binary files /dev/null and b/app_code/temp_apk/res/G2.xml differ diff --git a/app_code/temp_apk/res/GC.xml b/app_code/temp_apk/res/GC.xml new file mode 100644 index 0000000..b2b0899 Binary files /dev/null and b/app_code/temp_apk/res/GC.xml differ diff --git a/app_code/temp_apk/res/GD.xml b/app_code/temp_apk/res/GD.xml new file mode 100644 index 0000000..96c18f2 Binary files /dev/null and b/app_code/temp_apk/res/GD.xml differ diff --git a/app_code/temp_apk/res/GF.xml b/app_code/temp_apk/res/GF.xml new file mode 100644 index 0000000..eee2e28 Binary files /dev/null and b/app_code/temp_apk/res/GF.xml differ diff --git a/app_code/temp_apk/res/GK.xml b/app_code/temp_apk/res/GK.xml new file mode 100644 index 0000000..ad78e94 Binary files /dev/null and b/app_code/temp_apk/res/GK.xml differ diff --git a/app_code/temp_apk/res/GR.xml b/app_code/temp_apk/res/GR.xml new file mode 100644 index 0000000..197d8fe Binary files /dev/null and b/app_code/temp_apk/res/GR.xml differ diff --git a/app_code/temp_apk/res/GY.png b/app_code/temp_apk/res/GY.png new file mode 100644 index 0000000..41f7240 Binary files /dev/null and b/app_code/temp_apk/res/GY.png differ diff --git a/app_code/temp_apk/res/Gc.png b/app_code/temp_apk/res/Gc.png new file mode 100644 index 0000000..140785f Binary files /dev/null and b/app_code/temp_apk/res/Gc.png differ diff --git a/app_code/temp_apk/res/Gf.png b/app_code/temp_apk/res/Gf.png new file mode 100644 index 0000000..8fc0a9b Binary files /dev/null and b/app_code/temp_apk/res/Gf.png differ diff --git a/app_code/temp_apk/res/Gt.9.png b/app_code/temp_apk/res/Gt.9.png new file mode 100644 index 0000000..76418e8 Binary files /dev/null and b/app_code/temp_apk/res/Gt.9.png differ diff --git a/app_code/temp_apk/res/Gt.xml b/app_code/temp_apk/res/Gt.xml new file mode 100644 index 0000000..6f020b2 Binary files /dev/null and b/app_code/temp_apk/res/Gt.xml differ diff --git a/app_code/temp_apk/res/H-.png b/app_code/temp_apk/res/H-.png new file mode 100644 index 0000000..e243fd8 Binary files /dev/null and b/app_code/temp_apk/res/H-.png differ diff --git a/app_code/temp_apk/res/Hd.xml b/app_code/temp_apk/res/Hd.xml new file mode 100644 index 0000000..6d287c8 Binary files /dev/null and b/app_code/temp_apk/res/Hd.xml differ diff --git a/app_code/temp_apk/res/IX.9.png b/app_code/temp_apk/res/IX.9.png new file mode 100644 index 0000000..74106c0 Binary files /dev/null and b/app_code/temp_apk/res/IX.9.png differ diff --git a/app_code/temp_apk/res/In.xml b/app_code/temp_apk/res/In.xml new file mode 100644 index 0000000..4330b9c Binary files /dev/null and b/app_code/temp_apk/res/In.xml differ diff --git a/app_code/temp_apk/res/Iy.xml b/app_code/temp_apk/res/Iy.xml new file mode 100644 index 0000000..4eba272 Binary files /dev/null and b/app_code/temp_apk/res/Iy.xml differ diff --git a/app_code/temp_apk/res/JJ.9.png b/app_code/temp_apk/res/JJ.9.png new file mode 100644 index 0000000..dcad46d Binary files /dev/null and b/app_code/temp_apk/res/JJ.9.png differ diff --git a/app_code/temp_apk/res/JP.xml b/app_code/temp_apk/res/JP.xml new file mode 100644 index 0000000..ebde4f0 Binary files /dev/null and b/app_code/temp_apk/res/JP.xml differ diff --git a/app_code/temp_apk/res/Jl.xml b/app_code/temp_apk/res/Jl.xml new file mode 100644 index 0000000..ba644c2 Binary files /dev/null and b/app_code/temp_apk/res/Jl.xml differ diff --git a/app_code/temp_apk/res/K5.xml b/app_code/temp_apk/res/K5.xml new file mode 100644 index 0000000..1aef7bd Binary files /dev/null and b/app_code/temp_apk/res/K5.xml differ diff --git a/app_code/temp_apk/res/KH.9.png b/app_code/temp_apk/res/KH.9.png new file mode 100644 index 0000000..7e1d48b Binary files /dev/null and b/app_code/temp_apk/res/KH.9.png differ diff --git a/app_code/temp_apk/res/KM.png b/app_code/temp_apk/res/KM.png new file mode 100644 index 0000000..7dfaf7c Binary files /dev/null and b/app_code/temp_apk/res/KM.png differ diff --git a/app_code/temp_apk/res/K_.9.png b/app_code/temp_apk/res/K_.9.png new file mode 100644 index 0000000..ab2a301 Binary files /dev/null and b/app_code/temp_apk/res/K_.9.png differ diff --git a/app_code/temp_apk/res/Ke.xml b/app_code/temp_apk/res/Ke.xml new file mode 100644 index 0000000..51597ed Binary files /dev/null and b/app_code/temp_apk/res/Ke.xml differ diff --git a/app_code/temp_apk/res/LO.png b/app_code/temp_apk/res/LO.png new file mode 100644 index 0000000..4658a99 Binary files /dev/null and b/app_code/temp_apk/res/LO.png differ diff --git a/app_code/temp_apk/res/L_.xml b/app_code/temp_apk/res/L_.xml new file mode 100644 index 0000000..2336547 Binary files /dev/null and b/app_code/temp_apk/res/L_.xml differ diff --git a/app_code/temp_apk/res/Lf.png b/app_code/temp_apk/res/Lf.png new file mode 100644 index 0000000..04d779f Binary files /dev/null and b/app_code/temp_apk/res/Lf.png differ diff --git a/app_code/temp_apk/res/Lf.xml b/app_code/temp_apk/res/Lf.xml new file mode 100644 index 0000000..2676ace Binary files /dev/null and b/app_code/temp_apk/res/Lf.xml differ diff --git a/app_code/temp_apk/res/Li.9.png b/app_code/temp_apk/res/Li.9.png new file mode 100644 index 0000000..650b490 Binary files /dev/null and b/app_code/temp_apk/res/Li.9.png differ diff --git a/app_code/temp_apk/res/M7.xml b/app_code/temp_apk/res/M7.xml new file mode 100644 index 0000000..2eed430 Binary files /dev/null and b/app_code/temp_apk/res/M7.xml differ diff --git a/app_code/temp_apk/res/MD.png b/app_code/temp_apk/res/MD.png new file mode 100644 index 0000000..fb766fc Binary files /dev/null and b/app_code/temp_apk/res/MD.png differ diff --git a/app_code/temp_apk/res/MF.9.png b/app_code/temp_apk/res/MF.9.png new file mode 100644 index 0000000..980e330 Binary files /dev/null and b/app_code/temp_apk/res/MF.9.png differ diff --git a/app_code/temp_apk/res/MO.xml b/app_code/temp_apk/res/MO.xml new file mode 100644 index 0000000..75a1f03 Binary files /dev/null and b/app_code/temp_apk/res/MO.xml differ diff --git a/app_code/temp_apk/res/MQ.png b/app_code/temp_apk/res/MQ.png new file mode 100644 index 0000000..894c734 Binary files /dev/null and b/app_code/temp_apk/res/MQ.png differ diff --git a/app_code/temp_apk/res/Ma.9.png b/app_code/temp_apk/res/Ma.9.png new file mode 100644 index 0000000..fb38611 Binary files /dev/null and b/app_code/temp_apk/res/Ma.9.png differ diff --git a/app_code/temp_apk/res/Mp.xml b/app_code/temp_apk/res/Mp.xml new file mode 100644 index 0000000..96c338c Binary files /dev/null and b/app_code/temp_apk/res/Mp.xml differ diff --git a/app_code/temp_apk/res/N3.png b/app_code/temp_apk/res/N3.png new file mode 100644 index 0000000..1ff2ba7 Binary files /dev/null and b/app_code/temp_apk/res/N3.png differ diff --git a/app_code/temp_apk/res/NA.9.png b/app_code/temp_apk/res/NA.9.png new file mode 100644 index 0000000..d3c859c Binary files /dev/null and b/app_code/temp_apk/res/NA.9.png differ diff --git a/app_code/temp_apk/res/NF.xml b/app_code/temp_apk/res/NF.xml new file mode 100644 index 0000000..4c9d809 Binary files /dev/null and b/app_code/temp_apk/res/NF.xml differ diff --git a/app_code/temp_apk/res/NG.png b/app_code/temp_apk/res/NG.png new file mode 100644 index 0000000..4657815 Binary files /dev/null and b/app_code/temp_apk/res/NG.png differ diff --git a/app_code/temp_apk/res/NM.xml b/app_code/temp_apk/res/NM.xml new file mode 100644 index 0000000..6265952 Binary files /dev/null and b/app_code/temp_apk/res/NM.xml differ diff --git a/app_code/temp_apk/res/NZ.9.png b/app_code/temp_apk/res/NZ.9.png new file mode 100644 index 0000000..4079557 Binary files /dev/null and b/app_code/temp_apk/res/NZ.9.png differ diff --git a/app_code/temp_apk/res/Nk.9.png b/app_code/temp_apk/res/Nk.9.png new file mode 100644 index 0000000..fcf3a2d Binary files /dev/null and b/app_code/temp_apk/res/Nk.9.png differ diff --git a/app_code/temp_apk/res/No.9.png b/app_code/temp_apk/res/No.9.png new file mode 100644 index 0000000..7690626 Binary files /dev/null and b/app_code/temp_apk/res/No.9.png differ diff --git a/app_code/temp_apk/res/Nu.xml b/app_code/temp_apk/res/Nu.xml new file mode 100644 index 0000000..9bc994c Binary files /dev/null and b/app_code/temp_apk/res/Nu.xml differ diff --git a/app_code/temp_apk/res/OM.png b/app_code/temp_apk/res/OM.png new file mode 100644 index 0000000..b12af89 Binary files /dev/null and b/app_code/temp_apk/res/OM.png differ diff --git a/app_code/temp_apk/res/OX.png b/app_code/temp_apk/res/OX.png new file mode 100644 index 0000000..b381413 Binary files /dev/null and b/app_code/temp_apk/res/OX.png differ diff --git a/app_code/temp_apk/res/OX1.png b/app_code/temp_apk/res/OX1.png new file mode 100644 index 0000000..01ac620 Binary files /dev/null and b/app_code/temp_apk/res/OX1.png differ diff --git a/app_code/temp_apk/res/OZ.xml b/app_code/temp_apk/res/OZ.xml new file mode 100644 index 0000000..20ae941 Binary files /dev/null and b/app_code/temp_apk/res/OZ.xml differ diff --git a/app_code/temp_apk/res/Oi.xml b/app_code/temp_apk/res/Oi.xml new file mode 100644 index 0000000..3a6f256 Binary files /dev/null and b/app_code/temp_apk/res/Oi.xml differ diff --git a/app_code/temp_apk/res/Ol.xml b/app_code/temp_apk/res/Ol.xml new file mode 100644 index 0000000..4040e78 Binary files /dev/null and b/app_code/temp_apk/res/Ol.xml differ diff --git a/app_code/temp_apk/res/Pa.9.png b/app_code/temp_apk/res/Pa.9.png new file mode 100644 index 0000000..1e6e20b Binary files /dev/null and b/app_code/temp_apk/res/Pa.9.png differ diff --git a/app_code/temp_apk/res/Pb.png b/app_code/temp_apk/res/Pb.png new file mode 100644 index 0000000..fe8f2e4 Binary files /dev/null and b/app_code/temp_apk/res/Pb.png differ diff --git a/app_code/temp_apk/res/Pg.9.png b/app_code/temp_apk/res/Pg.9.png new file mode 100644 index 0000000..12fa164 Binary files /dev/null and b/app_code/temp_apk/res/Pg.9.png differ diff --git a/app_code/temp_apk/res/Q-.png b/app_code/temp_apk/res/Q-.png new file mode 100644 index 0000000..4cc06d8 Binary files /dev/null and b/app_code/temp_apk/res/Q-.png differ diff --git a/app_code/temp_apk/res/QJ.9.png b/app_code/temp_apk/res/QJ.9.png new file mode 100644 index 0000000..3656e9b Binary files /dev/null and b/app_code/temp_apk/res/QJ.9.png differ diff --git a/app_code/temp_apk/res/QZ.png b/app_code/temp_apk/res/QZ.png new file mode 100644 index 0000000..82be5f6 Binary files /dev/null and b/app_code/temp_apk/res/QZ.png differ diff --git a/app_code/temp_apk/res/QZ.xml b/app_code/temp_apk/res/QZ.xml new file mode 100644 index 0000000..04caf46 Binary files /dev/null and b/app_code/temp_apk/res/QZ.xml differ diff --git a/app_code/temp_apk/res/Qd.xml b/app_code/temp_apk/res/Qd.xml new file mode 100644 index 0000000..cd5287e Binary files /dev/null and b/app_code/temp_apk/res/Qd.xml differ diff --git a/app_code/temp_apk/res/Qt.xml b/app_code/temp_apk/res/Qt.xml new file mode 100644 index 0000000..f2bd3d1 Binary files /dev/null and b/app_code/temp_apk/res/Qt.xml differ diff --git a/app_code/temp_apk/res/RD.xml b/app_code/temp_apk/res/RD.xml new file mode 100644 index 0000000..9b3be87 Binary files /dev/null and b/app_code/temp_apk/res/RD.xml differ diff --git a/app_code/temp_apk/res/RH.xml b/app_code/temp_apk/res/RH.xml new file mode 100644 index 0000000..12c0a9e Binary files /dev/null and b/app_code/temp_apk/res/RH.xml differ diff --git a/app_code/temp_apk/res/RJ.png b/app_code/temp_apk/res/RJ.png new file mode 100644 index 0000000..f4128e2 Binary files /dev/null and b/app_code/temp_apk/res/RJ.png differ diff --git a/app_code/temp_apk/res/RV.png b/app_code/temp_apk/res/RV.png new file mode 100644 index 0000000..a588576 Binary files /dev/null and b/app_code/temp_apk/res/RV.png differ diff --git a/app_code/temp_apk/res/S8.xml b/app_code/temp_apk/res/S8.xml new file mode 100644 index 0000000..72f14f5 Binary files /dev/null and b/app_code/temp_apk/res/S8.xml differ diff --git a/app_code/temp_apk/res/SV.9.png b/app_code/temp_apk/res/SV.9.png new file mode 100644 index 0000000..9180502 Binary files /dev/null and b/app_code/temp_apk/res/SV.9.png differ diff --git a/app_code/temp_apk/res/Sc.xml b/app_code/temp_apk/res/Sc.xml new file mode 100644 index 0000000..38fc264 Binary files /dev/null and b/app_code/temp_apk/res/Sc.xml differ diff --git a/app_code/temp_apk/res/Su.9.png b/app_code/temp_apk/res/Su.9.png new file mode 100644 index 0000000..255e629 Binary files /dev/null and b/app_code/temp_apk/res/Su.9.png differ diff --git a/app_code/temp_apk/res/Th.png b/app_code/temp_apk/res/Th.png new file mode 100644 index 0000000..342323b Binary files /dev/null and b/app_code/temp_apk/res/Th.png differ diff --git a/app_code/temp_apk/res/Tj.9.png b/app_code/temp_apk/res/Tj.9.png new file mode 100644 index 0000000..923a0bf Binary files /dev/null and b/app_code/temp_apk/res/Tj.9.png differ diff --git a/app_code/temp_apk/res/Tl.xml b/app_code/temp_apk/res/Tl.xml new file mode 100644 index 0000000..894c313 Binary files /dev/null and b/app_code/temp_apk/res/Tl.xml differ diff --git a/app_code/temp_apk/res/Tn.xml b/app_code/temp_apk/res/Tn.xml new file mode 100644 index 0000000..024e77c Binary files /dev/null and b/app_code/temp_apk/res/Tn.xml differ diff --git a/app_code/temp_apk/res/Tr.png b/app_code/temp_apk/res/Tr.png new file mode 100644 index 0000000..99a723b Binary files /dev/null and b/app_code/temp_apk/res/Tr.png differ diff --git a/app_code/temp_apk/res/U-.9.png b/app_code/temp_apk/res/U-.9.png new file mode 100644 index 0000000..56d765b Binary files /dev/null and b/app_code/temp_apk/res/U-.9.png differ diff --git a/app_code/temp_apk/res/U8.xml b/app_code/temp_apk/res/U8.xml new file mode 100644 index 0000000..aa516b2 Binary files /dev/null and b/app_code/temp_apk/res/U8.xml differ diff --git a/app_code/temp_apk/res/UE.9.png b/app_code/temp_apk/res/UE.9.png new file mode 100644 index 0000000..0678971 Binary files /dev/null and b/app_code/temp_apk/res/UE.9.png differ diff --git a/app_code/temp_apk/res/UR.png b/app_code/temp_apk/res/UR.png new file mode 100644 index 0000000..d186a5b Binary files /dev/null and b/app_code/temp_apk/res/UR.png differ diff --git a/app_code/temp_apk/res/UX.xml b/app_code/temp_apk/res/UX.xml new file mode 100644 index 0000000..17c9ed4 Binary files /dev/null and b/app_code/temp_apk/res/UX.xml differ diff --git a/app_code/temp_apk/res/V1.xml b/app_code/temp_apk/res/V1.xml new file mode 100644 index 0000000..6c89a61 Binary files /dev/null and b/app_code/temp_apk/res/V1.xml differ diff --git a/app_code/temp_apk/res/V7.xml b/app_code/temp_apk/res/V7.xml new file mode 100644 index 0000000..896c75b Binary files /dev/null and b/app_code/temp_apk/res/V7.xml differ diff --git a/app_code/temp_apk/res/VM.xml b/app_code/temp_apk/res/VM.xml new file mode 100644 index 0000000..4c9d809 Binary files /dev/null and b/app_code/temp_apk/res/VM.xml differ diff --git a/app_code/temp_apk/res/VN.xml b/app_code/temp_apk/res/VN.xml new file mode 100644 index 0000000..8830f67 Binary files /dev/null and b/app_code/temp_apk/res/VN.xml differ diff --git a/app_code/temp_apk/res/VT.xml b/app_code/temp_apk/res/VT.xml new file mode 100644 index 0000000..e3cd928 Binary files /dev/null and b/app_code/temp_apk/res/VT.xml differ diff --git a/app_code/temp_apk/res/VW.png b/app_code/temp_apk/res/VW.png new file mode 100644 index 0000000..ad960ce Binary files /dev/null and b/app_code/temp_apk/res/VW.png differ diff --git a/app_code/temp_apk/res/W4.9.png b/app_code/temp_apk/res/W4.9.png new file mode 100644 index 0000000..4f12d64 Binary files /dev/null and b/app_code/temp_apk/res/W4.9.png differ diff --git a/app_code/temp_apk/res/W5.png b/app_code/temp_apk/res/W5.png new file mode 100644 index 0000000..df59926 Binary files /dev/null and b/app_code/temp_apk/res/W5.png differ diff --git a/app_code/temp_apk/res/Wh.png b/app_code/temp_apk/res/Wh.png new file mode 100644 index 0000000..65ccd8f Binary files /dev/null and b/app_code/temp_apk/res/Wh.png differ diff --git a/app_code/temp_apk/res/Wr.png b/app_code/temp_apk/res/Wr.png new file mode 100644 index 0000000..529d550 Binary files /dev/null and b/app_code/temp_apk/res/Wr.png differ diff --git a/app_code/temp_apk/res/Ws.xml b/app_code/temp_apk/res/Ws.xml new file mode 100644 index 0000000..1845dfe Binary files /dev/null and b/app_code/temp_apk/res/Ws.xml differ diff --git a/app_code/temp_apk/res/Wz.png b/app_code/temp_apk/res/Wz.png new file mode 100644 index 0000000..30c1c1e Binary files /dev/null and b/app_code/temp_apk/res/Wz.png differ diff --git a/app_code/temp_apk/res/X3.9.png b/app_code/temp_apk/res/X3.9.png new file mode 100644 index 0000000..83e741b Binary files /dev/null and b/app_code/temp_apk/res/X3.9.png differ diff --git a/app_code/temp_apk/res/X4.9.png b/app_code/temp_apk/res/X4.9.png new file mode 100644 index 0000000..8cf1baa Binary files /dev/null and b/app_code/temp_apk/res/X4.9.png differ diff --git a/app_code/temp_apk/res/X6.xml b/app_code/temp_apk/res/X6.xml new file mode 100644 index 0000000..60d4da4 Binary files /dev/null and b/app_code/temp_apk/res/X6.xml differ diff --git a/app_code/temp_apk/res/XK.xml b/app_code/temp_apk/res/XK.xml new file mode 100644 index 0000000..ed825d7 Binary files /dev/null and b/app_code/temp_apk/res/XK.xml differ diff --git a/app_code/temp_apk/res/XW.xml b/app_code/temp_apk/res/XW.xml new file mode 100644 index 0000000..04caf46 Binary files /dev/null and b/app_code/temp_apk/res/XW.xml differ diff --git a/app_code/temp_apk/res/XY.xml b/app_code/temp_apk/res/XY.xml new file mode 100644 index 0000000..f185c14 Binary files /dev/null and b/app_code/temp_apk/res/XY.xml differ diff --git a/app_code/temp_apk/res/Xx.xml b/app_code/temp_apk/res/Xx.xml new file mode 100644 index 0000000..44ebdcb Binary files /dev/null and b/app_code/temp_apk/res/Xx.xml differ diff --git a/app_code/temp_apk/res/Y3.png b/app_code/temp_apk/res/Y3.png new file mode 100644 index 0000000..b12af89 Binary files /dev/null and b/app_code/temp_apk/res/Y3.png differ diff --git a/app_code/temp_apk/res/Y7.9.png b/app_code/temp_apk/res/Y7.9.png new file mode 100644 index 0000000..bfb2170 Binary files /dev/null and b/app_code/temp_apk/res/Y7.9.png differ diff --git a/app_code/temp_apk/res/Y9.png b/app_code/temp_apk/res/Y9.png new file mode 100644 index 0000000..2b15a87 Binary files /dev/null and b/app_code/temp_apk/res/Y9.png differ diff --git a/app_code/temp_apk/res/YD.png b/app_code/temp_apk/res/YD.png new file mode 100644 index 0000000..4ab76bb Binary files /dev/null and b/app_code/temp_apk/res/YD.png differ diff --git a/app_code/temp_apk/res/YG.9.png b/app_code/temp_apk/res/YG.9.png new file mode 100644 index 0000000..f8547d2 Binary files /dev/null and b/app_code/temp_apk/res/YG.9.png differ diff --git a/app_code/temp_apk/res/YG.xml b/app_code/temp_apk/res/YG.xml new file mode 100644 index 0000000..da9882f Binary files /dev/null and b/app_code/temp_apk/res/YG.xml differ diff --git a/app_code/temp_apk/res/YW.xml b/app_code/temp_apk/res/YW.xml new file mode 100644 index 0000000..d504088 Binary files /dev/null and b/app_code/temp_apk/res/YW.xml differ diff --git a/app_code/temp_apk/res/Yt.9.png b/app_code/temp_apk/res/Yt.9.png new file mode 100644 index 0000000..f1208d9 Binary files /dev/null and b/app_code/temp_apk/res/Yt.9.png differ diff --git a/app_code/temp_apk/res/Yw.9.png b/app_code/temp_apk/res/Yw.9.png new file mode 100644 index 0000000..15ebb51 Binary files /dev/null and b/app_code/temp_apk/res/Yw.9.png differ diff --git a/app_code/temp_apk/res/Z8.png b/app_code/temp_apk/res/Z8.png new file mode 100644 index 0000000..d6a8790 Binary files /dev/null and b/app_code/temp_apk/res/Z8.png differ diff --git a/app_code/temp_apk/res/ZL.xml b/app_code/temp_apk/res/ZL.xml new file mode 100644 index 0000000..a537889 Binary files /dev/null and b/app_code/temp_apk/res/ZL.xml differ diff --git a/app_code/temp_apk/res/ZN.9.png b/app_code/temp_apk/res/ZN.9.png new file mode 100644 index 0000000..ae9c952 Binary files /dev/null and b/app_code/temp_apk/res/ZN.9.png differ diff --git a/app_code/temp_apk/res/ZN.xml b/app_code/temp_apk/res/ZN.xml new file mode 100644 index 0000000..fcb630e Binary files /dev/null and b/app_code/temp_apk/res/ZN.xml differ diff --git a/app_code/temp_apk/res/Zg.xml b/app_code/temp_apk/res/Zg.xml new file mode 100644 index 0000000..a247372 Binary files /dev/null and b/app_code/temp_apk/res/Zg.xml differ diff --git a/app_code/test/widget_test.dart b/app_code/test/widget_test.dart new file mode 100644 index 0000000..b2786e8 --- /dev/null +++ b/app_code/test/widget_test.dart @@ -0,0 +1,30 @@ +// // This is a basic Flutter widget test. +// // +// // To perform an interaction with a widget in your test, use the WidgetTester +// // utility in the flutter_test package. For example, you can send tap and scroll +// // gestures. You can also use WidgetTester to find child widgets in the widget +// // tree, read text, and verify that the values of widget properties are correct. +// +// import 'package:flutter/material.dart'; +// import 'package:flutter_test/flutter_test.dart'; +// +// import 'package:grostore/main.dart'; +// +// void main() { +// testWidgets('Counter increments smoke test', (WidgetTester tester) async { +// // Build our app and trigger a frame. +// await tester.pumpWidget(const MyApp()); +// +// // Verify that our counter starts at 0. +// expect(find.text('0'), findsOneWidget); +// expect(find.text('1'), findsNothing); +// +// // Tap the '+' icon and trigger a frame. +// await tester.tap(find.byIcon(Icons.add)); +// await tester.pump(); +// +// // Verify that our counter has incremented. +// expect(find.text('0'), findsNothing); +// expect(find.text('1'), findsOneWidget); +// }); +// }