[
  {
    "path": ".github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\ngithub: [Kleak,jaumard]# Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]\npatreon: # Replace with a single Patreon username\nopen_collective: # Replace with a single Open Collective username\nko_fi: # Replace with a single Ko-fi username\ntidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel\ncommunity_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry\nliberapay: # Replace with a single Liberapay username\nissuehunt: # Replace with a single IssueHunt username\notechie: # Replace with a single Otechie username\ncustom: ['kleak*keybase.io']\n"
  },
  {
    "path": ".github/workflows/main.yml",
    "content": "name: CI\n\non: \n  pull_request:\n    branches:\n    - master\n    \n\njobs:\n  analyze:\n    runs-on: ubuntu-latest\n    container:\n      image: cirrusci/flutter:stable\n\n    steps:\n    - uses: actions/checkout@v1\n    - run: sudo chown -R cirrus:cirrus ./ /github/home/\n    - name: Flutter pub get\n      run: flutter packages get\n    - name: Flutter analyze --suppress-analytics\n      run: flutter analyze --suppress-analytics\n"
  },
  {
    "path": ".gitignore",
    "content": ".DS_Store\n.dart_tool/\n\n.packages\n.pub/\n\n.vscode/\nidea/\n\nbuild/\nios/.generated/\nios/Flutter/Generated.xcconfig\nios/Runner/GeneratedPluginRegistrant.*\n\ngoogle-services.json\n.idea/\n/example/ios/GoogleService-Info.plist\n/example/ios/Runner/GoogleService-Info.plist\nexample/ios/Flutter/flutter_export_environment.sh\n"
  },
  {
    "path": ".metadata",
    "content": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrades etc.\n#\n# This file should be version controlled and should not be manually edited.\n\nversion:\n  revision: 8661d8aecd626f7f57ccbcb735553edc05a2e713\n  channel: stable\n\nproject_type: package\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "## [3.0.1] - 30/04/2021\n\n- update deps\n- fix camera distortion\n\n## [3.0.0] - 17/04/2021\n\n- migrate to null safety\n\n## [2.3.0] - 03/10/2020\n\n- fix NPE on aspect ratio\n- update deps\n\n## [2.2.5] - 12/02/2020\n\n- fix crash on android app lifecycle\n- expose camera controller\n- pass default resolution to high to improve reading of barcode\n- update deps\n\n## [2.2.4] - 04/11/2019\n\n- simplify pause stream when not on screen by using VisibilityDetector widget\n\n## [2.2.3] - 23/10/2019\n\n- fix crash when setState is called when unmounted\n- update dependencies\n\n## [2.2.2] - 02/09/2019\n\n- fix black screen on some Android device in profile/release mode\n\n## [2.2.1] - 19/06/2019\n\n- fix bug when specifying resolution\n\n## [2.2.0] - 16/06/2019\n\n- disable audio (#43)\n- let user define camera resolution (#45)\n\n## [2.1.0] - 16/05/2019\n\nexpose more function from camera controller\n- prepareForVideoRecording\n- startVideoRecording\n- stopVideoRecording\n- takePicture\n\n## [2.0.1] - 5/05/2019\n\n* fix a crash when poping a route with the camera preview\n\n## [2.0.0] - 2/05/2019\n\n* We now forward the result from firebase_ml_vision for onResult\n\n## [1.5.0] - 24/04/2019\n\n* fix installation problems\n* Expose camera value\n\n## [1.4.0] - 24/04/2019\n\n* add cameraLensDirection parameter (this default to back)\n\n## [1.3.0] - 17/04/2019\n\n* add overlayBuilder parameter\n\n## [1.2.0] - 12/04/2019\n\n* fix crash above android api 21.\n* fix pause when a new route is pushed.\n\n## [1.1.0] - 11/04/2019\n\n* Allow usage under android api 21.\n* Add error type on error builder.\n\n## [1.0.0] - 10/04/2019\n\n* Initial release.\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2019 Rushio Consulting\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# Flutter Camera Ml Vision\n\n[![pub package](https://img.shields.io/pub/v/flutter_camera_ml_vision.svg)](https://pub.dartlang.org/packages/flutter_camera_ml_vision)\n\n\nA Flutter package for iOS and Android to show a preview of the camera and detect things with Firebase ML Vision.\n\n<img src=\"https://raw.githubusercontent.com/rushio-consulting/flutter_camera_ml_vision/master/videos/scan_page.gif\" width=\"100\" />\n\n## Installation\n\nFirst, add `flutter_camera_ml_vision` as a dependency.\n\n```yaml\n...\ndependencies:\n  flutter:\n    sdk: flutter\n  flutter_camera_ml_vision: ^2.2.4\n...\n```\n\n## Configure Firebase\nYou must also configure Firebase for each platform project: Android and iOS (see the `example` folder or https://firebase.google.com/codelabs/firebase-get-to-know-flutter#3 for step by step details).\n\n\n### iOS\n\nAdd two rows to the ios/Runner/Info.plist:\n\n* one with the key Privacy - Camera Usage Description and a usage description.\n* and one with the key Privacy - Microphone Usage Description and a usage description.\nOr in text format add the key:\n\n```\n<key>NSCameraUsageDescription</key>\n<string>Can I use the camera please?</string>\n<key>NSMicrophoneUsageDescription</key>\n<string>Can I use the mic please?</string>\n```\n\nIf you're using one of the on-device APIs, include the corresponding ML Kit library model in your Podfile. Then run pod update in a terminal within the same directory as your Podfile.\n\n```\npod 'Firebase/MLVisionBarcodeModel'\npod 'Firebase/MLVisionFaceModel'\npod 'Firebase/MLVisionLabelModel'\npod 'Firebase/MLVisionTextModel'\n```\n\n### Android\n\nChange the minimum Android sdk version to 21 (or higher) in your `android/app/build.gradle` file.\n\n```\nminSdkVersion 21\n```\n_ps: This is due to the dependency on the camera plugin._\n\n\nIf you're using the on-device `LabelDetector`, include the latest matching [ML Kit: Image Labeling](https://firebase.google.com/support/release-notes/android) dependency in your app-level `build.gradle` file.\n\n```gradle\nandroid {\n    dependencies {\n        // ...\n\n        api 'com.google.firebase:firebase-ml-vision-image-label-model:19.0.0'\n    }\n}\n```\n\nIf you receive compilation errors, try an earlier version of [ML Kit: Image Labeling](https://firebase.google.com/support/release-notes/android).\n\nOptional but recommended: If you use the on-device API, configure your app to automatically download the ML model to the device after your app is installed from the Play Store. To do so, add the following declaration to your app's `AndroidManifest.xml` file:\n\n```xml\n<application ...>\n  ...\n  <meta-data\n    android:name=\"com.google.firebase.ml.vision.DEPENDENCIES\"\n    android:value=\"ocr\" />\n  <!-- To use multiple models: android:value=\"ocr,label,barcode,face\" -->\n</application>\n```\n\n## Usage\n\n### 1. Example with Barcode\n\n```dart\nCameraMlVision<List<Barcode>>(\n  detector: FirebaseVision.instance.barcodeDetector().detectInImage,\n  onResult: (List<Barcode> barcodes) {\n    if (!mounted || resultSent) {\n      return;\n    }\n    resultSent = true;\n    Navigator.of(context).pop<Barcode>(barcodes.first);\n  },\n)\n```\n\n`CameraMlVision` is a widget that shows the preview of the camera. It takes a detector as a parameter here we pass the `detectInImage` method of the `BarcodeDetector` object.\nThe detector parameter can take all the different FirebaseVision Detector. Here is a list :\n\n```\nFirebaseVision.instance.barcodeDetector().detectInImage\nFirebaseVision.instance.cloudLabelDetector().detectInImage\nFirebaseVision.instance.faceDetector().processImage\nFirebaseVision.instance.labelDetector().detectInImage\nFirebaseVision.instance.textRecognizer().processImage\n```\n\nThen when something is detected the onResult callback is called with the data in the parameter of the function.\n\n### Exposed functionality from CameraController\n\nWe expose some functionality from the CameraController class here a list of these :\n\n- value\n- prepareForVideoRecording\n- startVideoRecording\n- stopVideoRecording\n- takePicture\n\n## Getting Started\n\nSee the `example` directory for a complete sample app.\n\n## Features and bugs \n\nPlease file feature requests and bugs at the [issue tracker](https://github.com/santetis/flutter_camera_ml_vision/issues).\n\n## Technical Support\n\nFor any technical support, don't hesitate to contact us. \nFind more information in our [website](https://rushio-consulting.fr)\n\nFor now, all the issues with the label `support` mean that they come out of the scope of the following project. So you can [contact us](https://rushio-consulting.fr/support) as a support.\n\n"
  },
  {
    "path": "analysis_options.yaml",
    "content": "include: package:pedantic/analysis_options.yaml\n"
  },
  {
    "path": "example/.gitignore",
    "content": "# Miscellaneous\n*.class\n*.log\n*.pyc\n*.swp\n.DS_Store\n.atom/\n.buildlog/\n.history\n.svn/\n\n# IntelliJ related\n*.iml\n*.ipr\n*.iws\n.idea/\n\n# Visual Studio Code related\n.vscode/\n\n# Flutter/Dart/Pub related\n**/doc/api/\n.dart_tool/\n.flutter-plugins\n.packages\n.pub-cache/\n.pub/\n/build/\n\n# Android related\n**/android/**/gradle-wrapper.jar\n**/android/.gradle\n**/android/captures/\n**/android/gradlew\n**/android/gradlew.bat\n**/android/local.properties\n**/android/**/GeneratedPluginRegistrant.java\n\n# iOS/XCode related\n**/ios/**/*.mode1v3\n**/ios/**/*.mode2v3\n**/ios/**/*.moved-aside\n**/ios/**/*.pbxuser\n**/ios/**/*.perspectivev3\n**/ios/**/*sync/\n**/ios/**/.sconsign.dblite\n**/ios/**/.tags*\n**/ios/**/.vagrant/\n**/ios/**/DerivedData/\n**/ios/**/Icon?\n**/ios/**/Pods/\n**/ios/**/.symlinks/\n**/ios/**/profile\n**/ios/**/xcuserdata\n**/ios/.generated/\n**/ios/Flutter/App.framework\n**/ios/Flutter/Flutter.framework\n**/ios/Flutter/Generated.xcconfig\n**/ios/Flutter/app.flx\n**/ios/Flutter/app.zip\n**/ios/Flutter/flutter_assets/\n**/ios/ServiceDefinitions.json\n**/ios/Runner/GeneratedPluginRegistrant.*\n\n# Exceptions to above rules.\n!**/ios/**/default.mode1v3\n!**/ios/**/default.mode2v3\n!**/ios/**/default.pbxuser\n!**/ios/**/default.perspectivev3\n!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages\n/ios/GoogleService-Info.plist\n/.flutter-plugins-dependencies\n"
  },
  {
    "path": "example/.metadata",
    "content": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrades etc.\n#\n# This file should be version controlled and should not be manually edited.\n\nversion:\n  revision: 8661d8aecd626f7f57ccbcb735553edc05a2e713\n  channel: stable\n\nproject_type: app\n"
  },
  {
    "path": "example/README.md",
    "content": "```dart\nimport 'package:firebase_ml_vision/firebase_ml_vision.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_camera_ml_vision/flutter_camera_ml_vision.dart';\n\nvoid main() => runApp(MyApp());\n\nclass MyApp extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      title: 'Flutter Demo',\n      theme: ThemeData(\n        primarySwatch: Colors.blue,\n      ),\n      home: MyHomePage(title: 'Flutter Demo Home Page'),\n    );\n  }\n}\n\nclass MyHomePage extends StatefulWidget {\n  MyHomePage({Key key, this.title}) : super(key: key);\n\n  final String title;\n\n  @override\n  _MyHomePageState createState() => _MyHomePageState();\n}\n\nclass _MyHomePageState extends State<MyHomePage> {\n  List<String> data = [];\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(\n        title: Text(widget.title),\n      ),\n      body: Column(\n        mainAxisSize: MainAxisSize.min,\n        crossAxisAlignment: CrossAxisAlignment.center,\n        children: [\n          RaisedButton(\n            child: Text('Scan product'),\n            onPressed: () async {\n              final barcode = await Navigator.of(context).push<Barcode>(\n                MaterialPageRoute(\n                  builder: (c) {\n                    return ScanPage();\n                  },\n                ),\n              );\n              if (barcode == null) {\n                return;\n              }\n\n              setState(() {\n                data.add(barcode.displayValue);\n              });\n            },\n          ),\n          Expanded(\n            child: ListView(\n              children: data.map((d) => Text(d)).toList(),\n            ),\n          ),\n        ],\n      ), // This trailing comma makes auto-formatting nicer for build methods.\n    );\n  }\n}\n\nclass ScanPage extends StatefulWidget {\n  @override\n  _ScanPageState createState() => _ScanPageState();\n}\n\nclass _ScanPageState extends State<ScanPage> {\n  bool resultSent = false;\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      body: SafeArea(\n        child: SizedBox(\n          width: MediaQuery.of(context).size.width,\n          child: CameraMlVision<List<Barcode>>(\n            detector: FirebaseVision.instance.barcodeDetector().detectInImage,\n            onResult: (List<Barcode> barcodes) {\n              if (!mounted || resultSent) {\n                return;\n              }\n              resultSent = true;\n              Navigator.of(context).pop<Barcode>(barcodes.first);\n            },\n          ),\n        ),\n      ),\n    );\n  }\n}\n```"
  },
  {
    "path": "example/android/app/build.gradle",
    "content": "def localProperties = new Properties()\ndef localPropertiesFile = rootProject.file('local.properties')\nif (localPropertiesFile.exists()) {\n    localPropertiesFile.withReader('UTF-8') { reader ->\n        localProperties.load(reader)\n    }\n}\n\ndef flutterRoot = localProperties.getProperty('flutter.sdk')\nif (flutterRoot == null) {\n    throw new GradleException(\"Flutter SDK not found. Define location with flutter.sdk in the local.properties file.\")\n}\n\ndef flutterVersionCode = localProperties.getProperty('flutter.versionCode')\nif (flutterVersionCode == null) {\n    flutterVersionCode = '1'\n}\n\ndef flutterVersionName = localProperties.getProperty('flutter.versionName')\nif (flutterVersionName == null) {\n    flutterVersionName = '1.0'\n}\n\napply plugin: 'com.android.application'\napply from: \"$flutterRoot/packages/flutter_tools/gradle/flutter.gradle\"\n\nandroid {\n    compileSdkVersion 28\n\n    lintOptions {\n        disable 'InvalidPackage'\n    }\n\n    defaultConfig {\n        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).\n        applicationId \"fr.rushioconsulting.flutter_camera_ml_vision_example\"\n        minSdkVersion 21\n        targetSdkVersion 28\n        versionCode flutterVersionCode.toInteger()\n        versionName flutterVersionName\n        testInstrumentationRunner \"androidx.test.runner.AndroidJUnitRunner\"\n    }\n\n    buildTypes {\n        release {\n            // TODO: Add your own signing config for the release build.\n            // Signing with the debug keys for now, so `flutter run --release` works.\n            signingConfig signingConfigs.debug\n        }\n    }\n}\n\nflutter {\n    source '../..'\n}\n\ndependencies {\n    api 'com.google.firebase:firebase-ml-vision-barcode-model:16.1.2'\n    testImplementation 'junit:junit:4.12'\n    androidTestImplementation 'androidx.test:runner:1.1.1'\n    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'\n}\n\napply plugin: 'com.google.gms.google-services'\n"
  },
  {
    "path": "example/android/app/src/debug/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"fr.rushioconsulting.flutter_camera_ml_vision_example\">\n    <!-- Flutter needs it to communicate with the running application\n         to allow setting breakpoints, to provide hot reload, etc.\n    -->\n    <uses-permission android:name=\"android.permission.INTERNET\"/>\n</manifest>\n"
  },
  {
    "path": "example/android/app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"fr.rushioconsulting.flutter_camera_ml_vision_example\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <!-- io.flutter.app.FlutterApplication is an android.app.Application that\n         calls FlutterMain.startInitialization(this); in its onCreate method.\n         In most cases you can leave this as-is, but you if you want to provide\n         additional functionality it is fine to subclass or reimplement\n         FlutterApplication and put your custom class here. -->\n    <application\n        android:name=\"io.flutter.app.FlutterApplication\"\n        android:label=\"flutter_camera_ml_vision_example\"\n        android:icon=\"@mipmap/ic_launcher\">\n        <activity\n            android:name=\".MainActivity\"\n            android:launchMode=\"singleTop\"\n            android:theme=\"@style/LaunchTheme\"\n            android:configChanges=\"orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode\"\n            android:hardwareAccelerated=\"true\"\n            android:windowSoftInputMode=\"adjustResize\">\n            <!-- This keeps the window background of the activity showing\n                 until Flutter renders its first frame. It can be removed if\n                 there is no splash screen (such as the default splash screen\n                 defined in @style/LaunchTheme). -->\n            <meta-data\n                android:name=\"io.flutter.app.android.SplashScreenUntilFirstFrame\"\n                android:value=\"true\" />\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\"/>\n                <category android:name=\"android.intent.category.LAUNCHER\"/>\n            </intent-filter>\n        </activity>\n        <meta-data\n            android:name=\"com.google.firebase.ml.vision.DEPENDENCIES\"\n            android:value=\"barcode\" />\n    </application>\n</manifest>\n"
  },
  {
    "path": "example/android/app/src/main/java/fr/rushioconsulting/flutter_camera_ml_vision_example/MainActivity.java",
    "content": "package fr.rushioconsulting.flutter_camera_ml_vision_example;\n\nimport android.os.Bundle;\nimport io.flutter.app.FlutterActivity;\nimport io.flutter.plugins.GeneratedPluginRegistrant;\n\npublic class MainActivity extends FlutterActivity {\n  @Override\n  protected void onCreate(Bundle savedInstanceState) {\n    super.onCreate(savedInstanceState);\n    GeneratedPluginRegistrant.registerWith(this);\n  }\n}\n"
  },
  {
    "path": "example/android/app/src/main/res/drawable/launch_background.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Modify this file to customize your launch splash screen -->\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@android:color/white\" />\n\n    <!-- You can insert your own image assets here -->\n    <!-- <item>\n        <bitmap\n            android:gravity=\"center\"\n            android:src=\"@mipmap/launch_image\" />\n    </item> -->\n</layer-list>\n"
  },
  {
    "path": "example/android/app/src/main/res/values/styles.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <style name=\"LaunchTheme\" parent=\"@android:style/Theme.Black.NoTitleBar\">\n        <!-- Show a splash screen on the activity. Automatically removed when\n             Flutter draws its first frame -->\n        <item name=\"android:windowBackground\">@drawable/launch_background</item>\n    </style>\n</resources>\n"
  },
  {
    "path": "example/android/app/src/profile/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"fr.rushioconsulting.flutter_camera_ml_vision_example\">\n    <!-- Flutter needs it to communicate with the running application\n         to allow setting breakpoints, to provide hot reload, etc.\n    -->\n    <uses-permission android:name=\"android.permission.INTERNET\"/>\n</manifest>\n"
  },
  {
    "path": "example/android/build.gradle",
    "content": "buildscript {\n    repositories {\n        google()\n        jcenter()\n    }\n\n    dependencies {\n        classpath 'com.android.tools.build:gradle:4.1.3'\n        classpath 'com.google.gms:google-services:4.3.5'\n    }\n}\n\nallprojects {\n    repositories {\n        google()\n        jcenter()\n    }\n}\n\nrootProject.buildDir = '../build'\nsubprojects {\n    project.buildDir = \"${rootProject.buildDir}/${project.name}\"\n}\nsubprojects {\n    project.evaluationDependsOn(':app')\n}\n\ntask clean(type: Delete) {\n    delete rootProject.buildDir\n}\n"
  },
  {
    "path": "example/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "#Thu Apr 15 16:29:32 CEST 2021\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.5-bin.zip\n"
  },
  {
    "path": "example/android/gradle.properties",
    "content": "org.gradle.jvmargs=-Xmx1536M\nandroid.enableJetifier=true\nandroid.useAndroidX=true\nandroid.enableR8=true\n"
  },
  {
    "path": "example/android/settings.gradle",
    "content": "include ':app'\n\ndef flutterProjectRoot = rootProject.projectDir.parentFile.toPath()\n\ndef plugins = new Properties()\ndef pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')\nif (pluginsFile.exists()) {\n    pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }\n}\n\nplugins.each { name, path ->\n    def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()\n    include \":$name\"\n    project(\":$name\").projectDir = pluginDirectory\n}\n"
  },
  {
    "path": "example/ios/Flutter/AppFrameworkInfo.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n  <key>CFBundleDevelopmentRegion</key>\n  <string>en</string>\n  <key>CFBundleExecutable</key>\n  <string>App</string>\n  <key>CFBundleIdentifier</key>\n  <string>io.flutter.flutter.app</string>\n  <key>CFBundleInfoDictionaryVersion</key>\n  <string>6.0</string>\n  <key>CFBundleName</key>\n  <string>App</string>\n  <key>CFBundlePackageType</key>\n  <string>FMWK</string>\n  <key>CFBundleShortVersionString</key>\n  <string>1.0</string>\n  <key>CFBundleSignature</key>\n  <string>????</string>\n  <key>CFBundleVersion</key>\n  <string>1.0</string>\n  <key>MinimumOSVersion</key>\n  <string>8.0</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "example/ios/Flutter/Debug.xcconfig",
    "content": "#include \"Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig\"\n#include \"Generated.xcconfig\"\n"
  },
  {
    "path": "example/ios/Flutter/Release.xcconfig",
    "content": "#include \"Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig\"\n#include \"Generated.xcconfig\"\n"
  },
  {
    "path": "example/ios/Podfile",
    "content": "# Uncomment this line to define a global platform for your project\nplatform :ios, '11.0'\n\n# CocoaPods analytics sends network stats synchronously affecting flutter build latency.\nENV['COCOAPODS_DISABLE_STATS'] = 'true'\n\nproject 'Runner', {\n  'Debug' => :debug,\n  'Profile' => :release,\n  'Release' => :release,\n}\n\ndef flutter_root\n  generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)\n  unless File.exist?(generated_xcode_build_settings_path)\n    raise \"#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first\"\n  end\n\n  File.foreach(generated_xcode_build_settings_path) do |line|\n    matches = line.match(/FLUTTER_ROOT\\=(.*)/)\n    return matches[1].strip if matches\n  end\n  raise \"FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get\"\nend\n\nrequire File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)\n\nflutter_ios_podfile_setup\n\ntarget 'Runner' do\n  flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))\n# because of issue https://github.com/FirebaseExtended/flutterfire/issues/4625#issuecomment-821792539\n# need custom git version until it's done\n  pod 'FirebaseMLVisionBarcodeModel', '0.21', :source => 'git@github.com:rozdonmobile/CocoaPodsSpecs.git'\nend\n\npost_install do |installer|\n  installer.pods_project.targets.each do |target|\n    flutter_additional_ios_build_settings(target)\n  end\nend\n"
  },
  {
    "path": "example/ios/Runner/AppDelegate.h",
    "content": "#import <Flutter/Flutter.h>\n#import <UIKit/UIKit.h>\n\n@interface AppDelegate : FlutterAppDelegate\n\n@end\n"
  },
  {
    "path": "example/ios/Runner/AppDelegate.m",
    "content": "#include \"AppDelegate.h\"\n#include \"GeneratedPluginRegistrant.h\"\n\n@implementation AppDelegate\n\n- (BOOL)application:(UIApplication *)application\n    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\n  [GeneratedPluginRegistrant registerWithRegistry:self];\n  // Override point for customization after application launch.\n  return [super application:application didFinishLaunchingWithOptions:launchOptions];\n}\n\n@end\n"
  },
  {
    "path": "example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-20x20@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-20x20@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-40x40@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-40x40@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-60x60@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-60x60@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-20x20@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-20x20@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-29x29@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-29x29@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-40x40@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-40x40@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-76x76@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-76x76@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"83.5x83.5\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-83.5x83.5@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"1024x1024\",\n      \"idiom\" : \"ios-marketing\",\n      \"filename\" : \"Icon-App-1024x1024@1x.png\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}\n"
  },
  {
    "path": "example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"LaunchImage.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"LaunchImage@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"LaunchImage@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}\n"
  },
  {
    "path": "example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md",
    "content": "# Launch Screen Assets\n\nYou can customize the launch screen with your own desired assets by replacing the image files in this directory.\n\nYou can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images."
  },
  {
    "path": "example/ios/Runner/Base.lproj/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"12121\" systemVersion=\"16G29\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"12089\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"Ydg-fD-yQy\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"xbc-2k-c8Z\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <imageView opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" image=\"LaunchImage\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"YRO-k0-Ey4\">\n                            </imageView>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <constraints>\n                            <constraint firstItem=\"YRO-k0-Ey4\" firstAttribute=\"centerX\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"centerX\" id=\"1a2-6s-vTC\"/>\n                            <constraint firstItem=\"YRO-k0-Ey4\" firstAttribute=\"centerY\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"centerY\" id=\"4X2-HB-R7a\"/>\n                        </constraints>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"53\" y=\"375\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <image name=\"LaunchImage\" width=\"168\" height=\"185\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "example/ios/Runner/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"10117\" systemVersion=\"15F34\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" initialViewController=\"BYZ-38-t0r\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"10085\"/>\n    </dependencies>\n    <scenes>\n        <!--Flutter View Controller-->\n        <scene sceneID=\"tne-QT-ifu\">\n            <objects>\n                <viewController id=\"BYZ-38-t0r\" customClass=\"FlutterViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"y3c-jy-aDJ\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"wfy-db-euE\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"8bC-Xf-vdC\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"600\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "example/ios/Runner/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>flutter_camera_ml_vision_example</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>$(FLUTTER_BUILD_NAME)</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>$(FLUTTER_BUILD_NUMBER)</string>\n\t<key>FirebaseScreenReportingEnabled</key>\n\t<false/>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>NSCameraUsageDescription</key>\n\t<string>What do you think ;) </string>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UIViewControllerBasedStatusBarAppearance</key>\n\t<false/>\n</dict>\n</plist>\n"
  },
  {
    "path": "example/ios/Runner/main.m",
    "content": "#import <Flutter/Flutter.h>\n#import <UIKit/UIKit.h>\n#import \"AppDelegate.h\"\n\nint main(int argc, char* argv[]) {\n  @autoreleasepool {\n    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));\n  }\n}\n"
  },
  {
    "path": "example/ios/Runner.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };\n\t\t3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };\n\t\t9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; };\n\t\t978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; };\n\t\t97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; };\n\t\t97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };\n\t\t97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };\n\t\t97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };\n\t\t9B3F00512A092EB63507600C /* libPods-Runner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CE99F0092DC98CB10C7128A7 /* libPods-Runner.a */; };\n\t\tBD05840B228E98DD00D7684A /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = BD05840A228E98DD00D7684A /* GoogleService-Info.plist */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t9705A1C41CF9048500538489 /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = \"<group>\"; };\n\t\t1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = \"<group>\"; };\n\t\t2409E7A613325A687028AE0F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-Runner.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = \"<group>\"; };\n\t\t7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = \"<group>\"; };\n\t\t7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = \"<group>\"; };\n\t\t7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = \"<group>\"; };\n\t\t9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = \"<group>\"; };\n\t\t9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = \"<group>\"; };\n\t\t97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\t97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\t97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\t97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tBD05840A228E98DD00D7684A /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = \"GoogleService-Info.plist\"; sourceTree = \"<group>\"; };\n\t\tCE99F0092DC98CB10C7128A7 /* libPods-Runner.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-Runner.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tF51EA479259F9D93D435315C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-Runner.profile.xcconfig\"; path = \"Pods/Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tFDC4259C7A63125CD0C3D54C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-Runner.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig\"; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t97C146EB1CF9000F007C117D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9B3F00512A092EB63507600C /* libPods-Runner.a in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t5BABECA882D889E73F189ACB /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tFDC4259C7A63125CD0C3D54C /* Pods-Runner.debug.xcconfig */,\n\t\t\t\t2409E7A613325A687028AE0F /* Pods-Runner.release.xcconfig */,\n\t\t\t\tF51EA479259F9D93D435315C /* Pods-Runner.profile.xcconfig */,\n\t\t\t);\n\t\t\tname = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9740EEB11CF90186004384FC /* Flutter */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,\n\t\t\t\t9740EEB21CF90195004384FC /* Debug.xcconfig */,\n\t\t\t\t7AFA3C8E1D35360C0083082E /* Release.xcconfig */,\n\t\t\t\t9740EEB31CF90195004384FC /* Generated.xcconfig */,\n\t\t\t);\n\t\t\tname = Flutter;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146E51CF9000F007C117D = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9740EEB11CF90186004384FC /* Flutter */,\n\t\t\t\t97C146F01CF9000F007C117D /* Runner */,\n\t\t\t\t97C146EF1CF9000F007C117D /* Products */,\n\t\t\t\t5BABECA882D889E73F189ACB /* Pods */,\n\t\t\t\tF7B13BC660916DD00ED1C090 /* Frameworks */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146EF1CF9000F007C117D /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t97C146EE1CF9000F007C117D /* Runner.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146F01CF9000F007C117D /* Runner */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tBD05840A228E98DD00D7684A /* GoogleService-Info.plist */,\n\t\t\t\t7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */,\n\t\t\t\t7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */,\n\t\t\t\t97C146FA1CF9000F007C117D /* Main.storyboard */,\n\t\t\t\t97C146FD1CF9000F007C117D /* Assets.xcassets */,\n\t\t\t\t97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,\n\t\t\t\t97C147021CF9000F007C117D /* Info.plist */,\n\t\t\t\t97C146F11CF9000F007C117D /* Supporting Files */,\n\t\t\t\t1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,\n\t\t\t\t1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,\n\t\t\t);\n\t\t\tpath = Runner;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146F11CF9000F007C117D /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t97C146F21CF9000F007C117D /* main.m */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF7B13BC660916DD00ED1C090 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tCE99F0092DC98CB10C7128A7 /* libPods-Runner.a */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t97C146ED1CF9000F007C117D /* Runner */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget \"Runner\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tF343DCC5B5CF7B2EC0AA5D44 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t9740EEB61CF901F6004384FC /* Run Script */,\n\t\t\t\t97C146EA1CF9000F007C117D /* Sources */,\n\t\t\t\t97C146EB1CF9000F007C117D /* Frameworks */,\n\t\t\t\t97C146EC1CF9000F007C117D /* Resources */,\n\t\t\t\t9705A1C41CF9048500538489 /* Embed Frameworks */,\n\t\t\t\t3B06AD1E1E4923F5004D2608 /* Thin Binary */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Runner;\n\t\t\tproductName = Runner;\n\t\t\tproductReference = 97C146EE1CF9000F007C117D /* Runner.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t97C146E61CF9000F007C117D /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0910;\n\t\t\t\tORGANIZATIONNAME = \"The Chromium Authors\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t97C146ED1CF9000F007C117D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.3.1;\n\t\t\t\t\t\tDevelopmentTeam = A9C4HVFYJX;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject \"Runner\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\tEnglish,\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 97C146E51CF9000F007C117D;\n\t\t\tproductRefGroup = 97C146EF1CF9000F007C117D /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t97C146ED1CF9000F007C117D /* Runner */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t97C146EC1CF9000F007C117D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,\n\t\t\t\t3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,\n\t\t\t\t9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */,\n\t\t\t\t97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,\n\t\t\t\t97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,\n\t\t\t\tBD05840B228E98DD00D7684A /* GoogleService-Info.plist in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Thin Binary\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"/bin/sh \\\"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\\\" embed_and_thin\";\n\t\t};\n\t\t9740EEB61CF901F6004384FC /* Run Script */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Run Script\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"/bin/sh \\\"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\\\" build\";\n\t\t};\n\t\tF343DCC5B5CF7B2EC0AA5D44 /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"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\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t97C146EA1CF9000F007C117D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */,\n\t\t\t\t97C146F31CF9000F007C117D /* main.m in Sources */,\n\t\t\t\t1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXVariantGroup section */\n\t\t97C146FA1CF9000F007C117D /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t97C146FB1CF9000F007C117D /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t97C147001CF9000F007C117D /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t249021D3217E4FDB00AE95B9 /* Profile */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 12.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Profile;\n\t\t};\n\t\t249021D4217E4FDB00AE95B9 /* Profile */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCURRENT_PROJECT_VERSION = \"$(FLUTTER_BUILD_NUMBER)\";\n\t\t\t\tDEVELOPMENT_TEAM = A9C4HVFYJX;\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Flutter\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = Runner/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Flutter\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"fr.rushioconsulting.flutter-camera-ml-vision-example\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Profile;\n\t\t};\n\t\t97C147031CF9000F007C117D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 12.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t97C147041CF9000F007C117D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 12.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t97C147061CF9000F007C117D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCURRENT_PROJECT_VERSION = \"$(FLUTTER_BUILD_NUMBER)\";\n\t\t\t\tDEVELOPMENT_TEAM = A9C4HVFYJX;\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Flutter\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = Runner/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Flutter\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"fr.rushioconsulting.flutter-camera-ml-vision-example\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t97C147071CF9000F007C117D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCURRENT_PROJECT_VERSION = \"$(FLUTTER_BUILD_NUMBER)\";\n\t\t\t\tDEVELOPMENT_TEAM = A9C4HVFYJX;\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Flutter\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = Runner/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Flutter\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"fr.rushioconsulting.flutter-camera-ml-vision-example\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t97C146E91CF9000F007C117D /* Build configuration list for PBXProject \"Runner\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t97C147031CF9000F007C117D /* Debug */,\n\t\t\t\t97C147041CF9000F007C117D /* Release */,\n\t\t\t\t249021D3217E4FDB00AE95B9 /* Profile */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget \"Runner\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t97C147061CF9000F007C117D /* Debug */,\n\t\t\t\t97C147071CF9000F007C117D /* Release */,\n\t\t\t\t249021D4217E4FDB00AE95B9 /* Profile */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 97C146E61CF9000F007C117D /* Project object */;\n}\n"
  },
  {
    "path": "example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0910\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"97C146ED1CF9000F007C117D\"\n               BuildableName = \"Runner.app\"\n               BlueprintName = \"Runner\"\n               ReferencedContainer = \"container:Runner.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      language = \"\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"97C146ED1CF9000F007C117D\"\n            BuildableName = \"Runner.app\"\n            BlueprintName = \"Runner\"\n            ReferencedContainer = \"container:Runner.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      language = \"\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"97C146ED1CF9000F007C117D\"\n            BuildableName = \"Runner.app\"\n            BlueprintName = \"Runner\"\n            ReferencedContainer = \"container:Runner.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Profile\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"97C146ED1CF9000F007C117D\"\n            BuildableName = \"Runner.app\"\n            BlueprintName = \"Runner\"\n            ReferencedContainer = \"container:Runner.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "example/ios/Runner.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:Runner.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:Pods/Pods.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "example/lib/main.dart",
    "content": "import 'dart:ui';\n\nimport 'package:firebase_ml_vision/firebase_ml_vision.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_camera_ml_vision/flutter_camera_ml_vision.dart';\n\nvoid main() => runApp(MyApp());\n\nclass MyApp extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      title: 'Flutter Demo',\n      theme: ThemeData(\n        primarySwatch: Colors.blue,\n      ),\n      home: MyHomePage(title: 'Flutter Demo Home Page'),\n    );\n  }\n}\n\nclass MyHomePage extends StatefulWidget {\n  MyHomePage({Key key, this.title}) : super(key: key);\n\n  final String title;\n\n  @override\n  _MyHomePageState createState() => _MyHomePageState();\n}\n\nclass _MyHomePageState extends State<MyHomePage> {\n  List<String> data = [];\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(\n        title: Text(widget.title),\n      ),\n      body: Column(\n        mainAxisSize: MainAxisSize.min,\n        crossAxisAlignment: CrossAxisAlignment.center,\n        children: [\n          ElevatedButton(\n            onPressed: () async {\n              final barcode = await Navigator.of(context).push<Barcode>(\n                MaterialPageRoute(\n                  builder: (c) {\n                    return ScanPage();\n                  },\n                ),\n              );\n              if (barcode == null) {\n                return;\n              }\n\n              setState(() {\n                data.add(barcode.displayValue);\n              });\n            },\n            child: Text('Scan product'),\n          ),\n          Expanded(\n            child: ListView(\n              children: data.map((d) => Text(d)).toList(),\n            ),\n          ),\n        ],\n      ), // This trailing comma makes auto-formatting nicer for build methods.\n    );\n  }\n}\n\nclass ScanPage extends StatefulWidget {\n  @override\n  _ScanPageState createState() => _ScanPageState();\n}\n\nclass _ScanPageState extends State<ScanPage> {\n  bool resultSent = false;\n  BarcodeDetector detector = FirebaseVision.instance.barcodeDetector();\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      body: SafeArea(\n        child: SizedBox(\n          width: MediaQuery.of(context).size.width,\n          child: CameraMlVision<List<Barcode>>(\n            overlayBuilder: (c) {\n              return Container(\n                decoration: ShapeDecoration(\n                  shape: _ScannerOverlayShape(\n                    borderColor: Theme.of(context).primaryColor,\n                    borderWidth: 3.0,\n                  ),\n                ),\n              );\n            },\n            detector: detector.detectInImage,\n            onResult: (List<Barcode> barcodes) {\n              if (!mounted ||\n                  resultSent ||\n                  barcodes == null ||\n                  barcodes.isEmpty) {\n                return;\n              }\n              resultSent = true;\n              Navigator.of(context).pop<Barcode>(barcodes.first);\n            },\n            onDispose: () {\n              detector.close();\n            },\n          ),\n        ),\n      ),\n    );\n  }\n}\n\nclass _ScannerOverlayShape extends ShapeBorder {\n  final Color borderColor;\n  final double borderWidth;\n  final Color overlayColor;\n\n  _ScannerOverlayShape({\n    this.borderColor = Colors.white,\n    this.borderWidth = 1.0,\n    this.overlayColor = const Color(0x88000000),\n  });\n\n  @override\n  EdgeInsetsGeometry get dimensions => EdgeInsets.all(10.0);\n\n  @override\n  Path getInnerPath(Rect rect, {TextDirection textDirection}) {\n    return Path()\n      ..fillType = PathFillType.evenOdd\n      ..addPath(getOuterPath(rect), Offset.zero);\n  }\n\n  @override\n  Path getOuterPath(Rect rect, {TextDirection textDirection}) {\n    Path _getLeftTopPath(Rect rect) {\n      return Path()\n        ..moveTo(rect.left, rect.bottom)\n        ..lineTo(rect.left, rect.top)\n        ..lineTo(rect.right, rect.top);\n    }\n\n    return _getLeftTopPath(rect)\n      ..lineTo(\n        rect.right,\n        rect.bottom,\n      )\n      ..lineTo(\n        rect.left,\n        rect.bottom,\n      )\n      ..lineTo(\n        rect.left,\n        rect.top,\n      );\n  }\n\n  @override\n  void paint(Canvas canvas, Rect rect, {TextDirection textDirection}) {\n    const lineSize = 30;\n\n    final width = rect.width;\n    final borderWidthSize = width * 10 / 100;\n    final height = rect.height;\n    final borderHeightSize = height - (width - borderWidthSize);\n    final borderSize = Size(borderWidthSize / 2, borderHeightSize / 2);\n\n    var paint = Paint()\n      ..color = overlayColor\n      ..style = PaintingStyle.fill;\n\n    canvas\n      ..drawRect(\n        Rect.fromLTRB(\n            rect.left, rect.top, rect.right, borderSize.height + rect.top),\n        paint,\n      )\n      ..drawRect(\n        Rect.fromLTRB(rect.left, rect.bottom - borderSize.height, rect.right,\n            rect.bottom),\n        paint,\n      )\n      ..drawRect(\n        Rect.fromLTRB(rect.left, rect.top + borderSize.height,\n            rect.left + borderSize.width, rect.bottom - borderSize.height),\n        paint,\n      )\n      ..drawRect(\n        Rect.fromLTRB(\n            rect.right - borderSize.width,\n            rect.top + borderSize.height,\n            rect.right,\n            rect.bottom - borderSize.height),\n        paint,\n      );\n\n    paint = Paint()\n      ..color = borderColor\n      ..style = PaintingStyle.stroke\n      ..strokeWidth = borderWidth;\n\n    final borderOffset = borderWidth / 2;\n    final realReact = Rect.fromLTRB(\n        borderSize.width + borderOffset,\n        borderSize.height + borderOffset + rect.top,\n        width - borderSize.width - borderOffset,\n        height - borderSize.height - borderOffset + rect.top);\n\n    //Draw top right corner\n    canvas\n      ..drawPath(\n          Path()\n            ..moveTo(realReact.right, realReact.top)\n            ..lineTo(realReact.right, realReact.top + lineSize),\n          paint)\n      ..drawPath(\n          Path()\n            ..moveTo(realReact.right, realReact.top)\n            ..lineTo(realReact.right - lineSize, realReact.top),\n          paint)\n      ..drawPoints(\n        PointMode.points,\n        [Offset(realReact.right, realReact.top)],\n        paint,\n      )\n\n      //Draw top left corner\n      ..drawPath(\n          Path()\n            ..moveTo(realReact.left, realReact.top)\n            ..lineTo(realReact.left, realReact.top + lineSize),\n          paint)\n      ..drawPath(\n          Path()\n            ..moveTo(realReact.left, realReact.top)\n            ..lineTo(realReact.left + lineSize, realReact.top),\n          paint)\n      ..drawPoints(\n        PointMode.points,\n        [Offset(realReact.left, realReact.top)],\n        paint,\n      )\n\n      //Draw bottom right corner\n      ..drawPath(\n          Path()\n            ..moveTo(realReact.right, realReact.bottom)\n            ..lineTo(realReact.right, realReact.bottom - lineSize),\n          paint)\n      ..drawPath(\n          Path()\n            ..moveTo(realReact.right, realReact.bottom)\n            ..lineTo(realReact.right - lineSize, realReact.bottom),\n          paint)\n      ..drawPoints(\n        PointMode.points,\n        [Offset(realReact.right, realReact.bottom)],\n        paint,\n      )\n\n      //Draw bottom left corner\n      ..drawPath(\n          Path()\n            ..moveTo(realReact.left, realReact.bottom)\n            ..lineTo(realReact.left, realReact.bottom - lineSize),\n          paint)\n      ..drawPath(\n          Path()\n            ..moveTo(realReact.left, realReact.bottom)\n            ..lineTo(realReact.left + lineSize, realReact.bottom),\n          paint)\n      ..drawPoints(\n        PointMode.points,\n        [Offset(realReact.left, realReact.bottom)],\n        paint,\n      );\n  }\n\n  @override\n  ShapeBorder scale(double t) {\n    return _ScannerOverlayShape(\n      borderColor: borderColor,\n      borderWidth: borderWidth,\n      overlayColor: overlayColor,\n    );\n  }\n}\n"
  },
  {
    "path": "example/lib/main_face.dart",
    "content": "import 'package:camera/camera.dart';\nimport 'package:firebase_ml_vision/firebase_ml_vision.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_camera_ml_vision/flutter_camera_ml_vision.dart';\n\nvoid main() => runApp(MyApp());\n\nclass MyApp extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      title: 'Flutter Demo',\n      theme: ThemeData(\n        primarySwatch: Colors.blue,\n      ),\n      home: MyHomePage(title: 'Flutter Demo Home Page'),\n    );\n  }\n}\n\nclass MyHomePage extends StatefulWidget {\n  MyHomePage({Key key, this.title}) : super(key: key);\n\n  final String title;\n\n  @override\n  _MyHomePageState createState() => _MyHomePageState();\n}\n\nclass _MyHomePageState extends State<MyHomePage> {\n  List<Face> _faces = [];\n  final _scanKey = GlobalKey<CameraMlVisionState>();\n  CameraLensDirection cameraLensDirection = CameraLensDirection.front;\n  FaceDetector detector =\n      FirebaseVision.instance.faceDetector(FaceDetectorOptions(\n    enableTracking: true,\n    mode: FaceDetectorMode.accurate,\n  ));\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(\n        title: Text(widget.title),\n      ),\n      body: SizedBox.expand(\n        child: CameraMlVision<List<Face>>(\n          key: _scanKey,\n          cameraLensDirection: cameraLensDirection,\n          detector: detector.processImage,\n          overlayBuilder: (c) {\n            return CustomPaint(\n              painter: FaceDetectorPainter(\n                  _scanKey.currentState.cameraValue.previewSize.flipped, _faces,\n                  reflection: cameraLensDirection == CameraLensDirection.front),\n            );\n          },\n          onResult: (faces) {\n            if (faces == null || faces.isEmpty || !mounted) {\n              return;\n            }\n            setState(() {\n              _faces = [...faces];\n            });\n          },\n          onDispose: () {\n            detector.close();\n          },\n        ),\n      ),\n    );\n  }\n}\n\nclass FaceDetectorPainter extends CustomPainter {\n  FaceDetectorPainter(this.imageSize, this.faces, {this.reflection = false});\n\n  final bool reflection;\n  final Size imageSize;\n  final List<Face> faces;\n\n  @override\n  void paint(Canvas canvas, Size size) {\n    final paint = Paint()\n      ..style = PaintingStyle.stroke\n      ..strokeWidth = 2.0\n      ..color = Colors.red;\n\n    for (final face in faces) {\n      final faceRect =\n          _reflectionRect(reflection, face.boundingBox, imageSize.width);\n      canvas.drawRect(\n        _scaleRect(\n          rect: faceRect,\n          imageSize: imageSize,\n          widgetSize: size,\n        ),\n        paint,\n      );\n    }\n  }\n\n  @override\n  bool shouldRepaint(FaceDetectorPainter oldDelegate) {\n    return oldDelegate.imageSize != imageSize || oldDelegate.faces != faces;\n  }\n}\n\nRect _reflectionRect(bool reflection, Rect boundingBox, double width) {\n  if (!reflection) {\n    return boundingBox;\n  }\n  final centerX = width / 2;\n  final left = ((boundingBox.left - centerX) * -1) + centerX;\n  final right = ((boundingBox.right - centerX) * -1) + centerX;\n  return Rect.fromLTRB(left, boundingBox.top, right, boundingBox.bottom);\n}\n\nRect _scaleRect({\n  @required Rect rect,\n  @required Size imageSize,\n  @required Size widgetSize,\n}) {\n  final scaleX = widgetSize.width / imageSize.width;\n  final scaleY = widgetSize.height / imageSize.height;\n\n  final scaledRect = Rect.fromLTRB(\n    rect.left.toDouble() * scaleX,\n    rect.top.toDouble() * scaleY,\n    rect.right.toDouble() * scaleX,\n    rect.bottom.toDouble() * scaleY,\n  );\n  return scaledRect;\n}\n"
  },
  {
    "path": "example/lib/main_live.dart",
    "content": "import 'package:firebase_ml_vision/firebase_ml_vision.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_camera_ml_vision/flutter_camera_ml_vision.dart';\n\nvoid main() => runApp(MyApp());\n\nclass MyApp extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      title: 'Flutter Demo',\n      theme: ThemeData(\n        primarySwatch: Colors.blue,\n      ),\n      home: MyHomePage(title: 'Flutter Demo Home Page'),\n    );\n  }\n}\n\nclass MyHomePage extends StatefulWidget {\n  MyHomePage({Key key, this.title}) : super(key: key);\n\n  final String title;\n\n  @override\n  _MyHomePageState createState() => _MyHomePageState();\n}\n\nclass _MyHomePageState extends State<MyHomePage> {\n  List<String> data = [];\n  final _scanKey = GlobalKey<CameraMlVisionState>();\n  BarcodeDetector detector = FirebaseVision.instance.barcodeDetector();\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(\n        title: Text(widget.title),\n      ),\n      body: Stack(\n        fit: StackFit.expand,\n        children: [\n          CameraMlVision<List<Barcode>>(\n            key: _scanKey,\n            detector: detector.detectInImage,\n            resolution: ResolutionPreset.high,\n            onResult: (barcodes) {\n              if (barcodes == null ||\n                  barcodes.isEmpty ||\n                  data.contains(barcodes.first.displayValue) ||\n                  !mounted) {\n                return;\n              }\n              setState(() {\n                data.add(barcodes.first.displayValue);\n              });\n            },\n            onDispose: () {\n              detector.close();\n            },\n          ),\n          Container(\n            alignment: Alignment.bottomCenter,\n            child: Column(\n              mainAxisSize: MainAxisSize.min,\n              children: [\n                Expanded(\n                  child: ConstrainedBox(\n                    constraints: BoxConstraints(maxHeight: 250),\n                    child: Scrollbar(\n                      child: ListView(\n                        children: data.map((d) {\n                          return Container(\n                            color: Color(0xAAFFFFFF),\n                            child: Padding(\n                              padding: const EdgeInsets.all(16),\n                              child: Text(d),\n                            ),\n                          );\n                        }).toList(),\n                      ),\n                    ),\n                  ),\n                ),\n                Row(\n                  mainAxisAlignment: MainAxisAlignment.spaceEvenly,\n                  children: <Widget>[\n                    ElevatedButton(\n                      onPressed: () {\n                        _scanKey.currentState.toggle();\n                      },\n                      child: Text('Start/Pause camera'),\n                    ),\n                    ElevatedButton(\n                      onPressed: () {\n                        Navigator.of(context).push(MaterialPageRoute(\n                            builder: (context) => _SecondScreen()));\n                      },\n                      child: Text('Push new route'),\n                    ),\n                  ],\n                ),\n              ],\n            ),\n          ),\n        ],\n      ), // This trailing comma makes auto-formatting nicer for build methods.\n    );\n  }\n}\n\nclass _SecondScreen extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(),\n      body: ElevatedButton(\n        onPressed: () {\n          Navigator.of(context).push(MaterialPageRoute(\n            builder: (context) => _SecondScreen(),\n          ));\n        },\n        child: Text('Push new route'),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "example/pubspec.yaml",
    "content": "name: example\ndescription: A new Flutter project.\n\n# The following defines the version and build number for your application.\n# A version number is three numbers separated by dots, like 1.2.43\n# followed by an optional build number separated by a +.\n# Both the version and the builder number may be overridden in flutter\n# build by specifying --build-name and --build-number, respectively.\n# In Android, build-name is used as versionName while build-number used as versionCode.\n# Read more about Android versioning at https://developer.android.com/studio/publish/versioning\n# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.\n# Read more about iOS versioning at\n# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html\nversion: 1.0.0+1\n\nenvironment:\n  sdk: \">=2.2.2 <3.0.0\"\n\ndependencies:\n  flutter:\n    sdk: flutter\n\n  # The following adds the Cupertino Icons font to your application.\n  # Use with the CupertinoIcons class for iOS style icons.\n  cupertino_icons: ^0.1.3\n  flutter_camera_ml_vision:\n    path: ../\n\ndev_dependencies:\n  flutter_test:\n    sdk: flutter\n\n\n# For information on the generic Dart part of this file, see the\n# following page: https://www.dartlang.org/tools/pub/pubspec\n\n# The following section is specific to Flutter.\nflutter:\n\n  # The following line ensures that the Material Icons font is\n  # included with your application, so that you can use the icons in\n  # the material Icons class.\n  uses-material-design: true\n\n  # To add assets to your application, add an assets section, like this:\n  # assets:\n  #  - images/a_dot_burr.jpeg\n  #  - images/a_dot_ham.jpeg\n\n  # An image asset can refer to one or more resolution-specific \"variants\", see\n  # https://flutter.io/assets-and-images/#resolution-aware.\n\n  # For details regarding adding assets from package dependencies, see\n  # https://flutter.io/assets-and-images/#from-packages\n\n  # To add custom fonts to your application, add a fonts section here,\n  # in this \"flutter\" section. Each entry in this list should have a\n  # \"family\" key with the font family name, and a \"fonts\" key with a\n  # list giving the asset and other descriptors for the font. For\n  # example:\n  # fonts:\n  #   - family: Schyler\n  #     fonts:\n  #       - asset: fonts/Schyler-Regular.ttf\n  #       - asset: fonts/Schyler-Italic.ttf\n  #         style: italic\n  #   - family: Trajan Pro\n  #     fonts:\n  #       - asset: fonts/TrajanPro.ttf\n  #       - asset: fonts/TrajanPro_Bold.ttf\n  #         weight: 700\n  #\n  # For details regarding fonts from package dependencies,\n  # see https://flutter.io/custom-fonts/#from-packages\n"
  },
  {
    "path": "example/test/widget_test.dart",
    "content": "// This is a basic Flutter widget test.\n//\n// To perform an interaction with a widget in your test, use the WidgetTester\n// utility that Flutter provides. For example, you can send tap and scroll\n// gestures. You can also use WidgetTester to find child widgets in the widget\n// tree, read text, and verify that the values of widget properties are correct.\n\n// import 'package:flutter/material.dart';\n// import 'package:flutter_test/flutter_test.dart';\n\n// import 'package:example/main.dart';\n\n// void main() {\n//   testWidgets('Counter increments smoke test', (WidgetTester tester) async {\n//     // Build our app and trigger a frame.\n//     await tester.pumpWidget(MyApp());\n\n//     // Verify that our counter starts at 0.\n//     expect(find.text('0'), findsOneWidget);\n//     expect(find.text('1'), findsNothing);\n\n//     // Tap the '+' icon and trigger a frame.\n//     await tester.tap(find.byIcon(Icons.add));\n//     await tester.pump();\n\n//     // Verify that our counter has incremented.\n//     expect(find.text('0'), findsNothing);\n//     expect(find.text('1'), findsOneWidget);\n//   });\n// }\n"
  },
  {
    "path": "flutter_camera_ml_vision.iml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module type=\"JAVA_MODULE\" version=\"4\">\n  <component name=\"NewModuleRootManager\" inherit-compiler-output=\"true\">\n    <exclude-output />\n    <content url=\"file://$MODULE_DIR$\">\n      <sourceFolder url=\"file://$MODULE_DIR$/lib\" isTestSource=\"false\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/test\" isTestSource=\"true\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/.dart_tool\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/.idea\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/.pub\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build\" />\n    </content>\n    <orderEntry type=\"jdk\" jdkName=\"Android API 25 Platform\" jdkType=\"Android SDK\" />\n    <orderEntry type=\"sourceFolder\" forTests=\"false\" />\n    <orderEntry type=\"library\" name=\"Dart Packages\" level=\"project\" />\n    <orderEntry type=\"library\" name=\"Dart SDK\" level=\"project\" />\n    <orderEntry type=\"library\" name=\"Flutter Plugins\" level=\"project\" />\n  </component>\n</module>"
  },
  {
    "path": "lib/flutter_camera_ml_vision.dart",
    "content": "library flutter_camera_ml_vision;\n\nimport 'dart:async';\nimport 'dart:io';\nimport 'dart:typed_data';\nimport 'dart:ui';\n\nimport 'package:camera/camera.dart';\nimport 'package:collection/collection.dart';\nimport 'package:device_info/device_info.dart';\nimport 'package:firebase_ml_vision/firebase_ml_vision.dart';\nimport 'package:flutter/foundation.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter/services.dart';\nimport 'package:visibility_detector/visibility_detector.dart';\n\nexport 'package:camera/camera.dart';\n\npart 'utils.dart';\n\ntypedef HandleDetection<T> = Future<T> Function(FirebaseVisionImage image);\ntypedef ErrorWidgetBuilder = Widget Function(\n    BuildContext context, CameraError error);\n\nenum CameraError {\n  unknown,\n  cantInitializeCamera,\n  androidVersionNotSupported,\n  noCameraAvailable,\n}\n\nenum _CameraState {\n  loading,\n  error,\n  ready,\n}\n\nclass CameraMlVision<T> extends StatefulWidget {\n  final HandleDetection<T> detector;\n  final Function(T) onResult;\n  final WidgetBuilder? loadingBuilder;\n  final ErrorWidgetBuilder? errorBuilder;\n  final WidgetBuilder? overlayBuilder;\n  final CameraLensDirection cameraLensDirection;\n  final ResolutionPreset? resolution;\n  final Function? onDispose;\n\n  CameraMlVision({\n    Key? key,\n    required this.onResult,\n    required this.detector,\n    this.loadingBuilder,\n    this.errorBuilder,\n    this.overlayBuilder,\n    this.cameraLensDirection = CameraLensDirection.back,\n    this.resolution,\n    this.onDispose,\n  }) : super(key: key);\n\n  @override\n  CameraMlVisionState createState() => CameraMlVisionState<T>();\n}\n\nclass CameraMlVisionState<T> extends State<CameraMlVision<T>>\n    with WidgetsBindingObserver {\n  XFile? _lastImage;\n  final _visibilityKey = UniqueKey();\n  CameraController? _cameraController;\n  ImageRotation? _rotation;\n  _CameraState _cameraMlVisionState = _CameraState.loading;\n  CameraError _cameraError = CameraError.unknown;\n  bool _alreadyCheckingImage = false;\n  bool _isStreaming = false;\n  bool _isDeactivate = false;\n\n  @override\n  void initState() {\n    super.initState();\n    WidgetsBinding.instance!.addObserver(this);\n    _initialize();\n  }\n\n  @override\n  void didUpdateWidget(CameraMlVision<T> oldWidget) {\n    if (oldWidget.resolution != widget.resolution) {\n      _initialize();\n    }\n    super.didUpdateWidget(oldWidget);\n  }\n\n  @override\n  void didChangeAppLifecycleState(AppLifecycleState state) {\n    // App state changed before we got the chance to initialize.\n    if (_cameraController == null || !_cameraController!.value.isInitialized) {\n      return;\n    }\n    if (state == AppLifecycleState.inactive) {\n      _stop(true).then((value) => _cameraController?.dispose());\n    } else if (state == AppLifecycleState.resumed && _isStreaming) {\n      _initialize();\n    }\n  }\n\n  Future<void> stop() async {\n    if (_cameraController != null) {\n      await _stop(true);\n      try {\n        final image = await _cameraController!.takePicture();\n        setState(() {\n          _lastImage = image;\n        });\n      } on PlatformException catch (e) {\n        debugPrint('$e');\n      }\n    }\n  }\n\n  Future<void> _stop(bool silently) {\n    final completer = Completer();\n    scheduleMicrotask(() async {\n      if (_cameraController?.value.isStreamingImages == true && mounted) {\n        await _cameraController!.stopImageStream().catchError((_) {});\n      }\n\n      if (silently) {\n        _isStreaming = false;\n      } else {\n        setState(() {\n          _isStreaming = false;\n        });\n      }\n      completer.complete();\n    });\n    return completer.future;\n  }\n\n  void start() {\n    if (_cameraController != null) {\n      _start();\n    }\n  }\n\n  void _start() {\n    _cameraController!.startImageStream(_processImage);\n    setState(() {\n      _isStreaming = true;\n    });\n  }\n\n  CameraValue? get cameraValue => _cameraController?.value;\n\n  ImageRotation? get imageRotation => _rotation;\n\n  Future<void> Function() get prepareForVideoRecording =>\n      _cameraController!.prepareForVideoRecording;\n\n  Future<void> startVideoRecording() async {\n    await _cameraController!.stopImageStream();\n    return _cameraController!.startVideoRecording();\n  }\n\n  Future<XFile> stopVideoRecording(String path) async {\n    final file = await _cameraController!.stopVideoRecording();\n    await _cameraController!.startImageStream(_processImage);\n    return file;\n  }\n\n  CameraController? get cameraController => _cameraController;\n\n  Future<XFile> takePicture(String path) async {\n    await _stop(true);\n    final image = await _cameraController!.takePicture();\n    _start();\n    return image;\n  }\n\n  Future<void> flash(FlashMode mode) async {\n    await _cameraController!.setFlashMode(mode);\n  }\n\n  Future<void> focus(FocusMode mode) async {\n    await _cameraController!.setFocusMode(mode);\n  }\n\n  Future<void> focusPoint(Offset point) async {\n    await _cameraController!.setFocusPoint(point);\n  }\n\n  Future<void> zoom(double zoom) async {\n    await _cameraController!.setZoomLevel(zoom);\n  }\n\n  Future<void> exposure(ExposureMode mode) async {\n    await _cameraController!.setExposureMode(mode);\n  }\n\n  Future<void> exposureOffset(double offset) async {\n    await _cameraController!.setExposureOffset(offset);\n  }\n\n  Future<void> exposurePoint(Offset offset) async {\n    await _cameraController!.setExposurePoint(offset);\n  }\n\n  Future<void> _initialize() async {\n    if (Platform.isAndroid) {\n      final deviceInfo = DeviceInfoPlugin();\n      final androidInfo = await deviceInfo.androidInfo;\n      if (androidInfo.version.sdkInt < 21) {\n        debugPrint('Camera plugin doesn\\'t support android under version 21');\n        if (mounted) {\n          setState(() {\n            _cameraMlVisionState = _CameraState.error;\n            _cameraError = CameraError.androidVersionNotSupported;\n          });\n        }\n        return;\n      }\n    }\n\n    final description = await _getCamera(widget.cameraLensDirection);\n    if (description == null) {\n      _cameraMlVisionState = _CameraState.error;\n      _cameraError = CameraError.noCameraAvailable;\n\n      return;\n    }\n    if (_cameraController != null) {\n      await _stop(true);\n      await _cameraController?.dispose();\n    }\n    _cameraController = CameraController(\n      description,\n      widget.resolution ?? ResolutionPreset.high,\n      enableAudio: false,\n    );\n    if (!mounted) {\n      return;\n    }\n\n    try {\n      await _cameraController!.initialize();\n    } catch (ex, stack) {\n      debugPrint('Can\\'t initialize camera');\n      debugPrint('$ex, $stack');\n      if (mounted) {\n        setState(() {\n          _cameraMlVisionState = _CameraState.error;\n          _cameraError = CameraError.cantInitializeCamera;\n        });\n      }\n      return;\n    }\n\n    if (!mounted) {\n      return;\n    }\n\n    setState(() {\n      _cameraMlVisionState = _CameraState.ready;\n    });\n    _rotation = _rotationIntToImageRotation(\n      description.sensorOrientation,\n    );\n\n    //FIXME hacky technique to avoid having black screen on some android devices\n    await Future.delayed(Duration(milliseconds: 200));\n    start();\n  }\n\n  @override\n  void dispose() {\n    if (widget.onDispose != null) {\n      widget.onDispose!();\n    }\n    if (_cameraController != null) {\n      _stop(true).then((value) {\n        _cameraController?.dispose();\n      });\n    }\n\n    super.dispose();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    if (_cameraMlVisionState == _CameraState.loading) {\n      return widget.loadingBuilder == null\n          ? Center(child: CircularProgressIndicator())\n          : widget.loadingBuilder!(context);\n    }\n    if (_cameraMlVisionState == _CameraState.error) {\n      return widget.errorBuilder == null\n          ? Center(child: Text('$_cameraMlVisionState $_cameraError'))\n          : widget.errorBuilder!(context, _cameraError);\n    }\n\n    var cameraPreview = _isStreaming\n        ? CameraPreview(\n            _cameraController!,\n          )\n        : _getPicture();\n\n    if (widget.overlayBuilder != null) {\n      cameraPreview = Stack(\n        fit: StackFit.passthrough,\n        children: [\n          cameraPreview,\n          (cameraController?.value.isInitialized ?? false)\n              ? AspectRatio(\n                  aspectRatio: _isLandscape()\n                      ? cameraController!.value.aspectRatio\n                      : (1 / cameraController!.value.aspectRatio),\n                  child: widget.overlayBuilder!(context),\n                )\n              : Container(),\n        ],\n      );\n    }\n    return VisibilityDetector(\n      onVisibilityChanged: (VisibilityInfo info) {\n        if (info.visibleFraction == 0) {\n          //invisible stop the streaming\n          _isDeactivate = true;\n          _stop(true);\n        } else if (_isDeactivate) {\n          //visible restart streaming if needed\n          _isDeactivate = false;\n          _start();\n        }\n      },\n      key: _visibilityKey,\n      child: cameraPreview,\n    );\n  }\n\n  DeviceOrientation? _getApplicableOrientation() {\n    return (cameraController?.value.isRecordingVideo ?? false)\n        ? cameraController?.value.recordingOrientation\n        : (cameraController?.value.lockedCaptureOrientation ??\n            cameraController?.value.deviceOrientation);\n  }\n\n  bool _isLandscape() {\n    return [DeviceOrientation.landscapeLeft, DeviceOrientation.landscapeRight]\n        .contains(_getApplicableOrientation());\n  }\n\n  void _processImage(CameraImage cameraImage) async {\n    if (!_alreadyCheckingImage && mounted) {\n      _alreadyCheckingImage = true;\n      try {\n        final results =\n            await _detect<T>(cameraImage, widget.detector, _rotation!);\n        widget.onResult(results);\n      } catch (ex, stack) {\n        debugPrint('$ex, $stack');\n      }\n      _alreadyCheckingImage = false;\n    }\n  }\n\n  void toggle() {\n    if (_isStreaming && _cameraController!.value.isStreamingImages) {\n      stop();\n    } else {\n      start();\n    }\n  }\n\n  Widget _getPicture() {\n    if (_lastImage != null) {\n      return Image.file(File(_lastImage!.path));\n    }\n    return Container();\n  }\n}\n"
  },
  {
    "path": "lib/utils.dart",
    "content": "part of 'flutter_camera_ml_vision.dart';\n\nFuture<CameraDescription?> _getCamera(CameraLensDirection dir) async {\n  final cameras = await availableCameras();\n  final camera = cameras.firstWhereOrNull((camera) => camera.lensDirection == dir);\n  return camera ?? (cameras.isEmpty ? null : cameras.first);\n}\n\nUint8List _concatenatePlanes(List<Plane> planes) {\n  final allBytes = WriteBuffer();\n  planes.forEach((plane) => allBytes.putUint8List(plane.bytes));\n  return allBytes.done().buffer.asUint8List();\n}\n\nFirebaseVisionImageMetadata buildMetaData(\n  CameraImage image,\n  ImageRotation rotation,\n) {\n  return FirebaseVisionImageMetadata(\n    rawFormat: image.format.raw,\n    size: Size(image.width.toDouble(), image.height.toDouble()),\n    rotation: rotation,\n    planeData: image.planes\n        .map(\n          (plane) => FirebaseVisionImagePlaneMetadata(\n            bytesPerRow: plane.bytesPerRow,\n            height: plane.height,\n            width: plane.width,\n          ),\n        )\n        .toList(),\n  );\n}\n\nFuture<T> _detect<T>(\n  CameraImage image,\n  HandleDetection<T> handleDetection,\n  ImageRotation rotation,\n) async {\n  return handleDetection(\n    FirebaseVisionImage.fromBytes(\n      _concatenatePlanes(image.planes),\n      buildMetaData(image, rotation),\n    ),\n  );\n}\n\nImageRotation _rotationIntToImageRotation(int rotation) {\n  switch (rotation) {\n    case 0:\n      return ImageRotation.rotation0;\n    case 90:\n      return ImageRotation.rotation90;\n    case 180:\n      return ImageRotation.rotation180;\n    default:\n      assert(rotation == 270);\n      return ImageRotation.rotation270;\n  }\n}\n"
  },
  {
    "path": "pubspec.yaml",
    "content": "name: flutter_camera_ml_vision\ndescription: A flutter widget that show the camera stream and allow ML vision recognition on it, it allow you to detect barcodes, labels, text, faces...\nversion: 3.0.1\nrepository: https://github.com/rushio-consulting/flutter_camera_ml_vision\nhomepage: https://github.com/rushio-consulting/flutter_camera_ml_vision\n\nenvironment:\n  sdk: '>=2.12.0 <3.0.0'\n\ndependencies:\n  flutter:\n    sdk: flutter\n  firebase_ml_vision: ^0.12.0+1\n    #git:\n    #  url: git://github.com/algirdasmac/flutterfire\n    #  path: packages/firebase_ml_vision\n  firebase_core: ^1.1.0\n  visibility_detector: ^0.2.0\n  path_provider: ^2.0.1\n  pedantic: ^1.11.0\n  device_info: ^2.0.0\n  camera: ^0.8.1\n  collection: ^1.15.0\n\ndev_dependencies:\n  flutter_test:\n    sdk: flutter\n    \n"
  },
  {
    "path": "test/flutter_camera_ml_vision_test.dart",
    "content": "// import 'package:flutter_test/flutter_test.dart';\n\n// import 'package:flutter_camera_ml_vision/flutter_camera_ml_vision.dart';\n\nvoid main() {}\n"
  }
]