├── ios
├── Flutter
│ ├── Debug.xcconfig
│ ├── Release.xcconfig
│ └── AppFrameworkInfo.plist
├── Runner
│ ├── Runner-Bridging-Header.h
│ ├── Assets.xcassets
│ │ ├── LaunchImage.imageset
│ │ │ ├── LaunchImage.png
│ │ │ ├── LaunchImage@2x.png
│ │ │ ├── LaunchImage@3x.png
│ │ │ ├── README.md
│ │ │ └── Contents.json
│ │ └── AppIcon.appiconset
│ │ │ ├── Icon-App-20x20@1x.png
│ │ │ ├── Icon-App-20x20@2x.png
│ │ │ ├── Icon-App-20x20@3x.png
│ │ │ ├── Icon-App-29x29@1x.png
│ │ │ ├── Icon-App-29x29@2x.png
│ │ │ ├── Icon-App-29x29@3x.png
│ │ │ ├── Icon-App-40x40@1x.png
│ │ │ ├── Icon-App-40x40@2x.png
│ │ │ ├── Icon-App-40x40@3x.png
│ │ │ ├── Icon-App-60x60@2x.png
│ │ │ ├── Icon-App-60x60@3x.png
│ │ │ ├── Icon-App-76x76@1x.png
│ │ │ ├── Icon-App-76x76@2x.png
│ │ │ ├── Icon-App-1024x1024@1x.png
│ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ └── Contents.json
│ ├── AppDelegate.swift
│ ├── Base.lproj
│ │ ├── Main.storyboard
│ │ └── LaunchScreen.storyboard
│ └── Info.plist
├── Runner.xcodeproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ ├── WorkspaceSettings.xcsettings
│ │ │ └── IDEWorkspaceChecks.plist
│ ├── xcshareddata
│ │ └── xcschemes
│ │ │ └── Runner.xcscheme
│ └── project.pbxproj
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ ├── WorkspaceSettings.xcsettings
│ │ └── IDEWorkspaceChecks.plist
└── .gitignore
├── lib
├── home
│ ├── service
│ │ ├── base
│ │ │ └── home_service_base.dart
│ │ └── home_service.dart
│ ├── repository
│ │ └── home_repository.dart
│ ├── bindings
│ │ └── home_binding.dart
│ ├── controller
│ │ └── home_controller.dart
│ └── ui
│ │ ├── home_page.dart
│ │ ├── photo_list.dart
│ │ └── camera.dart
├── core
│ ├── constants
│ │ ├── app_constants.dart
│ │ └── colors.dart
│ ├── routes
│ │ ├── app_routes.dart
│ │ └── app_pages.dart
│ ├── extension
│ │ ├── string_extension.dart
│ │ └── context_extension.dart
│ ├── widgets
│ │ └── custom_scaffold.dart
│ └── components
│ │ └── custom_camera_preview.dart
└── main.dart
├── assets
└── icon.png
├── web
├── favicon.png
├── icons
│ ├── Icon-192.png
│ ├── Icon-512.png
│ ├── Icon-maskable-192.png
│ └── Icon-maskable-512.png
├── manifest.json
└── index.html
├── android
├── gradle.properties
├── app
│ ├── src
│ │ ├── main
│ │ │ ├── res
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ └── launcher_icon.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ └── launcher_icon.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ └── launcher_icon.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ └── launcher_icon.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ └── launcher_icon.png
│ │ │ │ ├── drawable
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── values
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night
│ │ │ │ │ └── styles.xml
│ │ │ ├── kotlin
│ │ │ │ └── com
│ │ │ │ │ └── example
│ │ │ │ │ └── custom_camera_preview
│ │ │ │ │ └── MainActivity.kt
│ │ │ └── AndroidManifest.xml
│ │ ├── debug
│ │ │ └── AndroidManifest.xml
│ │ └── profile
│ │ │ └── AndroidManifest.xml
│ └── build.gradle
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
├── .gitignore
├── settings.gradle
└── build.gradle
├── .metadata
├── .gitignore
├── analysis_options.yaml
├── README.md
├── pubspec.yaml
└── pubspec.lock
/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
2 |
--------------------------------------------------------------------------------
/lib/home/service/base/home_service_base.dart:
--------------------------------------------------------------------------------
1 | abstract class HomeServiceBase {}
2 |
--------------------------------------------------------------------------------
/assets/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/assets/icon.png
--------------------------------------------------------------------------------
/web/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/web/favicon.png
--------------------------------------------------------------------------------
/web/icons/Icon-192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/web/icons/Icon-192.png
--------------------------------------------------------------------------------
/web/icons/Icon-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/web/icons/Icon-512.png
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536M
2 | android.useAndroidX=true
3 | android.enableJetifier=true
4 |
--------------------------------------------------------------------------------
/web/icons/Icon-maskable-192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/web/icons/Icon-maskable-192.png
--------------------------------------------------------------------------------
/web/icons/Icon-maskable-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/web/icons/Icon-maskable-512.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/launcher_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/android/app/src/main/res/mipmap-hdpi/launcher_icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/launcher_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/android/app/src/main/res/mipmap-mdpi/launcher_icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/lib/core/constants/app_constants.dart:
--------------------------------------------------------------------------------
1 | class AppConstants {
2 | static String API_URL = "http://10.0.3.2:8081/";
3 |
4 | static const FONT_FAMILY = "Poppins";
5 | }
6 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Vasseurr/CustomCameraPreview/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/lib/core/routes/app_routes.dart:
--------------------------------------------------------------------------------
1 | abstract class Routes {
2 | static const INITIAL = '/';
3 | static const LOGIN = '/login';
4 | static const CAMERA = '/camera';
5 | static const LIST = '/list';
6 | }
7 |
--------------------------------------------------------------------------------
/lib/home/service/home_service.dart:
--------------------------------------------------------------------------------
1 | import 'base/home_service_base.dart';
2 |
3 | class HomeService with HomeServiceBase {
4 | // final http.Client httpClient;
5 | // final Dio _dio;
6 |
7 | HomeService();
8 | }
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/app/src/main/kotlin/com/example/custom_camera_preview/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.example.custom_camera_preview
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | class MainActivity: FlutterActivity() {
6 | }
7 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Fri Jun 23 08:50:38 CEST 2017
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip
7 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/lib/core/extension/string_extension.dart:
--------------------------------------------------------------------------------
1 | extension EmailValidator on String {
2 | bool isValidEmail() {
3 | return RegExp(
4 | r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$')
5 | .hasMatch(this);
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/.metadata:
--------------------------------------------------------------------------------
1 | # This file tracks properties of this Flutter project.
2 | # Used by Flutter tool to assess capabilities and perform upgrades etc.
3 | #
4 | # This file should be version controlled and should not be manually edited.
5 |
6 | version:
7 | revision: 77d935af4db863f6abd0b9c31c7e6df2a13de57b
8 | channel: stable
9 |
10 | project_type: app
11 |
--------------------------------------------------------------------------------
/android/.gitignore:
--------------------------------------------------------------------------------
1 | gradle-wrapper.jar
2 | /.gradle
3 | /captures/
4 | /gradlew
5 | /gradlew.bat
6 | /local.properties
7 | GeneratedPluginRegistrant.java
8 |
9 | # Remember to never publicly share your keystore.
10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
11 | key.properties
12 | **/*.keystore
13 | **/*.jks
14 |
--------------------------------------------------------------------------------
/lib/home/repository/home_repository.dart:
--------------------------------------------------------------------------------
1 | import 'package:custom_camera_preview/home/service/base/home_service_base.dart';
2 | import 'package:custom_camera_preview/home/service/home_service.dart';
3 |
4 | class HomeRepository with HomeServiceBase {
5 | final HomeService _homeService;
6 |
7 | HomeRepository(this._homeService) : assert(_homeService != null);
8 | }
9 |
--------------------------------------------------------------------------------
/lib/main.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:get/get.dart';
3 |
4 | import 'core/routes/app_pages.dart';
5 | import 'core/routes/app_routes.dart';
6 |
7 | void main() async {
8 | runApp(GetMaterialApp(
9 | debugShowCheckedModeBanner: false,
10 | initialRoute: Routes.INITIAL,
11 | getPages: AppPages.pages,
12 | ));
13 | }
14 |
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md:
--------------------------------------------------------------------------------
1 | # Launch Screen Assets
2 |
3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory.
4 |
5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
--------------------------------------------------------------------------------
/ios/Runner/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 | import Flutter
3 |
4 | @UIApplicationMain
5 | @objc class AppDelegate: FlutterAppDelegate {
6 | override func application(
7 | _ application: UIApplication,
8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
9 | ) -> Bool {
10 | GeneratedPluginRegistrant.register(with: self)
11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions)
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
4 | def properties = new Properties()
5 |
6 | assert localPropertiesFile.exists()
7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
8 |
9 | def flutterSdkPath = properties.getProperty("flutter.sdk")
10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
12 |
--------------------------------------------------------------------------------
/lib/home/bindings/home_binding.dart:
--------------------------------------------------------------------------------
1 | import 'package:custom_camera_preview/home/controller/home_controller.dart';
2 | import 'package:custom_camera_preview/home/repository/home_repository.dart';
3 | import 'package:custom_camera_preview/home/service/home_service.dart';
4 | import 'package:get/get.dart';
5 |
6 | class HomeBinding implements Bindings {
7 | @override
8 | void dependencies() {
9 | Get.lazyPut(() {
10 | return HomeController(HomeRepository(HomeService()));
11 | });
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/lib/home/controller/home_controller.dart:
--------------------------------------------------------------------------------
1 | import 'dart:io';
2 |
3 | import 'package:custom_camera_preview/home/repository/home_repository.dart';
4 | import 'package:get/get.dart';
5 |
6 | class HomeController extends GetxController {
7 | final HomeRepository _repository;
8 | HomeController(this._repository) : assert(_repository != null);
9 | final RxString _userName = "".obs;
10 | List imageFiles = [];
11 |
12 | get userName => _userName.value;
13 |
14 | set userName(value) => _userName.value = value;
15 | }
16 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-v21/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "LaunchImage.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "LaunchImage@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "LaunchImage@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/ios/.gitignore:
--------------------------------------------------------------------------------
1 | **/dgph
2 | *.mode1v3
3 | *.mode2v3
4 | *.moved-aside
5 | *.pbxuser
6 | *.perspectivev3
7 | **/*sync/
8 | .sconsign.dblite
9 | .tags*
10 | **/.vagrant/
11 | **/DerivedData/
12 | Icon?
13 | **/Pods/
14 | **/.symlinks/
15 | profile
16 | xcuserdata
17 | **/.generated/
18 | Flutter/App.framework
19 | Flutter/Flutter.framework
20 | Flutter/Flutter.podspec
21 | Flutter/Generated.xcconfig
22 | Flutter/ephemeral/
23 | Flutter/app.flx
24 | Flutter/app.zip
25 | Flutter/flutter_assets/
26 | Flutter/flutter_export_environment.sh
27 | ServiceDefinitions.json
28 | Runner/GeneratedPluginRegistrant.*
29 |
30 | # Exceptions to above rules.
31 | !default.mode1v3
32 | !default.mode2v3
33 | !default.pbxuser
34 | !default.perspectivev3
35 |
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | ext.kotlin_version = '1.3.50'
3 | repositories {
4 | google()
5 | mavenCentral()
6 | }
7 |
8 | dependencies {
9 | classpath 'com.android.tools.build:gradle:4.1.0'
10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
11 | }
12 | }
13 |
14 | allprojects {
15 | repositories {
16 | google()
17 | mavenCentral()
18 | }
19 | }
20 |
21 | rootProject.buildDir = '../build'
22 | subprojects {
23 | project.buildDir = "${rootProject.buildDir}/${project.name}"
24 | }
25 | subprojects {
26 | project.evaluationDependsOn(':app')
27 | }
28 |
29 | task clean(type: Delete) {
30 | delete rootProject.buildDir
31 | }
32 |
--------------------------------------------------------------------------------
/lib/core/routes/app_pages.dart:
--------------------------------------------------------------------------------
1 | import 'package:custom_camera_preview/home/bindings/home_binding.dart';
2 | import 'package:custom_camera_preview/home/ui/camera.dart';
3 | import 'package:custom_camera_preview/home/ui/photo_list.dart';
4 | import 'package:custom_camera_preview/home/ui/home_page.dart';
5 | import 'package:get/get.dart';
6 |
7 | import 'app_routes.dart';
8 |
9 | class AppPages {
10 | static final pages = [
11 | GetPage(
12 | name: Routes.INITIAL,
13 | page: () => const HomePage(),
14 | binding: HomeBinding()),
15 | GetPage(name: Routes.CAMERA, page: () => Camera(), binding: HomeBinding()),
16 | GetPage(
17 | name: Routes.LIST,
18 | page: () => const CameraResult(),
19 | binding: HomeBinding()),
20 | ];
21 | }
22 |
--------------------------------------------------------------------------------
/ios/Flutter/AppFrameworkInfo.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | App
9 | CFBundleIdentifier
10 | io.flutter.flutter.app
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | App
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1.0
23 | MinimumOSVersion
24 | 9.0
25 |
26 |
27 |
--------------------------------------------------------------------------------
/lib/core/widgets/custom_scaffold.dart:
--------------------------------------------------------------------------------
1 | import 'package:custom_camera_preview/core/extension/context_extension.dart';
2 | import 'package:flutter/material.dart';
3 |
4 | class CustomScaffold extends StatelessWidget {
5 | Widget body;
6 | CustomScaffold({Key? key, required this.body}) : super(key: key);
7 |
8 | @override
9 | Widget build(BuildContext context) {
10 | return Scaffold(
11 | appBar: AppBar(
12 | title: Text("Custom Camera Preview", style: _customTextStyle()),
13 | centerTitle: true,
14 | backgroundColor: Colors.white,
15 | automaticallyImplyLeading: false,
16 | ),
17 | body: body,
18 | );
19 | }
20 |
21 | TextStyle _customTextStyle() {
22 | return const TextStyle(
23 | color: Colors.black,
24 | fontSize: 20,
25 | fontWeight: FontWeight.w400,
26 | fontStyle: FontStyle.italic);
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Miscellaneous
2 | *.class
3 | *.log
4 | *.pyc
5 | *.swp
6 | .DS_Store
7 | .atom/
8 | .buildlog/
9 | .history
10 | .svn/
11 |
12 | # IntelliJ related
13 | *.iml
14 | *.ipr
15 | *.iws
16 | .idea/
17 |
18 | # The .vscode folder contains launch configuration and tasks you configure in
19 | # VS Code which you may wish to be included in version control, so this line
20 | # is commented out by default.
21 | #.vscode/
22 |
23 | # Flutter/Dart/Pub related
24 | **/doc/api/
25 | **/ios/Flutter/.last_build_id
26 | .dart_tool/
27 | .flutter-plugins
28 | .flutter-plugins-dependencies
29 | .packages
30 | .pub-cache/
31 | .pub/
32 | /build/
33 |
34 | # Web related
35 | lib/generated_plugin_registrant.dart
36 |
37 | # Symbolication related
38 | app.*.symbols
39 |
40 | # Obfuscation related
41 | app.*.map.json
42 |
43 | # Android Studio will place build artifacts here
44 | /android/app/debug
45 | /android/app/profile
46 | /android/app/release
47 |
--------------------------------------------------------------------------------
/lib/core/constants/colors.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class MyColors {
4 | static const MaterialColor colorPrimary = MaterialColor(
5 | 0xFF189fd7,
6 | {
7 | 50: Color(0xFF189fd7),
8 | 100: Color(0xFF189fd7),
9 | 200: Color(0xFF189fd7),
10 | 300: Color(0xFF189fd7),
11 | 400: Color(0xFF189fd7),
12 | 500: Color(0xFF189fd7),
13 | 600: Color(0xFF189fd7),
14 | 700: Color(0xFF189fd7),
15 | 800: Color(0xFF189fd7),
16 | 900: Color(0xFF189fd7),
17 | },
18 | );
19 |
20 | static const MaterialColor colorPrimarySwitch = MaterialColor(
21 | 0xFF25aae1,
22 | {
23 | 50: Color(0xFF25aae1),
24 | 100: Color(0xFF25aae1),
25 | 200: Color(0xFF25aae1),
26 | 300: Color(0xFF25aae1),
27 | 400: Color(0xFF25aae1),
28 | 500: Color(0xFF25aae1),
29 | 600: Color(0xFF25aae1),
30 | 700: Color(0xFF25aae1),
31 | 800: Color(0xFF25aae1),
32 | 900: Color(0xFF25aae1),
33 | },
34 | );
35 | }
36 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values-night/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/web/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "custom_camera_preview",
3 | "short_name": "custom_camera_preview",
4 | "start_url": ".",
5 | "display": "standalone",
6 | "background_color": "#0175C2",
7 | "theme_color": "#0175C2",
8 | "description": "A new Flutter project.",
9 | "orientation": "portrait-primary",
10 | "prefer_related_applications": false,
11 | "icons": [
12 | {
13 | "src": "icons/Icon-192.png",
14 | "sizes": "192x192",
15 | "type": "image/png"
16 | },
17 | {
18 | "src": "icons/Icon-512.png",
19 | "sizes": "512x512",
20 | "type": "image/png"
21 | },
22 | {
23 | "src": "icons/Icon-maskable-192.png",
24 | "sizes": "192x192",
25 | "type": "image/png",
26 | "purpose": "maskable"
27 | },
28 | {
29 | "src": "icons/Icon-maskable-512.png",
30 | "sizes": "512x512",
31 | "type": "image/png",
32 | "purpose": "maskable"
33 | }
34 | ]
35 | }
36 |
--------------------------------------------------------------------------------
/lib/home/ui/home_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:custom_camera_preview/core/routes/app_routes.dart';
2 | import 'package:custom_camera_preview/core/widgets/custom_scaffold.dart';
3 | import 'package:custom_camera_preview/home/controller/home_controller.dart';
4 | import 'package:flutter/material.dart';
5 | import 'package:get/get.dart';
6 |
7 | class HomePage extends GetView {
8 | const HomePage({Key? key}) : super(key: key);
9 | @override
10 | Widget build(BuildContext context) {
11 | return CustomScaffold(body: _content());
12 | }
13 |
14 | Center _content() {
15 | return Center(
16 | child: Column(
17 | children: [
18 | Image.asset("assets/icon.png"),
19 | Row(
20 | mainAxisAlignment: MainAxisAlignment.center,
21 | children: [
22 | Text("Take Photos", style: _customTextStyle()),
23 | const SizedBox(width: 12),
24 | IconButton(
25 | iconSize: 30,
26 | icon: const Icon(Icons.camera_alt),
27 | onPressed: () async {
28 | Get.find().imageFiles = [];
29 | Get.toNamed(Routes.CAMERA);
30 | }),
31 | ],
32 | ),
33 | ],
34 | ));
35 | }
36 |
37 | TextStyle _customTextStyle() {
38 | return const TextStyle(
39 | color: Colors.black,
40 | fontSize: 20,
41 | fontWeight: FontWeight.w400,
42 | fontStyle: FontStyle.italic);
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/analysis_options.yaml:
--------------------------------------------------------------------------------
1 | # This file configures the analyzer, which statically analyzes Dart code to
2 | # check for errors, warnings, and lints.
3 | #
4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled
5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
6 | # invoked from the command line by running `flutter analyze`.
7 |
8 | # The following line activates a set of recommended lints for Flutter apps,
9 | # packages, and plugins designed to encourage good coding practices.
10 | include: package:flutter_lints/flutter.yaml
11 |
12 | linter:
13 | # The lint rules applied to this project can be customized in the
14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml`
15 | # included above or to enable additional rules. A list of all available lints
16 | # and their documentation is published at
17 | # https://dart-lang.github.io/linter/lints/index.html.
18 | #
19 | # Instead of disabling a lint rule for the entire project in the
20 | # section below, it can also be suppressed for a single line of code
21 | # or a specific dart file by using the `// ignore: name_of_lint` and
22 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file
23 | # producing the lint.
24 | rules:
25 | # avoid_print: false # Uncomment to disable the `avoid_print` rule
26 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
27 |
28 | # Additional information about this file can be found at
29 | # https://dart.dev/guides/language/analysis-options
30 |
--------------------------------------------------------------------------------
/ios/Runner/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ios/Runner/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleDisplayName
8 | Custom Camera Preview
9 | CFBundleExecutable
10 | $(EXECUTABLE_NAME)
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | custom_camera_preview
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | $(FLUTTER_BUILD_NAME)
21 | CFBundleSignature
22 | ????
23 | CFBundleVersion
24 | $(FLUTTER_BUILD_NUMBER)
25 | LSRequiresIPhoneOS
26 |
27 | UILaunchStoryboardName
28 | LaunchScreen
29 | UIMainStoryboardFile
30 | Main
31 | UISupportedInterfaceOrientations
32 |
33 | UIInterfaceOrientationPortrait
34 | UIInterfaceOrientationLandscapeLeft
35 | UIInterfaceOrientationLandscapeRight
36 |
37 | UISupportedInterfaceOrientations~ipad
38 |
39 | UIInterfaceOrientationPortrait
40 | UIInterfaceOrientationPortraitUpsideDown
41 | UIInterfaceOrientationLandscapeLeft
42 | UIInterfaceOrientationLandscapeRight
43 |
44 | UIViewControllerBasedStatusBarAppearance
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
7 |
15 |
19 |
23 |
24 |
25 |
26 |
27 |
28 |
30 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/lib/core/extension/context_extension.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | extension ContextExtension on BuildContext {
4 | MediaQueryData get mediaQuery => MediaQuery.of(this);
5 | }
6 |
7 | extension MediaQueryExtension on BuildContext {
8 | double get getHeight => mediaQuery.size.height;
9 | double get getWidth => mediaQuery.size.width;
10 |
11 | double get lowHeightValue => getHeight * 0.01;
12 | double get mediumHeightValue => getHeight * 0.05;
13 | double get highHeightValue => getHeight * 0.08;
14 |
15 | double get lowWidthValue => getWidth * 0.01;
16 | double get mediumWidthValue => getWidth * 0.05;
17 | double get highWidthValue => getWidth * 0.08;
18 | }
19 |
20 | extension ThemeExtension on BuildContext {
21 | ThemeData get theme => Theme.of(this);
22 | TextTheme get textTheme => theme.textTheme;
23 | ColorScheme get colors => theme.colorScheme;
24 | }
25 |
26 | extension PaddingExtension on BuildContext {
27 | EdgeInsets get paddingHeightLow => EdgeInsets.all(lowHeightValue);
28 | EdgeInsets get paddingHeightMedium => EdgeInsets.all(mediumHeightValue);
29 | EdgeInsets get paddingHeightHigh => EdgeInsets.all(highHeightValue);
30 |
31 | EdgeInsets get paddingWidthLow => EdgeInsets.all(lowWidthValue);
32 | EdgeInsets get paddingWidthMedium => EdgeInsets.all(mediumWidthValue);
33 | EdgeInsets get paddingWidthHigh => EdgeInsets.all(highWidthValue);
34 | }
35 |
36 | extension MarginExtension on BuildContext {
37 | EdgeInsets get marginHeightLow => EdgeInsets.all(lowHeightValue);
38 | EdgeInsets get marginHeightMedium => EdgeInsets.all(mediumHeightValue);
39 | EdgeInsets get marginHeightHigh => EdgeInsets.all(highHeightValue);
40 |
41 | EdgeInsets get marginWidthLow => EdgeInsets.all(lowWidthValue);
42 | EdgeInsets get marginWidthMedium => EdgeInsets.all(mediumWidthValue);
43 | EdgeInsets get marginWidthHigh => EdgeInsets.all(highWidthValue);
44 | }
45 |
--------------------------------------------------------------------------------
/lib/home/ui/photo_list.dart:
--------------------------------------------------------------------------------
1 | import 'package:custom_camera_preview/core/routes/app_routes.dart';
2 | import 'package:custom_camera_preview/core/widgets/custom_scaffold.dart';
3 | import 'package:custom_camera_preview/home/controller/home_controller.dart';
4 | import 'package:flutter/material.dart';
5 | import 'package:get/get.dart';
6 |
7 | class CameraResult extends StatelessWidget {
8 | const CameraResult({Key? key}) : super(key: key);
9 |
10 | @override
11 | Widget build(BuildContext context) {
12 | final HomeController _homeController = Get.find();
13 | return WillPopScope(
14 | onWillPop: () async {
15 | Get.toNamed(Routes.INITIAL);
16 | return true;
17 | },
18 | child: CustomScaffold(
19 | body: _homeController.imageFiles.isEmpty
20 | ? const Center(child: Text("List is empty"))
21 | : _content(context, _homeController),
22 | ),
23 | );
24 | }
25 |
26 | Column _content(BuildContext context, HomeController _homeController) {
27 | return Column(
28 | children: [
29 | SizedBox(height: context.height * 0.05),
30 | SizedBox(
31 | height: context.height * 0.2,
32 | child: Image.asset("assets/icon.png")),
33 | SizedBox(height: context.height * 0.05),
34 | _photoCards(_homeController),
35 | ],
36 | );
37 | }
38 |
39 | Expanded _photoCards(HomeController _homeController) {
40 | return Expanded(
41 | child: GridView.builder(
42 | gridDelegate:
43 | const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2),
44 | itemBuilder: (context, index) {
45 | return Padding(
46 | padding: const EdgeInsets.all(4.0),
47 | child: SizedBox(
48 | height: context.height * 0.5,
49 | child: Card(
50 | child: Image.file(
51 | _homeController.imageFiles[index],
52 | fit: BoxFit.cover,
53 | ),
54 | ),
55 | ),
56 | );
57 | },
58 | itemCount: _homeController.imageFiles.length,
59 | ),
60 | );
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/android/app/build.gradle:
--------------------------------------------------------------------------------
1 | def localProperties = new Properties()
2 | def localPropertiesFile = rootProject.file('local.properties')
3 | if (localPropertiesFile.exists()) {
4 | localPropertiesFile.withReader('UTF-8') { reader ->
5 | localProperties.load(reader)
6 | }
7 | }
8 |
9 | def flutterRoot = localProperties.getProperty('flutter.sdk')
10 | if (flutterRoot == null) {
11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
12 | }
13 |
14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
15 | if (flutterVersionCode == null) {
16 | flutterVersionCode = '1'
17 | }
18 |
19 | def flutterVersionName = localProperties.getProperty('flutter.versionName')
20 | if (flutterVersionName == null) {
21 | flutterVersionName = '1.0'
22 | }
23 |
24 | apply plugin: 'com.android.application'
25 | apply plugin: 'kotlin-android'
26 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
27 |
28 | android {
29 | compileSdkVersion flutter.compileSdkVersion
30 |
31 | compileOptions {
32 | sourceCompatibility JavaVersion.VERSION_1_8
33 | targetCompatibility JavaVersion.VERSION_1_8
34 | }
35 |
36 | kotlinOptions {
37 | jvmTarget = '1.8'
38 | }
39 |
40 | sourceSets {
41 | main.java.srcDirs += 'src/main/kotlin'
42 | }
43 |
44 | defaultConfig {
45 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
46 | applicationId "com.example.custom_camera_preview"
47 | minSdkVersion 21
48 | targetSdkVersion flutter.targetSdkVersion
49 | versionCode flutterVersionCode.toInteger()
50 | versionName flutterVersionName
51 | }
52 |
53 | buildTypes {
54 | release {
55 | // TODO: Add your own signing config for the release build.
56 | // Signing with the debug keys for now, so `flutter run --release` works.
57 | signingConfig signingConfigs.debug
58 | }
59 | }
60 | }
61 |
62 | flutter {
63 | source '../..'
64 | }
65 |
66 | dependencies {
67 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
68 | }
69 |
--------------------------------------------------------------------------------
/lib/home/ui/camera.dart:
--------------------------------------------------------------------------------
1 | import 'package:camera/camera.dart';
2 | import 'package:custom_camera_preview/core/components/custom_camera_preview.dart';
3 | import 'package:custom_camera_preview/home/controller/home_controller.dart';
4 | import 'package:flutter/material.dart';
5 | import 'package:get/get.dart';
6 |
7 | class Camera extends StatefulWidget {
8 | const Camera({Key? key}) : super(key: key);
9 |
10 | @override
11 | _CameraState createState() => _CameraState();
12 | }
13 |
14 | class _CameraState extends State {
15 | final HomeController _homeController = Get.find();
16 |
17 | CameraController? controller;
18 | late List cameras;
19 | late int selectedCameraIdx;
20 | late String imagePath;
21 |
22 | @override
23 | void initState() {
24 | super.initState();
25 | availableCameras().then((availableCameras) {
26 | cameras = availableCameras;
27 | if (cameras.isNotEmpty) {
28 | setState(() {
29 | selectedCameraIdx = 0;
30 | });
31 | _initCameraController(cameras[selectedCameraIdx]).then((void v) {});
32 | } else {
33 | print("No camera available");
34 | }
35 | }).catchError((err) {
36 | print('Error: $err.code\nError Message: $err.message');
37 | });
38 | }
39 |
40 | Future _initCameraController(CameraDescription cameraDescription) async {
41 | if (controller != null) {
42 | await controller!.dispose();
43 | }
44 | controller = CameraController(cameraDescription, ResolutionPreset.high);
45 | controller!.addListener(() {
46 | if (mounted) {
47 | setState(() {});
48 | }
49 | if (controller!.value.hasError) {
50 | print('Camera error ${controller!.value.errorDescription}');
51 | }
52 | });
53 | try {
54 | await controller!.initialize();
55 | } on CameraException catch (e) {
56 | print(e.description);
57 | }
58 |
59 | if (mounted) {
60 | setState(() {});
61 | }
62 | }
63 |
64 | @override
65 | Widget build(BuildContext context) {
66 | if (controller == null || !controller!.value.isInitialized) {
67 | return const Center(
68 | child: CircularProgressIndicator(
69 | color: Colors.red,
70 | ));
71 | }
72 | return CustomCameraPreview(
73 | imageFiles: _homeController.imageFiles,
74 | cameraController: controller!,
75 | );
76 | }
77 | }
78 |
--------------------------------------------------------------------------------
/ios/Runner/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Custom Camera Preview
2 | A component has developed with Flutter
3 |
4 | ## Purpose
5 |
6 | Instead of taking photos of a product and taking them one by one when users need to upload anywhere, they can use custom camera preview to take their photos on the same screen, see them as a list and remove them from the list if they want.
7 |
8 | ## Instruction
9 |
10 | The Camera Preview as the photo
11 |
12 | Users can take photos via camera button and save in photo list as below
13 |
14 | If the user would like to delete a photo from the list, the user should use 'delete' button over the image. We deleted dog photo (third photo) from the list (You can compare previous screenshot with photo below)
15 |
16 |
17 | ## Camera Implementation
18 | https://pub.dev/packages/camera
19 |
20 | You need import 'package:camera/camera.dart' in the camera preview page. Also, you should initialize your camera controller in initState
21 | ```
22 | @override
23 | void initState() {
24 | super.initState();
25 | availableCameras().then((availableCameras) {
26 | cameras = availableCameras;
27 | if (cameras.isNotEmpty) {
28 | setState(() {
29 | selectedCameraIdx = 0;
30 | });
31 | _initCameraController(cameras[selectedCameraIdx]).then((void v) {});
32 | } else {
33 | print("No camera available");
34 | }
35 | }).catchError((err) {
36 | print('Error: $err.code\nError Message: $err.message');
37 | });
38 | }
39 | ```
40 |
41 | ## Usage
42 |
43 | If the camera controller is null or uninitialized, return a loading indicator. If not, return custom camera preview with parameters that you must given a empty list with the type of File and a camera controller
44 | ```
45 | if (controller == null || !controller!.value.isInitialized) {
46 | return const Center(
47 | child: CircularProgressIndicator(
48 | color: Colors.red,
49 | ));
50 | }
51 | return CustomCameraPreview(
52 | imageFiles: _homeController.imageFiles,
53 | cameraController: controller!,
54 | );
55 | ```
56 |
57 | ## Demo
58 |
59 | https://user-images.githubusercontent.com/67058617/155554501-dcaac7cb-1797-4648-a571-57206bb131bb.mp4
60 |
61 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "20x20",
5 | "idiom" : "iphone",
6 | "filename" : "Icon-App-20x20@2x.png",
7 | "scale" : "2x"
8 | },
9 | {
10 | "size" : "20x20",
11 | "idiom" : "iphone",
12 | "filename" : "Icon-App-20x20@3x.png",
13 | "scale" : "3x"
14 | },
15 | {
16 | "size" : "29x29",
17 | "idiom" : "iphone",
18 | "filename" : "Icon-App-29x29@1x.png",
19 | "scale" : "1x"
20 | },
21 | {
22 | "size" : "29x29",
23 | "idiom" : "iphone",
24 | "filename" : "Icon-App-29x29@2x.png",
25 | "scale" : "2x"
26 | },
27 | {
28 | "size" : "29x29",
29 | "idiom" : "iphone",
30 | "filename" : "Icon-App-29x29@3x.png",
31 | "scale" : "3x"
32 | },
33 | {
34 | "size" : "40x40",
35 | "idiom" : "iphone",
36 | "filename" : "Icon-App-40x40@2x.png",
37 | "scale" : "2x"
38 | },
39 | {
40 | "size" : "40x40",
41 | "idiom" : "iphone",
42 | "filename" : "Icon-App-40x40@3x.png",
43 | "scale" : "3x"
44 | },
45 | {
46 | "size" : "60x60",
47 | "idiom" : "iphone",
48 | "filename" : "Icon-App-60x60@2x.png",
49 | "scale" : "2x"
50 | },
51 | {
52 | "size" : "60x60",
53 | "idiom" : "iphone",
54 | "filename" : "Icon-App-60x60@3x.png",
55 | "scale" : "3x"
56 | },
57 | {
58 | "size" : "20x20",
59 | "idiom" : "ipad",
60 | "filename" : "Icon-App-20x20@1x.png",
61 | "scale" : "1x"
62 | },
63 | {
64 | "size" : "20x20",
65 | "idiom" : "ipad",
66 | "filename" : "Icon-App-20x20@2x.png",
67 | "scale" : "2x"
68 | },
69 | {
70 | "size" : "29x29",
71 | "idiom" : "ipad",
72 | "filename" : "Icon-App-29x29@1x.png",
73 | "scale" : "1x"
74 | },
75 | {
76 | "size" : "29x29",
77 | "idiom" : "ipad",
78 | "filename" : "Icon-App-29x29@2x.png",
79 | "scale" : "2x"
80 | },
81 | {
82 | "size" : "40x40",
83 | "idiom" : "ipad",
84 | "filename" : "Icon-App-40x40@1x.png",
85 | "scale" : "1x"
86 | },
87 | {
88 | "size" : "40x40",
89 | "idiom" : "ipad",
90 | "filename" : "Icon-App-40x40@2x.png",
91 | "scale" : "2x"
92 | },
93 | {
94 | "size" : "76x76",
95 | "idiom" : "ipad",
96 | "filename" : "Icon-App-76x76@1x.png",
97 | "scale" : "1x"
98 | },
99 | {
100 | "size" : "76x76",
101 | "idiom" : "ipad",
102 | "filename" : "Icon-App-76x76@2x.png",
103 | "scale" : "2x"
104 | },
105 | {
106 | "size" : "83.5x83.5",
107 | "idiom" : "ipad",
108 | "filename" : "Icon-App-83.5x83.5@2x.png",
109 | "scale" : "2x"
110 | },
111 | {
112 | "size" : "1024x1024",
113 | "idiom" : "ios-marketing",
114 | "filename" : "Icon-App-1024x1024@1x.png",
115 | "scale" : "1x"
116 | }
117 | ],
118 | "info" : {
119 | "version" : 1,
120 | "author" : "xcode"
121 | }
122 | }
123 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
37 |
38 |
39 |
40 |
41 |
42 |
52 |
54 |
60 |
61 |
62 |
63 |
69 |
71 |
77 |
78 |
79 |
80 |
82 |
83 |
86 |
87 |
88 |
--------------------------------------------------------------------------------
/web/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 | custom_camera_preview
33 |
34 |
35 |
36 |
39 |
103 |
104 |
105 |
--------------------------------------------------------------------------------
/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: custom_camera_preview
2 | description: A new Flutter project.
3 |
4 | # The following line prevents the package from being accidentally published to
5 | # pub.dev using `flutter pub publish`. This is preferred for private packages.
6 | publish_to: 'none' # Remove this line if you wish to publish to pub.dev
7 |
8 | # The following defines the version and build number for your application.
9 | # A version number is three numbers separated by dots, like 1.2.43
10 | # followed by an optional build number separated by a +.
11 | # Both the version and the builder number may be overridden in flutter
12 | # build by specifying --build-name and --build-number, respectively.
13 | # In Android, build-name is used as versionName while build-number used as versionCode.
14 | # Read more about Android versioning at https://developer.android.com/studio/publish/versioning
15 | # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
16 | # Read more about iOS versioning at
17 | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
18 | version: 1.0.0+1
19 |
20 | environment:
21 | sdk: ">=2.15.1 <3.0.0"
22 |
23 | # Dependencies specify other packages that your package needs in order to work.
24 | # To automatically upgrade your package dependencies to the latest versions
25 | # consider running `flutter pub upgrade --major-versions`. Alternatively,
26 | # dependencies can be manually updated by changing the version numbers below to
27 | # the latest version available on pub.dev. To see which dependencies have newer
28 | # versions available, run `flutter pub outdated`.
29 | dependencies:
30 | flutter:
31 | sdk: flutter
32 |
33 |
34 | # The following adds the Cupertino Icons font to your application.
35 | # Use with the CupertinoIcons class for iOS style icons.
36 | cupertino_icons: ^1.0.2
37 | get: ^4.3.8
38 | flutter_secure_storage: ^4.2.1
39 | shared_preferences: ^2.0.8
40 | http: ^0.13.4
41 | hive: ^2.0.4
42 | hive_flutter: ^1.1.0
43 | dio: ^4.0.0
44 | camera: ^0.9.4+14
45 | flutter_launcher_icons: ^0.9.2
46 |
47 | flutter_icons:
48 | android: "launcher_icon"
49 | ios: true
50 | image_path: "assets/icon.png"
51 |
52 |
53 | dev_dependencies:
54 | flutter_test:
55 | sdk: flutter
56 |
57 | # The "flutter_lints" package below contains a set of recommended lints to
58 | # encourage good coding practices. The lint set provided by the package is
59 | # activated in the `analysis_options.yaml` file located at the root of your
60 | # package. See that file for information about deactivating specific lint
61 | # rules and activating additional ones.
62 | flutter_lints: ^1.0.0
63 |
64 | # For information on the generic Dart part of this file, see the
65 | # following page: https://dart.dev/tools/pub/pubspec
66 |
67 | # The following section is specific to Flutter.
68 | flutter:
69 |
70 | # The following line ensures that the Material Icons font is
71 | # included with your application, so that you can use the icons in
72 | # the material Icons class.
73 | uses-material-design: true
74 |
75 | # To add assets to your application, add an assets section, like this:
76 | assets:
77 | - assets/icon.png
78 | # - images/a_dot_burr.jpeg
79 | # - images/a_dot_ham.jpeg
80 |
81 | # An image asset can refer to one or more resolution-specific "variants", see
82 | # https://flutter.dev/assets-and-images/#resolution-aware.
83 |
84 | # For details regarding adding assets from package dependencies, see
85 | # https://flutter.dev/assets-and-images/#from-packages
86 |
87 | # To add custom fonts to your application, add a fonts section here,
88 | # in this "flutter" section. Each entry in this list should have a
89 | # "family" key with the font family name, and a "fonts" key with a
90 | # list giving the asset and other descriptors for the font. For
91 | # example:
92 | # fonts:
93 | # - family: Schyler
94 | # fonts:
95 | # - asset: fonts/Schyler-Regular.ttf
96 | # - asset: fonts/Schyler-Italic.ttf
97 | # style: italic
98 | # - family: Trajan Pro
99 | # fonts:
100 | # - asset: fonts/TrajanPro.ttf
101 | # - asset: fonts/TrajanPro_Bold.ttf
102 | # weight: 700
103 | #
104 | # For details regarding fonts from package dependencies,
105 | # see https://flutter.dev/custom-fonts/#from-packages
106 |
--------------------------------------------------------------------------------
/lib/core/components/custom_camera_preview.dart:
--------------------------------------------------------------------------------
1 | import 'dart:io';
2 |
3 | import 'package:camera/camera.dart';
4 | import 'package:custom_camera_preview/core/routes/app_routes.dart';
5 | import 'package:flutter/material.dart';
6 | import 'package:get/get.dart';
7 |
8 | class CustomCameraPreview extends StatefulWidget {
9 | List imageFiles;
10 | CameraController cameraController;
11 | CustomCameraPreview(
12 | {Key? key, required this.imageFiles, required this.cameraController})
13 | : super(key: key);
14 |
15 | @override
16 | _CustomCameraPreviewState createState() => _CustomCameraPreviewState();
17 | }
18 |
19 | class _CustomCameraPreviewState extends State {
20 | @override
21 | Widget build(BuildContext context) {
22 | return Stack(
23 | alignment: FractionalOffset.center,
24 | children: [
25 | Positioned.fill(
26 | child: AspectRatio(
27 | aspectRatio: widget.cameraController.value.aspectRatio,
28 | child: CameraPreview(widget.cameraController)),
29 | ),
30 | Positioned(
31 | bottom: 5,
32 | child: FloatingActionButton(
33 | heroTag: "camera",
34 | backgroundColor: Colors.white,
35 | onPressed: () async {
36 | //you can give limit that's user can take how many photo
37 | if (widget.imageFiles.length != 10) {
38 | //take a photo
39 | var videoFile = await widget.cameraController.takePicture();
40 | File file = File(videoFile.path);
41 | //add photo into files list
42 | widget.imageFiles.add(file);
43 | }
44 | },
45 | child: const Icon(
46 | Icons.camera_alt,
47 | color: Colors.black,
48 | ),
49 | )),
50 | _confirmButton(),
51 | _rejectButton(),
52 | Positioned(
53 | bottom: 80,
54 | child: SizedBox(
55 | height: 80,
56 | width: context.width,
57 | child: ListView.builder(
58 | scrollDirection: Axis.horizontal,
59 | itemBuilder: (context, index) {
60 | return Container(
61 | margin: const EdgeInsets.symmetric(horizontal: 2.0),
62 | decoration: BoxDecoration(
63 | border: Border.all(width: 2.0, color: Colors.white)),
64 | child: index >= widget.imageFiles.length
65 | ? Container(color: Colors.white, width: 100)
66 | : Stack(
67 | children: [
68 | Image.file(
69 | widget.imageFiles[index],
70 | fit: BoxFit.cover,
71 | height: 100,
72 | width: 100,
73 | ),
74 | Positioned(
75 | top: 2.5,
76 | right: 2.5,
77 | child: Container(
78 | height: 20,
79 | width: 20,
80 | decoration: const BoxDecoration(
81 | color: Colors.white,
82 | shape: BoxShape.circle),
83 | child: GestureDetector(
84 | onTap: () {
85 | setState(() {
86 | widget.imageFiles.removeAt(index);
87 | });
88 | },
89 | child: const Icon(Icons.close,
90 | size: 12, color: Colors.black),
91 | ),
92 | ),
93 | ),
94 | ],
95 | ),
96 | );
97 | },
98 | itemCount: 10,
99 | ),
100 | )),
101 | ],
102 | );
103 | }
104 |
105 | Positioned _rejectButton() {
106 | return Positioned(
107 | bottom: 5,
108 | left: 5,
109 | child: FloatingActionButton(
110 | heroTag: "close",
111 | backgroundColor: Colors.black,
112 | onPressed: () async {
113 | Get.toNamed(Routes.INITIAL);
114 | },
115 | child: const Icon(
116 | Icons.close,
117 | color: Colors.white,
118 | ),
119 | ),
120 | );
121 | }
122 |
123 | Positioned _confirmButton() {
124 | return Positioned(
125 | bottom: 5,
126 | right: 5,
127 | child: FloatingActionButton(
128 | heroTag: "confirm",
129 | backgroundColor: Colors.black,
130 | onPressed: () async {
131 | Get.toNamed(Routes.LIST);
132 | },
133 | child: const Icon(
134 | Icons.check,
135 | color: Colors.white,
136 | ),
137 | ));
138 | }
139 | }
140 |
--------------------------------------------------------------------------------
/pubspec.lock:
--------------------------------------------------------------------------------
1 | # Generated by pub
2 | # See https://dart.dev/tools/pub/glossary#lockfile
3 | packages:
4 | archive:
5 | dependency: transitive
6 | description:
7 | name: archive
8 | url: "https://pub.dartlang.org"
9 | source: hosted
10 | version: "3.2.1"
11 | args:
12 | dependency: transitive
13 | description:
14 | name: args
15 | url: "https://pub.dartlang.org"
16 | source: hosted
17 | version: "2.3.0"
18 | async:
19 | dependency: transitive
20 | description:
21 | name: async
22 | url: "https://pub.dartlang.org"
23 | source: hosted
24 | version: "2.8.2"
25 | boolean_selector:
26 | dependency: transitive
27 | description:
28 | name: boolean_selector
29 | url: "https://pub.dartlang.org"
30 | source: hosted
31 | version: "2.1.0"
32 | camera:
33 | dependency: "direct main"
34 | description:
35 | name: camera
36 | url: "https://pub.dartlang.org"
37 | source: hosted
38 | version: "0.9.4+14"
39 | camera_platform_interface:
40 | dependency: transitive
41 | description:
42 | name: camera_platform_interface
43 | url: "https://pub.dartlang.org"
44 | source: hosted
45 | version: "2.1.5"
46 | camera_web:
47 | dependency: transitive
48 | description:
49 | name: camera_web
50 | url: "https://pub.dartlang.org"
51 | source: hosted
52 | version: "0.2.1+3"
53 | characters:
54 | dependency: transitive
55 | description:
56 | name: characters
57 | url: "https://pub.dartlang.org"
58 | source: hosted
59 | version: "1.2.0"
60 | charcode:
61 | dependency: transitive
62 | description:
63 | name: charcode
64 | url: "https://pub.dartlang.org"
65 | source: hosted
66 | version: "1.3.1"
67 | clock:
68 | dependency: transitive
69 | description:
70 | name: clock
71 | url: "https://pub.dartlang.org"
72 | source: hosted
73 | version: "1.1.0"
74 | collection:
75 | dependency: transitive
76 | description:
77 | name: collection
78 | url: "https://pub.dartlang.org"
79 | source: hosted
80 | version: "1.15.0"
81 | cross_file:
82 | dependency: transitive
83 | description:
84 | name: cross_file
85 | url: "https://pub.dartlang.org"
86 | source: hosted
87 | version: "0.3.2"
88 | crypto:
89 | dependency: transitive
90 | description:
91 | name: crypto
92 | url: "https://pub.dartlang.org"
93 | source: hosted
94 | version: "3.0.1"
95 | cupertino_icons:
96 | dependency: "direct main"
97 | description:
98 | name: cupertino_icons
99 | url: "https://pub.dartlang.org"
100 | source: hosted
101 | version: "1.0.4"
102 | dio:
103 | dependency: "direct main"
104 | description:
105 | name: dio
106 | url: "https://pub.dartlang.org"
107 | source: hosted
108 | version: "4.0.4"
109 | fake_async:
110 | dependency: transitive
111 | description:
112 | name: fake_async
113 | url: "https://pub.dartlang.org"
114 | source: hosted
115 | version: "1.2.0"
116 | ffi:
117 | dependency: transitive
118 | description:
119 | name: ffi
120 | url: "https://pub.dartlang.org"
121 | source: hosted
122 | version: "1.1.2"
123 | file:
124 | dependency: transitive
125 | description:
126 | name: file
127 | url: "https://pub.dartlang.org"
128 | source: hosted
129 | version: "6.1.2"
130 | flutter:
131 | dependency: "direct main"
132 | description: flutter
133 | source: sdk
134 | version: "0.0.0"
135 | flutter_launcher_icons:
136 | dependency: "direct main"
137 | description:
138 | name: flutter_launcher_icons
139 | url: "https://pub.dartlang.org"
140 | source: hosted
141 | version: "0.9.2"
142 | flutter_lints:
143 | dependency: "direct dev"
144 | description:
145 | name: flutter_lints
146 | url: "https://pub.dartlang.org"
147 | source: hosted
148 | version: "1.0.4"
149 | flutter_plugin_android_lifecycle:
150 | dependency: transitive
151 | description:
152 | name: flutter_plugin_android_lifecycle
153 | url: "https://pub.dartlang.org"
154 | source: hosted
155 | version: "2.0.5"
156 | flutter_secure_storage:
157 | dependency: "direct main"
158 | description:
159 | name: flutter_secure_storage
160 | url: "https://pub.dartlang.org"
161 | source: hosted
162 | version: "4.2.1"
163 | flutter_test:
164 | dependency: "direct dev"
165 | description: flutter
166 | source: sdk
167 | version: "0.0.0"
168 | flutter_web_plugins:
169 | dependency: transitive
170 | description: flutter
171 | source: sdk
172 | version: "0.0.0"
173 | get:
174 | dependency: "direct main"
175 | description:
176 | name: get
177 | url: "https://pub.dartlang.org"
178 | source: hosted
179 | version: "4.6.1"
180 | hive:
181 | dependency: "direct main"
182 | description:
183 | name: hive
184 | url: "https://pub.dartlang.org"
185 | source: hosted
186 | version: "2.0.6"
187 | hive_flutter:
188 | dependency: "direct main"
189 | description:
190 | name: hive_flutter
191 | url: "https://pub.dartlang.org"
192 | source: hosted
193 | version: "1.1.0"
194 | http:
195 | dependency: "direct main"
196 | description:
197 | name: http
198 | url: "https://pub.dartlang.org"
199 | source: hosted
200 | version: "0.13.4"
201 | http_parser:
202 | dependency: transitive
203 | description:
204 | name: http_parser
205 | url: "https://pub.dartlang.org"
206 | source: hosted
207 | version: "4.0.0"
208 | image:
209 | dependency: transitive
210 | description:
211 | name: image
212 | url: "https://pub.dartlang.org"
213 | source: hosted
214 | version: "3.1.3"
215 | js:
216 | dependency: transitive
217 | description:
218 | name: js
219 | url: "https://pub.dartlang.org"
220 | source: hosted
221 | version: "0.6.3"
222 | lints:
223 | dependency: transitive
224 | description:
225 | name: lints
226 | url: "https://pub.dartlang.org"
227 | source: hosted
228 | version: "1.0.1"
229 | matcher:
230 | dependency: transitive
231 | description:
232 | name: matcher
233 | url: "https://pub.dartlang.org"
234 | source: hosted
235 | version: "0.12.11"
236 | meta:
237 | dependency: transitive
238 | description:
239 | name: meta
240 | url: "https://pub.dartlang.org"
241 | source: hosted
242 | version: "1.7.0"
243 | path:
244 | dependency: transitive
245 | description:
246 | name: path
247 | url: "https://pub.dartlang.org"
248 | source: hosted
249 | version: "1.8.0"
250 | path_provider:
251 | dependency: transitive
252 | description:
253 | name: path_provider
254 | url: "https://pub.dartlang.org"
255 | source: hosted
256 | version: "2.0.9"
257 | path_provider_android:
258 | dependency: transitive
259 | description:
260 | name: path_provider_android
261 | url: "https://pub.dartlang.org"
262 | source: hosted
263 | version: "2.0.11"
264 | path_provider_ios:
265 | dependency: transitive
266 | description:
267 | name: path_provider_ios
268 | url: "https://pub.dartlang.org"
269 | source: hosted
270 | version: "2.0.7"
271 | path_provider_linux:
272 | dependency: transitive
273 | description:
274 | name: path_provider_linux
275 | url: "https://pub.dartlang.org"
276 | source: hosted
277 | version: "2.1.5"
278 | path_provider_macos:
279 | dependency: transitive
280 | description:
281 | name: path_provider_macos
282 | url: "https://pub.dartlang.org"
283 | source: hosted
284 | version: "2.0.5"
285 | path_provider_platform_interface:
286 | dependency: transitive
287 | description:
288 | name: path_provider_platform_interface
289 | url: "https://pub.dartlang.org"
290 | source: hosted
291 | version: "2.0.3"
292 | path_provider_windows:
293 | dependency: transitive
294 | description:
295 | name: path_provider_windows
296 | url: "https://pub.dartlang.org"
297 | source: hosted
298 | version: "2.0.5"
299 | petitparser:
300 | dependency: transitive
301 | description:
302 | name: petitparser
303 | url: "https://pub.dartlang.org"
304 | source: hosted
305 | version: "4.4.0"
306 | platform:
307 | dependency: transitive
308 | description:
309 | name: platform
310 | url: "https://pub.dartlang.org"
311 | source: hosted
312 | version: "3.1.0"
313 | plugin_platform_interface:
314 | dependency: transitive
315 | description:
316 | name: plugin_platform_interface
317 | url: "https://pub.dartlang.org"
318 | source: hosted
319 | version: "2.1.2"
320 | process:
321 | dependency: transitive
322 | description:
323 | name: process
324 | url: "https://pub.dartlang.org"
325 | source: hosted
326 | version: "4.2.4"
327 | quiver:
328 | dependency: transitive
329 | description:
330 | name: quiver
331 | url: "https://pub.dartlang.org"
332 | source: hosted
333 | version: "3.0.1+1"
334 | shared_preferences:
335 | dependency: "direct main"
336 | description:
337 | name: shared_preferences
338 | url: "https://pub.dartlang.org"
339 | source: hosted
340 | version: "2.0.13"
341 | shared_preferences_android:
342 | dependency: transitive
343 | description:
344 | name: shared_preferences_android
345 | url: "https://pub.dartlang.org"
346 | source: hosted
347 | version: "2.0.11"
348 | shared_preferences_ios:
349 | dependency: transitive
350 | description:
351 | name: shared_preferences_ios
352 | url: "https://pub.dartlang.org"
353 | source: hosted
354 | version: "2.1.0"
355 | shared_preferences_linux:
356 | dependency: transitive
357 | description:
358 | name: shared_preferences_linux
359 | url: "https://pub.dartlang.org"
360 | source: hosted
361 | version: "2.1.0"
362 | shared_preferences_macos:
363 | dependency: transitive
364 | description:
365 | name: shared_preferences_macos
366 | url: "https://pub.dartlang.org"
367 | source: hosted
368 | version: "2.0.3"
369 | shared_preferences_platform_interface:
370 | dependency: transitive
371 | description:
372 | name: shared_preferences_platform_interface
373 | url: "https://pub.dartlang.org"
374 | source: hosted
375 | version: "2.0.0"
376 | shared_preferences_web:
377 | dependency: transitive
378 | description:
379 | name: shared_preferences_web
380 | url: "https://pub.dartlang.org"
381 | source: hosted
382 | version: "2.0.3"
383 | shared_preferences_windows:
384 | dependency: transitive
385 | description:
386 | name: shared_preferences_windows
387 | url: "https://pub.dartlang.org"
388 | source: hosted
389 | version: "2.1.0"
390 | sky_engine:
391 | dependency: transitive
392 | description: flutter
393 | source: sdk
394 | version: "0.0.99"
395 | source_span:
396 | dependency: transitive
397 | description:
398 | name: source_span
399 | url: "https://pub.dartlang.org"
400 | source: hosted
401 | version: "1.8.1"
402 | stack_trace:
403 | dependency: transitive
404 | description:
405 | name: stack_trace
406 | url: "https://pub.dartlang.org"
407 | source: hosted
408 | version: "1.10.0"
409 | stream_channel:
410 | dependency: transitive
411 | description:
412 | name: stream_channel
413 | url: "https://pub.dartlang.org"
414 | source: hosted
415 | version: "2.1.0"
416 | stream_transform:
417 | dependency: transitive
418 | description:
419 | name: stream_transform
420 | url: "https://pub.dartlang.org"
421 | source: hosted
422 | version: "2.0.0"
423 | string_scanner:
424 | dependency: transitive
425 | description:
426 | name: string_scanner
427 | url: "https://pub.dartlang.org"
428 | source: hosted
429 | version: "1.1.0"
430 | term_glyph:
431 | dependency: transitive
432 | description:
433 | name: term_glyph
434 | url: "https://pub.dartlang.org"
435 | source: hosted
436 | version: "1.2.0"
437 | test_api:
438 | dependency: transitive
439 | description:
440 | name: test_api
441 | url: "https://pub.dartlang.org"
442 | source: hosted
443 | version: "0.4.3"
444 | typed_data:
445 | dependency: transitive
446 | description:
447 | name: typed_data
448 | url: "https://pub.dartlang.org"
449 | source: hosted
450 | version: "1.3.0"
451 | vector_math:
452 | dependency: transitive
453 | description:
454 | name: vector_math
455 | url: "https://pub.dartlang.org"
456 | source: hosted
457 | version: "2.1.1"
458 | win32:
459 | dependency: transitive
460 | description:
461 | name: win32
462 | url: "https://pub.dartlang.org"
463 | source: hosted
464 | version: "2.4.1"
465 | xdg_directories:
466 | dependency: transitive
467 | description:
468 | name: xdg_directories
469 | url: "https://pub.dartlang.org"
470 | source: hosted
471 | version: "0.2.0+1"
472 | xml:
473 | dependency: transitive
474 | description:
475 | name: xml
476 | url: "https://pub.dartlang.org"
477 | source: hosted
478 | version: "5.3.1"
479 | yaml:
480 | dependency: transitive
481 | description:
482 | name: yaml
483 | url: "https://pub.dartlang.org"
484 | source: hosted
485 | version: "3.1.0"
486 | sdks:
487 | dart: ">=2.15.1 <3.0.0"
488 | flutter: ">=2.8.0"
489 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 50;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
11 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
12 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
13 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
14 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
15 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
16 | /* End PBXBuildFile section */
17 |
18 | /* Begin PBXCopyFilesBuildPhase section */
19 | 9705A1C41CF9048500538489 /* Embed Frameworks */ = {
20 | isa = PBXCopyFilesBuildPhase;
21 | buildActionMask = 2147483647;
22 | dstPath = "";
23 | dstSubfolderSpec = 10;
24 | files = (
25 | );
26 | name = "Embed Frameworks";
27 | runOnlyForDeploymentPostprocessing = 0;
28 | };
29 | /* End PBXCopyFilesBuildPhase section */
30 |
31 | /* Begin PBXFileReference section */
32 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; };
33 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; };
34 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; };
35 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; };
36 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
37 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; };
38 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; };
39 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; };
40 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
41 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
42 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
43 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
44 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
45 | /* End PBXFileReference section */
46 |
47 | /* Begin PBXFrameworksBuildPhase section */
48 | 97C146EB1CF9000F007C117D /* Frameworks */ = {
49 | isa = PBXFrameworksBuildPhase;
50 | buildActionMask = 2147483647;
51 | files = (
52 | );
53 | runOnlyForDeploymentPostprocessing = 0;
54 | };
55 | /* End PBXFrameworksBuildPhase section */
56 |
57 | /* Begin PBXGroup section */
58 | 9740EEB11CF90186004384FC /* Flutter */ = {
59 | isa = PBXGroup;
60 | children = (
61 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
62 | 9740EEB21CF90195004384FC /* Debug.xcconfig */,
63 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
64 | 9740EEB31CF90195004384FC /* Generated.xcconfig */,
65 | );
66 | name = Flutter;
67 | sourceTree = "";
68 | };
69 | 97C146E51CF9000F007C117D = {
70 | isa = PBXGroup;
71 | children = (
72 | 9740EEB11CF90186004384FC /* Flutter */,
73 | 97C146F01CF9000F007C117D /* Runner */,
74 | 97C146EF1CF9000F007C117D /* Products */,
75 | );
76 | sourceTree = "";
77 | };
78 | 97C146EF1CF9000F007C117D /* Products */ = {
79 | isa = PBXGroup;
80 | children = (
81 | 97C146EE1CF9000F007C117D /* Runner.app */,
82 | );
83 | name = Products;
84 | sourceTree = "";
85 | };
86 | 97C146F01CF9000F007C117D /* Runner */ = {
87 | isa = PBXGroup;
88 | children = (
89 | 97C146FA1CF9000F007C117D /* Main.storyboard */,
90 | 97C146FD1CF9000F007C117D /* Assets.xcassets */,
91 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
92 | 97C147021CF9000F007C117D /* Info.plist */,
93 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
94 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
95 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
96 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
97 | );
98 | path = Runner;
99 | sourceTree = "";
100 | };
101 | /* End PBXGroup section */
102 |
103 | /* Begin PBXNativeTarget section */
104 | 97C146ED1CF9000F007C117D /* Runner */ = {
105 | isa = PBXNativeTarget;
106 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
107 | buildPhases = (
108 | 9740EEB61CF901F6004384FC /* Run Script */,
109 | 97C146EA1CF9000F007C117D /* Sources */,
110 | 97C146EB1CF9000F007C117D /* Frameworks */,
111 | 97C146EC1CF9000F007C117D /* Resources */,
112 | 9705A1C41CF9048500538489 /* Embed Frameworks */,
113 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
114 | );
115 | buildRules = (
116 | );
117 | dependencies = (
118 | );
119 | name = Runner;
120 | productName = Runner;
121 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
122 | productType = "com.apple.product-type.application";
123 | };
124 | /* End PBXNativeTarget section */
125 |
126 | /* Begin PBXProject section */
127 | 97C146E61CF9000F007C117D /* Project object */ = {
128 | isa = PBXProject;
129 | attributes = {
130 | LastUpgradeCheck = 1300;
131 | ORGANIZATIONNAME = "";
132 | TargetAttributes = {
133 | 97C146ED1CF9000F007C117D = {
134 | CreatedOnToolsVersion = 7.3.1;
135 | LastSwiftMigration = 1100;
136 | };
137 | };
138 | };
139 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
140 | compatibilityVersion = "Xcode 9.3";
141 | developmentRegion = en;
142 | hasScannedForEncodings = 0;
143 | knownRegions = (
144 | en,
145 | Base,
146 | );
147 | mainGroup = 97C146E51CF9000F007C117D;
148 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
149 | projectDirPath = "";
150 | projectRoot = "";
151 | targets = (
152 | 97C146ED1CF9000F007C117D /* Runner */,
153 | );
154 | };
155 | /* End PBXProject section */
156 |
157 | /* Begin PBXResourcesBuildPhase section */
158 | 97C146EC1CF9000F007C117D /* Resources */ = {
159 | isa = PBXResourcesBuildPhase;
160 | buildActionMask = 2147483647;
161 | files = (
162 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
163 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
164 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
165 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
166 | );
167 | runOnlyForDeploymentPostprocessing = 0;
168 | };
169 | /* End PBXResourcesBuildPhase section */
170 |
171 | /* Begin PBXShellScriptBuildPhase section */
172 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
173 | isa = PBXShellScriptBuildPhase;
174 | buildActionMask = 2147483647;
175 | files = (
176 | );
177 | inputPaths = (
178 | );
179 | name = "Thin Binary";
180 | outputPaths = (
181 | );
182 | runOnlyForDeploymentPostprocessing = 0;
183 | shellPath = /bin/sh;
184 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
185 | };
186 | 9740EEB61CF901F6004384FC /* Run Script */ = {
187 | isa = PBXShellScriptBuildPhase;
188 | buildActionMask = 2147483647;
189 | files = (
190 | );
191 | inputPaths = (
192 | );
193 | name = "Run Script";
194 | outputPaths = (
195 | );
196 | runOnlyForDeploymentPostprocessing = 0;
197 | shellPath = /bin/sh;
198 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
199 | };
200 | /* End PBXShellScriptBuildPhase section */
201 |
202 | /* Begin PBXSourcesBuildPhase section */
203 | 97C146EA1CF9000F007C117D /* Sources */ = {
204 | isa = PBXSourcesBuildPhase;
205 | buildActionMask = 2147483647;
206 | files = (
207 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
208 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
209 | );
210 | runOnlyForDeploymentPostprocessing = 0;
211 | };
212 | /* End PBXSourcesBuildPhase section */
213 |
214 | /* Begin PBXVariantGroup section */
215 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = {
216 | isa = PBXVariantGroup;
217 | children = (
218 | 97C146FB1CF9000F007C117D /* Base */,
219 | );
220 | name = Main.storyboard;
221 | sourceTree = "";
222 | };
223 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
224 | isa = PBXVariantGroup;
225 | children = (
226 | 97C147001CF9000F007C117D /* Base */,
227 | );
228 | name = LaunchScreen.storyboard;
229 | sourceTree = "";
230 | };
231 | /* End PBXVariantGroup section */
232 |
233 | /* Begin XCBuildConfiguration section */
234 | 249021D3217E4FDB00AE95B9 /* Profile */ = {
235 | isa = XCBuildConfiguration;
236 | buildSettings = {
237 | ALWAYS_SEARCH_USER_PATHS = NO;
238 | CLANG_ANALYZER_NONNULL = YES;
239 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
240 | CLANG_CXX_LIBRARY = "libc++";
241 | CLANG_ENABLE_MODULES = YES;
242 | CLANG_ENABLE_OBJC_ARC = YES;
243 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
244 | CLANG_WARN_BOOL_CONVERSION = YES;
245 | CLANG_WARN_COMMA = YES;
246 | CLANG_WARN_CONSTANT_CONVERSION = YES;
247 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
248 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
249 | CLANG_WARN_EMPTY_BODY = YES;
250 | CLANG_WARN_ENUM_CONVERSION = YES;
251 | CLANG_WARN_INFINITE_RECURSION = YES;
252 | CLANG_WARN_INT_CONVERSION = YES;
253 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
254 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
255 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
256 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
257 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
258 | CLANG_WARN_STRICT_PROTOTYPES = YES;
259 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
260 | CLANG_WARN_UNREACHABLE_CODE = YES;
261 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
262 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
263 | COPY_PHASE_STRIP = NO;
264 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
265 | ENABLE_NS_ASSERTIONS = NO;
266 | ENABLE_STRICT_OBJC_MSGSEND = YES;
267 | GCC_C_LANGUAGE_STANDARD = gnu99;
268 | GCC_NO_COMMON_BLOCKS = YES;
269 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
270 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
271 | GCC_WARN_UNDECLARED_SELECTOR = YES;
272 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
273 | GCC_WARN_UNUSED_FUNCTION = YES;
274 | GCC_WARN_UNUSED_VARIABLE = YES;
275 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
276 | MTL_ENABLE_DEBUG_INFO = NO;
277 | SDKROOT = iphoneos;
278 | SUPPORTED_PLATFORMS = iphoneos;
279 | TARGETED_DEVICE_FAMILY = "1,2";
280 | VALIDATE_PRODUCT = YES;
281 | };
282 | name = Profile;
283 | };
284 | 249021D4217E4FDB00AE95B9 /* Profile */ = {
285 | isa = XCBuildConfiguration;
286 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
287 | buildSettings = {
288 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
289 | CLANG_ENABLE_MODULES = YES;
290 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
291 | ENABLE_BITCODE = NO;
292 | INFOPLIST_FILE = Runner/Info.plist;
293 | LD_RUNPATH_SEARCH_PATHS = (
294 | "$(inherited)",
295 | "@executable_path/Frameworks",
296 | );
297 | PRODUCT_BUNDLE_IDENTIFIER = com.example.customCameraPreview;
298 | PRODUCT_NAME = "$(TARGET_NAME)";
299 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
300 | SWIFT_VERSION = 5.0;
301 | VERSIONING_SYSTEM = "apple-generic";
302 | };
303 | name = Profile;
304 | };
305 | 97C147031CF9000F007C117D /* Debug */ = {
306 | isa = XCBuildConfiguration;
307 | buildSettings = {
308 | ALWAYS_SEARCH_USER_PATHS = NO;
309 | CLANG_ANALYZER_NONNULL = YES;
310 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
311 | CLANG_CXX_LIBRARY = "libc++";
312 | CLANG_ENABLE_MODULES = YES;
313 | CLANG_ENABLE_OBJC_ARC = YES;
314 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
315 | CLANG_WARN_BOOL_CONVERSION = YES;
316 | CLANG_WARN_COMMA = YES;
317 | CLANG_WARN_CONSTANT_CONVERSION = YES;
318 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
319 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
320 | CLANG_WARN_EMPTY_BODY = YES;
321 | CLANG_WARN_ENUM_CONVERSION = YES;
322 | CLANG_WARN_INFINITE_RECURSION = YES;
323 | CLANG_WARN_INT_CONVERSION = YES;
324 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
325 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
326 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
327 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
328 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
329 | CLANG_WARN_STRICT_PROTOTYPES = YES;
330 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
331 | CLANG_WARN_UNREACHABLE_CODE = YES;
332 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
333 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
334 | COPY_PHASE_STRIP = NO;
335 | DEBUG_INFORMATION_FORMAT = dwarf;
336 | ENABLE_STRICT_OBJC_MSGSEND = YES;
337 | ENABLE_TESTABILITY = YES;
338 | GCC_C_LANGUAGE_STANDARD = gnu99;
339 | GCC_DYNAMIC_NO_PIC = NO;
340 | GCC_NO_COMMON_BLOCKS = YES;
341 | GCC_OPTIMIZATION_LEVEL = 0;
342 | GCC_PREPROCESSOR_DEFINITIONS = (
343 | "DEBUG=1",
344 | "$(inherited)",
345 | );
346 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
347 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
348 | GCC_WARN_UNDECLARED_SELECTOR = YES;
349 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
350 | GCC_WARN_UNUSED_FUNCTION = YES;
351 | GCC_WARN_UNUSED_VARIABLE = YES;
352 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
353 | MTL_ENABLE_DEBUG_INFO = YES;
354 | ONLY_ACTIVE_ARCH = YES;
355 | SDKROOT = iphoneos;
356 | TARGETED_DEVICE_FAMILY = "1,2";
357 | };
358 | name = Debug;
359 | };
360 | 97C147041CF9000F007C117D /* Release */ = {
361 | isa = XCBuildConfiguration;
362 | buildSettings = {
363 | ALWAYS_SEARCH_USER_PATHS = NO;
364 | CLANG_ANALYZER_NONNULL = YES;
365 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
366 | CLANG_CXX_LIBRARY = "libc++";
367 | CLANG_ENABLE_MODULES = YES;
368 | CLANG_ENABLE_OBJC_ARC = YES;
369 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
370 | CLANG_WARN_BOOL_CONVERSION = YES;
371 | CLANG_WARN_COMMA = YES;
372 | CLANG_WARN_CONSTANT_CONVERSION = YES;
373 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
374 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
375 | CLANG_WARN_EMPTY_BODY = YES;
376 | CLANG_WARN_ENUM_CONVERSION = YES;
377 | CLANG_WARN_INFINITE_RECURSION = YES;
378 | CLANG_WARN_INT_CONVERSION = YES;
379 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
380 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
381 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
382 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
383 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
384 | CLANG_WARN_STRICT_PROTOTYPES = YES;
385 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
386 | CLANG_WARN_UNREACHABLE_CODE = YES;
387 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
388 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
389 | COPY_PHASE_STRIP = NO;
390 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
391 | ENABLE_NS_ASSERTIONS = NO;
392 | ENABLE_STRICT_OBJC_MSGSEND = YES;
393 | GCC_C_LANGUAGE_STANDARD = gnu99;
394 | GCC_NO_COMMON_BLOCKS = YES;
395 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
396 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
397 | GCC_WARN_UNDECLARED_SELECTOR = YES;
398 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
399 | GCC_WARN_UNUSED_FUNCTION = YES;
400 | GCC_WARN_UNUSED_VARIABLE = YES;
401 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
402 | MTL_ENABLE_DEBUG_INFO = NO;
403 | SDKROOT = iphoneos;
404 | SUPPORTED_PLATFORMS = iphoneos;
405 | SWIFT_COMPILATION_MODE = wholemodule;
406 | SWIFT_OPTIMIZATION_LEVEL = "-O";
407 | TARGETED_DEVICE_FAMILY = "1,2";
408 | VALIDATE_PRODUCT = YES;
409 | };
410 | name = Release;
411 | };
412 | 97C147061CF9000F007C117D /* Debug */ = {
413 | isa = XCBuildConfiguration;
414 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
415 | buildSettings = {
416 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
417 | CLANG_ENABLE_MODULES = YES;
418 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
419 | ENABLE_BITCODE = NO;
420 | INFOPLIST_FILE = Runner/Info.plist;
421 | LD_RUNPATH_SEARCH_PATHS = (
422 | "$(inherited)",
423 | "@executable_path/Frameworks",
424 | );
425 | PRODUCT_BUNDLE_IDENTIFIER = com.example.customCameraPreview;
426 | PRODUCT_NAME = "$(TARGET_NAME)";
427 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
428 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
429 | SWIFT_VERSION = 5.0;
430 | VERSIONING_SYSTEM = "apple-generic";
431 | };
432 | name = Debug;
433 | };
434 | 97C147071CF9000F007C117D /* Release */ = {
435 | isa = XCBuildConfiguration;
436 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
437 | buildSettings = {
438 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
439 | CLANG_ENABLE_MODULES = YES;
440 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
441 | ENABLE_BITCODE = NO;
442 | INFOPLIST_FILE = Runner/Info.plist;
443 | LD_RUNPATH_SEARCH_PATHS = (
444 | "$(inherited)",
445 | "@executable_path/Frameworks",
446 | );
447 | PRODUCT_BUNDLE_IDENTIFIER = com.example.customCameraPreview;
448 | PRODUCT_NAME = "$(TARGET_NAME)";
449 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
450 | SWIFT_VERSION = 5.0;
451 | VERSIONING_SYSTEM = "apple-generic";
452 | };
453 | name = Release;
454 | };
455 | /* End XCBuildConfiguration section */
456 |
457 | /* Begin XCConfigurationList section */
458 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
459 | isa = XCConfigurationList;
460 | buildConfigurations = (
461 | 97C147031CF9000F007C117D /* Debug */,
462 | 97C147041CF9000F007C117D /* Release */,
463 | 249021D3217E4FDB00AE95B9 /* Profile */,
464 | );
465 | defaultConfigurationIsVisible = 0;
466 | defaultConfigurationName = Release;
467 | };
468 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
469 | isa = XCConfigurationList;
470 | buildConfigurations = (
471 | 97C147061CF9000F007C117D /* Debug */,
472 | 97C147071CF9000F007C117D /* Release */,
473 | 249021D4217E4FDB00AE95B9 /* Profile */,
474 | );
475 | defaultConfigurationIsVisible = 0;
476 | defaultConfigurationName = Release;
477 | };
478 | /* End XCConfigurationList section */
479 | };
480 | rootObject = 97C146E61CF9000F007C117D /* Project object */;
481 | }
--------------------------------------------------------------------------------