[
  {
    "path": ".github/workflows/main.yml",
    "content": "on:\n  push:\n    branches:\n      - master\n\nname: \"Build & Release\"\njobs:\n  build:\n    name: Build & Release\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v1\n      - uses: actions/setup-java@v1\n        with:\n          java-version: '17.x'\n      - uses: subosito/flutter-action@v1\n        with:\n          flutter-version: '3.27.0'\n      - run: flutter pub get\n      - run: flutter analyze\n      - run: flutter build apk\n#      - name: Push to Releases\n#        uses: ncipollo/release-action@v1.12.0\n#        with:\n#          artifacts: \"build/app/outputs/flutter-apk/app-release.apk\"\n#          tag: v1.2.1\n#          token: ${{ secrets.TOKEN }}"
  },
  {
    "path": ".gitignore",
    "content": "# Miscellaneous\n*.class\n*.log\n*.pyc\n*.swp\n.DS_Store\n.atom/\n.buildlog/\n.history\n.svn/\nmigrate_working_dir/\n\n# IntelliJ related\n*.iml\n*.ipr\n*.iws\n.idea/\n\n# The .vscode folder contains launch configuration and tasks you configure in\n# VS Code which you may wish to be included in version control, so this line\n# is commented out by default.\n#.vscode/\n\n# Flutter/Dart/Pub related\n**/doc/api/\n**/ios/Flutter/.last_build_id\n.dart_tool/\n.flutter-plugins\n.flutter-plugins-dependencies\n.packages\n.pub-cache/\n.pub/\n/build/\n\n# Web related\nlib/generated_plugin_registrant.dart\n\n# Symbolication related\napp.*.symbols\n\n# Obfuscation related\napp.*.map.json\n\n# Android Studio will place build artifacts here\n/android/app/debug\n/android/app/profile\n/android/app/release\n"
  },
  {
    "path": ".metadata",
    "content": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrades etc.\n#\n# This file should be version controlled.\n\nversion:\n  revision: adda8e93881d681680de2f7f33bfc021dac20c9d\n  channel: master\n\nproject_type: app\n\n# Tracks metadata for the flutter migrate command\nmigration:\n  platforms:\n    - platform: root\n      create_revision: adda8e93881d681680de2f7f33bfc021dac20c9d\n      base_revision: adda8e93881d681680de2f7f33bfc021dac20c9d\n    - platform: android\n      create_revision: adda8e93881d681680de2f7f33bfc021dac20c9d\n      base_revision: adda8e93881d681680de2f7f33bfc021dac20c9d\n    - platform: ios\n      create_revision: adda8e93881d681680de2f7f33bfc021dac20c9d\n      base_revision: adda8e93881d681680de2f7f33bfc021dac20c9d\n    - platform: web\n      create_revision: adda8e93881d681680de2f7f33bfc021dac20c9d\n      base_revision: adda8e93881d681680de2f7f33bfc021dac20c9d\n\n  # User provided section\n\n  # List of Local paths (relative to this file) that should be\n  # ignored by the migrate tool.\n  #\n  # Files that are not part of the templates will be ignored by default.\n  unmanaged_files:\n    - 'lib/main.dart'\n    - 'ios/Runner.xcodeproj/project.pbxproj'\n"
  },
  {
    "path": "LICENSE",
    "content": "BSD 2-Clause License\n\nCopyright (c) 2022, SinaSys\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\n   list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice,\n   this list of conditions and the following disclaimer in the documentation\n   and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "README.md",
    "content": "## flutter_ecommerce_app\n\n<p align=\"center\">\n  <img src=\"https://img.shields.io/github/stars/SinaSys/flutter_ecommerce_app\">\n  <img src=\"https://img.shields.io/github/forks/SinaSys/flutter_ecommerce_app\">\n  <img src=\"https://img.shields.io/github/actions/workflow/status/SinaSys/flutter_ecommerce_app/main.yml?branch=master&label=CI%20&logo=github\">\n  <img src=\"https://img.shields.io/github/v/release/SinaSys/flutter_ecommerce_app?label=Release&logo=semantic-release\">\n  <img src=\"https://img.shields.io/github/last-commit/SinaSys/flutter_ecommerce_app?label=Last%20commit\">\n</p>\n\n\n\nE-Commerce app is a design implementation of [E-commerce App](https://dribbble.com/shots/15550702-E-commerce-Mobile-App) designed by [Billah](https://dribbble.com/designermasum)\n\n![](https://github.com/SinaSys/flutter_ecommerce_app/blob/master/screenshots/screenshot.png?raw=true)\n\n\n## Screenshots\n\nPreview                    |   Home screen             |  Product Detail Screen    |  Cart Screen\n:-------------------------:|:-------------------------:|:-------------------------:|:-------------------------:\n![](https://github.com/SinaSys/flutter_ecommerce_app/blob/master/screenshots/preview.gif?raw=true)|![](https://github.com/SinaSys/flutter_ecommerce_app/blob/master/screenshots/home_screen.png?raw=true)|![](https://github.com/SinaSys/flutter_ecommerce_app/blob/master/screenshots/detail_screen.png?raw=true)|![](https://github.com/SinaSys/flutter_ecommerce_app/blob/master/screenshots/cart_screen.png?raw=true)\n\n<br/>\n\n## Directory Structure\n```\n📂lib\n │───main.dart  \n │───📂core  \n |   │──app_data.dart\n |   │──app_theme.dart\n |   │──app_color.dart\n |   └──extensions.dart\n └───📂src\n     │────📂model\n     │    │──product.dart\n     |    │──product_category.dart\n     |    │──product_size_type.dart\n     |    │──recommended_product.dart\n     |    │──categorical.dart\n     |    │──numerical.dart\n     |    └──bottom_nav_bar_item.dart\n     └────📂view\n     |    │───📂screen\n     |    |   |──home_screen.dart\n     |    |   |──product_list_screen.dart\n     |    |   |──product_detail_screen.dart\n     |    |   |──favorite_screen.dart\n     |    |   |──cart_screen.dart\n     |    |   └──profile_screen.dart\n     |    │───📂widget\n     |    |   |──carousel_slider.dart\n     |    |   |──product_grid_view.dart\n     |    |   |──list_item_selector.dart\n     |    |   └──empty_cart.dart\n     |    └───📂animation\n     |        |──animated_switcher_wrapper.dart\n     |        |──open_container_wrapper.dart\n     |        └──page_transition_switcher_wrapper.dart\n     └────📂controller\n          └──product_controller.dart\n```\n\n<br/>\n\n## Dependencies\nPackage Name        |\n:-------------------------|\n|[GetX](https://pub.dev/packages/get) \n|[stylish_bottom_bar](https://pub.dev/packages/stylish_bottom_bar) \n|[smooth_page_indicator](https://pub.dev/packages/smooth_page_indicator)\n|[flutter_rating_bar](https://pub.dev/packages/flutter_rating_bar)\n|[font_awesome_flutter](https://pub.dev/packages/font_awesome_flutter)\n|[animations](https://pub.dev/packages/animations)\n|[flutter_launcher_icons](https://pub.dev/packages/flutter_launcher_icons)\n\n<br/>\n\n## Created & Maintained By\n\n[SinaSys](https://github.com/SinaSys) \n\n\n## Contributors\n• [mufarrah](https://github.com/mufarrah)\n<br/>\n<br/>\n\n##  Other flutter projects\n Project Name        |Stars        \n:-------------------------|-------------------------\n[Go rest app](https://github.com/SinaSys/flutter_go_rest_app)|![GitHub stars](https://img.shields.io/github/stars/SinaSys/flutter_go_rest_app?style=social)\n[Japanese restaurant app](https://github.com/SinaSys/flutter_japanese_restaurant_app)| ![GitHub stars](https://img.shields.io/github/stars/SinaSys/flutter_japanese_restaurant_app?style=social)\n|[Office furniture store app](https://github.com/SinaSys/flutter_office_furniture_store_app) |![GitHub stars](https://img.shields.io/github/stars/SinaSys/flutter_office_furniture_store_app?style=social)\n\n\n\n"
  },
  {
    "path": "analysis_options.yaml",
    "content": "# This file configures the analyzer, which statically analyzes Dart code to\n# check for errors, warnings, and lints.\n#\n# The issues identified by the analyzer are surfaced in the UI of Dart-enabled\n# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be\n# invoked from the command line by running `flutter analyze`.\n\n# The following line activates a set of recommended lints for Flutter apps,\n# packages, and plugins designed to encourage good coding practices.\ninclude: package:flutter_lints/flutter.yaml\n\nlinter:\n  # The lint rules applied to this project can be customized in the\n  # section below to disable rules from the `package:flutter_lints/flutter.yaml`\n  # included above or to enable additional rules. A list of all available lints\n  # and their documentation is published at\n  # https://dart-lang.github.io/linter/lints/index.html.\n  #\n  # Instead of disabling a lint rule for the entire project in the\n  # section below, it can also be suppressed for a single line of code\n  # or a specific dart file by using the `// ignore: name_of_lint` and\n  # `// ignore_for_file: name_of_lint` syntax on the line or in the file\n  # producing the lint.\n  rules:\n    # avoid_print: false  # Uncomment to disable the `avoid_print` rule\n    # prefer_single_quotes: true  # Uncomment to enable the `prefer_single_quotes` rule\n\n# Additional information about this file can be found at\n# https://dart.dev/guides/language/analysis-options\n"
  },
  {
    "path": "android/.gitignore",
    "content": "gradle-wrapper.jar\n/.gradle\n/captures/\n/gradlew\n/gradlew.bat\n/local.properties\nGeneratedPluginRegistrant.java\n\n# Remember to never publicly share your keystore.\n# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app\nkey.properties\n**/*.keystore\n**/*.jks\n"
  },
  {
    "path": "android/app/build.gradle",
    "content": "def localProperties = new Properties()\ndef localPropertiesFile = rootProject.file('local.properties')\nif (localPropertiesFile.exists()) {\n    localPropertiesFile.withReader('UTF-8') { reader ->\n        localProperties.load(reader)\n    }\n}\n\ndef flutterRoot = localProperties.getProperty('flutter.sdk')\nif (flutterRoot == null) {\n    throw new GradleException(\"Flutter SDK not found. Define location with flutter.sdk in the local.properties file.\")\n}\n\ndef flutterVersionCode = localProperties.getProperty('flutter.versionCode')\nif (flutterVersionCode == null) {\n    flutterVersionCode = '1'\n}\n\ndef flutterVersionName = localProperties.getProperty('flutter.versionName')\nif (flutterVersionName == null) {\n    flutterVersionName = '1.0'\n}\n\napply plugin: 'com.android.application'\napply plugin: 'kotlin-android'\napply from: \"$flutterRoot/packages/flutter_tools/gradle/flutter.gradle\"\n\nandroid {\n    compileSdkVersion flutter.compileSdkVersion\n    ndkVersion \"23.1.7779620\"\n    namespace = \"com.sinasys.e_commerce_flutter\"\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n\n    sourceSets {\n        main.java.srcDirs += 'src/main/kotlin'\n    }\n\n    defaultConfig {\n        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).\n        applicationId \"com.sinasys.e_commerce_flutter\"\n        // You can update the following values to match your application needs.\n        // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration.\n        minSdkVersion flutter.minSdkVersion\n        targetSdkVersion flutter.targetSdkVersion\n        versionCode flutterVersionCode.toInteger()\n        versionName flutterVersionName\n    }\n\n    buildTypes {\n        release {\n            // TODO: Add your own signing config for the release build.\n            // Signing with the debug keys for now, so `flutter run --release` works.\n            signingConfig signingConfigs.debug\n        }\n    }\n}\n\nflutter {\n    source '../..'\n}\n\ndependencies {\n    implementation \"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version\"\n}\n"
  },
  {
    "path": "android/app/src/debug/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.sinasys.e_commerce_flutter\">\n    <!-- The INTERNET permission is required for development. Specifically,\n         the Flutter tool needs it to communicate with the running application\n         to allow setting breakpoints, to provide hot reload, etc.\n    -->\n    <uses-permission android:name=\"android.permission.INTERNET\"/>\n</manifest>\n"
  },
  {
    "path": "android/app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.sinasys.e_commerce_flutter\">\n   <application\n        android:label=\"e_commerce_flutter\"\n        android:name=\"${applicationName}\"\n        android:icon=\"@mipmap/launcher_icon\">\n        <activity\n            android:name=\".MainActivity\"\n            android:exported=\"true\"\n            android:launchMode=\"singleTop\"\n            android:theme=\"@style/LaunchTheme\"\n            android:configChanges=\"orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode\"\n            android:hardwareAccelerated=\"true\"\n            android:windowSoftInputMode=\"adjustResize\">\n            <!-- Specifies an Android theme to apply to this Activity as soon as\n                 the Android process has started. This theme is visible to the user\n                 while the Flutter UI initializes. After that, this theme continues\n                 to determine the Window background behind the Flutter UI. -->\n            <meta-data\n              android:name=\"io.flutter.embedding.android.NormalTheme\"\n              android:resource=\"@style/NormalTheme\"\n              />\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\"/>\n                <category android:name=\"android.intent.category.LAUNCHER\"/>\n            </intent-filter>\n        </activity>\n        <!-- Don't delete the meta-data below.\n             This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->\n        <meta-data\n            android:name=\"flutterEmbedding\"\n            android:value=\"2\" />\n    </application>\n</manifest>\n"
  },
  {
    "path": "android/app/src/main/kotlin/com/sinasys/e_commerce_flutter/MainActivity.kt",
    "content": "package com.sinasys.e_commerce_flutter\n\nimport io.flutter.embedding.android.FlutterActivity\n\nclass MainActivity: FlutterActivity() {\n}\n"
  },
  {
    "path": "android/app/src/main/res/drawable/launch_background.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Modify this file to customize your launch splash screen -->\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@android:color/white\" />\n\n    <!-- You can insert your own image assets here -->\n    <!-- <item>\n        <bitmap\n            android:gravity=\"center\"\n            android:src=\"@mipmap/launch_image\" />\n    </item> -->\n</layer-list>\n"
  },
  {
    "path": "android/app/src/main/res/drawable-v21/launch_background.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Modify this file to customize your launch splash screen -->\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"?android:colorBackground\" />\n\n    <!-- You can insert your own image assets here -->\n    <!-- <item>\n        <bitmap\n            android:gravity=\"center\"\n            android:src=\"@mipmap/launch_image\" />\n    </item> -->\n</layer-list>\n"
  },
  {
    "path": "android/app/src/main/res/mipmap-anydpi-v26/launcher_icon.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n  <background android:drawable=\"@color/ic_launcher_background\"/>\n  <foreground android:drawable=\"@drawable/ic_launcher_foreground\"/>\n</adaptive-icon>\n"
  },
  {
    "path": "android/app/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"ic_launcher_background\">#ffffff</color>\n</resources>"
  },
  {
    "path": "android/app/src/main/res/values/styles.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->\n    <style name=\"LaunchTheme\" parent=\"@android:style/Theme.Light.NoTitleBar\">\n        <!-- Show a splash screen on the activity. Automatically removed when\n             the Flutter engine draws its first frame -->\n        <item name=\"android:windowBackground\">@drawable/launch_background</item>\n    </style>\n    <!-- Theme applied to the Android Window as soon as the process has started.\n         This theme determines the color of the Android Window while your\n         Flutter UI initializes, as well as behind your Flutter UI while its\n         running.\n\n         This Theme is only used starting with V2 of Flutter's Android embedding. -->\n    <style name=\"NormalTheme\" parent=\"@android:style/Theme.Light.NoTitleBar\">\n        <item name=\"android:windowBackground\">?android:colorBackground</item>\n    </style>\n</resources>\n"
  },
  {
    "path": "android/app/src/main/res/values-night/styles.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->\n    <style name=\"LaunchTheme\" parent=\"@android:style/Theme.Black.NoTitleBar\">\n        <!-- Show a splash screen on the activity. Automatically removed when\n             the Flutter engine draws its first frame -->\n        <item name=\"android:windowBackground\">@drawable/launch_background</item>\n    </style>\n    <!-- Theme applied to the Android Window as soon as the process has started.\n         This theme determines the color of the Android Window while your\n         Flutter UI initializes, as well as behind your Flutter UI while its\n         running.\n\n         This Theme is only used starting with V2 of Flutter's Android embedding. -->\n    <style name=\"NormalTheme\" parent=\"@android:style/Theme.Black.NoTitleBar\">\n        <item name=\"android:windowBackground\">?android:colorBackground</item>\n    </style>\n</resources>\n"
  },
  {
    "path": "android/app/src/profile/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.sinasys.e_commerce_flutter\">\n    <!-- The INTERNET permission is required for development. Specifically,\n         the Flutter tool needs it to communicate with the running application\n         to allow setting breakpoints, to provide hot reload, etc.\n    -->\n    <uses-permission android:name=\"android.permission.INTERNET\"/>\n</manifest>\n"
  },
  {
    "path": "android/build.gradle",
    "content": "buildscript {\n    ext.kotlin_version = '1.7.21'\n    repositories {\n        google()\n        mavenCentral()\n    }\n\n    dependencies {\n        classpath 'com.android.tools.build:gradle:8.1.4'\n        classpath \"org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version\"\n    }\n}\n\nallprojects {\n    repositories {\n        google()\n        mavenCentral()\n    }\n}\n\nrootProject.buildDir = '../build'\nsubprojects {\n    project.buildDir = \"${rootProject.buildDir}/${project.name}\"\n}\nsubprojects {\n    project.evaluationDependsOn(':app')\n}\n\ntasks.register(\"clean\", Delete) {\n    delete rootProject.buildDir\n}\n"
  },
  {
    "path": "android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-8.0-all.zip\n"
  },
  {
    "path": "android/gradle.properties",
    "content": "org.gradle.jvmargs=-Xmx1536M\nandroid.useAndroidX=true\nandroid.enableJetifier=true\n"
  },
  {
    "path": "android/settings.gradle",
    "content": "include ':app'\n\ndef localPropertiesFile = new File(rootProject.projectDir, \"local.properties\")\ndef properties = new Properties()\n\nassert localPropertiesFile.exists()\nlocalPropertiesFile.withReader(\"UTF-8\") { reader -> properties.load(reader) }\n\ndef flutterSdkPath = properties.getProperty(\"flutter.sdk\")\nassert flutterSdkPath != null, \"flutter.sdk not set in local.properties\"\napply from: \"$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle\"\n"
  },
  {
    "path": "ios/.gitignore",
    "content": "**/dgph\n*.mode1v3\n*.mode2v3\n*.moved-aside\n*.pbxuser\n*.perspectivev3\n**/*sync/\n.sconsign.dblite\n.tags*\n**/.vagrant/\n**/DerivedData/\nIcon?\n**/Pods/\n**/.symlinks/\nprofile\nxcuserdata\n**/.generated/\nFlutter/App.framework\nFlutter/Flutter.framework\nFlutter/Flutter.podspec\nFlutter/Generated.xcconfig\nFlutter/ephemeral/\nFlutter/app.flx\nFlutter/app.zip\nFlutter/flutter_assets/\nFlutter/flutter_export_environment.sh\nServiceDefinitions.json\nRunner/GeneratedPluginRegistrant.*\n\n# Exceptions to above rules.\n!default.mode1v3\n!default.mode2v3\n!default.pbxuser\n!default.perspectivev3\n"
  },
  {
    "path": "ios/Flutter/AppFrameworkInfo.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n  <key>CFBundleDevelopmentRegion</key>\n  <string>en</string>\n  <key>CFBundleExecutable</key>\n  <string>App</string>\n  <key>CFBundleIdentifier</key>\n  <string>io.flutter.flutter.app</string>\n  <key>CFBundleInfoDictionaryVersion</key>\n  <string>6.0</string>\n  <key>CFBundleName</key>\n  <string>App</string>\n  <key>CFBundlePackageType</key>\n  <string>FMWK</string>\n  <key>CFBundleShortVersionString</key>\n  <string>1.0</string>\n  <key>CFBundleSignature</key>\n  <string>????</string>\n  <key>CFBundleVersion</key>\n  <string>1.0</string>\n  <key>MinimumOSVersion</key>\n  <string>9.0</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "ios/Flutter/Debug.xcconfig",
    "content": "#include \"Generated.xcconfig\"\n"
  },
  {
    "path": "ios/Flutter/Release.xcconfig",
    "content": "#include \"Generated.xcconfig\"\n"
  },
  {
    "path": "ios/Runner/AppDelegate.swift",
    "content": "import UIKit\nimport Flutter\n\n@UIApplicationMain\n@objc class AppDelegate: FlutterAppDelegate {\n  override func application(\n    _ application: UIApplication,\n    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?\n  ) -> Bool {\n    GeneratedPluginRegistrant.register(with: self)\n    return super.application(application, didFinishLaunchingWithOptions: launchOptions)\n  }\n}\n"
  },
  {
    "path": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-20x20@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-20x20@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-40x40@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-40x40@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-60x60@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-60x60@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-20x20@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-20x20@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-29x29@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-29x29@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-40x40@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-40x40@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-76x76@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-76x76@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"83.5x83.5\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-83.5x83.5@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"1024x1024\",\n      \"idiom\" : \"ios-marketing\",\n      \"filename\" : \"Icon-App-1024x1024@1x.png\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}\n"
  },
  {
    "path": "ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"LaunchImage.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"LaunchImage@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"LaunchImage@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}\n"
  },
  {
    "path": "ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md",
    "content": "# Launch Screen Assets\n\nYou can customize the launch screen with your own desired assets by replacing the image files in this directory.\n\nYou 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."
  },
  {
    "path": "ios/Runner/Base.lproj/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"12121\" systemVersion=\"16G29\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"12089\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"Ydg-fD-yQy\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"xbc-2k-c8Z\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <imageView opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" image=\"LaunchImage\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"YRO-k0-Ey4\">\n                            </imageView>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <constraints>\n                            <constraint firstItem=\"YRO-k0-Ey4\" firstAttribute=\"centerX\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"centerX\" id=\"1a2-6s-vTC\"/>\n                            <constraint firstItem=\"YRO-k0-Ey4\" firstAttribute=\"centerY\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"centerY\" id=\"4X2-HB-R7a\"/>\n                        </constraints>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"53\" y=\"375\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <image name=\"LaunchImage\" width=\"168\" height=\"185\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "ios/Runner/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"10117\" systemVersion=\"15F34\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" initialViewController=\"BYZ-38-t0r\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"10085\"/>\n    </dependencies>\n    <scenes>\n        <!--Flutter View Controller-->\n        <scene sceneID=\"tne-QT-ifu\">\n            <objects>\n                <viewController id=\"BYZ-38-t0r\" customClass=\"FlutterViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"y3c-jy-aDJ\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"wfy-db-euE\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"8bC-Xf-vdC\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"600\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "ios/Runner/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>E Commerce Flutter</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>e_commerce_flutter</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>$(FLUTTER_BUILD_NAME)</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>$(FLUTTER_BUILD_NUMBER)</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UIViewControllerBasedStatusBarAppearance</key>\n\t<false/>\n\t<key>CADisableMinimumFrameDurationOnPhone</key>\n\t<true/>\n\t<key>UIApplicationSupportsIndirectInputEvents</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "ios/Runner/Runner-Bridging-Header.h",
    "content": "#import \"GeneratedPluginRegistrant.h\"\n"
  },
  {
    "path": "ios/Runner.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 50;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };\n\t\t3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };\n\t\t74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };\n\t\t97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };\n\t\t97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };\n\t\t97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t9705A1C41CF9048500538489 /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = \"<group>\"; };\n\t\t1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = \"<group>\"; };\n\t\t3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = \"<group>\"; };\n\t\t74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"Runner-Bridging-Header.h\"; sourceTree = \"<group>\"; };\n\t\t74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\t7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = \"<group>\"; };\n\t\t9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = \"<group>\"; };\n\t\t9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = \"<group>\"; };\n\t\t97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\t97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\t97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t97C146EB1CF9000F007C117D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t9740EEB11CF90186004384FC /* Flutter */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,\n\t\t\t\t9740EEB21CF90195004384FC /* Debug.xcconfig */,\n\t\t\t\t7AFA3C8E1D35360C0083082E /* Release.xcconfig */,\n\t\t\t\t9740EEB31CF90195004384FC /* Generated.xcconfig */,\n\t\t\t);\n\t\t\tname = Flutter;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146E51CF9000F007C117D = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9740EEB11CF90186004384FC /* Flutter */,\n\t\t\t\t97C146F01CF9000F007C117D /* Runner */,\n\t\t\t\t97C146EF1CF9000F007C117D /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146EF1CF9000F007C117D /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t97C146EE1CF9000F007C117D /* Runner.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146F01CF9000F007C117D /* Runner */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t97C146FA1CF9000F007C117D /* Main.storyboard */,\n\t\t\t\t97C146FD1CF9000F007C117D /* Assets.xcassets */,\n\t\t\t\t97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,\n\t\t\t\t97C147021CF9000F007C117D /* Info.plist */,\n\t\t\t\t1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,\n\t\t\t\t1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,\n\t\t\t\t74858FAE1ED2DC5600515810 /* AppDelegate.swift */,\n\t\t\t\t74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,\n\t\t\t);\n\t\t\tpath = Runner;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t97C146ED1CF9000F007C117D /* Runner */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget \"Runner\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t9740EEB61CF901F6004384FC /* Run Script */,\n\t\t\t\t97C146EA1CF9000F007C117D /* Sources */,\n\t\t\t\t97C146EB1CF9000F007C117D /* Frameworks */,\n\t\t\t\t97C146EC1CF9000F007C117D /* Resources */,\n\t\t\t\t9705A1C41CF9048500538489 /* Embed Frameworks */,\n\t\t\t\t3B06AD1E1E4923F5004D2608 /* Thin Binary */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Runner;\n\t\t\tproductName = Runner;\n\t\t\tproductReference = 97C146EE1CF9000F007C117D /* Runner.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t97C146E61CF9000F007C117D /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 1300;\n\t\t\t\tORGANIZATIONNAME = \"\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t97C146ED1CF9000F007C117D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.3.1;\n\t\t\t\t\t\tLastSwiftMigration = 1100;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject \"Runner\" */;\n\t\t\tcompatibilityVersion = \"Xcode 9.3\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 97C146E51CF9000F007C117D;\n\t\t\tproductRefGroup = 97C146EF1CF9000F007C117D /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t97C146ED1CF9000F007C117D /* Runner */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t97C146EC1CF9000F007C117D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,\n\t\t\t\t3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,\n\t\t\t\t97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,\n\t\t\t\t97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Thin Binary\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"/bin/sh \\\"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\\\" embed_and_thin\";\n\t\t};\n\t\t9740EEB61CF901F6004384FC /* Run Script */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Run Script\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"/bin/sh \\\"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\\\" build\";\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t97C146EA1CF9000F007C117D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,\n\t\t\t\t1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXVariantGroup section */\n\t\t97C146FA1CF9000F007C117D /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t97C146FB1CF9000F007C117D /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t97C147001CF9000F007C117D /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t249021D3217E4FDB00AE95B9 /* Profile */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSUPPORTED_PLATFORMS = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Profile;\n\t\t};\n\t\t249021D4217E4FDB00AE95B9 /* Profile */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = \"$(FLUTTER_BUILD_NUMBER)\";\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tINFOPLIST_FILE = Runner/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.sinasys.eCommerceFlutter;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"Runner/Runner-Bridging-Header.h\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Profile;\n\t\t};\n\t\t97C147031CF9000F007C117D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t97C147041CF9000F007C117D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSUPPORTED_PLATFORMS = iphoneos;\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-O\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t97C147061CF9000F007C117D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = \"$(FLUTTER_BUILD_NUMBER)\";\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tINFOPLIST_FILE = Runner/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.sinasys.eCommerceFlutter;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"Runner/Runner-Bridging-Header.h\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t97C147071CF9000F007C117D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = \"$(FLUTTER_BUILD_NUMBER)\";\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tINFOPLIST_FILE = Runner/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.sinasys.eCommerceFlutter;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"Runner/Runner-Bridging-Header.h\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t97C146E91CF9000F007C117D /* Build configuration list for PBXProject \"Runner\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t97C147031CF9000F007C117D /* Debug */,\n\t\t\t\t97C147041CF9000F007C117D /* Release */,\n\t\t\t\t249021D3217E4FDB00AE95B9 /* Profile */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget \"Runner\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t97C147061CF9000F007C117D /* Debug */,\n\t\t\t\t97C147071CF9000F007C117D /* Release */,\n\t\t\t\t249021D4217E4FDB00AE95B9 /* Profile */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 97C146E61CF9000F007C117D /* Project object */;\n}\n"
  },
  {
    "path": "ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>PreviewsEnabled</key>\n\t<false/>\n</dict>\n</plist>\n"
  },
  {
    "path": "ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1300\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"97C146ED1CF9000F007C117D\"\n               BuildableName = \"Runner.app\"\n               BlueprintName = \"Runner\"\n               ReferencedContainer = \"container:Runner.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"97C146ED1CF9000F007C117D\"\n            BuildableName = \"Runner.app\"\n            BlueprintName = \"Runner\"\n            ReferencedContainer = \"container:Runner.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <Testables>\n      </Testables>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"97C146ED1CF9000F007C117D\"\n            BuildableName = \"Runner.app\"\n            BlueprintName = \"Runner\"\n            ReferencedContainer = \"container:Runner.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Profile\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"97C146ED1CF9000F007C117D\"\n            BuildableName = \"Runner.app\"\n            BlueprintName = \"Runner\"\n            ReferencedContainer = \"container:Runner.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "ios/Runner.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:Runner.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>PreviewsEnabled</key>\n\t<false/>\n</dict>\n</plist>\n"
  },
  {
    "path": "lib/core/app_color.dart",
    "content": "import 'package:flutter/material.dart' show Color;\n\nclass AppColor {\n  const AppColor._();\n\n  static const darkOrange = Color(0xFFEC6813);\n  static const lightOrange = Color(0xFFf8b89a);\n\n  static const darkGrey = Color(0xFFA6A3A0);\n  static const lightGrey = Color(0xFFE5E6E8);\n}\n"
  },
  {
    "path": "lib/core/app_data.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:e_commerce_flutter/src/model/product.dart';\nimport 'package:e_commerce_flutter/src/model/numerical.dart';\nimport 'package:e_commerce_flutter/src/model/categorical.dart';\nimport 'package:font_awesome_flutter/font_awesome_flutter.dart';\nimport 'package:e_commerce_flutter/src/model/product_category.dart';\nimport 'package:e_commerce_flutter/src/model/product_size_type.dart';\nimport 'package:e_commerce_flutter/src/model/recommended_product.dart';\nimport 'package:e_commerce_flutter/src/model/bottom_nav_bar_item.dart';\n\nclass AppData {\n  const AppData._();\n\n  static const String dummyText = 'Lorem Ipsum is simply dummy text of the printing and typesetting'\n      ' industry. Lorem Ipsum has been the industry\\'s standard dummy text'\n      ' ever since the 1500s, when an unknown printer took a galley of type'\n      ' and scrambled it to make a type specimen book.';\n\n  static List<Product> products = [\n    Product(\n      name: 'Samsung Galaxy A53 5G',\n      price: 460,\n      isAvailable: true,\n      off: 300,\n      quantity: 0,\n      images: [\n        'assets/images/a53_1.png',\n        'assets/images/a53_2.png',\n        'assets/images/a53_3.png',\n      ],\n      isFavorite: true,\n      rating: 1,\n      type: ProductType.mobile,\n    ),\n    Product(\n      name: 'Samsung Galaxy Tab S7 FE',\n      price: 380,\n      isAvailable: false,\n      off: 220,\n      quantity: 0,\n      images: [\n        'assets/images/tab_s7_fe_1.png',\n        'assets/images/tab_s7_fe_2.png',\n        'assets/images/tab_s7_fe_3.png',\n      ],\n      isFavorite: false,\n      rating: 4,\n      type: ProductType.tablet,\n    ),\n    Product(\n      name: 'Samsung Galaxy Tab S8+',\n      price: 650,\n      isAvailable: true,\n      off: null,\n      quantity: 0,\n      images: [\n        'assets/images/tab_s8_1.png',\n        'assets/images/tab_s8_2.png',\n        'assets/images/tab_s8_3.png',\n      ],\n      isFavorite: false,\n      rating: 3,\n      type: ProductType.tablet,\n    ),\n    Product(\n      name: 'Samsung Galaxy Watch 4',\n      price: 229,\n      isAvailable: true,\n      off: 200,\n      quantity: 0,\n      images: [\n        'assets/images/galaxy_watch_4_1.png',\n        'assets/images/galaxy_watch_4_2.png',\n        'assets/images/galaxy_watch_4_3.png',\n      ],\n      isFavorite: false,\n      rating: 5,\n      sizes: ProductSizeType(\n        categorical: [\n          Categorical(CategoricalType.small, true),\n          Categorical(CategoricalType.medium, false),\n          Categorical(CategoricalType.large, false),\n        ],\n      ),\n      type: ProductType.watch,\n    ),\n    Product(\n      name: 'Apple Watch 7',\n      price: 330,\n      isAvailable: true,\n      off: null,\n      quantity: 0,\n      images: [\n        'assets/images/apple_watch_series_7_1.png',\n        'assets/images/apple_watch_series_7_2.png',\n        'assets/images/apple_watch_series_7_3.png',\n      ],\n      isFavorite: false,\n      rating: 4,\n      sizes: ProductSizeType(\n        numerical: [\n          Numerical('41', true),\n          Numerical('45', false),\n        ],\n      ),\n      type: ProductType.watch,\n    ),\n    Product(\n      name: 'Beats studio 3',\n      price: 230,\n      isAvailable: true,\n      off: null,\n      quantity: 0,\n      images: [\n        'assets/images/beats_studio_3-1.png',\n        'assets/images/beats_studio_3-2.png',\n        'assets/images/beats_studio_3-3.png',\n        'assets/images/beats_studio_3-4.png',\n      ],\n      isFavorite: false,\n      rating: 2,\n      type: ProductType.headphone,\n    ),\n    Product(\n      name: 'Samsung Q60 A',\n      price: 497,\n      isAvailable: true,\n      off: null,\n      quantity: 0,\n      images: [\n        'assets/images/samsung_q_60_a_1.png',\n        'assets/images/samsung_q_60_a_2.png',\n      ],\n      isFavorite: false,\n      rating: 3,\n      sizes: ProductSizeType(\n        numerical: [\n          Numerical('43', true),\n          Numerical('50', false),\n          Numerical('55', false),\n        ],\n      ),\n      type: ProductType.tv,\n    ),\n    Product(\n      name: 'Sony x 80 J',\n      price: 498,\n      isAvailable: true,\n      off: null,\n      quantity: 0,\n      images: [\n        'assets/images/sony_x_80_j_1.png',\n        'assets/images/sony_x_80_j_2.png',\n      ],\n      isFavorite: false,\n      sizes: ProductSizeType(\n        numerical: [\n          Numerical('50', true),\n          Numerical('65', false),\n          Numerical('85', false),\n        ],\n      ),\n      rating: 2,\n      type: ProductType.tv,\n    ),\n  ];\n\n  static List<ProductCategory> categories = [\n    ProductCategory(\n      type: ProductType.all,\n      icon: Icons.all_inclusive,\n    ),\n    ProductCategory(\n      type: ProductType.mobile,\n      icon: FontAwesomeIcons.mobileScreenButton,\n    ),\n    ProductCategory(\n      type: ProductType.watch,\n      icon: Icons.watch,\n    ),\n    ProductCategory(\n      type: ProductType.tablet,\n      icon: FontAwesomeIcons.tablet,\n    ),\n    ProductCategory(\n      type: ProductType.headphone,\n      icon: Icons.headphones,\n    ),\n    ProductCategory(\n      type: ProductType.tv,\n      icon: Icons.tv,\n    ),\n  ];\n\n  static List<Color> randomColors = [\n    const Color(0xFFFCE4EC),\n    const Color(0xFFF3E5F5),\n    const Color(0xFFEDE7F6),\n    const Color(0xFFE3F2FD),\n    const Color(0xFFE0F2F1),\n    const Color(0xFFF1F8E9),\n    const Color(0xFFFFF8E1),\n    const Color(0xFFECEFF1),\n  ];\n\n  static const Color lightOrangeColor = Color(0xFFEC6813);\n\n  static List<BottomNavBarItem> bottomNavBarItems = [\n    const BottomNavBarItem(\n      \"Home\",\n      Icon(Icons.home),\n    ),\n    const BottomNavBarItem(\n      \"Favorite\",\n      Icon(Icons.favorite),\n    ),\n    const BottomNavBarItem(\n      \"Cart\",\n      Icon(Icons.shopping_cart),\n    ),\n    const BottomNavBarItem(\n      \"Profile\",\n      Icon(Icons.person),\n    ),\n  ];\n\n  static List<RecommendedProduct> recommendedProducts = [\n    RecommendedProduct(\n      cardBackgroundColor: const Color(0xFFEC6813),\n    ),\n    RecommendedProduct(\n      cardBackgroundColor: const Color(0xFF3081E1),\n      buttonBackgroundColor: const Color(0xFF9C46FF),\n      buttonTextColor: Colors.white,\n    ),\n  ];\n}\n"
  },
  {
    "path": "lib/core/app_theme.dart",
    "content": "import 'package:flutter/material.dart';\n\nclass AppTheme {\n  const AppTheme._();\n\n  static ThemeData lightAppTheme = ThemeData(\n    elevatedButtonTheme: ElevatedButtonThemeData(\n      style: ElevatedButton.styleFrom(\n        padding: const EdgeInsets.all(12),\n        backgroundColor: const Color(0xFFf16b26),\n        shape: RoundedRectangleBorder(\n          borderRadius: BorderRadius.circular(12),\n        ),\n      ),\n    ),\n    textButtonTheme: TextButtonThemeData(\n      style: TextButton.styleFrom(foregroundColor: Colors.deepOrange),\n    ),\n    iconTheme: const IconThemeData(color: Color(0xFFA6A3A0)),\n    textTheme: const TextTheme(\n      displayLarge: TextStyle(\n        fontSize: 20,\n        fontWeight: FontWeight.bold,\n        color: Colors.black,\n      ),\n      displayMedium: TextStyle(\n        fontSize: 19,\n        fontWeight: FontWeight.w500,\n        color: Colors.black,\n      ),\n      displaySmall: TextStyle(\n        fontSize: 18,\n        fontWeight: FontWeight.w500,\n        color: Colors.black,\n      ),\n      headlineMedium: TextStyle(\n        fontSize: 16,\n        fontWeight: FontWeight.w500,\n        color: Colors.black,\n      ),\n      headlineSmall: TextStyle(fontSize: 15, color: Colors.grey),\n      titleLarge: TextStyle(fontSize: 12),\n    ),\n    appBarTheme: const AppBarTheme(\n      backgroundColor: Colors.transparent,\n      elevation: 0,\n      centerTitle: true,\n    ),\n  );\n}\n"
  },
  {
    "path": "lib/core/extensions.dart",
    "content": "import 'dart:math' show Random;\nimport 'package:flutter/material.dart' show Color;\nimport 'package:e_commerce_flutter/core/app_data.dart';\n\nextension ColorExtension on Color {\n  static Color get randomColor {\n    Random random = Random();\n    int randNumber = random.nextInt(AppData.randomColors.length);\n    return AppData.randomColors[randNumber];\n  }\n}\n\nextension IterableExtension<T> on Iterable<T> {\n  Iterable<E> mapWithIndex<E>(E Function(int index, T value) f) {\n    return Iterable.generate(length).map((i) => f(i, elementAt(i)));\n  }\n}\n\nextension StringExtension on String {\n  String get nextLine {\n    if (length < 15) {\n      return this;\n    } else {\n      return \"${substring(0, 15)} \\n${substring(15, length)}\";\n    }\n  }\n}\n"
  },
  {
    "path": "lib/main.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'dart:ui' show PointerDeviceKind;\nimport 'package:e_commerce_flutter/core/app_theme.dart';\nimport 'package:e_commerce_flutter/src/view/screen/home_screen.dart';\n\nvoid main() => runApp(const MyApp());\n\nclass MyApp extends StatelessWidget {\n  const MyApp({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      scrollBehavior: const MaterialScrollBehavior().copyWith(\n        dragDevices: {\n          PointerDeviceKind.mouse,\n          PointerDeviceKind.touch,\n        },\n      ),\n      debugShowCheckedModeBanner: false,\n      home: const HomeScreen(),\n      theme: AppTheme.lightAppTheme,\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/controller/product_controller.dart",
    "content": "import 'package:get/get_rx/src/rx_types/rx_types.dart';\nimport 'package:e_commerce_flutter/core/app_data.dart';\nimport 'package:e_commerce_flutter/src/model/product.dart';\nimport 'package:e_commerce_flutter/src/model/numerical.dart';\nimport 'package:get/get_state_manager/get_state_manager.dart';\nimport 'package:e_commerce_flutter/src/model/product_category.dart';\nimport 'package:e_commerce_flutter/src/model/product_size_type.dart';\n\nclass ProductController extends GetxController {\n  List<Product> allProducts = AppData.products;\n  RxList<Product> filteredProducts = AppData.products.obs;\n  RxList<Product> cartProducts = <Product>[].obs;\n  RxList<ProductCategory> categories = AppData.categories.obs;\n  RxInt totalPrice = 0.obs;\n\n  void filterItemsByCategory(int index) {\n    for (ProductCategory element in categories) {\n      element.isSelected = false;\n    }\n    categories[index].isSelected = true;\n\n    if (categories[index].type == ProductType.all) {\n      filteredProducts.assignAll(allProducts);\n    } else {\n      filteredProducts.assignAll(allProducts.where((item) {\n        return item.type == categories[index].type;\n      }).toList());\n    }\n    update();\n  }\n\n  void isFavorite(int index) {\n    filteredProducts[index].isFavorite = !filteredProducts[index].isFavorite;\n    update();\n  }\n\n  void addToCart(Product product) {\n    product.quantity++;\n    cartProducts.add(product);\n    cartProducts.assignAll(cartProducts);\n    calculateTotalPrice();\n  }\n\n  void increaseItemQuantity(Product product) {\n    product.quantity++;\n    calculateTotalPrice();\n    update();\n  }\n\n  void decreaseItemQuantity(Product product) {\n    product.quantity--;\n    calculateTotalPrice();\n    update();\n  }\n\n  bool isPriceOff(Product product) => product.off != null;\n\n  bool get isEmptyCart => cartProducts.isEmpty;\n\n  bool isNominal(Product product) => product.sizes?.numerical != null;\n\n  void calculateTotalPrice() {\n    totalPrice.value = 0;\n    for (var element in cartProducts) {\n      if (isPriceOff(element)) {\n        totalPrice.value += element.quantity * element.off!;\n      } else {\n        totalPrice.value += element.quantity * element.price;\n      }\n    }\n  }\n\n  getFavoriteItems() {\n    filteredProducts.assignAll(\n      allProducts.where((item) => item.isFavorite),\n    );\n  }\n\n  getCartItems() {\n    cartProducts.assignAll(\n      allProducts.where((item) => item.quantity > 0),\n    );\n  }\n\n  getAllItems() {\n    filteredProducts.assignAll(allProducts);\n  }\n\n  List<Numerical> sizeType(Product product) {\n    ProductSizeType? productSize = product.sizes;\n    List<Numerical> numericalList = [];\n\n    if (productSize?.numerical != null) {\n      for (var element in productSize!.numerical!) {\n        numericalList.add(Numerical(element.numerical, element.isSelected));\n      }\n    }\n\n    if (productSize?.categorical != null) {\n      for (var element in productSize!.categorical!) {\n        numericalList.add(\n          Numerical(\n            element.categorical.name,\n            element.isSelected,\n          ),\n        );\n      }\n    }\n\n    return numericalList;\n  }\n\n  void switchBetweenProductSizes(Product product, int index) {\n    sizeType(product).forEach((element) {\n      element.isSelected = false;\n    });\n\n    if (product.sizes?.categorical != null) {\n      for (var element in product.sizes!.categorical!) {\n        element.isSelected = false;\n      }\n\n      product.sizes?.categorical![index].isSelected = true;\n    }\n\n    if (product.sizes?.numerical != null) {\n      for (var element in product.sizes!.numerical!) {\n        element.isSelected = false;\n      }\n\n      product.sizes?.numerical![index].isSelected = true;\n    }\n\n    update();\n  }\n\n  String getCurrentSize(Product product) {\n    String currentSize = \"\";\n    if (product.sizes?.categorical != null) {\n      for (var element in product.sizes!.categorical!) {\n        if (element.isSelected) {\n          currentSize = \"Size: ${element.categorical.name}\";\n        }\n      }\n    }\n\n    if (product.sizes?.numerical != null) {\n      for (var element in product.sizes!.numerical!) {\n        if (element.isSelected) {\n          currentSize = \"Size: ${element.numerical}\";\n        }\n      }\n    }\n    return currentSize;\n  }\n}\n"
  },
  {
    "path": "lib/src/model/bottom_nav_bar_item.dart",
    "content": "import 'package:e_commerce_flutter/core/app_data.dart';\nimport 'package:flutter/foundation.dart' show immutable;\nimport 'package:flutter/material.dart' show Color, Icon;\n\n@immutable\nclass BottomNavBarItem {\n  final String title;\n  final Icon icon;\n  final Color activeColor;\n\n  const BottomNavBarItem(\n    this.title,\n    this.icon, {\n    this.activeColor = AppData.lightOrangeColor,\n  });\n}\n"
  },
  {
    "path": "lib/src/model/categorical.dart",
    "content": "enum CategoricalType { small, medium, large }\n\nclass Categorical {\n  CategoricalType categorical;\n  bool isSelected = false;\n\n  Categorical(this.categorical, this.isSelected);\n}\n"
  },
  {
    "path": "lib/src/model/numerical.dart",
    "content": "class Numerical {\n  String numerical;\n  bool isSelected = false;\n\n  Numerical(this.numerical, this.isSelected);\n}\n"
  },
  {
    "path": "lib/src/model/product.dart",
    "content": "import 'package:e_commerce_flutter/core/app_data.dart';\nimport 'package:e_commerce_flutter/src/model/product_size_type.dart';\n\nenum ProductType { all, watch, mobile, headphone, tablet, tv }\n\nclass Product {\n  String name;\n  int price;\n  int? off;\n  String about;\n  bool isAvailable;\n  ProductSizeType? sizes;\n  int _quantity;\n  List<String> images;\n  bool isFavorite;\n  double rating;\n  ProductType type;\n\n  int get quantity => _quantity;\n\n  set quantity(int newQuantity) {\n    if (newQuantity >= 0) _quantity = newQuantity;\n  }\n\n  Product({\n    this.sizes,\n    this.about = AppData.dummyText,\n    required this.name,\n    required this.price,\n    required this.isAvailable,\n    required this.off,\n    required int quantity,\n    required this.images,\n    required this.isFavorite,\n    required this.rating,\n    required this.type,\n  }) : _quantity = quantity;\n}\n"
  },
  {
    "path": "lib/src/model/product_category.dart",
    "content": "import 'package:e_commerce_flutter/src/model/product.dart';\nimport 'package:flutter/material.dart' show IconData;\n\nclass ProductCategory {\n  ProductType type;\n  bool isSelected;\n  IconData icon;\n\n  ProductCategory({\n    required this.type,\n    this.isSelected = false,\n    required this.icon,\n  });\n}\n"
  },
  {
    "path": "lib/src/model/product_size_type.dart",
    "content": "import 'package:e_commerce_flutter/src/model/categorical.dart';\nimport 'package:e_commerce_flutter/src/model/numerical.dart';\n\nclass ProductSizeType {\n  List<Numerical>? numerical;\n  List<Categorical>? categorical;\n\n  ProductSizeType({this.numerical, this.categorical});\n}\n"
  },
  {
    "path": "lib/src/model/recommended_product.dart",
    "content": "import 'package:e_commerce_flutter/core/app_color.dart';\nimport 'package:flutter/material.dart' show Color, Colors;\n\nclass RecommendedProduct {\n  Color? cardBackgroundColor;\n  Color? buttonTextColor;\n  Color? buttonBackgroundColor;\n  String imagePath;\n\n  RecommendedProduct({\n    this.cardBackgroundColor,\n    this.buttonTextColor = AppColor.darkOrange,\n    this.buttonBackgroundColor = Colors.white,\n    this.imagePath = \"assets/images/shopping.png\",\n  });\n}\n"
  },
  {
    "path": "lib/src/view/animation/animated_switcher_wrapper.dart",
    "content": "import 'package:flutter/material.dart';\n\nclass AnimatedSwitcherWrapper extends StatelessWidget {\n  final Widget child;\n\n  const AnimatedSwitcherWrapper({\n    super.key,\n    required this.child,\n  });\n\n  @override\n  Widget build(BuildContext context) {\n    return AnimatedSwitcher(\n      duration: const Duration(milliseconds: 500),\n      transitionBuilder: (Widget child, Animation<double> animation) {\n        return ScaleTransition(scale: animation, child: child);\n      },\n      child: child,\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/view/animation/open_container_wrapper.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:animations/animations.dart';\nimport 'package:e_commerce_flutter/src/model/product.dart';\nimport 'package:e_commerce_flutter/src/view/screen/product_detail_screen.dart';\n\nclass OpenContainerWrapper extends StatelessWidget {\n  const OpenContainerWrapper({\n    super.key,\n    required this.child,\n    required this.product,\n  });\n\n  final Widget child;\n  final Product product;\n\n  @override\n  Widget build(BuildContext context) {\n    return OpenContainer(\n      closedShape: const RoundedRectangleBorder(\n        borderRadius: BorderRadius.all(Radius.circular(25.0)),\n      ),\n      closedColor: const Color(0xFFE5E6E8),\n      transitionType: ContainerTransitionType.fade,\n      transitionDuration: const Duration(milliseconds: 850),\n      closedBuilder: (_, VoidCallback openContainer) {\n        return InkWell(onTap: openContainer, child: child);\n      },\n      openBuilder: (_, __) => ProductDetailScreen(product),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/view/animation/page_transition_switcher_wrapper.dart",
    "content": "import 'package:animations/animations.dart';\nimport 'package:flutter/material.dart';\n\nclass PageTransitionSwitcherWrapper extends StatelessWidget {\n  const PageTransitionSwitcherWrapper({\n    super.key,\n    required this.child,\n    this.duration = const Duration(seconds: 1),\n  });\n\n  final Widget child;\n  final Duration duration;\n\n  @override\n  Widget build(BuildContext context) {\n    return PageTransitionSwitcher(\n      duration: duration,\n      transitionBuilder: (\n        Widget child,\n        Animation<double> animation,\n        Animation<double> secondaryAnimation,\n      ) {\n        return FadeThroughTransition(\n          animation: animation,\n          secondaryAnimation: secondaryAnimation,\n          child: child,\n        );\n      },\n      child: child,\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/view/screen/cart_screen.dart",
    "content": "import 'package:get/get.dart';\nimport 'package:flutter/material.dart';\nimport 'package:e_commerce_flutter/core/extensions.dart';\nimport 'package:e_commerce_flutter/src/model/product.dart';\nimport 'package:e_commerce_flutter/src/view/widget/empty_cart.dart';\nimport 'package:e_commerce_flutter/src/controller/product_controller.dart';\nimport 'package:e_commerce_flutter/src/view/animation/animated_switcher_wrapper.dart';\n\nfinal ProductController controller = Get.put(ProductController());\n\nclass CartScreen extends StatelessWidget {\n  const CartScreen({super.key});\n\n  PreferredSizeWidget _appBar(BuildContext context) {\n    return AppBar(\n      title: Text(\n        \"My cart\",\n        style: Theme.of(context).textTheme.displayLarge,\n      ),\n    );\n  }\n\n  Widget cartList() {\n    return SingleChildScrollView(\n      child: Column(\n        children: controller.cartProducts.mapWithIndex((index, _) {\n          Product product = controller.cartProducts[index];\n          return Container(\n            width: double.infinity,\n            margin: const EdgeInsets.all(15),\n            padding: const EdgeInsets.symmetric(\n              vertical: 15,\n              horizontal: 5,\n            ),\n            decoration: BoxDecoration(\n              color: Colors.grey[200]?.withValues(alpha: 0.6),\n              borderRadius: BorderRadius.circular(10),\n            ),\n            child: Row(\n              spacing: 5,\n              children: [\n                Expanded(\n                  child: Container(\n                    padding: const EdgeInsets.all(5),\n                    decoration: BoxDecoration(\n                      borderRadius: BorderRadius.circular(10),\n                      color: ColorExtension.randomColor,\n                    ),\n                    child: ClipRRect(\n                      borderRadius: const BorderRadius.all(Radius.circular(20)),\n                      child: ClipRRect(\n                        borderRadius: BorderRadius.circular(10),\n                        child: Padding(\n                          padding: const EdgeInsets.all(5),\n                          child: Image.asset(\n                            product.images[0],\n                            width: 100,\n                            height: 90,\n                          ),\n                        ),\n                      ),\n                    ),\n                  ),\n                ),\n                Expanded(\n                  child: Column(\n                    crossAxisAlignment: CrossAxisAlignment.start,\n                    children: [\n                      Text(\n                        product.name.nextLine,\n                        maxLines: 3,\n                        overflow: TextOverflow.ellipsis,\n                        style: const TextStyle(\n                          fontWeight: FontWeight.w600,\n                          fontSize: 15,\n                        ),\n                      ),\n                      const SizedBox(height: 5),\n                      Text(\n                        controller.getCurrentSize(product),\n                        style: TextStyle(\n                          color: Colors.black.withValues(alpha: 0.5),\n                          fontWeight: FontWeight.w400,\n                        ),\n                      ),\n                      const SizedBox(height: 5),\n                      Text(\n                        controller.isPriceOff(product) ? \"\\$${product.off}\" : \"\\$${product.price}\",\n                        style: const TextStyle(\n                          fontWeight: FontWeight.w900,\n                          fontSize: 23,\n                        ),\n                      ),\n                    ],\n                  ),\n                ),\n                Container(\n                  decoration: BoxDecoration(\n                    color: Colors.white,\n                    borderRadius: BorderRadius.circular(10),\n                  ),\n                  child: Row(\n                    mainAxisAlignment: MainAxisAlignment.center,\n                    mainAxisSize: MainAxisSize.min,\n                    children: [\n                      IconButton(\n                        splashRadius: 10.0,\n                        onPressed: () => controller.decreaseItemQuantity(product),\n                        icon: const Icon(\n                          Icons.remove,\n                          color: Color(0xFFEC6813),\n                        ),\n                      ),\n                      GetBuilder<ProductController>(\n                        builder: (ProductController controller) {\n                          return AnimatedSwitcherWrapper(\n                            child: Text(\n                              '${controller.cartProducts[index].quantity}',\n                              key: ValueKey<int>(\n                                controller.cartProducts[index].quantity,\n                              ),\n                              style: const TextStyle(\n                                fontSize: 18,\n                                fontWeight: FontWeight.w700,\n                              ),\n                            ),\n                          );\n                        },\n                      ),\n                      IconButton(\n                        splashRadius: 10.0,\n                        onPressed: () => controller.increaseItemQuantity(product),\n                        icon: const Icon(Icons.add, color: Color(0xFFEC6813)),\n                      ),\n                    ],\n                  ),\n                )\n              ],\n            ),\n          );\n        }).toList(),\n      ),\n    );\n  }\n\n  Widget bottomBarTitle() {\n    return Container(\n      margin: const EdgeInsets.only(bottom: 15),\n      padding: const EdgeInsets.symmetric(horizontal: 30),\n      child: Row(\n        mainAxisAlignment: MainAxisAlignment.spaceBetween,\n        children: [\n          const Text(\n            \"Total\",\n            style: TextStyle(fontSize: 22, fontWeight: FontWeight.w400),\n          ),\n          Obx(\n            () {\n              return AnimatedSwitcherWrapper(\n                child: Text(\n                  \"\\$${controller.totalPrice.value}\",\n                  key: ValueKey<int>(controller.totalPrice.value),\n                  style: const TextStyle(\n                    fontSize: 25,\n                    fontWeight: FontWeight.w900,\n                    color: Color(0xFFEC6813),\n                  ),\n                ),\n              );\n            },\n          )\n        ],\n      ),\n    );\n  }\n\n  Widget bottomBarButton() {\n    return SizedBox(\n      width: double.infinity,\n      child: Padding(\n        padding: const EdgeInsets.only(left: 30, right: 30, bottom: 20),\n        child: ElevatedButton(\n          style: ElevatedButton.styleFrom(padding: const EdgeInsets.all(20)),\n          onPressed: controller.isEmptyCart ? null : () {},\n          child: const Text(\"Buy Now\"),\n        ),\n      ),\n    );\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    controller.getCartItems();\n    return Scaffold(\n      appBar: _appBar(context),\n      body: Column(\n        crossAxisAlignment: CrossAxisAlignment.center,\n        children: [\n          Expanded(\n            child: !controller.isEmptyCart ? cartList() : const EmptyCart(),\n          ),\n          bottomBarTitle(),\n          bottomBarButton()\n        ],\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/view/screen/favorite_screen.dart",
    "content": "import 'package:get/get.dart';\nimport 'package:flutter/material.dart';\nimport 'package:e_commerce_flutter/src/view/screen/cart_screen.dart';\nimport 'package:e_commerce_flutter/src/controller/product_controller.dart';\nimport 'package:e_commerce_flutter/src/view/widget/product_grid_view.dart';\n\nclass FavoriteScreen extends StatelessWidget {\n  const FavoriteScreen({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    controller.getFavoriteItems();\n    return Scaffold(\n      appBar: AppBar(\n        title: Text(\n          \"Favorites\",\n          style: Theme.of(context).textTheme.displayLarge,\n        ),\n      ),\n      body: Padding(\n        padding: const EdgeInsets.all(20),\n        child: GetBuilder(\n          builder: (ProductController controller) {\n            return ProductGridView(\n              items: controller.filteredProducts,\n              likeButtonPressed: (index) => controller.isFavorite(index),\n              isPriceOff: (product) => controller.isPriceOff(product),\n            );\n          },\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/view/screen/home_screen.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:e_commerce_flutter/core/app_data.dart';\nimport 'package:stylish_bottom_bar/stylish_bottom_bar.dart';\nimport 'package:e_commerce_flutter/src/view/screen/cart_screen.dart';\nimport 'package:e_commerce_flutter/src/view/screen/profile_screen.dart';\nimport 'package:e_commerce_flutter/src/view/screen/favorite_screen.dart';\nimport 'package:e_commerce_flutter/src/view/screen/product_list_screen.dart';\nimport 'package:e_commerce_flutter/src/view/animation/page_transition_switcher_wrapper.dart';\n\nclass HomeScreen extends StatefulWidget {\n  const HomeScreen({super.key});\n\n  static const List<Widget> screens = [\n    ProductListScreen(),\n    FavoriteScreen(),\n    CartScreen(),\n    ProfileScreen(),\n  ];\n\n  @override\n  State<HomeScreen> createState() => _HomeScreenState();\n}\n\nclass _HomeScreenState extends State<HomeScreen> {\n  int newIndex = 0;\n\n  @override\n  Widget build(BuildContext context) {\n    return Center(\n      child: ConstrainedBox(\n        constraints: const BoxConstraints(maxWidth: 800),\n        child: Scaffold(\n          bottomNavigationBar: StylishBottomBar(\n            currentIndex: newIndex,\n            onTap: (index) {\n              newIndex = index;\n              setState(() {});\n            },\n            items: AppData.bottomNavBarItems\n                .map(\n                  (item) => BottomBarItem(\n                    backgroundColor: item.activeColor,\n                    icon: item.icon,\n                    title: Text(\n                      item.title,\n                      style: TextStyle(\n                        color: item.activeColor,\n                      ),\n                    ),\n                  ),\n                )\n                .toList(),\n            option: BubbleBarOptions(\n              opacity: 0.3,\n              unselectedIconColor: Colors.grey,\n              borderRadius: BorderRadius.circular(\n                15.0,\n              ),\n            ),\n          ),\n          body: PageTransitionSwitcherWrapper(\n            child: HomeScreen.screens[newIndex],\n          ),\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/view/screen/product_detail_screen.dart",
    "content": "import 'package:get/get.dart';\nimport 'package:flutter/material.dart';\nimport 'package:e_commerce_flutter/core/app_color.dart';\nimport 'package:e_commerce_flutter/src/model/product.dart';\nimport 'package:flutter_rating_bar/flutter_rating_bar.dart';\nimport 'package:font_awesome_flutter/font_awesome_flutter.dart';\nimport 'package:e_commerce_flutter/src/view/widget/carousel_slider.dart';\nimport 'package:e_commerce_flutter/src/controller/product_controller.dart';\n\nfinal ProductController controller = Get.put(ProductController());\n\nclass ProductDetailScreen extends StatelessWidget {\n  final Product product;\n\n  const ProductDetailScreen(this.product, {super.key});\n\n  PreferredSizeWidget _appBar(BuildContext context) {\n    return AppBar(\n      backgroundColor: Colors.transparent,\n      elevation: 0,\n      leading: IconButton(\n        onPressed: () => Navigator.pop(context),\n        icon: const Icon(Icons.arrow_back, color: Colors.black),\n      ),\n    );\n  }\n\n  Widget productPageView(double width, double height) {\n    return Container(\n      height: height * 0.42,\n      width: width,\n      decoration: const BoxDecoration(\n        color: Color(0xFFE5E6E8),\n        borderRadius: BorderRadius.only(\n          bottomRight: Radius.circular(200),\n          bottomLeft: Radius.circular(200),\n        ),\n      ),\n      child: CarouselSlider(items: product.images),\n    );\n  }\n\n  Widget _ratingBar(BuildContext context) {\n    return Wrap(\n      spacing: 30,\n      crossAxisAlignment: WrapCrossAlignment.center,\n      children: [\n        RatingBar.builder(\n          initialRating: product.rating,\n          direction: Axis.horizontal,\n          itemBuilder: (_, __) => const FaIcon(\n            FontAwesomeIcons.solidStar,\n            color: Colors.amber,\n          ),\n          onRatingUpdate: (_) {},\n        ),\n        Text(\n          \"(4500 Reviews)\",\n          style: Theme.of(context).textTheme.displaySmall?.copyWith(\n                fontWeight: FontWeight.w300,\n              ),\n        )\n      ],\n    );\n  }\n\n  Widget productSizesListView() {\n    return ListView.builder(\n      scrollDirection: Axis.horizontal,\n      itemCount: controller.sizeType(product).length,\n      itemBuilder: (_, index) {\n        return InkWell(\n          onTap: () => controller.switchBetweenProductSizes(product, index),\n          child: AnimatedContainer(\n            margin: const EdgeInsets.only(right: 5, left: 5),\n            alignment: Alignment.center,\n            width: controller.isNominal(product) ? 40 : 70,\n            decoration: BoxDecoration(\n              color: controller.sizeType(product)[index].isSelected == false ? Colors.white : AppColor.lightOrange,\n              borderRadius: BorderRadius.circular(10),\n              border: Border.all(\n                color: Colors.grey,\n                width: 0.4,\n              ),\n            ),\n            duration: const Duration(milliseconds: 300),\n            child: FittedBox(\n              child: Text(\n                controller.sizeType(product)[index].numerical,\n                style: const TextStyle(\n                  fontWeight: FontWeight.w500,\n                  fontSize: 15,\n                ),\n              ),\n            ),\n          ),\n        );\n      },\n    );\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    double height = MediaQuery.of(context).size.height;\n    double width = MediaQuery.of(context).size.width;\n    return SafeArea(\n      child: Scaffold(\n        extendBodyBehindAppBar: true,\n        appBar: _appBar(context),\n        body: SingleChildScrollView(\n          child: Center(\n            child: ConstrainedBox(\n              constraints: const BoxConstraints(maxWidth: 800),\n              child: Column(\n                crossAxisAlignment: CrossAxisAlignment.start,\n                children: [\n                  productPageView(width, height),\n                  const SizedBox(height: 20),\n                  Padding(\n                    padding: const EdgeInsets.all(20),\n                    child: Column(\n                      crossAxisAlignment: CrossAxisAlignment.start,\n                      children: [\n                        Text(\n                          product.name,\n                          style: Theme.of(context).textTheme.displayMedium,\n                        ),\n                        const SizedBox(height: 10),\n                        _ratingBar(context),\n                        const SizedBox(height: 10),\n                        Row(\n                          children: [\n                            Text(\n                              product.off != null ? \"\\$${product.off}\" : \"\\$${product.price}\",\n                              style: Theme.of(context).textTheme.displayLarge,\n                            ),\n                            const SizedBox(width: 3),\n                            Visibility(\n                              visible: product.off != null ? true : false,\n                              child: Text(\n                                \"\\$${product.price}\",\n                                style: const TextStyle(\n                                  decoration: TextDecoration.lineThrough,\n                                  color: Colors.grey,\n                                  fontWeight: FontWeight.w500,\n                                ),\n                              ),\n                            ),\n                            const Spacer(),\n                            Text(\n                              product.isAvailable ? \"Available in stock\" : \"Not available\",\n                              style: const TextStyle(fontWeight: FontWeight.w500),\n                            )\n                          ],\n                        ),\n                        const SizedBox(height: 30),\n                        Text(\n                          \"About\",\n                          style: Theme.of(context).textTheme.headlineMedium,\n                        ),\n                        const SizedBox(height: 10),\n                        Text(product.about),\n                        const SizedBox(height: 20),\n                        SizedBox(\n                          height: 40,\n                          child: GetBuilder<ProductController>(\n                            builder: (_) => productSizesListView(),\n                          ),\n                        ),\n                        const SizedBox(height: 20),\n                        SizedBox(\n                          width: double.infinity,\n                          child: ElevatedButton(\n                            onPressed: product.isAvailable ? () => controller.addToCart(product) : null,\n                            child: const Text(\"Add to cart\"),\n                          ),\n                        )\n                      ],\n                    ),\n                  )\n                ],\n              ),\n            ),\n          ),\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/view/screen/product_list_screen.dart",
    "content": "import 'package:get/get.dart';\nimport 'package:flutter/material.dart';\nimport 'package:e_commerce_flutter/core/app_data.dart';\nimport 'package:e_commerce_flutter/core/app_color.dart';\nimport 'package:e_commerce_flutter/src/controller/product_controller.dart';\nimport 'package:e_commerce_flutter/src/view/widget/product_grid_view.dart';\nimport 'package:e_commerce_flutter/src/view/widget/list_item_selector.dart';\n\nenum AppbarActionType { leading, trailing }\n\nfinal ProductController controller = Get.put(ProductController());\n\nclass ProductListScreen extends StatelessWidget {\n  const ProductListScreen({super.key});\n\n  Widget appBarActionButton(AppbarActionType type) {\n    IconData icon = Icons.ac_unit_outlined;\n\n    if (type == AppbarActionType.trailing) {\n      icon = Icons.search;\n    }\n\n    return Container(\n      margin: const EdgeInsets.all(8),\n      decoration: BoxDecoration(\n        borderRadius: BorderRadius.circular(10),\n        color: AppColor.lightGrey,\n      ),\n      child: IconButton(\n        padding: const EdgeInsets.all(8),\n        constraints: const BoxConstraints(),\n        onPressed: () {},\n        icon: Icon(icon, color: Colors.black),\n      ),\n    );\n  }\n\n  PreferredSize get _appBar {\n    return PreferredSize(\n      preferredSize: const Size.fromHeight(100),\n      child: SafeArea(\n        child: Padding(\n          padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 10),\n          child: Row(\n            mainAxisAlignment: MainAxisAlignment.spaceBetween,\n            children: [\n              appBarActionButton(AppbarActionType.leading),\n              appBarActionButton(AppbarActionType.trailing),\n            ],\n          ),\n        ),\n      ),\n    );\n  }\n\n  Widget _recommendedProductListView(BuildContext context) {\n    return SizedBox(\n      height: 170,\n      child: ListView.builder(\n        padding: const EdgeInsets.symmetric(vertical: 10),\n        shrinkWrap: true,\n        scrollDirection: Axis.horizontal,\n        itemCount: AppData.recommendedProducts.length,\n        itemBuilder: (_, index) {\n          return Padding(\n            padding: const EdgeInsets.only(right: 20),\n            child: Container(\n              width: 300,\n              decoration: BoxDecoration(\n                color: AppData.recommendedProducts[index].cardBackgroundColor,\n                borderRadius: BorderRadius.circular(15),\n              ),\n              child: Row(\n                children: [\n                  Padding(\n                    padding: const EdgeInsets.only(left: 20),\n                    child: Column(\n                      crossAxisAlignment: CrossAxisAlignment.start,\n                      mainAxisAlignment: MainAxisAlignment.center,\n                      children: [\n                        Text(\n                          '30% OFF DURING \\nCOVID 19',\n                          style: Theme.of(context).textTheme.displaySmall?.copyWith(\n                                color: Colors.white,\n                              ),\n                        ),\n                        const SizedBox(height: 8),\n                        ElevatedButton(\n                          onPressed: () {},\n                          style: ElevatedButton.styleFrom(\n                            backgroundColor: AppData.recommendedProducts[index].buttonBackgroundColor,\n                            elevation: 0,\n                            padding: const EdgeInsets.symmetric(horizontal: 18),\n                            shape: RoundedRectangleBorder(\n                              borderRadius: BorderRadius.circular(18),\n                            ),\n                          ),\n                          child: Text(\n                            \"Get Now\",\n                            style: TextStyle(\n                              color: AppData.recommendedProducts[index].buttonTextColor!,\n                            ),\n                          ),\n                        )\n                      ],\n                    ),\n                  ),\n                  const Spacer(),\n                  Image.asset(\n                    AppData.recommendedProducts[index].imagePath,\n                    height: 125,\n                    fit: BoxFit.cover,\n                  )\n                ],\n              ),\n            ),\n          );\n        },\n      ),\n    );\n  }\n\n  Widget _topCategoriesHeader(BuildContext context) {\n    return Padding(\n      padding: const EdgeInsets.only(top: 10),\n      child: Row(\n        mainAxisAlignment: MainAxisAlignment.spaceBetween,\n        children: [\n          Text(\n            \"Top categories\",\n            style: Theme.of(context).textTheme.headlineMedium,\n          ),\n          TextButton(\n            onPressed: () {},\n            style: TextButton.styleFrom(foregroundColor: AppColor.darkOrange),\n            child: Text(\n              \"SEE ALL\",\n              style: Theme.of(context).textTheme.titleLarge?.copyWith(\n                    color: Colors.deepOrange.withValues(alpha: 0.7),\n                  ),\n            ),\n          )\n        ],\n      ),\n    );\n  }\n\n  Widget _topCategoriesListView() {\n    return ListItemSelector(\n      categories: controller.categories,\n      onItemPressed: (index) {\n        controller.filterItemsByCategory(index);\n      },\n    );\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    controller.getAllItems();\n    return Scaffold(\n      extendBodyBehindAppBar: true,\n      appBar: _appBar,\n      body: SafeArea(\n        child: SingleChildScrollView(\n          child: Padding(\n            padding: const EdgeInsets.all(20),\n            child: Column(\n              crossAxisAlignment: CrossAxisAlignment.start,\n              children: [\n                Text(\n                  \"Hello Sina\",\n                  style: Theme.of(context).textTheme.displayLarge,\n                ),\n                Text(\n                  \"Lets gets somethings?\",\n                  style: Theme.of(context).textTheme.headlineSmall,\n                ),\n                _recommendedProductListView(context),\n                _topCategoriesHeader(context),\n                _topCategoriesListView(),\n                GetBuilder(\n                  builder: (ProductController controller) {\n                    return ProductGridView(\n                      items: controller.filteredProducts,\n                      likeButtonPressed: (index) => controller.isFavorite(index),\n                      isPriceOff: (product) => controller.isPriceOff(product),\n                    );\n                  },\n                ),\n              ],\n            ),\n          ),\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/view/screen/profile_screen.dart",
    "content": "import 'package:flutter/material.dart';\n\nclass ProfileScreen extends StatelessWidget {\n  const ProfileScreen({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      body: Column(\n        mainAxisAlignment: MainAxisAlignment.center,\n        children: [\n          Expanded(child: Image.asset('assets/images/profile_pic.png')),\n          const Text(\n            \"Hello Sina!\",\n            style: TextStyle(fontWeight: FontWeight.bold, fontSize: 25),\n          ),\n          Row(\n            mainAxisAlignment: MainAxisAlignment.center,\n            children: [\n              Image.asset('assets/images/github.png', width: 60),\n              const SizedBox(width: 10),\n              const Text(\n                \"https://github.com/SinaSys\",\n                style: TextStyle(fontSize: 20),\n              )\n            ],\n          )\n        ],\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/view/widget/carousel_slider.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:e_commerce_flutter/core/app_color.dart';\nimport 'package:smooth_page_indicator/smooth_page_indicator.dart';\n\nclass CarouselSlider extends StatefulWidget {\n  const CarouselSlider({\n    super.key,\n    required this.items,\n  });\n\n  final List<String> items;\n\n  @override\n  State<CarouselSlider> createState() => _CarouselSliderState();\n}\n\nclass _CarouselSliderState extends State<CarouselSlider> {\n  int newIndex = 0;\n\n  @override\n  Widget build(BuildContext context) {\n    var height = MediaQuery.of(context).size.height;\n    return Column(\n      children: [\n        SizedBox(\n          height: height * 0.32,\n          child: PageView.builder(\n            itemCount: widget.items.length,\n            onPageChanged: (int currentIndex) {\n              newIndex = currentIndex;\n              setState(() {});\n            },\n            itemBuilder: (_, index) {\n              return FittedBox(\n                fit: BoxFit.none,\n                child: Image.asset(widget.items[index], scale: 3),\n              );\n            },\n          ),\n        ),\n        AnimatedSmoothIndicator(\n          effect: const WormEffect(\n            dotColor: Colors.white,\n            activeDotColor: AppColor.darkOrange,\n          ),\n          count: widget.items.length,\n          activeIndex: newIndex,\n        )\n      ],\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/view/widget/empty_cart.dart",
    "content": "import 'package:flutter/material.dart';\n\nclass EmptyCart extends StatelessWidget {\n  const EmptyCart({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return Column(\n      children: [\n        Expanded(\n          child: Center(\n            child: Image.asset('assets/images/empty_cart.png'),\n          ),\n        ),\n        const Text(\n          \"Empty cart\",\n          style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20),\n        )\n      ],\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/view/widget/list_item_selector.dart",
    "content": "import 'package:get/get.dart';\nimport 'package:flutter/material.dart';\nimport 'package:font_awesome_flutter/font_awesome_flutter.dart';\nimport 'package:e_commerce_flutter/src/model/product_category.dart';\n\nclass ListItemSelector extends StatefulWidget {\n  const ListItemSelector({\n    super.key,\n    required this.categories,\n    required this.onItemPressed,\n  });\n\n  final List<ProductCategory> categories;\n  final Function(int) onItemPressed;\n\n  @override\n  State<ListItemSelector> createState() => _ListItemSelectorState();\n}\n\nclass _ListItemSelectorState extends State<ListItemSelector> {\n  Widget item(ProductCategory item, int index) {\n    return Tooltip(\n      message: item.type.name.capitalizeFirst,\n      child: AnimatedContainer(\n        margin: const EdgeInsets.only(left: 5),\n        duration: const Duration(milliseconds: 500),\n        width: 50,\n        height: 100,\n        decoration: BoxDecoration(\n          color: item.isSelected == false\n              ? const Color(0xFFE5E6E8)\n              : const Color(0xFFf16b26),\n          borderRadius: BorderRadius.circular(10),\n        ),\n        child: IconButton(\n          splashRadius: 0.1,\n          icon: FaIcon(\n            item.icon,\n            color: item.isSelected == false\n                ? const Color(0xFFA6A3A0)\n                : Colors.white,\n          ),\n          onPressed: () {\n            widget.onItemPressed(index);\n            for (var element in widget.categories) {\n              element.isSelected = false;\n            }\n\n            item.isSelected = true;\n            setState(() {});\n          },\n        ),\n      ),\n    );\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return SizedBox(\n      height: 50,\n      child: ListView.builder(\n        scrollDirection: Axis.horizontal,\n        itemCount: widget.categories.length,\n        itemBuilder: (_, index) => item(widget.categories[index], index),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/src/view/widget/product_grid_view.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:e_commerce_flutter/src/model/product.dart';\nimport 'package:e_commerce_flutter/src/view/animation/open_container_wrapper.dart';\n\nclass ProductGridView extends StatelessWidget {\n  const ProductGridView({\n    super.key,\n    required this.items,\n    required this.isPriceOff,\n    required this.likeButtonPressed,\n  });\n\n  final List<Product> items;\n  final bool Function(Product product) isPriceOff;\n  final void Function(int index) likeButtonPressed;\n\n  Widget _gridItemHeader(Product product, int index) {\n    return Padding(\n      padding: const EdgeInsets.all(10.0),\n      child: Row(\n        mainAxisAlignment: MainAxisAlignment.spaceBetween,\n        children: [\n          Visibility(\n            visible: isPriceOff(product),\n            child: Container(\n              decoration: BoxDecoration(\n                borderRadius: BorderRadius.circular(30),\n                color: Colors.white,\n              ),\n              width: 80,\n              height: 30,\n              alignment: Alignment.center,\n              child: const Text(\n                \"30% OFF\",\n                style: TextStyle(fontWeight: FontWeight.w600),\n              ),\n            ),\n          ),\n          IconButton(\n            icon: Icon(\n              Icons.favorite,\n              color: items[index].isFavorite\n                  ? Colors.redAccent\n                  : const Color(0xFFA6A3A0),\n            ),\n            onPressed: () => likeButtonPressed(index),\n          ),\n        ],\n      ),\n    );\n  }\n\n  Widget _gridItemBody(Product product) {\n    return Container(\n      padding: const EdgeInsets.all(15),\n      decoration: BoxDecoration(\n        color: const Color(0xFFE5E6E8),\n        borderRadius: BorderRadius.circular(20),\n      ),\n      child: Image.asset(product.images[0], scale: 3),\n    );\n  }\n\n  Widget _gridItemFooter(Product product, BuildContext context) {\n    return Padding(\n      padding: const EdgeInsets.all(8.0),\n      child: Container(\n        padding: const EdgeInsets.all(10),\n        height: 70,\n        decoration: const BoxDecoration(\n          color: Colors.white,\n          borderRadius: BorderRadius.only(\n            bottomLeft: Radius.circular(15),\n            bottomRight: Radius.circular(15),\n          ),\n        ),\n        child: Column(\n          mainAxisAlignment: MainAxisAlignment.center,\n          crossAxisAlignment: CrossAxisAlignment.start,\n          children: [\n            FittedBox(\n              child: Text(\n                product.name,\n                overflow: TextOverflow.ellipsis,\n                maxLines: 1,\n                style: const TextStyle(\n                  fontWeight: FontWeight.w500,\n                  color: Colors.grey,\n                ),\n              ),\n            ),\n            const SizedBox(height: 5),\n            Row(\n              children: [\n                Text(\n                  product.off != null\n                      ? \"\\$${product.off}\"\n                      : \"\\$${product.price}\",\n                  style: Theme.of(context).textTheme.headlineMedium,\n                ),\n                const SizedBox(width: 3),\n                Visibility(\n                  visible: product.off != null ? true : false,\n                  child: Text(\n                    \"\\$${product.price}\",\n                    style: const TextStyle(\n                      decoration: TextDecoration.lineThrough,\n                      color: Colors.grey,\n                      fontWeight: FontWeight.w500,\n                    ),\n                  ),\n                )\n              ],\n            )\n          ],\n        ),\n      ),\n    );\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Padding(\n      padding: const EdgeInsets.only(top: 20),\n      child: GridView.builder(\n        itemCount: items.length,\n        shrinkWrap: true,\n        physics: const ScrollPhysics(),\n        gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(\n          childAspectRatio: 10 / 16,\n          crossAxisCount: 2,\n          mainAxisSpacing: 10,\n          crossAxisSpacing: 10,\n        ),\n        itemBuilder: (_, index) {\n          Product product = items[index];\n          return OpenContainerWrapper(\n            product: product,\n            child: GridTile(\n              header: _gridItemHeader(product, index),\n              footer: _gridItemFooter(product, context),\n              child: _gridItemBody(product),\n            ),\n          );\n        },\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "pubspec.yaml",
    "content": "name: e_commerce_flutter\ndescription: E-Commerce App built in flutter using GetX\n\n\npublish_to: 'none'\n\nversion: 1.0.0+1\n\nenvironment:\n  sdk: '>=3.0.0 <4.0.0'\n\ndependencies:\n  flutter:\n    sdk: flutter\n\n\n  get: ^4.6.6\n  smooth_page_indicator: ^1.2.0+3\n  flutter_rating_bar: ^4.0.1\n  font_awesome_flutter: ^10.8.0\n  animations: ^2.0.11\n  stylish_bottom_bar: ^1.1.0\n\ndev_dependencies:\n  flutter_lints: ^5.0.0\n  flutter_test:\n    sdk: flutter\n  flutter_launcher_icons: ^0.14.2\n\nflutter_launcher_icons:\n  android: \"launcher_icon\"\n  image_path: \"assets/images/logo.png\"\n  adaptive_icon_background : \"#ffffff\"\n  adaptive_icon_foreground : \"assets/images/logo.png\"\n\n\nflutter:\n\n  uses-material-design: true\n\n  assets:\n    - assets/images/\n"
  },
  {
    "path": "web/index.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <!--\n    If you are serving your web app in a path other than the root, change the\n    href value below to reflect the base path you are serving from.\n\n    The path provided below has to start and end with a slash \"/\" in order for\n    it to work correctly.\n\n    For more details:\n    * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base\n\n    This is a placeholder for base href that will be replaced by the value of\n    the `--base-href` argument provided to `flutter build`.\n  -->\n  <base href=\"$FLUTTER_BASE_HREF\">\n\n  <meta charset=\"UTF-8\">\n  <meta content=\"IE=Edge\" http-equiv=\"X-UA-Compatible\">\n  <meta name=\"description\" content=\"A new Flutter project.\">\n\n  <!-- iOS meta tags & icons -->\n  <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n  <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n  <meta name=\"apple-mobile-web-app-title\" content=\"e_commerce_flutter\">\n  <link rel=\"apple-touch-icon\" href=\"icons/Icon-192.png\">\n\n  <!-- Favicon -->\n  <link rel=\"icon\" type=\"image/png\" href=\"favicon.png\"/>\n\n  <title>e_commerce_flutter</title>\n  <link rel=\"manifest\" href=\"manifest.json\">\n\n  <script>\n    // The value below is injected by flutter build, do not touch.\n    var serviceWorkerVersion = null;\n  </script>\n  <!-- This script adds the flutter initialization JS code -->\n  <script src=\"flutter.js\" defer></script>\n</head>\n<body>\n  <script>\n    window.addEventListener('load', function(ev) {\n      // Download main.dart.js\n      _flutter.loader.loadEntrypoint({\n        serviceWorker: {\n          serviceWorkerVersion: serviceWorkerVersion,\n        }\n      }).then(function(engineInitializer) {\n        return engineInitializer.initializeEngine();\n      }).then(function(appRunner) {\n        return appRunner.runApp();\n      });\n    });\n  </script>\n</body>\n</html>\n"
  },
  {
    "path": "web/manifest.json",
    "content": "{\n    \"name\": \"e_commerce_flutter\",\n    \"short_name\": \"e_commerce_flutter\",\n    \"start_url\": \".\",\n    \"display\": \"standalone\",\n    \"background_color\": \"#0175C2\",\n    \"theme_color\": \"#0175C2\",\n    \"description\": \"A new Flutter project.\",\n    \"orientation\": \"portrait-primary\",\n    \"prefer_related_applications\": false,\n    \"icons\": [\n        {\n            \"src\": \"icons/Icon-192.png\",\n            \"sizes\": \"192x192\",\n            \"type\": \"image/png\"\n        },\n        {\n            \"src\": \"icons/Icon-512.png\",\n            \"sizes\": \"512x512\",\n            \"type\": \"image/png\"\n        },\n        {\n            \"src\": \"icons/Icon-maskable-192.png\",\n            \"sizes\": \"192x192\",\n            \"type\": \"image/png\",\n            \"purpose\": \"maskable\"\n        },\n        {\n            \"src\": \"icons/Icon-maskable-512.png\",\n            \"sizes\": \"512x512\",\n            \"type\": \"image/png\",\n            \"purpose\": \"maskable\"\n        }\n    ]\n}\n"
  }
]