├── .gitignore ├── .metadata ├── README.md ├── analysis_options.yaml ├── android ├── .gitignore ├── app │ ├── build.gradle │ └── src │ │ ├── debug │ │ └── AndroidManifest.xml │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── kotlin │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── augmented_reality_with_flutter │ │ │ │ └── MainActivity.kt │ │ └── res │ │ │ ├── drawable-v21 │ │ │ └── launch_background.xml │ │ │ ├── drawable │ │ │ └── launch_background.xml │ │ │ ├── mipmap-hdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-mdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxxhdpi │ │ │ └── ic_launcher.png │ │ │ ├── values-night │ │ │ └── styles.xml │ │ │ └── values │ │ │ └── styles.xml │ │ └── profile │ │ └── AndroidManifest.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties └── settings.gradle ├── assets ├── gltf │ ├── 3d_axis_shape.gltf │ ├── 3d_colored_composition.gltf │ ├── 3d_concrete_shape.gltf │ └── 3d_weird_bubble.gltf └── images │ ├── 3d_axis_shape.png │ ├── 3d_colored_composition.png │ ├── 3d_concrete_shape.png │ ├── 3d_weird_bubble.png │ └── atomsbox-logo.png ├── ios ├── .gitignore ├── Flutter │ ├── AppFrameworkInfo.plist │ ├── Debug.xcconfig │ └── Release.xcconfig ├── Podfile ├── Podfile.lock ├── Runner.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ └── WorkspaceSettings.xcsettings │ └── xcshareddata │ │ └── xcschemes │ │ └── Runner.xcscheme ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── IDEWorkspaceChecks.plist │ │ └── WorkspaceSettings.xcsettings └── Runner │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── Icon-App-1024x1024@1x.png │ │ ├── Icon-App-20x20@1x.png │ │ ├── Icon-App-20x20@2x.png │ │ ├── Icon-App-20x20@3x.png │ │ ├── Icon-App-29x29@1x.png │ │ ├── Icon-App-29x29@2x.png │ │ ├── Icon-App-29x29@3x.png │ │ ├── Icon-App-40x40@1x.png │ │ ├── Icon-App-40x40@2x.png │ │ ├── Icon-App-40x40@3x.png │ │ ├── Icon-App-60x60@2x.png │ │ ├── Icon-App-60x60@3x.png │ │ ├── Icon-App-76x76@1x.png │ │ ├── Icon-App-76x76@2x.png │ │ └── Icon-App-83.5x83.5@2x.png │ ├── Contents.json │ └── LaunchImage.imageset │ │ ├── Contents.json │ │ ├── LaunchImage.png │ │ ├── LaunchImage@2x.png │ │ ├── LaunchImage@3x.png │ │ └── README.md │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Info.plist │ └── Runner-Bridging-Header.h ├── lib ├── main.dart ├── models │ └── product.dart ├── screens │ ├── home_screen.dart │ └── product_with_augmented_reality_screen.dart └── shared │ ├── theme │ └── app_theme.dart │ └── widgets │ └── app_drawer.dart ├── pubspec.lock ├── pubspec.yaml └── screenshots └── ar-with-flutter.png /.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | migrate_working_dir/ 12 | 13 | # IntelliJ related 14 | *.iml 15 | *.ipr 16 | *.iws 17 | .idea/ 18 | 19 | # The .vscode folder contains launch configuration and tasks you configure in 20 | # VS Code which you may wish to be included in version control, so this line 21 | # is commented out by default. 22 | #.vscode/ 23 | 24 | # Flutter/Dart/Pub related 25 | **/doc/api/ 26 | **/ios/Flutter/.last_build_id 27 | .dart_tool/ 28 | .flutter-plugins 29 | .flutter-plugins-dependencies 30 | .pub-cache/ 31 | .pub/ 32 | /build/ 33 | 34 | # Symbolication related 35 | app.*.symbols 36 | 37 | # Obfuscation related 38 | app.*.map.json 39 | 40 | # Android Studio will place build artifacts here 41 | /android/app/debug 42 | /android/app/profile 43 | /android/app/release 44 | -------------------------------------------------------------------------------- /.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: "41456452f29d64e8deb623a3c927524bcf9f111b" 8 | channel: "stable" 9 | 10 | project_type: app 11 | 12 | # Tracks metadata for the flutter migrate command 13 | migration: 14 | platforms: 15 | - platform: root 16 | create_revision: 41456452f29d64e8deb623a3c927524bcf9f111b 17 | base_revision: 41456452f29d64e8deb623a3c927524bcf9f111b 18 | - platform: android 19 | create_revision: 41456452f29d64e8deb623a3c927524bcf9f111b 20 | base_revision: 41456452f29d64e8deb623a3c927524bcf9f111b 21 | - platform: ios 22 | create_revision: 41456452f29d64e8deb623a3c927524bcf9f111b 23 | base_revision: 41456452f29d64e8deb623a3c927524bcf9f111b 24 | - platform: linux 25 | create_revision: 41456452f29d64e8deb623a3c927524bcf9f111b 26 | base_revision: 41456452f29d64e8deb623a3c927524bcf9f111b 27 | - platform: macos 28 | create_revision: 41456452f29d64e8deb623a3c927524bcf9f111b 29 | base_revision: 41456452f29d64e8deb623a3c927524bcf9f111b 30 | - platform: web 31 | create_revision: 41456452f29d64e8deb623a3c927524bcf9f111b 32 | base_revision: 41456452f29d64e8deb623a3c927524bcf9f111b 33 | - platform: windows 34 | create_revision: 41456452f29d64e8deb623a3c927524bcf9f111b 35 | base_revision: 41456452f29d64e8deb623a3c927524bcf9f111b 36 | 37 | # User provided section 38 | 39 | # List of Local paths (relative to this file) that should be 40 | # ignored by the migrate tool. 41 | # 42 | # Files that are not part of the templates will be ignored by default. 43 | unmanaged_files: 44 | - 'lib/main.dart' 45 | - 'ios/Runner.xcodeproj/project.pbxproj' 46 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## eCommerce UI with Flutter Augmented Reality (ARKit) 2 | 3 | This Flutter project combines an elegant eCommerce user interface with augmented reality (AR) functionality using ARKit. The integration of AR brings a new dimension to the user experience by allowing customers to visualize products in their real-world environment. 4 | 5 | ### Features: 6 | - **Flutter UI**: A sleek and intuitive user interface for browsing products. 7 | - **Augmented Reality (AR)**: Integration of ARKit for iOS devices to display 3D models of products in real-world environments. 8 | - **Product Visualization**: Users can tap on products to view them in AR, providing a more immersive shopping experience. 9 | 10 | ### Video Tutorial: 11 | Watch a video tutorial demonstrating the features and usage of this application: [YouTube Tutorial](https://youtu.be/f7pbH_u9xno) 12 | 13 | ### Screenshots: 14 | ![AR with Flutter](screenshots/ar-with-flutter.png) 15 | 16 | ### Project Structure: 17 | - **`lib/screens/home_screen.dart`**: Contains the home screen UI with a list of products. 18 | - **`lib/screens/product_with_augmented_reality_screen.dart`**: Displays individual product details along with AR integration. 19 | - **`lib/models/product.dart`**: Defines the product model including attributes like name, price, image, and 3D model path. 20 | - **`assets/`**: Directory containing product images and 3D model files. 21 | 22 | ### How to Use: 23 | 1. Clone this repository to your local machine. 24 | 2. Ensure you have Flutter installed and set up on your development environment. 25 | 3. Run `flutter pub get` to install dependencies. 26 | 4. Connect an iOS device for testing (ARKit only supports iOS). 27 | 5. Run the app using `flutter run` and explore the eCommerce UI and AR features. 28 | 29 | ### Dependencies: 30 | - **flutter_staggered_grid_view**: For creating a staggered grid view layout in the UI. 31 | - **vector_math**: Provides vector math functionality required for AR operations. 32 | - **arkit_plugin**: Integration of ARKit for AR functionality in Flutter apps. 33 | - **collection**: Provides additional functionalities for collections like `firstWhereOrNull`. 34 | 35 | ### Note: 36 | - ARKit functionality is available only on iOS devices. Make sure to test on an iOS device for the best experience. 37 | - Ensure that your iOS device supports ARKit and has the necessary permissions granted for AR functionality. 38 | 39 | ### Credits: 40 | This project is developed by maxonflutter. Feel free to contribute, provide feedback, or suggest improvements via GitHub. 41 | 42 | For any inquiries, reach out to me. 43 | 44 | Happy Shopping with Augmented Reality! 🛍️📱 45 | -------------------------------------------------------------------------------- /analysis_options.yaml: -------------------------------------------------------------------------------- 1 | # This file configures the analyzer, which statically analyzes Dart code to 2 | # check for errors, warnings, and lints. 3 | # 4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled 5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be 6 | # invoked from the command line by running `flutter analyze`. 7 | 8 | # The following line activates a set of recommended lints for Flutter apps, 9 | # packages, and plugins designed to encourage good coding practices. 10 | include: package:flutter_lints/flutter.yaml 11 | 12 | linter: 13 | # The lint rules applied to this project can be customized in the 14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml` 15 | # included above or to enable additional rules. A list of all available lints 16 | # and their documentation is published at https://dart.dev/lints. 17 | # 18 | # Instead of disabling a lint rule for the entire project in the 19 | # section below, it can also be suppressed for a single line of code 20 | # or a specific dart file by using the `// ignore: name_of_lint` and 21 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file 22 | # producing the lint. 23 | rules: 24 | # avoid_print: false # Uncomment to disable the `avoid_print` rule 25 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule 26 | 27 | # Additional information about this file can be found at 28 | # https://dart.dev/guides/language/analysis-options 29 | -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | 9 | # Remember to never publicly share your keystore. 10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app 11 | key.properties 12 | **/*.keystore 13 | **/*.jks 14 | -------------------------------------------------------------------------------- /android/app/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id "com.android.application" 3 | id "kotlin-android" 4 | id "dev.flutter.flutter-gradle-plugin" 5 | } 6 | 7 | def localProperties = new Properties() 8 | def localPropertiesFile = rootProject.file('local.properties') 9 | if (localPropertiesFile.exists()) { 10 | localPropertiesFile.withReader('UTF-8') { reader -> 11 | localProperties.load(reader) 12 | } 13 | } 14 | 15 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode') 16 | if (flutterVersionCode == null) { 17 | flutterVersionCode = '1' 18 | } 19 | 20 | def flutterVersionName = localProperties.getProperty('flutter.versionName') 21 | if (flutterVersionName == null) { 22 | flutterVersionName = '1.0' 23 | } 24 | 25 | android { 26 | namespace "com.example.augmented_reality_with_flutter" 27 | compileSdkVersion flutter.compileSdkVersion 28 | ndkVersion flutter.ndkVersion 29 | 30 | compileOptions { 31 | sourceCompatibility JavaVersion.VERSION_1_8 32 | targetCompatibility JavaVersion.VERSION_1_8 33 | } 34 | 35 | kotlinOptions { 36 | jvmTarget = '1.8' 37 | } 38 | 39 | sourceSets { 40 | main.java.srcDirs += 'src/main/kotlin' 41 | } 42 | 43 | defaultConfig { 44 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 45 | applicationId "com.example.augmented_reality_with_flutter" 46 | // You can update the following values to match your application needs. 47 | // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. 48 | minSdkVersion flutter.minSdkVersion 49 | targetSdkVersion flutter.targetSdkVersion 50 | versionCode flutterVersionCode.toInteger() 51 | versionName flutterVersionName 52 | } 53 | 54 | buildTypes { 55 | release { 56 | // TODO: Add your own signing config for the release build. 57 | // Signing with the debug keys for now, so `flutter run --release` works. 58 | signingConfig signingConfigs.debug 59 | } 60 | } 61 | } 62 | 63 | flutter { 64 | source '../..' 65 | } 66 | 67 | dependencies {} 68 | -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 14 | 18 | 22 | 23 | 24 | 25 | 26 | 27 | 29 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /android/app/src/main/kotlin/com/example/augmented_reality_with_flutter/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.example.augmented_reality_with_flutter 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxonflutter/eCommerce-UI-with-Flutter-Augmented-Reality-ARKit/f769b5c7e5e56445d6b17bb4b869cf5a8921ef28/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxonflutter/eCommerce-UI-with-Flutter-Augmented-Reality-ARKit/f769b5c7e5e56445d6b17bb4b869cf5a8921ef28/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxonflutter/eCommerce-UI-with-Flutter-Augmented-Reality-ARKit/f769b5c7e5e56445d6b17bb4b869cf5a8921ef28/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxonflutter/eCommerce-UI-with-Flutter-Augmented-Reality-ARKit/f769b5c7e5e56445d6b17bb4b869cf5a8921ef28/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxonflutter/eCommerce-UI-with-Flutter-Augmented-Reality-ARKit/f769b5c7e5e56445d6b17bb4b869cf5a8921ef28/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.7.10' 3 | repositories { 4 | google() 5 | mavenCentral() 6 | } 7 | 8 | dependencies { 9 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 10 | } 11 | } 12 | 13 | allprojects { 14 | repositories { 15 | google() 16 | mavenCentral() 17 | } 18 | } 19 | 20 | rootProject.buildDir = '../build' 21 | subprojects { 22 | project.buildDir = "${rootProject.buildDir}/${project.name}" 23 | } 24 | subprojects { 25 | project.evaluationDependsOn(':app') 26 | } 27 | 28 | tasks.register("clean", Delete) { 29 | delete rootProject.buildDir 30 | } 31 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx4G 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | zipStoreBase=GRADLE_USER_HOME 4 | zipStorePath=wrapper/dists 5 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip 6 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | def flutterSdkPath = { 3 | def properties = new Properties() 4 | file("local.properties").withInputStream { properties.load(it) } 5 | def flutterSdkPath = properties.getProperty("flutter.sdk") 6 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 7 | return flutterSdkPath 8 | } 9 | settings.ext.flutterSdkPath = flutterSdkPath() 10 | 11 | includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle") 12 | 13 | repositories { 14 | google() 15 | mavenCentral() 16 | gradlePluginPortal() 17 | } 18 | 19 | plugins { 20 | id "dev.flutter.flutter-gradle-plugin" version "1.0.0" apply false 21 | } 22 | } 23 | 24 | plugins { 25 | id "dev.flutter.flutter-plugin-loader" version "1.0.0" 26 | id "com.android.application" version "7.3.0" apply false 27 | } 28 | 29 | include ":app" 30 | -------------------------------------------------------------------------------- /assets/images/3d_axis_shape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxonflutter/eCommerce-UI-with-Flutter-Augmented-Reality-ARKit/f769b5c7e5e56445d6b17bb4b869cf5a8921ef28/assets/images/3d_axis_shape.png -------------------------------------------------------------------------------- /assets/images/3d_colored_composition.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxonflutter/eCommerce-UI-with-Flutter-Augmented-Reality-ARKit/f769b5c7e5e56445d6b17bb4b869cf5a8921ef28/assets/images/3d_colored_composition.png -------------------------------------------------------------------------------- /assets/images/3d_concrete_shape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxonflutter/eCommerce-UI-with-Flutter-Augmented-Reality-ARKit/f769b5c7e5e56445d6b17bb4b869cf5a8921ef28/assets/images/3d_concrete_shape.png -------------------------------------------------------------------------------- /assets/images/3d_weird_bubble.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxonflutter/eCommerce-UI-with-Flutter-Augmented-Reality-ARKit/f769b5c7e5e56445d6b17bb4b869cf5a8921ef28/assets/images/3d_weird_bubble.png -------------------------------------------------------------------------------- /assets/images/atomsbox-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxonflutter/eCommerce-UI-with-Flutter-Augmented-Reality-ARKit/f769b5c7e5e56445d6b17bb4b869cf5a8921ef28/assets/images/atomsbox-logo.png -------------------------------------------------------------------------------- /ios/.gitignore: -------------------------------------------------------------------------------- 1 | *.mode1v3 2 | *.mode2v3 3 | *.moved-aside 4 | *.pbxuser 5 | *.perspectivev3 6 | **/*sync/ 7 | .sconsign.dblite 8 | .tags* 9 | **/.vagrant/ 10 | **/DerivedData/ 11 | Icon? 12 | **/Pods/ 13 | **/.symlinks/ 14 | profile 15 | xcuserdata 16 | **/.generated/ 17 | Flutter/App.framework 18 | Flutter/Flutter.framework 19 | Flutter/Flutter.podspec 20 | Flutter/Generated.xcconfig 21 | Flutter/app.flx 22 | Flutter/app.zip 23 | Flutter/flutter_assets/ 24 | Flutter/flutter_export_environment.sh 25 | ServiceDefinitions.json 26 | Runner/GeneratedPluginRegistrant.* 27 | 28 | # Exceptions to above rules. 29 | !default.mode1v3 30 | !default.mode2v3 31 | !default.pbxuser 32 | !default.perspectivev3 33 | -------------------------------------------------------------------------------- /ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 12.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment this line to define a global platform for your project 2 | platform :ios, '12.0' 3 | 4 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency. 5 | ENV['COCOAPODS_DISABLE_STATS'] = 'true' 6 | 7 | project 'Runner', { 8 | 'Debug' => :debug, 9 | 'Profile' => :release, 10 | 'Release' => :release, 11 | } 12 | 13 | def flutter_root 14 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) 15 | unless File.exist?(generated_xcode_build_settings_path) 16 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" 17 | end 18 | 19 | File.foreach(generated_xcode_build_settings_path) do |line| 20 | matches = line.match(/FLUTTER_ROOT\=(.*)/) 21 | return matches[1].strip if matches 22 | end 23 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" 24 | end 25 | 26 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) 27 | 28 | flutter_ios_podfile_setup 29 | 30 | target 'Runner' do 31 | use_frameworks! 32 | use_modular_headers! 33 | 34 | flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) 35 | end 36 | 37 | post_install do |installer| 38 | installer.pods_project.targets.each do |target| 39 | flutter_additional_ios_build_settings(target) 40 | end 41 | end 42 | -------------------------------------------------------------------------------- /ios/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - arkit_plugin (0.0.1): 3 | - Flutter 4 | - GLTFSceneKit 5 | - Flutter (1.0.0) 6 | - GLTFSceneKit (0.3.0) 7 | - path_provider_foundation (0.0.1): 8 | - Flutter 9 | - FlutterMacOS 10 | 11 | DEPENDENCIES: 12 | - arkit_plugin (from `.symlinks/plugins/arkit_plugin/ios`) 13 | - Flutter (from `Flutter`) 14 | - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) 15 | 16 | SPEC REPOS: 17 | trunk: 18 | - GLTFSceneKit 19 | 20 | EXTERNAL SOURCES: 21 | arkit_plugin: 22 | :path: ".symlinks/plugins/arkit_plugin/ios" 23 | Flutter: 24 | :path: Flutter 25 | path_provider_foundation: 26 | :path: ".symlinks/plugins/path_provider_foundation/darwin" 27 | 28 | SPEC CHECKSUMS: 29 | arkit_plugin: bb56e71ef215147316ecf3774d5cb74beda20a10 30 | Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 31 | GLTFSceneKit: d1b437c514ba2aed5555afb0fddd64e030612d57 32 | path_provider_foundation: 3784922295ac71e43754bd15e0653ccfd36a147c 33 | 34 | PODFILE CHECKSUM: 4e8f8b2be68aeea4c0d5beb6ff1e79fface1d048 35 | 36 | COCOAPODS: 1.15.2 37 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 54; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 11 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 12 | 698A01BE12237C5F6119BC3D /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58B0A74B095F16395F4FFD6A /* Pods_Runner.framework */; }; 13 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 14 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 15 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 16 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 17 | /* End PBXBuildFile section */ 18 | 19 | /* Begin PBXCopyFilesBuildPhase section */ 20 | 9705A1C41CF9048500538489 /* Embed Frameworks */ = { 21 | isa = PBXCopyFilesBuildPhase; 22 | buildActionMask = 2147483647; 23 | dstPath = ""; 24 | dstSubfolderSpec = 10; 25 | files = ( 26 | ); 27 | name = "Embed Frameworks"; 28 | runOnlyForDeploymentPostprocessing = 0; 29 | }; 30 | /* End PBXCopyFilesBuildPhase section */ 31 | 32 | /* Begin PBXFileReference section */ 33 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 34 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 35 | 2E0DCF33DF5D5B1D19CD3019 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 36 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 37 | 58B0A74B095F16395F4FFD6A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 38 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 39 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 40 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 41 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 42 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 43 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 44 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 45 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 46 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 47 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 48 | ABD5243C4283F1AF4F4B8036 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 49 | B7AAD3F162304D85AE41AB92 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 50 | /* End PBXFileReference section */ 51 | 52 | /* Begin PBXFrameworksBuildPhase section */ 53 | 97C146EB1CF9000F007C117D /* Frameworks */ = { 54 | isa = PBXFrameworksBuildPhase; 55 | buildActionMask = 2147483647; 56 | files = ( 57 | 698A01BE12237C5F6119BC3D /* Pods_Runner.framework in Frameworks */, 58 | ); 59 | runOnlyForDeploymentPostprocessing = 0; 60 | }; 61 | /* End PBXFrameworksBuildPhase section */ 62 | 63 | /* Begin PBXGroup section */ 64 | 1AF628EA88FB507723321372 /* Frameworks */ = { 65 | isa = PBXGroup; 66 | children = ( 67 | 58B0A74B095F16395F4FFD6A /* Pods_Runner.framework */, 68 | ); 69 | name = Frameworks; 70 | sourceTree = ""; 71 | }; 72 | 2B93885767E5241DD6C7E12E /* Pods */ = { 73 | isa = PBXGroup; 74 | children = ( 75 | ABD5243C4283F1AF4F4B8036 /* Pods-Runner.debug.xcconfig */, 76 | B7AAD3F162304D85AE41AB92 /* Pods-Runner.release.xcconfig */, 77 | 2E0DCF33DF5D5B1D19CD3019 /* Pods-Runner.profile.xcconfig */, 78 | ); 79 | path = Pods; 80 | sourceTree = ""; 81 | }; 82 | 9740EEB11CF90186004384FC /* Flutter */ = { 83 | isa = PBXGroup; 84 | children = ( 85 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, 86 | 9740EEB21CF90195004384FC /* Debug.xcconfig */, 87 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 88 | 9740EEB31CF90195004384FC /* Generated.xcconfig */, 89 | ); 90 | name = Flutter; 91 | sourceTree = ""; 92 | }; 93 | 97C146E51CF9000F007C117D = { 94 | isa = PBXGroup; 95 | children = ( 96 | 9740EEB11CF90186004384FC /* Flutter */, 97 | 97C146F01CF9000F007C117D /* Runner */, 98 | 97C146EF1CF9000F007C117D /* Products */, 99 | 2B93885767E5241DD6C7E12E /* Pods */, 100 | 1AF628EA88FB507723321372 /* Frameworks */, 101 | ); 102 | sourceTree = ""; 103 | }; 104 | 97C146EF1CF9000F007C117D /* Products */ = { 105 | isa = PBXGroup; 106 | children = ( 107 | 97C146EE1CF9000F007C117D /* Runner.app */, 108 | ); 109 | name = Products; 110 | sourceTree = ""; 111 | }; 112 | 97C146F01CF9000F007C117D /* Runner */ = { 113 | isa = PBXGroup; 114 | children = ( 115 | 97C146FA1CF9000F007C117D /* Main.storyboard */, 116 | 97C146FD1CF9000F007C117D /* Assets.xcassets */, 117 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 118 | 97C147021CF9000F007C117D /* Info.plist */, 119 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 120 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 121 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, 122 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, 123 | ); 124 | path = Runner; 125 | sourceTree = ""; 126 | }; 127 | /* End PBXGroup section */ 128 | 129 | /* Begin PBXNativeTarget section */ 130 | 97C146ED1CF9000F007C117D /* Runner */ = { 131 | isa = PBXNativeTarget; 132 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; 133 | buildPhases = ( 134 | C336DF1FA6BDE430F63CB8F9 /* [CP] Check Pods Manifest.lock */, 135 | 9740EEB61CF901F6004384FC /* Run Script */, 136 | 97C146EA1CF9000F007C117D /* Sources */, 137 | 97C146EB1CF9000F007C117D /* Frameworks */, 138 | 97C146EC1CF9000F007C117D /* Resources */, 139 | 9705A1C41CF9048500538489 /* Embed Frameworks */, 140 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */, 141 | DA6C24FF29E6E3CCE788C68D /* [CP] Embed Pods Frameworks */, 142 | ); 143 | buildRules = ( 144 | ); 145 | dependencies = ( 146 | ); 147 | name = Runner; 148 | productName = Runner; 149 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */; 150 | productType = "com.apple.product-type.application"; 151 | }; 152 | /* End PBXNativeTarget section */ 153 | 154 | /* Begin PBXProject section */ 155 | 97C146E61CF9000F007C117D /* Project object */ = { 156 | isa = PBXProject; 157 | attributes = { 158 | LastUpgradeCheck = 1430; 159 | ORGANIZATIONNAME = ""; 160 | TargetAttributes = { 161 | 97C146ED1CF9000F007C117D = { 162 | CreatedOnToolsVersion = 7.3.1; 163 | LastSwiftMigration = 1100; 164 | }; 165 | }; 166 | }; 167 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; 168 | compatibilityVersion = "Xcode 9.3"; 169 | developmentRegion = en; 170 | hasScannedForEncodings = 0; 171 | knownRegions = ( 172 | en, 173 | Base, 174 | ); 175 | mainGroup = 97C146E51CF9000F007C117D; 176 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */; 177 | projectDirPath = ""; 178 | projectRoot = ""; 179 | targets = ( 180 | 97C146ED1CF9000F007C117D /* Runner */, 181 | ); 182 | }; 183 | /* End PBXProject section */ 184 | 185 | /* Begin PBXResourcesBuildPhase section */ 186 | 97C146EC1CF9000F007C117D /* Resources */ = { 187 | isa = PBXResourcesBuildPhase; 188 | buildActionMask = 2147483647; 189 | files = ( 190 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 191 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, 192 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 193 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, 194 | ); 195 | runOnlyForDeploymentPostprocessing = 0; 196 | }; 197 | /* End PBXResourcesBuildPhase section */ 198 | 199 | /* Begin PBXShellScriptBuildPhase section */ 200 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { 201 | isa = PBXShellScriptBuildPhase; 202 | alwaysOutOfDate = 1; 203 | buildActionMask = 2147483647; 204 | files = ( 205 | ); 206 | inputPaths = ( 207 | "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", 208 | ); 209 | name = "Thin Binary"; 210 | outputPaths = ( 211 | ); 212 | runOnlyForDeploymentPostprocessing = 0; 213 | shellPath = /bin/sh; 214 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; 215 | }; 216 | 9740EEB61CF901F6004384FC /* Run Script */ = { 217 | isa = PBXShellScriptBuildPhase; 218 | alwaysOutOfDate = 1; 219 | buildActionMask = 2147483647; 220 | files = ( 221 | ); 222 | inputPaths = ( 223 | ); 224 | name = "Run Script"; 225 | outputPaths = ( 226 | ); 227 | runOnlyForDeploymentPostprocessing = 0; 228 | shellPath = /bin/sh; 229 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; 230 | }; 231 | C336DF1FA6BDE430F63CB8F9 /* [CP] Check Pods Manifest.lock */ = { 232 | isa = PBXShellScriptBuildPhase; 233 | buildActionMask = 2147483647; 234 | files = ( 235 | ); 236 | inputFileListPaths = ( 237 | ); 238 | inputPaths = ( 239 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 240 | "${PODS_ROOT}/Manifest.lock", 241 | ); 242 | name = "[CP] Check Pods Manifest.lock"; 243 | outputFileListPaths = ( 244 | ); 245 | outputPaths = ( 246 | "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", 247 | ); 248 | runOnlyForDeploymentPostprocessing = 0; 249 | shellPath = /bin/sh; 250 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 251 | showEnvVarsInLog = 0; 252 | }; 253 | DA6C24FF29E6E3CCE788C68D /* [CP] Embed Pods Frameworks */ = { 254 | isa = PBXShellScriptBuildPhase; 255 | buildActionMask = 2147483647; 256 | files = ( 257 | ); 258 | inputFileListPaths = ( 259 | "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", 260 | ); 261 | name = "[CP] Embed Pods Frameworks"; 262 | outputFileListPaths = ( 263 | "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", 264 | ); 265 | runOnlyForDeploymentPostprocessing = 0; 266 | shellPath = /bin/sh; 267 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; 268 | showEnvVarsInLog = 0; 269 | }; 270 | /* End PBXShellScriptBuildPhase section */ 271 | 272 | /* Begin PBXSourcesBuildPhase section */ 273 | 97C146EA1CF9000F007C117D /* Sources */ = { 274 | isa = PBXSourcesBuildPhase; 275 | buildActionMask = 2147483647; 276 | files = ( 277 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, 278 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, 279 | ); 280 | runOnlyForDeploymentPostprocessing = 0; 281 | }; 282 | /* End PBXSourcesBuildPhase section */ 283 | 284 | /* Begin PBXVariantGroup section */ 285 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = { 286 | isa = PBXVariantGroup; 287 | children = ( 288 | 97C146FB1CF9000F007C117D /* Base */, 289 | ); 290 | name = Main.storyboard; 291 | sourceTree = ""; 292 | }; 293 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { 294 | isa = PBXVariantGroup; 295 | children = ( 296 | 97C147001CF9000F007C117D /* Base */, 297 | ); 298 | name = LaunchScreen.storyboard; 299 | sourceTree = ""; 300 | }; 301 | /* End PBXVariantGroup section */ 302 | 303 | /* Begin XCBuildConfiguration section */ 304 | 249021D3217E4FDB00AE95B9 /* Profile */ = { 305 | isa = XCBuildConfiguration; 306 | buildSettings = { 307 | ALWAYS_SEARCH_USER_PATHS = NO; 308 | CLANG_ANALYZER_NONNULL = YES; 309 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 310 | CLANG_CXX_LIBRARY = "libc++"; 311 | CLANG_ENABLE_MODULES = YES; 312 | CLANG_ENABLE_OBJC_ARC = YES; 313 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 314 | CLANG_WARN_BOOL_CONVERSION = YES; 315 | CLANG_WARN_COMMA = YES; 316 | CLANG_WARN_CONSTANT_CONVERSION = YES; 317 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 318 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 319 | CLANG_WARN_EMPTY_BODY = YES; 320 | CLANG_WARN_ENUM_CONVERSION = YES; 321 | CLANG_WARN_INFINITE_RECURSION = YES; 322 | CLANG_WARN_INT_CONVERSION = YES; 323 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 324 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 325 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 326 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 327 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 328 | CLANG_WARN_STRICT_PROTOTYPES = YES; 329 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 330 | CLANG_WARN_UNREACHABLE_CODE = YES; 331 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 332 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 333 | COPY_PHASE_STRIP = NO; 334 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 335 | ENABLE_NS_ASSERTIONS = NO; 336 | ENABLE_STRICT_OBJC_MSGSEND = YES; 337 | GCC_C_LANGUAGE_STANDARD = gnu99; 338 | GCC_NO_COMMON_BLOCKS = YES; 339 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 340 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 341 | GCC_WARN_UNDECLARED_SELECTOR = YES; 342 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 343 | GCC_WARN_UNUSED_FUNCTION = YES; 344 | GCC_WARN_UNUSED_VARIABLE = YES; 345 | IPHONEOS_DEPLOYMENT_TARGET = 12.0; 346 | MTL_ENABLE_DEBUG_INFO = NO; 347 | SDKROOT = iphoneos; 348 | SUPPORTED_PLATFORMS = iphoneos; 349 | TARGETED_DEVICE_FAMILY = "1,2"; 350 | VALIDATE_PRODUCT = YES; 351 | }; 352 | name = Profile; 353 | }; 354 | 249021D4217E4FDB00AE95B9 /* Profile */ = { 355 | isa = XCBuildConfiguration; 356 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 357 | buildSettings = { 358 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 359 | CLANG_ENABLE_MODULES = YES; 360 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 361 | DEVELOPMENT_TEAM = PCKPMK5N8T; 362 | ENABLE_BITCODE = NO; 363 | FRAMEWORK_SEARCH_PATHS = ( 364 | "$(inherited)", 365 | "$(PROJECT_DIR)/Flutter", 366 | ); 367 | INFOPLIST_FILE = Runner/Info.plist; 368 | IPHONEOS_DEPLOYMENT_TARGET = 12.0; 369 | LD_RUNPATH_SEARCH_PATHS = ( 370 | "$(inherited)", 371 | "@executable_path/Frameworks", 372 | ); 373 | LIBRARY_SEARCH_PATHS = ( 374 | "$(inherited)", 375 | "$(PROJECT_DIR)/Flutter", 376 | ); 377 | PRODUCT_BUNDLE_IDENTIFIER = "com.example.augmented-reality-with-flutter"; 378 | PRODUCT_NAME = "$(TARGET_NAME)"; 379 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 380 | SWIFT_VERSION = 5.0; 381 | VERSIONING_SYSTEM = "apple-generic"; 382 | }; 383 | name = Profile; 384 | }; 385 | 97C147031CF9000F007C117D /* Debug */ = { 386 | isa = XCBuildConfiguration; 387 | buildSettings = { 388 | ALWAYS_SEARCH_USER_PATHS = NO; 389 | CLANG_ANALYZER_NONNULL = YES; 390 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 391 | CLANG_CXX_LIBRARY = "libc++"; 392 | CLANG_ENABLE_MODULES = YES; 393 | CLANG_ENABLE_OBJC_ARC = YES; 394 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 395 | CLANG_WARN_BOOL_CONVERSION = YES; 396 | CLANG_WARN_COMMA = YES; 397 | CLANG_WARN_CONSTANT_CONVERSION = YES; 398 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 399 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 400 | CLANG_WARN_EMPTY_BODY = YES; 401 | CLANG_WARN_ENUM_CONVERSION = YES; 402 | CLANG_WARN_INFINITE_RECURSION = YES; 403 | CLANG_WARN_INT_CONVERSION = YES; 404 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 405 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 406 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 407 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 408 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 409 | CLANG_WARN_STRICT_PROTOTYPES = YES; 410 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 411 | CLANG_WARN_UNREACHABLE_CODE = YES; 412 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 413 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 414 | COPY_PHASE_STRIP = NO; 415 | DEBUG_INFORMATION_FORMAT = dwarf; 416 | ENABLE_STRICT_OBJC_MSGSEND = YES; 417 | ENABLE_TESTABILITY = YES; 418 | GCC_C_LANGUAGE_STANDARD = gnu99; 419 | GCC_DYNAMIC_NO_PIC = NO; 420 | GCC_NO_COMMON_BLOCKS = YES; 421 | GCC_OPTIMIZATION_LEVEL = 0; 422 | GCC_PREPROCESSOR_DEFINITIONS = ( 423 | "DEBUG=1", 424 | "$(inherited)", 425 | ); 426 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 427 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 428 | GCC_WARN_UNDECLARED_SELECTOR = YES; 429 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 430 | GCC_WARN_UNUSED_FUNCTION = YES; 431 | GCC_WARN_UNUSED_VARIABLE = YES; 432 | IPHONEOS_DEPLOYMENT_TARGET = 12.0; 433 | MTL_ENABLE_DEBUG_INFO = YES; 434 | ONLY_ACTIVE_ARCH = YES; 435 | SDKROOT = iphoneos; 436 | TARGETED_DEVICE_FAMILY = "1,2"; 437 | }; 438 | name = Debug; 439 | }; 440 | 97C147041CF9000F007C117D /* Release */ = { 441 | isa = XCBuildConfiguration; 442 | buildSettings = { 443 | ALWAYS_SEARCH_USER_PATHS = NO; 444 | CLANG_ANALYZER_NONNULL = YES; 445 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 446 | CLANG_CXX_LIBRARY = "libc++"; 447 | CLANG_ENABLE_MODULES = YES; 448 | CLANG_ENABLE_OBJC_ARC = YES; 449 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 450 | CLANG_WARN_BOOL_CONVERSION = YES; 451 | CLANG_WARN_COMMA = YES; 452 | CLANG_WARN_CONSTANT_CONVERSION = YES; 453 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 454 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 455 | CLANG_WARN_EMPTY_BODY = YES; 456 | CLANG_WARN_ENUM_CONVERSION = YES; 457 | CLANG_WARN_INFINITE_RECURSION = YES; 458 | CLANG_WARN_INT_CONVERSION = YES; 459 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 460 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 461 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 462 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 463 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 464 | CLANG_WARN_STRICT_PROTOTYPES = YES; 465 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 466 | CLANG_WARN_UNREACHABLE_CODE = YES; 467 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 468 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 469 | COPY_PHASE_STRIP = NO; 470 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 471 | ENABLE_NS_ASSERTIONS = NO; 472 | ENABLE_STRICT_OBJC_MSGSEND = YES; 473 | GCC_C_LANGUAGE_STANDARD = gnu99; 474 | GCC_NO_COMMON_BLOCKS = YES; 475 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 476 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 477 | GCC_WARN_UNDECLARED_SELECTOR = YES; 478 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 479 | GCC_WARN_UNUSED_FUNCTION = YES; 480 | GCC_WARN_UNUSED_VARIABLE = YES; 481 | IPHONEOS_DEPLOYMENT_TARGET = 12.0; 482 | MTL_ENABLE_DEBUG_INFO = NO; 483 | SDKROOT = iphoneos; 484 | SUPPORTED_PLATFORMS = iphoneos; 485 | SWIFT_COMPILATION_MODE = wholemodule; 486 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 487 | TARGETED_DEVICE_FAMILY = "1,2"; 488 | VALIDATE_PRODUCT = YES; 489 | }; 490 | name = Release; 491 | }; 492 | 97C147061CF9000F007C117D /* Debug */ = { 493 | isa = XCBuildConfiguration; 494 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 495 | buildSettings = { 496 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 497 | CLANG_ENABLE_MODULES = YES; 498 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 499 | DEVELOPMENT_TEAM = PCKPMK5N8T; 500 | ENABLE_BITCODE = NO; 501 | FRAMEWORK_SEARCH_PATHS = ( 502 | "$(inherited)", 503 | "$(PROJECT_DIR)/Flutter", 504 | ); 505 | INFOPLIST_FILE = Runner/Info.plist; 506 | IPHONEOS_DEPLOYMENT_TARGET = 12.0; 507 | LD_RUNPATH_SEARCH_PATHS = ( 508 | "$(inherited)", 509 | "@executable_path/Frameworks", 510 | ); 511 | LIBRARY_SEARCH_PATHS = ( 512 | "$(inherited)", 513 | "$(PROJECT_DIR)/Flutter", 514 | ); 515 | PRODUCT_BUNDLE_IDENTIFIER = "com.example.augmented-reality-with-flutter"; 516 | PRODUCT_NAME = "$(TARGET_NAME)"; 517 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 518 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 519 | SWIFT_VERSION = 5.0; 520 | VERSIONING_SYSTEM = "apple-generic"; 521 | }; 522 | name = Debug; 523 | }; 524 | 97C147071CF9000F007C117D /* Release */ = { 525 | isa = XCBuildConfiguration; 526 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 527 | buildSettings = { 528 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 529 | CLANG_ENABLE_MODULES = YES; 530 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 531 | DEVELOPMENT_TEAM = PCKPMK5N8T; 532 | ENABLE_BITCODE = NO; 533 | FRAMEWORK_SEARCH_PATHS = ( 534 | "$(inherited)", 535 | "$(PROJECT_DIR)/Flutter", 536 | ); 537 | INFOPLIST_FILE = Runner/Info.plist; 538 | IPHONEOS_DEPLOYMENT_TARGET = 12.0; 539 | LD_RUNPATH_SEARCH_PATHS = ( 540 | "$(inherited)", 541 | "@executable_path/Frameworks", 542 | ); 543 | LIBRARY_SEARCH_PATHS = ( 544 | "$(inherited)", 545 | "$(PROJECT_DIR)/Flutter", 546 | ); 547 | PRODUCT_BUNDLE_IDENTIFIER = "com.example.augmented-reality-with-flutter"; 548 | PRODUCT_NAME = "$(TARGET_NAME)"; 549 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 550 | SWIFT_VERSION = 5.0; 551 | VERSIONING_SYSTEM = "apple-generic"; 552 | }; 553 | name = Release; 554 | }; 555 | /* End XCBuildConfiguration section */ 556 | 557 | /* Begin XCConfigurationList section */ 558 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { 559 | isa = XCConfigurationList; 560 | buildConfigurations = ( 561 | 97C147031CF9000F007C117D /* Debug */, 562 | 97C147041CF9000F007C117D /* Release */, 563 | 249021D3217E4FDB00AE95B9 /* Profile */, 564 | ); 565 | defaultConfigurationIsVisible = 0; 566 | defaultConfigurationName = Release; 567 | }; 568 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { 569 | isa = XCConfigurationList; 570 | buildConfigurations = ( 571 | 97C147061CF9000F007C117D /* Debug */, 572 | 97C147071CF9000F007C117D /* Release */, 573 | 249021D4217E4FDB00AE95B9 /* Profile */, 574 | ); 575 | defaultConfigurationIsVisible = 0; 576 | defaultConfigurationName = Release; 577 | }; 578 | /* End XCConfigurationList section */ 579 | }; 580 | rootObject = 97C146E61CF9000F007C117D /* Project object */; 581 | } 582 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import Flutter 2 | import UIKit 3 | 4 | @UIApplicationMain 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-App-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-App-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-App-29x29@1x.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-App-29x29@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-App-29x29@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-App-40x40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-App-40x40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-App-60x60@2x.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "60x60", 53 | "idiom" : "iphone", 54 | "filename" : "Icon-App-60x60@3x.png", 55 | "scale" : "3x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "Icon-App-20x20@1x.png", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "size" : "20x20", 65 | "idiom" : "ipad", 66 | "filename" : "Icon-App-20x20@2x.png", 67 | "scale" : "2x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-App-29x29@1x.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "29x29", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-App-29x29@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-App-40x40@1x.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "40x40", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-App-40x40@2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-App-76x76@1x.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "76x76", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-App-76x76@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "83.5x83.5", 107 | "idiom" : "ipad", 108 | "filename" : "Icon-App-83.5x83.5@2x.png", 109 | "scale" : "2x" 110 | }, 111 | { 112 | "size" : "1024x1024", 113 | "idiom" : "ios-marketing", 114 | "filename" : "Icon-App-1024x1024@1x.png", 115 | "scale" : "1x" 116 | } 117 | ], 118 | "info" : { 119 | "version" : 1, 120 | "author" : "xcode" 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxonflutter/eCommerce-UI-with-Flutter-Augmented-Reality-ARKit/f769b5c7e5e56445d6b17bb4b869cf5a8921ef28/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxonflutter/eCommerce-UI-with-Flutter-Augmented-Reality-ARKit/f769b5c7e5e56445d6b17bb4b869cf5a8921ef28/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxonflutter/eCommerce-UI-with-Flutter-Augmented-Reality-ARKit/f769b5c7e5e56445d6b17bb4b869cf5a8921ef28/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxonflutter/eCommerce-UI-with-Flutter-Augmented-Reality-ARKit/f769b5c7e5e56445d6b17bb4b869cf5a8921ef28/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxonflutter/eCommerce-UI-with-Flutter-Augmented-Reality-ARKit/f769b5c7e5e56445d6b17bb4b869cf5a8921ef28/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxonflutter/eCommerce-UI-with-Flutter-Augmented-Reality-ARKit/f769b5c7e5e56445d6b17bb4b869cf5a8921ef28/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxonflutter/eCommerce-UI-with-Flutter-Augmented-Reality-ARKit/f769b5c7e5e56445d6b17bb4b869cf5a8921ef28/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxonflutter/eCommerce-UI-with-Flutter-Augmented-Reality-ARKit/f769b5c7e5e56445d6b17bb4b869cf5a8921ef28/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxonflutter/eCommerce-UI-with-Flutter-Augmented-Reality-ARKit/f769b5c7e5e56445d6b17bb4b869cf5a8921ef28/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxonflutter/eCommerce-UI-with-Flutter-Augmented-Reality-ARKit/f769b5c7e5e56445d6b17bb4b869cf5a8921ef28/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxonflutter/eCommerce-UI-with-Flutter-Augmented-Reality-ARKit/f769b5c7e5e56445d6b17bb4b869cf5a8921ef28/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxonflutter/eCommerce-UI-with-Flutter-Augmented-Reality-ARKit/f769b5c7e5e56445d6b17bb4b869cf5a8921ef28/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxonflutter/eCommerce-UI-with-Flutter-Augmented-Reality-ARKit/f769b5c7e5e56445d6b17bb4b869cf5a8921ef28/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxonflutter/eCommerce-UI-with-Flutter-Augmented-Reality-ARKit/f769b5c7e5e56445d6b17bb4b869cf5a8921ef28/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxonflutter/eCommerce-UI-with-Flutter-Augmented-Reality-ARKit/f769b5c7e5e56445d6b17bb4b869cf5a8921ef28/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchImage.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchImage@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "LaunchImage@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxonflutter/eCommerce-UI-with-Flutter-Augmented-Reality-ARKit/f769b5c7e5e56445d6b17bb4b869cf5a8921ef28/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxonflutter/eCommerce-UI-with-Flutter-Augmented-Reality-ARKit/f769b5c7e5e56445d6b17bb4b869cf5a8921ef28/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxonflutter/eCommerce-UI-with-Flutter-Augmented-Reality-ARKit/f769b5c7e5e56445d6b17bb4b869cf5a8921ef28/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CADisableMinimumFrameDurationOnPhone 6 | 7 | CFBundleDevelopmentRegion 8 | $(DEVELOPMENT_LANGUAGE) 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | arkit_plugin_example 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | $(FLUTTER_BUILD_NAME) 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | $(FLUTTER_BUILD_NUMBER) 25 | LSRequiresIPhoneOS 26 | 27 | NSCameraUsageDescription 28 | 29 | UIApplicationSupportsIndirectInputEvents 30 | 31 | UILaunchStoryboardName 32 | LaunchScreen 33 | UIMainStoryboardFile 34 | Main 35 | UISupportedInterfaceOrientations 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationLandscapeLeft 39 | UIInterfaceOrientationLandscapeRight 40 | 41 | UISupportedInterfaceOrientations~ipad 42 | 43 | UIInterfaceOrientationPortrait 44 | UIInterfaceOrientationPortraitUpsideDown 45 | UIInterfaceOrientationLandscapeLeft 46 | UIInterfaceOrientationLandscapeRight 47 | 48 | UIViewControllerBasedStatusBarAppearance 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import 'models/product.dart'; 4 | import 'screens/home_screen.dart'; 5 | import 'screens/product_with_augmented_reality_screen.dart'; 6 | import 'shared/theme/app_theme.dart'; 7 | 8 | void main() { 9 | runApp(const MyApp()); 10 | } 11 | 12 | class MyApp extends StatelessWidget { 13 | const MyApp({super.key}); 14 | 15 | @override 16 | Widget build(BuildContext context) { 17 | return MaterialApp( 18 | title: 'Augmented Reality with Flutter', 19 | theme: const AppTheme().themeData, 20 | home: const HomeScreen(), 21 | routes: { 22 | '/product': (context) => ProductWithAugmentedRealityScreen( 23 | product: ModalRoute.of(context)!.settings.arguments as Product, 24 | ), 25 | }, 26 | ); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /lib/models/product.dart: -------------------------------------------------------------------------------- 1 | class Product { 2 | final String id; 3 | final String name; 4 | final double price; 5 | final String imagePath; 6 | final String modelPath; 7 | 8 | const Product({ 9 | required this.id, 10 | required this.name, 11 | required this.price, 12 | required this.imagePath, 13 | required this.modelPath, 14 | }); 15 | 16 | static const products = [ 17 | Product( 18 | id: 'product_1', 19 | name: 'Shape #1', 20 | price: 799.99, 21 | imagePath: 'assets/images/3d_concrete_shape.png', 22 | modelPath: 'assets/gltf/3d_concrete_shape.gltf', 23 | ), 24 | Product( 25 | id: 'product_2', 26 | name: 'Shape #2', 27 | price: 599.99, 28 | imagePath: 'assets/images/3d_axis_shape.png', 29 | modelPath: 'assets/gltf/3d_axis_shape.gltf', 30 | ), 31 | Product( 32 | id: 'product_3', 33 | name: 'Shape #3', 34 | price: 299.99, 35 | imagePath: 'assets/images/3d_colored_composition.png', 36 | modelPath: 'assets/gltf/3d_colored_composition.gltf', 37 | ), 38 | Product( 39 | id: 'product_4', 40 | name: 'Shape #4', 41 | price: 199.99, 42 | imagePath: 'assets/images/3d_weird_bubble.png', 43 | modelPath: 'assets/gltf/3d_weird_bubble.gltf', 44 | ), 45 | ]; 46 | } 47 | -------------------------------------------------------------------------------- /lib/screens/home_screen.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; 3 | 4 | import '../models/product.dart'; 5 | 6 | class HomeScreen extends StatelessWidget { 7 | const HomeScreen({super.key}); 8 | 9 | @override 10 | Widget build(BuildContext context) { 11 | // final textTheme = Theme.of(context).textTheme; 12 | final products = [ 13 | ...Product.products, 14 | ...Product.products, 15 | ]; 16 | return Scaffold( 17 | appBar: AppBar( 18 | title: const Text('Home'), 19 | actions: [ 20 | IconButton( 21 | onPressed: () {}, 22 | icon: const Icon(Icons.search), 23 | ), 24 | const SizedBox(width: 8.0), 25 | ], 26 | ), 27 | body: SingleChildScrollView( 28 | child: Column( 29 | crossAxisAlignment: CrossAxisAlignment.start, 30 | children: [ 31 | Padding( 32 | padding: const EdgeInsets.all(16.0), 33 | child: RichText( 34 | text: TextSpan( 35 | text: 'Find your \n', 36 | style: Theme.of(context).textTheme.displayMedium!.copyWith( 37 | fontWeight: FontWeight.bold, 38 | ), 39 | children: [ 40 | TextSpan( 41 | text: 'Products', 42 | style: Theme.of(context).textTheme.displayMedium, 43 | ), 44 | ], 45 | ), 46 | ), 47 | ), 48 | Divider(), 49 | SingleChildScrollView( 50 | scrollDirection: Axis.horizontal, 51 | child: Row( 52 | children: [ 53 | SizedBox(width: 16.0), 54 | ...['Trending', 'Most Recent', 'Popular', 'Newest'].map( 55 | (e) => Container( 56 | margin: const EdgeInsets.only(right: 8.0), 57 | child: ChoiceChip( 58 | label: Text(e), 59 | selected: 'Trending' == e, 60 | ), 61 | ), 62 | ) 63 | ], 64 | ), 65 | ), 66 | 67 | const SizedBox(height: 8.0), 68 | // Grid 69 | MasonryGridView.count( 70 | shrinkWrap: true, 71 | physics: const NeverScrollableScrollPhysics(), 72 | crossAxisCount: 2, 73 | itemCount: products.length, 74 | itemBuilder: (context, index) { 75 | final heights = [200, 275, 225, 250]; 76 | 77 | return GestureDetector( 78 | onTap: () { 79 | Navigator.of(context).pushNamed( 80 | '/product', 81 | arguments: products[index], 82 | ); 83 | }, 84 | child: Container( 85 | alignment: Alignment.center, 86 | padding: const EdgeInsets.all(8.0), 87 | height: heights[index % 4].toDouble(), 88 | decoration: BoxDecoration( 89 | border: Border.all( 90 | color: Theme.of(context).dividerColor, 91 | width: 0.0, 92 | ), 93 | ), 94 | child: Column( 95 | mainAxisAlignment: MainAxisAlignment.center, 96 | children: [ 97 | Expanded( 98 | child: ClipRRect( 99 | borderRadius: BorderRadius.circular(8.0), 100 | child: Image.asset( 101 | products[index].imagePath, 102 | width: double.infinity, 103 | fit: BoxFit.cover, 104 | ), 105 | ), 106 | ), 107 | const SizedBox(height: 8.0), 108 | Text( 109 | products[index].name, 110 | style: Theme.of(context) 111 | .textTheme 112 | .titleMedium! 113 | .copyWith(fontWeight: FontWeight.bold), 114 | ), 115 | const SizedBox(height: 8.0), 116 | Text( 117 | '\$${products[index].price}', 118 | ), 119 | ], 120 | ), 121 | ), 122 | ); 123 | }, 124 | ), 125 | ], 126 | ), 127 | ), 128 | ); 129 | } 130 | } 131 | -------------------------------------------------------------------------------- /lib/screens/product_with_augmented_reality_screen.dart: -------------------------------------------------------------------------------- 1 | import 'package:vector_math/vector_math_64.dart' as vector; 2 | import 'package:arkit_plugin/arkit_plugin.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:collection/collection.dart'; 5 | import '../models/product.dart'; 6 | 7 | class ProductWithAugmentedRealityScreen extends StatefulWidget { 8 | const ProductWithAugmentedRealityScreen({ 9 | super.key, 10 | required this.product, 11 | }); 12 | 13 | final Product product; 14 | 15 | @override 16 | State createState() => 17 | _ProductWithAugmentedRealityScreenState(); 18 | } 19 | 20 | class _ProductWithAugmentedRealityScreenState 21 | extends State { 22 | late ARKitController controller; 23 | 24 | @override 25 | void dispose() { 26 | controller.dispose(); 27 | super.dispose(); 28 | } 29 | 30 | @override 31 | Widget build(BuildContext context) { 32 | return Scaffold( 33 | appBar: AppBar( 34 | title: const Text('Product'), 35 | backgroundColor: Colors.transparent, 36 | elevation: 0.0, 37 | ), 38 | body: ARKitSceneView( 39 | showFeaturePoints: true, 40 | enableTapRecognizer: true, 41 | planeDetection: ARPlaneDetection.horizontalAndVertical, 42 | onARKitViewCreated: (ARKitController controller) { 43 | this.controller = controller; 44 | 45 | controller.onARTap = (hits) { 46 | final point = hits.firstWhereOrNull( 47 | (hit) => hit.type == ARKitHitTestResultType.featurePoint, 48 | ); 49 | 50 | if (point != null) { 51 | _onARTapHandler(point); 52 | } 53 | }; 54 | }, 55 | ), 56 | ); 57 | } 58 | 59 | void _onARTapHandler(ARKitTestResult point) { 60 | final position = vector.Vector3( 61 | point.worldTransform.getColumn(3).x, 62 | point.worldTransform.getColumn(3).y, 63 | point.worldTransform.getColumn(3).z, 64 | ); 65 | final node = _getNodeFromFlutterAsset(position); 66 | controller.add(node); 67 | } 68 | 69 | ARKitGltfNode _getNodeFromFlutterAsset(vector.Vector3 position) { 70 | return ARKitGltfNode( 71 | assetType: AssetType.flutterAsset, 72 | url: widget.product.modelPath, 73 | scale: vector.Vector3.all(0.05), 74 | position: position, 75 | ); 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /lib/shared/theme/app_theme.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:google_fonts/google_fonts.dart'; 3 | import 'package:flex_color_scheme/flex_color_scheme.dart'; 4 | 5 | class AppTheme { 6 | const AppTheme(); 7 | 8 | ThemeData get themeData { 9 | return ThemeData( 10 | useMaterial3: true, 11 | brightness: Brightness.dark, 12 | colorScheme: _colorScheme, 13 | textTheme: _textTheme, 14 | inputDecorationTheme: _inputDecorationTheme, 15 | filledButtonTheme: _filledButtonTheme, 16 | ); 17 | } 18 | 19 | static ColorScheme get _colorScheme { 20 | const primaryColor = Color(0xFF909CDF); 21 | const secondaryColor = Color(0xFF9C254D); 22 | 23 | final seeds = FlexSchemeColor.from( 24 | primary: primaryColor, 25 | secondary: secondaryColor, 26 | brightness: Brightness.dark, 27 | ); 28 | 29 | final colors = FlexThemeData.dark( 30 | useMaterial3: true, 31 | colors: seeds, 32 | ).colorScheme; 33 | 34 | return colors; 35 | } 36 | 37 | static TextTheme get _textTheme { 38 | const textTheme = TextTheme(); 39 | 40 | final bodyFont = GoogleFonts.ibmPlexSansTextTheme(textTheme); 41 | final headingFont = GoogleFonts.syneMonoTextTheme(textTheme); 42 | 43 | return bodyFont.copyWith( 44 | displayLarge: headingFont.displayLarge, 45 | displayMedium: headingFont.displayMedium, 46 | displaySmall: headingFont.displaySmall, 47 | headlineLarge: headingFont.headlineLarge, 48 | headlineMedium: headingFont.headlineMedium, 49 | headlineSmall: headingFont.headlineSmall, 50 | bodyLarge: bodyFont.bodyLarge, 51 | bodyMedium: bodyFont.bodyMedium, 52 | bodySmall: bodyFont.bodySmall, 53 | ); 54 | } 55 | 56 | static InputDecorationTheme get _inputDecorationTheme { 57 | return InputDecorationTheme( 58 | contentPadding: const EdgeInsets.symmetric( 59 | horizontal: 12.0, 60 | vertical: 8.0, 61 | ), 62 | filled: true, 63 | fillColor: Colors.grey.withOpacity(0.2), 64 | enabledBorder: _enabledBorder, 65 | focusedBorder: _focusedBorder, 66 | disabledBorder: _disabledBorder, 67 | ); 68 | } 69 | 70 | static FilledButtonThemeData get _filledButtonTheme { 71 | return FilledButtonThemeData( 72 | style: FilledButton.styleFrom( 73 | foregroundColor: Colors.white, 74 | shape: RoundedRectangleBorder( 75 | borderRadius: BorderRadius.circular(8.0), 76 | ), 77 | ), 78 | ); 79 | } 80 | 81 | static InputBorder get _enabledBorder => OutlineInputBorder( 82 | borderRadius: BorderRadius.circular(16.0), 83 | borderSide: const BorderSide(color: Colors.transparent), 84 | ); 85 | 86 | static InputBorder get _focusedBorder => OutlineInputBorder( 87 | borderRadius: BorderRadius.circular(16.0), 88 | borderSide: BorderSide(color: _colorScheme.secondary), 89 | ); 90 | 91 | static InputBorder get _disabledBorder => OutlineInputBorder( 92 | borderRadius: BorderRadius.circular(16.0), 93 | borderSide: BorderSide(color: Colors.grey.withOpacity(0.2)), 94 | ); 95 | } 96 | -------------------------------------------------------------------------------- /lib/shared/widgets/app_drawer.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class AppDrawer extends StatefulWidget { 4 | const AppDrawer({super.key}); 5 | 6 | @override 7 | State createState() => _AppDrawerState(); 8 | } 9 | 10 | class _AppDrawerState extends State { 11 | final categories = [ 12 | {'name': 'Electronics', 'icon': Icons.electrical_services}, 13 | {'name': 'Clothing', 'icon': Icons.shopping_bag}, 14 | {'name': 'Furniture', 'icon': Icons.chair}, 15 | {'name': 'Groceries', 'icon': Icons.shopping_cart} 16 | ]; 17 | 18 | @override 19 | Widget build(BuildContext context) { 20 | return Drawer( 21 | child: Column( 22 | crossAxisAlignment: CrossAxisAlignment.center, 23 | children: [ 24 | SizedBox( 25 | height: 200, 26 | width: double.infinity, 27 | child: DrawerHeader( 28 | child: Center( 29 | child: Image.asset( 30 | 'assets/images/atomsbox-logo.png', 31 | width: 200, 32 | ), 33 | ), 34 | ), 35 | ), 36 | Padding( 37 | padding: const EdgeInsets.all(16.0), 38 | child: Text( 39 | 'CATEGORIES', 40 | style: Theme.of(context).textTheme.titleMedium!.copyWith( 41 | fontWeight: FontWeight.bold, 42 | letterSpacing: 4.0, 43 | ), 44 | ), 45 | ), 46 | const SizedBox(height: 8.0), 47 | GridView.builder( 48 | shrinkWrap: true, 49 | padding: EdgeInsets.zero, 50 | gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( 51 | crossAxisCount: 2, 52 | ), 53 | itemCount: categories.length, 54 | itemBuilder: (context, index) { 55 | return Container( 56 | decoration: BoxDecoration( 57 | border: Border.all( 58 | color: Theme.of(context).dividerColor, 59 | width: 0.0, 60 | ), 61 | ), 62 | alignment: Alignment.center, 63 | child: Column( 64 | mainAxisAlignment: MainAxisAlignment.center, 65 | children: [ 66 | Icon( 67 | categories[index]['icon'] as IconData, 68 | size: 36.0, 69 | ), 70 | const SizedBox(height: 8.0), 71 | Text( 72 | categories[index]['name'] as String, 73 | style: Theme.of(context) 74 | .textTheme 75 | .bodyMedium! 76 | .copyWith(letterSpacing: 2.0), 77 | ), 78 | ], 79 | ), 80 | ); 81 | }, 82 | ), 83 | const Spacer(), 84 | Padding( 85 | padding: const EdgeInsets.all(16.0).copyWith(bottom: 32.0), 86 | child: Row( 87 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 88 | children: [ 89 | IconButton( 90 | onPressed: () {}, 91 | icon: const Icon(Icons.person), 92 | ), 93 | IconButton( 94 | onPressed: () {}, 95 | icon: const Icon(Icons.settings), 96 | ), 97 | ], 98 | ), 99 | ), 100 | ], 101 | ), 102 | ); 103 | } 104 | } 105 | -------------------------------------------------------------------------------- /pubspec.lock: -------------------------------------------------------------------------------- 1 | # Generated by pub 2 | # See https://dart.dev/tools/pub/glossary#lockfile 3 | packages: 4 | arkit_plugin: 5 | dependency: "direct main" 6 | description: 7 | name: arkit_plugin 8 | sha256: "5ab6307a209c8748416db488fa292e5b4e9a8db8f8dac7af70669d21a9251b3b" 9 | url: "https://pub.dev" 10 | source: hosted 11 | version: "1.0.7" 12 | async: 13 | dependency: transitive 14 | description: 15 | name: async 16 | sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" 17 | url: "https://pub.dev" 18 | source: hosted 19 | version: "2.11.0" 20 | boolean_selector: 21 | dependency: transitive 22 | description: 23 | name: boolean_selector 24 | sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" 25 | url: "https://pub.dev" 26 | source: hosted 27 | version: "2.1.1" 28 | characters: 29 | dependency: transitive 30 | description: 31 | name: characters 32 | sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" 33 | url: "https://pub.dev" 34 | source: hosted 35 | version: "1.3.0" 36 | clock: 37 | dependency: transitive 38 | description: 39 | name: clock 40 | sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf 41 | url: "https://pub.dev" 42 | source: hosted 43 | version: "1.1.1" 44 | collection: 45 | dependency: transitive 46 | description: 47 | name: collection 48 | sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a 49 | url: "https://pub.dev" 50 | source: hosted 51 | version: "1.18.0" 52 | crypto: 53 | dependency: transitive 54 | description: 55 | name: crypto 56 | sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab 57 | url: "https://pub.dev" 58 | source: hosted 59 | version: "3.0.3" 60 | cupertino_icons: 61 | dependency: "direct main" 62 | description: 63 | name: cupertino_icons 64 | sha256: d57953e10f9f8327ce64a508a355f0b1ec902193f66288e8cb5070e7c47eeb2d 65 | url: "https://pub.dev" 66 | source: hosted 67 | version: "1.0.6" 68 | fake_async: 69 | dependency: transitive 70 | description: 71 | name: fake_async 72 | sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" 73 | url: "https://pub.dev" 74 | source: hosted 75 | version: "1.3.1" 76 | ffi: 77 | dependency: transitive 78 | description: 79 | name: ffi 80 | sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" 81 | url: "https://pub.dev" 82 | source: hosted 83 | version: "2.1.0" 84 | flex_color_scheme: 85 | dependency: "direct main" 86 | description: 87 | name: flex_color_scheme 88 | sha256: "32914024a4f404d90ff449f58d279191675b28e7c08824046baf06826e99d984" 89 | url: "https://pub.dev" 90 | source: hosted 91 | version: "7.3.1" 92 | flex_seed_scheme: 93 | dependency: transitive 94 | description: 95 | name: flex_seed_scheme 96 | sha256: "29c12aba221eb8a368a119685371381f8035011d18de5ba277ad11d7dfb8657f" 97 | url: "https://pub.dev" 98 | source: hosted 99 | version: "1.4.0" 100 | flutter: 101 | dependency: "direct main" 102 | description: flutter 103 | source: sdk 104 | version: "0.0.0" 105 | flutter_lints: 106 | dependency: "direct dev" 107 | description: 108 | name: flutter_lints 109 | sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04 110 | url: "https://pub.dev" 111 | source: hosted 112 | version: "2.0.3" 113 | flutter_staggered_grid_view: 114 | dependency: "direct main" 115 | description: 116 | name: flutter_staggered_grid_view 117 | sha256: "19e7abb550c96fbfeb546b23f3ff356ee7c59a019a651f8f102a4ba9b7349395" 118 | url: "https://pub.dev" 119 | source: hosted 120 | version: "0.7.0" 121 | flutter_test: 122 | dependency: "direct dev" 123 | description: flutter 124 | source: sdk 125 | version: "0.0.0" 126 | google_fonts: 127 | dependency: "direct main" 128 | description: 129 | name: google_fonts 130 | sha256: f0b8d115a13ecf827013ec9fc883390ccc0e87a96ed5347a3114cac177ef18e8 131 | url: "https://pub.dev" 132 | source: hosted 133 | version: "6.1.0" 134 | http: 135 | dependency: transitive 136 | description: 137 | name: http 138 | sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba 139 | url: "https://pub.dev" 140 | source: hosted 141 | version: "1.2.0" 142 | http_parser: 143 | dependency: transitive 144 | description: 145 | name: http_parser 146 | sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" 147 | url: "https://pub.dev" 148 | source: hosted 149 | version: "4.0.2" 150 | json_annotation: 151 | dependency: transitive 152 | description: 153 | name: json_annotation 154 | sha256: b10a7b2ff83d83c777edba3c6a0f97045ddadd56c944e1a23a3fdf43a1bf4467 155 | url: "https://pub.dev" 156 | source: hosted 157 | version: "4.8.1" 158 | leak_tracker: 159 | dependency: transitive 160 | description: 161 | name: leak_tracker 162 | sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa" 163 | url: "https://pub.dev" 164 | source: hosted 165 | version: "10.0.0" 166 | leak_tracker_flutter_testing: 167 | dependency: transitive 168 | description: 169 | name: leak_tracker_flutter_testing 170 | sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0 171 | url: "https://pub.dev" 172 | source: hosted 173 | version: "2.0.1" 174 | leak_tracker_testing: 175 | dependency: transitive 176 | description: 177 | name: leak_tracker_testing 178 | sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47 179 | url: "https://pub.dev" 180 | source: hosted 181 | version: "2.0.1" 182 | lints: 183 | dependency: transitive 184 | description: 185 | name: lints 186 | sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" 187 | url: "https://pub.dev" 188 | source: hosted 189 | version: "2.1.1" 190 | matcher: 191 | dependency: transitive 192 | description: 193 | name: matcher 194 | sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb 195 | url: "https://pub.dev" 196 | source: hosted 197 | version: "0.12.16+1" 198 | material_color_utilities: 199 | dependency: transitive 200 | description: 201 | name: material_color_utilities 202 | sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" 203 | url: "https://pub.dev" 204 | source: hosted 205 | version: "0.8.0" 206 | meta: 207 | dependency: transitive 208 | description: 209 | name: meta 210 | sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 211 | url: "https://pub.dev" 212 | source: hosted 213 | version: "1.11.0" 214 | path: 215 | dependency: transitive 216 | description: 217 | name: path 218 | sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" 219 | url: "https://pub.dev" 220 | source: hosted 221 | version: "1.9.0" 222 | path_provider: 223 | dependency: transitive 224 | description: 225 | name: path_provider 226 | sha256: b27217933eeeba8ff24845c34003b003b2b22151de3c908d0e679e8fe1aa078b 227 | url: "https://pub.dev" 228 | source: hosted 229 | version: "2.1.2" 230 | path_provider_android: 231 | dependency: transitive 232 | description: 233 | name: path_provider_android 234 | sha256: "477184d672607c0a3bf68fbbf601805f92ef79c82b64b4d6eb318cbca4c48668" 235 | url: "https://pub.dev" 236 | source: hosted 237 | version: "2.2.2" 238 | path_provider_foundation: 239 | dependency: transitive 240 | description: 241 | name: path_provider_foundation 242 | sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f" 243 | url: "https://pub.dev" 244 | source: hosted 245 | version: "2.3.2" 246 | path_provider_linux: 247 | dependency: transitive 248 | description: 249 | name: path_provider_linux 250 | sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 251 | url: "https://pub.dev" 252 | source: hosted 253 | version: "2.2.1" 254 | path_provider_platform_interface: 255 | dependency: transitive 256 | description: 257 | name: path_provider_platform_interface 258 | sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" 259 | url: "https://pub.dev" 260 | source: hosted 261 | version: "2.1.2" 262 | path_provider_windows: 263 | dependency: transitive 264 | description: 265 | name: path_provider_windows 266 | sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" 267 | url: "https://pub.dev" 268 | source: hosted 269 | version: "2.2.1" 270 | platform: 271 | dependency: transitive 272 | description: 273 | name: platform 274 | sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" 275 | url: "https://pub.dev" 276 | source: hosted 277 | version: "3.1.4" 278 | plugin_platform_interface: 279 | dependency: transitive 280 | description: 281 | name: plugin_platform_interface 282 | sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" 283 | url: "https://pub.dev" 284 | source: hosted 285 | version: "2.1.8" 286 | sky_engine: 287 | dependency: transitive 288 | description: flutter 289 | source: sdk 290 | version: "0.0.99" 291 | source_span: 292 | dependency: transitive 293 | description: 294 | name: source_span 295 | sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" 296 | url: "https://pub.dev" 297 | source: hosted 298 | version: "1.10.0" 299 | stack_trace: 300 | dependency: transitive 301 | description: 302 | name: stack_trace 303 | sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" 304 | url: "https://pub.dev" 305 | source: hosted 306 | version: "1.11.1" 307 | stream_channel: 308 | dependency: transitive 309 | description: 310 | name: stream_channel 311 | sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 312 | url: "https://pub.dev" 313 | source: hosted 314 | version: "2.1.2" 315 | string_scanner: 316 | dependency: transitive 317 | description: 318 | name: string_scanner 319 | sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" 320 | url: "https://pub.dev" 321 | source: hosted 322 | version: "1.2.0" 323 | term_glyph: 324 | dependency: transitive 325 | description: 326 | name: term_glyph 327 | sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 328 | url: "https://pub.dev" 329 | source: hosted 330 | version: "1.2.1" 331 | test_api: 332 | dependency: transitive 333 | description: 334 | name: test_api 335 | sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" 336 | url: "https://pub.dev" 337 | source: hosted 338 | version: "0.6.1" 339 | typed_data: 340 | dependency: transitive 341 | description: 342 | name: typed_data 343 | sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c 344 | url: "https://pub.dev" 345 | source: hosted 346 | version: "1.3.2" 347 | vector_math: 348 | dependency: "direct main" 349 | description: 350 | name: vector_math 351 | sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" 352 | url: "https://pub.dev" 353 | source: hosted 354 | version: "2.1.4" 355 | vm_service: 356 | dependency: transitive 357 | description: 358 | name: vm_service 359 | sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 360 | url: "https://pub.dev" 361 | source: hosted 362 | version: "13.0.0" 363 | web: 364 | dependency: transitive 365 | description: 366 | name: web 367 | sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 368 | url: "https://pub.dev" 369 | source: hosted 370 | version: "0.3.0" 371 | win32: 372 | dependency: transitive 373 | description: 374 | name: win32 375 | sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8" 376 | url: "https://pub.dev" 377 | source: hosted 378 | version: "5.2.0" 379 | xdg_directories: 380 | dependency: transitive 381 | description: 382 | name: xdg_directories 383 | sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d 384 | url: "https://pub.dev" 385 | source: hosted 386 | version: "1.0.4" 387 | sdks: 388 | dart: ">=3.2.6 <4.0.0" 389 | flutter: ">=3.13.0" 390 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: augmented_reality_with_flutter 2 | description: "A new Flutter project." 3 | publish_to: 'none' 4 | 5 | version: 1.0.0+1 6 | 7 | environment: 8 | sdk: '>=3.2.6 <4.0.0' 9 | 10 | dependencies: 11 | flutter: 12 | sdk: flutter 13 | 14 | 15 | 16 | 17 | cupertino_icons: ^1.0.2 18 | arkit_plugin: ^1.0.7 19 | vector_math: ^2.1.4 20 | flutter_staggered_grid_view: ^0.7.0 21 | google_fonts: ^6.1.0 22 | flex_color_scheme: ^7.3.1 23 | 24 | dev_dependencies: 25 | flutter_test: 26 | sdk: flutter 27 | 28 | 29 | 30 | 31 | 32 | 33 | flutter_lints: ^2.0.0 34 | 35 | 36 | flutter: 37 | 38 | 39 | 40 | 41 | uses-material-design: true 42 | 43 | 44 | assets: 45 | - assets/images/ 46 | - assets/gltf/ 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /screenshots/ar-with-flutter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxonflutter/eCommerce-UI-with-Flutter-Augmented-Reality-ARKit/f769b5c7e5e56445d6b17bb4b869cf5a8921ef28/screenshots/ar-with-flutter.png --------------------------------------------------------------------------------