David PHAM-VAN

Add full example project

Showing 58 changed files with 1239 additions and 68 deletions
@@ -28,34 +28,3 @@ printing/android/local.properties @@ -28,34 +28,3 @@ printing/android/local.properties
28 printing/*.log 28 printing/*.log
29 printing/ios/Flutter 29 printing/ios/Flutter
30 printing/ios/Runner 30 printing/ios/Runner
31 -printing/example/android/app/src/main/res  
32 -printing/example/android/build.gradle  
33 -printing/example/android/gradle.properties  
34 -printing/example/android/settings.gradle  
35 -printing/example/android/app/build.gradle  
36 -printing/example/android/app/src/main/AndroidManifest.xml  
37 -printing/example/android/app/src/main/java/com/example/example/MainActivity.java  
38 -printing/example/android/gradle  
39 -printing/example/android/local.properties  
40 -printing/example/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java  
41 -printing/example/android/app/src/debug/AndroidManifest.xml  
42 -printing/example/android/app/src/profile/AndroidManifest.xml  
43 -printing/example/ios/Podfile  
44 -printing/example/ios/Flutter/AppFrameworkInfo.plist  
45 -printing/example/ios/Flutter/Debug.xcconfig  
46 -printing/example/ios/Flutter/Release.xcconfig  
47 -printing/example/ios/Runner/AppDelegate.h  
48 -printing/example/ios/Runner/AppDelegate.m  
49 -printing/example/ios/Runner/Info.plist  
50 -printing/example/ios/Runner/main.m  
51 -printing/example/ios/Runner/Assets.xcassets  
52 -printing/example/ios/Runner/Base.lproj  
53 -printing/example/ios/Runner.xcodeproj/project.pbxproj  
54 -printing/example/ios/Runner.xcodeproj/project.xcworkspace  
55 -printing/example/ios/Runner.xcodeproj/xcshareddata  
56 -printing/example/ios/Runner.xcworkspace  
57 -printing/example/ios/Flutter/Generated.xcconfig  
58 -printing/example/ios/Runner/GeneratedPluginRegistrant.h  
59 -printing/example/ios/Runner/GeneratedPluginRegistrant.m  
60 -printing/example/.metadata  
61 -printing/example/ios/Podfile.lock  
@@ -38,7 +38,7 @@ pdf/.dart_tool: @@ -38,7 +38,7 @@ pdf/.dart_tool:
38 test: pdf/.dart_tool $(FONTS) 38 test: pdf/.dart_tool $(FONTS)
39 cd pdf; for EXAMPLE in $(shell cd pdf; find example -name '*.dart'); do dart $$EXAMPLE; done 39 cd pdf; for EXAMPLE in $(shell cd pdf; find example -name '*.dart'); do dart $$EXAMPLE; done
40 cd pdf; for TEST in $(shell cd pdf; find test -name '*.dart'); do dart $$TEST; done 40 cd pdf; for TEST in $(shell cd pdf; find test -name '*.dart'); do dart $$TEST; done
41 - # cd printing; flutter test 41 + cd printing/example; flutter test
42 42
43 clean: 43 clean:
44 git clean -fdx -e .vscode 44 git clean -fdx -e .vscode
@@ -25,9 +25,8 @@ @@ -25,9 +25,8 @@
25 .packages 25 .packages
26 .pub-cache/ 26 .pub-cache/
27 .pub/ 27 .pub/
28 -build/ 28 +/build/
29 .metadata 29 .metadata
30 -test  
31 30
32 # Android related 31 # Android related
33 **/android/**/gradle-wrapper.jar 32 **/android/**/gradle-wrapper.jar
@@ -63,7 +62,9 @@ test @@ -63,7 +62,9 @@ test
63 **/ios/Flutter/flutter_assets/ 62 **/ios/Flutter/flutter_assets/
64 **/ios/ServiceDefinitions.json 63 **/ios/ServiceDefinitions.json
65 **/ios/Runner/GeneratedPluginRegistrant.* 64 **/ios/Runner/GeneratedPluginRegistrant.*
  65 +**/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
66 **/ios/Podfile.lock 66 **/ios/Podfile.lock
  67 +**/ios/Podfile
67 68
68 # Exceptions to above rules. 69 # Exceptions to above rules.
69 !**/ios/**/default.mode1v3 70 !**/ios/**/default.mode1v3
@@ -4,15 +4,8 @@ Flutter example project @@ -4,15 +4,8 @@ Flutter example project
4 4
5 ## Getting Started 5 ## Getting Started
6 6
7 -1. to generate the project files, run: 7 +1. to run the example, start a simulator and run:
8 8
9 - ```  
10 - flutter create .  
11 - ```  
12 -  
13 -2. set `minSdkVersion` to 19 in `android/app/build.gradle`  
14 -  
15 -3. to run the example, start a simulator and run:  
16 - ``` 9 + ```shell
17 flutter run 10 flutter run
18 ``` 11 ```
  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 from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
  26 +
  27 +android {
  28 + compileSdkVersion 28
  29 +
  30 + lintOptions {
  31 + disable 'InvalidPackage'
  32 + }
  33 +
  34 + defaultConfig {
  35 + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
  36 + applicationId "com.example.example"
  37 + minSdkVersion 19
  38 + targetSdkVersion 28
  39 + versionCode flutterVersionCode.toInteger()
  40 + versionName flutterVersionName
  41 + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
  42 + }
  43 +
  44 + buildTypes {
  45 + release {
  46 + // TODO: Add your own signing config for the release build.
  47 + // Signing with the debug keys for now, so `flutter run --release` works.
  48 + signingConfig signingConfigs.debug
  49 + }
  50 + }
  51 +}
  52 +
  53 +flutter {
  54 + source '../..'
  55 +}
  56 +
  57 +dependencies {
  58 + testImplementation 'junit:junit:4.12'
  59 + androidTestImplementation 'com.android.support.test:runner:1.0.2'
  60 + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
  61 +}
  1 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2 + package="com.example.example">
  3 + <!-- Flutter needs it to communicate with the running application
  4 + to allow setting breakpoints, to provide hot reload, etc.
  5 + -->
  6 + <uses-permission android:name="android.permission.INTERNET"/>
  7 +</manifest>
  1 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2 + package="com.example.example">
  3 +
  4 + <!-- io.flutter.app.FlutterApplication is an android.app.Application that
  5 + calls FlutterMain.startInitialization(this); in its onCreate method.
  6 + In most cases you can leave this as-is, but you if you want to provide
  7 + additional functionality it is fine to subclass or reimplement
  8 + FlutterApplication and put your custom class here. -->
  9 + <application
  10 + android:name="io.flutter.app.FlutterApplication"
  11 + android:label="example"
  12 + android:icon="@mipmap/ic_launcher">
  13 + <activity
  14 + android:name=".MainActivity"
  15 + android:launchMode="singleTop"
  16 + android:theme="@style/LaunchTheme"
  17 + android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
  18 + android:hardwareAccelerated="true"
  19 + android:windowSoftInputMode="adjustResize">
  20 + <!-- This keeps the window background of the activity showing
  21 + until Flutter renders its first frame. It can be removed if
  22 + there is no splash screen (such as the default splash screen
  23 + defined in @style/LaunchTheme). -->
  24 + <meta-data
  25 + android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
  26 + android:value="true" />
  27 + <intent-filter>
  28 + <action android:name="android.intent.action.MAIN"/>
  29 + <category android:name="android.intent.category.LAUNCHER"/>
  30 + </intent-filter>
  31 + </activity>
  32 + </application>
  33 +</manifest>
  1 +package com.example.example;
  2 +
  3 +import android.os.Bundle;
  4 +import io.flutter.app.FlutterActivity;
  5 +import io.flutter.plugins.GeneratedPluginRegistrant;
  6 +
  7 +public class MainActivity extends FlutterActivity {
  8 + @Override
  9 + protected void onCreate(Bundle savedInstanceState) {
  10 + super.onCreate(savedInstanceState);
  11 + GeneratedPluginRegistrant.registerWith(this);
  12 + }
  13 +}
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<!-- Modify this file to customize your launch splash screen -->
  3 +<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  4 + <item android:drawable="@android:color/white" />
  5 +
  6 + <!-- You can insert your own image assets here -->
  7 + <!-- <item>
  8 + <bitmap
  9 + android:gravity="center"
  10 + android:src="@mipmap/launch_image" />
  11 + </item> -->
  12 +</layer-list>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<resources>
  3 + <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
  4 + <!-- Show a splash screen on the activity. Automatically removed when
  5 + Flutter draws its first frame -->
  6 + <item name="android:windowBackground">@drawable/launch_background</item>
  7 + </style>
  8 +</resources>
  1 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2 + package="com.example.example">
  3 + <!-- Flutter needs it to communicate with the running application
  4 + to allow setting breakpoints, to provide hot reload, etc.
  5 + -->
  6 + <uses-permission android:name="android.permission.INTERNET"/>
  7 +</manifest>
  1 +buildscript {
  2 + repositories {
  3 + google()
  4 + jcenter()
  5 + }
  6 +
  7 + dependencies {
  8 + classpath 'com.android.tools.build:gradle:3.2.1'
  9 + }
  10 +}
  11 +
  12 +allprojects {
  13 + repositories {
  14 + google()
  15 + jcenter()
  16 + }
  17 +}
  18 +
  19 +rootProject.buildDir = '../build'
  20 +subprojects {
  21 + project.buildDir = "${rootProject.buildDir}/${project.name}"
  22 +}
  23 +subprojects {
  24 + project.evaluationDependsOn(':app')
  25 +}
  26 +
  27 +task clean(type: Delete) {
  28 + delete rootProject.buildDir
  29 +}
  1 +org.gradle.jvmargs=-Xmx1536M
  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-4.10.2-all.zip
  1 +include ':app'
  2 +
  3 +def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
  4 +
  5 +def plugins = new Properties()
  6 +def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
  7 +if (pluginsFile.exists()) {
  8 + pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
  9 +}
  10 +
  11 +plugins.each { name, path ->
  12 + def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
  13 + include ":$name"
  14 + project(":$name").projectDir = pluginDirectory
  15 +}
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>CFBundleDevelopmentRegion</key>
  6 + <string>en</string>
  7 + <key>CFBundleExecutable</key>
  8 + <string>App</string>
  9 + <key>CFBundleIdentifier</key>
  10 + <string>io.flutter.flutter.app</string>
  11 + <key>CFBundleInfoDictionaryVersion</key>
  12 + <string>6.0</string>
  13 + <key>CFBundleName</key>
  14 + <string>App</string>
  15 + <key>CFBundlePackageType</key>
  16 + <string>FMWK</string>
  17 + <key>CFBundleShortVersionString</key>
  18 + <string>1.0</string>
  19 + <key>CFBundleSignature</key>
  20 + <string>????</string>
  21 + <key>CFBundleVersion</key>
  22 + <string>1.0</string>
  23 + <key>MinimumOSVersion</key>
  24 + <string>8.0</string>
  25 +</dict>
  26 +</plist>
  1 +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
  2 +#include "Generated.xcconfig"
  1 +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
  2 +#include "Generated.xcconfig"
  1 +// !$*UTF8*$!
  2 +{
  3 + archiveVersion = 1;
  4 + classes = {
  5 + };
  6 + objectVersion = 46;
  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 + 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; };
  13 + 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
  14 + 669503AD9820A2FB8EB7D135 /* libPods-Runner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 438EF44EBD2180BA9FEB6DD7 /* libPods-Runner.a */; };
  15 + 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; };
  16 + 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
  17 + 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; };
  18 + 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; };
  19 + 97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; };
  20 + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
  21 + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
  22 + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
  23 +/* End PBXBuildFile section */
  24 +
  25 +/* Begin PBXCopyFilesBuildPhase section */
  26 + 9705A1C41CF9048500538489 /* Embed Frameworks */ = {
  27 + isa = PBXCopyFilesBuildPhase;
  28 + buildActionMask = 2147483647;
  29 + dstPath = "";
  30 + dstSubfolderSpec = 10;
  31 + files = (
  32 + 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */,
  33 + 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */,
  34 + );
  35 + name = "Embed Frameworks";
  36 + runOnlyForDeploymentPostprocessing = 0;
  37 + };
  38 +/* End PBXCopyFilesBuildPhase section */
  39 +
  40 +/* Begin PBXFileReference section */
  41 + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
  42 + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
  43 + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
  44 + 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = "<group>"; };
  45 + 438EF44EBD2180BA9FEB6DD7 /* libPods-Runner.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Runner.a"; sourceTree = BUILT_PRODUCTS_DIR; };
  46 + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
  47 + 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
  48 + 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
  49 + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
  50 + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
  51 + 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = "<group>"; };
  52 + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
  53 + 97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
  54 + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
  55 + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
  56 + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
  57 + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
  58 +/* End PBXFileReference section */
  59 +
  60 +/* Begin PBXFrameworksBuildPhase section */
  61 + 97C146EB1CF9000F007C117D /* Frameworks */ = {
  62 + isa = PBXFrameworksBuildPhase;
  63 + buildActionMask = 2147483647;
  64 + files = (
  65 + 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */,
  66 + 3B80C3941E831B6300D905FE /* App.framework in Frameworks */,
  67 + 669503AD9820A2FB8EB7D135 /* libPods-Runner.a in Frameworks */,
  68 + );
  69 + runOnlyForDeploymentPostprocessing = 0;
  70 + };
  71 +/* End PBXFrameworksBuildPhase section */
  72 +
  73 +/* Begin PBXGroup section */
  74 + 2BF041FD892A0BC85D754ACF /* Pods */ = {
  75 + isa = PBXGroup;
  76 + children = (
  77 + );
  78 + name = Pods;
  79 + sourceTree = "<group>";
  80 + };
  81 + 9740EEB11CF90186004384FC /* Flutter */ = {
  82 + isa = PBXGroup;
  83 + children = (
  84 + 3B80C3931E831B6300D905FE /* App.framework */,
  85 + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
  86 + 9740EEBA1CF902C7004384FC /* Flutter.framework */,
  87 + 9740EEB21CF90195004384FC /* Debug.xcconfig */,
  88 + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
  89 + 9740EEB31CF90195004384FC /* Generated.xcconfig */,
  90 + );
  91 + name = Flutter;
  92 + sourceTree = "<group>";
  93 + };
  94 + 97C146E51CF9000F007C117D = {
  95 + isa = PBXGroup;
  96 + children = (
  97 + 9740EEB11CF90186004384FC /* Flutter */,
  98 + 97C146F01CF9000F007C117D /* Runner */,
  99 + 97C146EF1CF9000F007C117D /* Products */,
  100 + 2BF041FD892A0BC85D754ACF /* Pods */,
  101 + A68417D4692CD8722C677E29 /* Frameworks */,
  102 + );
  103 + sourceTree = "<group>";
  104 + };
  105 + 97C146EF1CF9000F007C117D /* Products */ = {
  106 + isa = PBXGroup;
  107 + children = (
  108 + 97C146EE1CF9000F007C117D /* Runner.app */,
  109 + );
  110 + name = Products;
  111 + sourceTree = "<group>";
  112 + };
  113 + 97C146F01CF9000F007C117D /* Runner */ = {
  114 + isa = PBXGroup;
  115 + children = (
  116 + 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */,
  117 + 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */,
  118 + 97C146FA1CF9000F007C117D /* Main.storyboard */,
  119 + 97C146FD1CF9000F007C117D /* Assets.xcassets */,
  120 + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
  121 + 97C147021CF9000F007C117D /* Info.plist */,
  122 + 97C146F11CF9000F007C117D /* Supporting Files */,
  123 + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
  124 + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
  125 + );
  126 + path = Runner;
  127 + sourceTree = "<group>";
  128 + };
  129 + 97C146F11CF9000F007C117D /* Supporting Files */ = {
  130 + isa = PBXGroup;
  131 + children = (
  132 + 97C146F21CF9000F007C117D /* main.m */,
  133 + );
  134 + name = "Supporting Files";
  135 + sourceTree = "<group>";
  136 + };
  137 + A68417D4692CD8722C677E29 /* Frameworks */ = {
  138 + isa = PBXGroup;
  139 + children = (
  140 + 438EF44EBD2180BA9FEB6DD7 /* libPods-Runner.a */,
  141 + );
  142 + name = Frameworks;
  143 + sourceTree = "<group>";
  144 + };
  145 +/* End PBXGroup section */
  146 +
  147 +/* Begin PBXNativeTarget section */
  148 + 97C146ED1CF9000F007C117D /* Runner */ = {
  149 + isa = PBXNativeTarget;
  150 + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
  151 + buildPhases = (
  152 + 4DD8C990B54E5CD60DA09BAD /* [CP] Check Pods Manifest.lock */,
  153 + 9740EEB61CF901F6004384FC /* Run Script */,
  154 + 97C146EA1CF9000F007C117D /* Sources */,
  155 + 97C146EB1CF9000F007C117D /* Frameworks */,
  156 + 97C146EC1CF9000F007C117D /* Resources */,
  157 + 9705A1C41CF9048500538489 /* Embed Frameworks */,
  158 + 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
  159 + 770C3FAAF999833574938C52 /* [CP] Embed Pods Frameworks */,
  160 + );
  161 + buildRules = (
  162 + );
  163 + dependencies = (
  164 + );
  165 + name = Runner;
  166 + productName = Runner;
  167 + productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
  168 + productType = "com.apple.product-type.application";
  169 + };
  170 +/* End PBXNativeTarget section */
  171 +
  172 +/* Begin PBXProject section */
  173 + 97C146E61CF9000F007C117D /* Project object */ = {
  174 + isa = PBXProject;
  175 + attributes = {
  176 + LastUpgradeCheck = 0910;
  177 + ORGANIZATIONNAME = "The Chromium Authors";
  178 + TargetAttributes = {
  179 + 97C146ED1CF9000F007C117D = {
  180 + CreatedOnToolsVersion = 7.3.1;
  181 + };
  182 + };
  183 + };
  184 + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
  185 + compatibilityVersion = "Xcode 3.2";
  186 + developmentRegion = English;
  187 + hasScannedForEncodings = 0;
  188 + knownRegions = (
  189 + en,
  190 + Base,
  191 + );
  192 + mainGroup = 97C146E51CF9000F007C117D;
  193 + productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
  194 + projectDirPath = "";
  195 + projectRoot = "";
  196 + targets = (
  197 + 97C146ED1CF9000F007C117D /* Runner */,
  198 + );
  199 + };
  200 +/* End PBXProject section */
  201 +
  202 +/* Begin PBXResourcesBuildPhase section */
  203 + 97C146EC1CF9000F007C117D /* Resources */ = {
  204 + isa = PBXResourcesBuildPhase;
  205 + buildActionMask = 2147483647;
  206 + files = (
  207 + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
  208 + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
  209 + 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */,
  210 + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
  211 + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
  212 + );
  213 + runOnlyForDeploymentPostprocessing = 0;
  214 + };
  215 +/* End PBXResourcesBuildPhase section */
  216 +
  217 +/* Begin PBXShellScriptBuildPhase section */
  218 + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
  219 + isa = PBXShellScriptBuildPhase;
  220 + buildActionMask = 2147483647;
  221 + files = (
  222 + );
  223 + inputPaths = (
  224 + );
  225 + name = "Thin Binary";
  226 + outputPaths = (
  227 + );
  228 + runOnlyForDeploymentPostprocessing = 0;
  229 + shellPath = /bin/sh;
  230 + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin";
  231 + };
  232 + 4DD8C990B54E5CD60DA09BAD /* [CP] Check Pods Manifest.lock */ = {
  233 + isa = PBXShellScriptBuildPhase;
  234 + buildActionMask = 2147483647;
  235 + files = (
  236 + );
  237 + inputFileListPaths = (
  238 + );
  239 + inputPaths = (
  240 + "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
  241 + "${PODS_ROOT}/Manifest.lock",
  242 + );
  243 + name = "[CP] Check Pods Manifest.lock";
  244 + outputFileListPaths = (
  245 + );
  246 + outputPaths = (
  247 + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
  248 + );
  249 + runOnlyForDeploymentPostprocessing = 0;
  250 + shellPath = /bin/sh;
  251 + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
  252 + showEnvVarsInLog = 0;
  253 + };
  254 + 770C3FAAF999833574938C52 /* [CP] Embed Pods Frameworks */ = {
  255 + isa = PBXShellScriptBuildPhase;
  256 + buildActionMask = 2147483647;
  257 + files = (
  258 + );
  259 + inputFileListPaths = (
  260 + );
  261 + inputPaths = (
  262 + "${SRCROOT}/Pods/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh",
  263 + "${PODS_ROOT}/../.symlinks/flutter/ios/Flutter.framework",
  264 + );
  265 + name = "[CP] Embed Pods Frameworks";
  266 + outputFileListPaths = (
  267 + );
  268 + outputPaths = (
  269 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Flutter.framework",
  270 + );
  271 + runOnlyForDeploymentPostprocessing = 0;
  272 + shellPath = /bin/sh;
  273 + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
  274 + showEnvVarsInLog = 0;
  275 + };
  276 + 9740EEB61CF901F6004384FC /* Run Script */ = {
  277 + isa = PBXShellScriptBuildPhase;
  278 + buildActionMask = 2147483647;
  279 + files = (
  280 + );
  281 + inputPaths = (
  282 + );
  283 + name = "Run Script";
  284 + outputPaths = (
  285 + );
  286 + runOnlyForDeploymentPostprocessing = 0;
  287 + shellPath = /bin/sh;
  288 + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
  289 + };
  290 +/* End PBXShellScriptBuildPhase section */
  291 +
  292 +/* Begin PBXSourcesBuildPhase section */
  293 + 97C146EA1CF9000F007C117D /* Sources */ = {
  294 + isa = PBXSourcesBuildPhase;
  295 + buildActionMask = 2147483647;
  296 + files = (
  297 + 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */,
  298 + 97C146F31CF9000F007C117D /* main.m in Sources */,
  299 + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
  300 + );
  301 + runOnlyForDeploymentPostprocessing = 0;
  302 + };
  303 +/* End PBXSourcesBuildPhase section */
  304 +
  305 +/* Begin PBXVariantGroup section */
  306 + 97C146FA1CF9000F007C117D /* Main.storyboard */ = {
  307 + isa = PBXVariantGroup;
  308 + children = (
  309 + 97C146FB1CF9000F007C117D /* Base */,
  310 + );
  311 + name = Main.storyboard;
  312 + sourceTree = "<group>";
  313 + };
  314 + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
  315 + isa = PBXVariantGroup;
  316 + children = (
  317 + 97C147001CF9000F007C117D /* Base */,
  318 + );
  319 + name = LaunchScreen.storyboard;
  320 + sourceTree = "<group>";
  321 + };
  322 +/* End PBXVariantGroup section */
  323 +
  324 +/* Begin XCBuildConfiguration section */
  325 + 249021D3217E4FDB00AE95B9 /* Profile */ = {
  326 + isa = XCBuildConfiguration;
  327 + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
  328 + buildSettings = {
  329 + ALWAYS_SEARCH_USER_PATHS = NO;
  330 + CLANG_ANALYZER_NONNULL = YES;
  331 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
  332 + CLANG_CXX_LIBRARY = "libc++";
  333 + CLANG_ENABLE_MODULES = YES;
  334 + CLANG_ENABLE_OBJC_ARC = YES;
  335 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  336 + CLANG_WARN_BOOL_CONVERSION = YES;
  337 + CLANG_WARN_COMMA = YES;
  338 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  339 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  340 + CLANG_WARN_EMPTY_BODY = YES;
  341 + CLANG_WARN_ENUM_CONVERSION = YES;
  342 + CLANG_WARN_INFINITE_RECURSION = YES;
  343 + CLANG_WARN_INT_CONVERSION = YES;
  344 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  345 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  346 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  347 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  348 + CLANG_WARN_STRICT_PROTOTYPES = YES;
  349 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  350 + CLANG_WARN_UNREACHABLE_CODE = YES;
  351 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  352 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
  353 + COPY_PHASE_STRIP = NO;
  354 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
  355 + ENABLE_NS_ASSERTIONS = NO;
  356 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  357 + GCC_C_LANGUAGE_STANDARD = gnu99;
  358 + GCC_NO_COMMON_BLOCKS = YES;
  359 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  360 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  361 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  362 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  363 + GCC_WARN_UNUSED_FUNCTION = YES;
  364 + GCC_WARN_UNUSED_VARIABLE = YES;
  365 + IPHONEOS_DEPLOYMENT_TARGET = 8.0;
  366 + MTL_ENABLE_DEBUG_INFO = NO;
  367 + SDKROOT = iphoneos;
  368 + TARGETED_DEVICE_FAMILY = "1,2";
  369 + VALIDATE_PRODUCT = YES;
  370 + };
  371 + name = Profile;
  372 + };
  373 + 249021D4217E4FDB00AE95B9 /* Profile */ = {
  374 + isa = XCBuildConfiguration;
  375 + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
  376 + buildSettings = {
  377 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  378 + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
  379 + DEVELOPMENT_TEAM = S8QB4VV633;
  380 + ENABLE_BITCODE = NO;
  381 + FRAMEWORK_SEARCH_PATHS = (
  382 + "$(inherited)",
  383 + "$(PROJECT_DIR)/Flutter",
  384 + );
  385 + INFOPLIST_FILE = Runner/Info.plist;
  386 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
  387 + LIBRARY_SEARCH_PATHS = (
  388 + "$(inherited)",
  389 + "$(PROJECT_DIR)/Flutter",
  390 + );
  391 + PRODUCT_BUNDLE_IDENTIFIER = com.example.example;
  392 + PRODUCT_NAME = "$(TARGET_NAME)";
  393 + VERSIONING_SYSTEM = "apple-generic";
  394 + };
  395 + name = Profile;
  396 + };
  397 + 97C147031CF9000F007C117D /* Debug */ = {
  398 + isa = XCBuildConfiguration;
  399 + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
  400 + buildSettings = {
  401 + ALWAYS_SEARCH_USER_PATHS = NO;
  402 + CLANG_ANALYZER_NONNULL = YES;
  403 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
  404 + CLANG_CXX_LIBRARY = "libc++";
  405 + CLANG_ENABLE_MODULES = YES;
  406 + CLANG_ENABLE_OBJC_ARC = YES;
  407 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  408 + CLANG_WARN_BOOL_CONVERSION = YES;
  409 + CLANG_WARN_COMMA = YES;
  410 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  411 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  412 + CLANG_WARN_EMPTY_BODY = YES;
  413 + CLANG_WARN_ENUM_CONVERSION = YES;
  414 + CLANG_WARN_INFINITE_RECURSION = YES;
  415 + CLANG_WARN_INT_CONVERSION = YES;
  416 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  417 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  418 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  419 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  420 + CLANG_WARN_STRICT_PROTOTYPES = YES;
  421 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  422 + CLANG_WARN_UNREACHABLE_CODE = YES;
  423 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  424 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
  425 + COPY_PHASE_STRIP = NO;
  426 + DEBUG_INFORMATION_FORMAT = dwarf;
  427 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  428 + ENABLE_TESTABILITY = YES;
  429 + GCC_C_LANGUAGE_STANDARD = gnu99;
  430 + GCC_DYNAMIC_NO_PIC = NO;
  431 + GCC_NO_COMMON_BLOCKS = YES;
  432 + GCC_OPTIMIZATION_LEVEL = 0;
  433 + GCC_PREPROCESSOR_DEFINITIONS = (
  434 + "DEBUG=1",
  435 + "$(inherited)",
  436 + );
  437 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  438 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  439 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  440 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  441 + GCC_WARN_UNUSED_FUNCTION = YES;
  442 + GCC_WARN_UNUSED_VARIABLE = YES;
  443 + IPHONEOS_DEPLOYMENT_TARGET = 8.0;
  444 + MTL_ENABLE_DEBUG_INFO = YES;
  445 + ONLY_ACTIVE_ARCH = YES;
  446 + SDKROOT = iphoneos;
  447 + TARGETED_DEVICE_FAMILY = "1,2";
  448 + };
  449 + name = Debug;
  450 + };
  451 + 97C147041CF9000F007C117D /* Release */ = {
  452 + isa = XCBuildConfiguration;
  453 + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
  454 + buildSettings = {
  455 + ALWAYS_SEARCH_USER_PATHS = NO;
  456 + CLANG_ANALYZER_NONNULL = YES;
  457 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
  458 + CLANG_CXX_LIBRARY = "libc++";
  459 + CLANG_ENABLE_MODULES = YES;
  460 + CLANG_ENABLE_OBJC_ARC = YES;
  461 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  462 + CLANG_WARN_BOOL_CONVERSION = YES;
  463 + CLANG_WARN_COMMA = YES;
  464 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  465 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  466 + CLANG_WARN_EMPTY_BODY = YES;
  467 + CLANG_WARN_ENUM_CONVERSION = YES;
  468 + CLANG_WARN_INFINITE_RECURSION = YES;
  469 + CLANG_WARN_INT_CONVERSION = YES;
  470 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  471 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  472 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  473 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  474 + CLANG_WARN_STRICT_PROTOTYPES = YES;
  475 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  476 + CLANG_WARN_UNREACHABLE_CODE = YES;
  477 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  478 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
  479 + COPY_PHASE_STRIP = NO;
  480 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
  481 + ENABLE_NS_ASSERTIONS = NO;
  482 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  483 + GCC_C_LANGUAGE_STANDARD = gnu99;
  484 + GCC_NO_COMMON_BLOCKS = YES;
  485 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  486 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  487 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  488 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  489 + GCC_WARN_UNUSED_FUNCTION = YES;
  490 + GCC_WARN_UNUSED_VARIABLE = YES;
  491 + IPHONEOS_DEPLOYMENT_TARGET = 8.0;
  492 + MTL_ENABLE_DEBUG_INFO = NO;
  493 + SDKROOT = iphoneos;
  494 + TARGETED_DEVICE_FAMILY = "1,2";
  495 + VALIDATE_PRODUCT = YES;
  496 + };
  497 + name = Release;
  498 + };
  499 + 97C147061CF9000F007C117D /* Debug */ = {
  500 + isa = XCBuildConfiguration;
  501 + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
  502 + buildSettings = {
  503 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  504 + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
  505 + ENABLE_BITCODE = NO;
  506 + FRAMEWORK_SEARCH_PATHS = (
  507 + "$(inherited)",
  508 + "$(PROJECT_DIR)/Flutter",
  509 + );
  510 + INFOPLIST_FILE = Runner/Info.plist;
  511 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
  512 + LIBRARY_SEARCH_PATHS = (
  513 + "$(inherited)",
  514 + "$(PROJECT_DIR)/Flutter",
  515 + );
  516 + PRODUCT_BUNDLE_IDENTIFIER = com.example.example;
  517 + PRODUCT_NAME = "$(TARGET_NAME)";
  518 + VERSIONING_SYSTEM = "apple-generic";
  519 + };
  520 + name = Debug;
  521 + };
  522 + 97C147071CF9000F007C117D /* Release */ = {
  523 + isa = XCBuildConfiguration;
  524 + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
  525 + buildSettings = {
  526 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  527 + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
  528 + ENABLE_BITCODE = NO;
  529 + FRAMEWORK_SEARCH_PATHS = (
  530 + "$(inherited)",
  531 + "$(PROJECT_DIR)/Flutter",
  532 + );
  533 + INFOPLIST_FILE = Runner/Info.plist;
  534 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
  535 + LIBRARY_SEARCH_PATHS = (
  536 + "$(inherited)",
  537 + "$(PROJECT_DIR)/Flutter",
  538 + );
  539 + PRODUCT_BUNDLE_IDENTIFIER = com.example.example;
  540 + PRODUCT_NAME = "$(TARGET_NAME)";
  541 + VERSIONING_SYSTEM = "apple-generic";
  542 + };
  543 + name = Release;
  544 + };
  545 +/* End XCBuildConfiguration section */
  546 +
  547 +/* Begin XCConfigurationList section */
  548 + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
  549 + isa = XCConfigurationList;
  550 + buildConfigurations = (
  551 + 97C147031CF9000F007C117D /* Debug */,
  552 + 97C147041CF9000F007C117D /* Release */,
  553 + 249021D3217E4FDB00AE95B9 /* Profile */,
  554 + );
  555 + defaultConfigurationIsVisible = 0;
  556 + defaultConfigurationName = Release;
  557 + };
  558 + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
  559 + isa = XCConfigurationList;
  560 + buildConfigurations = (
  561 + 97C147061CF9000F007C117D /* Debug */,
  562 + 97C147071CF9000F007C117D /* Release */,
  563 + 249021D4217E4FDB00AE95B9 /* Profile */,
  564 + );
  565 + defaultConfigurationIsVisible = 0;
  566 + defaultConfigurationName = Release;
  567 + };
  568 +/* End XCConfigurationList section */
  569 + };
  570 + rootObject = 97C146E61CF9000F007C117D /* Project object */;
  571 +}
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Workspace
  3 + version = "1.0">
  4 + <FileRef
  5 + location = "group:Runner.xcodeproj">
  6 + </FileRef>
  7 +</Workspace>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Scheme
  3 + LastUpgradeVersion = "0910"
  4 + version = "1.3">
  5 + <BuildAction
  6 + parallelizeBuildables = "YES"
  7 + buildImplicitDependencies = "YES">
  8 + <BuildActionEntries>
  9 + <BuildActionEntry
  10 + buildForTesting = "YES"
  11 + buildForRunning = "YES"
  12 + buildForProfiling = "YES"
  13 + buildForArchiving = "YES"
  14 + buildForAnalyzing = "YES">
  15 + <BuildableReference
  16 + BuildableIdentifier = "primary"
  17 + BlueprintIdentifier = "97C146ED1CF9000F007C117D"
  18 + BuildableName = "Runner.app"
  19 + BlueprintName = "Runner"
  20 + ReferencedContainer = "container:Runner.xcodeproj">
  21 + </BuildableReference>
  22 + </BuildActionEntry>
  23 + </BuildActionEntries>
  24 + </BuildAction>
  25 + <TestAction
  26 + buildConfiguration = "Debug"
  27 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
  28 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
  29 + language = ""
  30 + shouldUseLaunchSchemeArgsEnv = "YES">
  31 + <Testables>
  32 + </Testables>
  33 + <MacroExpansion>
  34 + <BuildableReference
  35 + BuildableIdentifier = "primary"
  36 + BlueprintIdentifier = "97C146ED1CF9000F007C117D"
  37 + BuildableName = "Runner.app"
  38 + BlueprintName = "Runner"
  39 + ReferencedContainer = "container:Runner.xcodeproj">
  40 + </BuildableReference>
  41 + </MacroExpansion>
  42 + <AdditionalOptions>
  43 + </AdditionalOptions>
  44 + </TestAction>
  45 + <LaunchAction
  46 + buildConfiguration = "Debug"
  47 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
  48 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
  49 + language = ""
  50 + launchStyle = "0"
  51 + useCustomWorkingDirectory = "NO"
  52 + ignoresPersistentStateOnLaunch = "NO"
  53 + debugDocumentVersioning = "YES"
  54 + debugServiceExtension = "internal"
  55 + allowLocationSimulation = "YES">
  56 + <BuildableProductRunnable
  57 + runnableDebuggingMode = "0">
  58 + <BuildableReference
  59 + BuildableIdentifier = "primary"
  60 + BlueprintIdentifier = "97C146ED1CF9000F007C117D"
  61 + BuildableName = "Runner.app"
  62 + BlueprintName = "Runner"
  63 + ReferencedContainer = "container:Runner.xcodeproj">
  64 + </BuildableReference>
  65 + </BuildableProductRunnable>
  66 + <AdditionalOptions>
  67 + </AdditionalOptions>
  68 + </LaunchAction>
  69 + <ProfileAction
  70 + buildConfiguration = "Profile"
  71 + shouldUseLaunchSchemeArgsEnv = "YES"
  72 + savedToolIdentifier = ""
  73 + useCustomWorkingDirectory = "NO"
  74 + debugDocumentVersioning = "YES">
  75 + <BuildableProductRunnable
  76 + runnableDebuggingMode = "0">
  77 + <BuildableReference
  78 + BuildableIdentifier = "primary"
  79 + BlueprintIdentifier = "97C146ED1CF9000F007C117D"
  80 + BuildableName = "Runner.app"
  81 + BlueprintName = "Runner"
  82 + ReferencedContainer = "container:Runner.xcodeproj">
  83 + </BuildableReference>
  84 + </BuildableProductRunnable>
  85 + </ProfileAction>
  86 + <AnalyzeAction
  87 + buildConfiguration = "Debug">
  88 + </AnalyzeAction>
  89 + <ArchiveAction
  90 + buildConfiguration = "Release"
  91 + revealArchiveInOrganizer = "YES">
  92 + </ArchiveAction>
  93 +</Scheme>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Workspace
  3 + version = "1.0">
  4 + <FileRef
  5 + location = "group:Runner.xcodeproj">
  6 + </FileRef>
  7 + <FileRef
  8 + location = "group:Pods/Pods.xcodeproj">
  9 + </FileRef>
  10 +</Workspace>
  1 +#import <Flutter/Flutter.h>
  2 +#import <UIKit/UIKit.h>
  3 +
  4 +@interface AppDelegate : FlutterAppDelegate
  5 +
  6 +@end
  1 +#include "AppDelegate.h"
  2 +#include "GeneratedPluginRegistrant.h"
  3 +
  4 +@implementation AppDelegate
  5 +
  6 +- (BOOL)application:(UIApplication *)application
  7 + didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  8 + [GeneratedPluginRegistrant registerWithRegistry:self];
  9 + // Override point for customization after application launch.
  10 + return [super application:application didFinishLaunchingWithOptions:launchOptions];
  11 +}
  12 +
  13 +@end
  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 +}
  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 +}
  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.
  1 +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2 +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12121" systemVersion="16G29" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
  3 + <dependencies>
  4 + <deployment identifier="iOS"/>
  5 + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
  6 + </dependencies>
  7 + <scenes>
  8 + <!--View Controller-->
  9 + <scene sceneID="EHf-IW-A2E">
  10 + <objects>
  11 + <viewController id="01J-lp-oVM" sceneMemberID="viewController">
  12 + <layoutGuides>
  13 + <viewControllerLayoutGuide type="top" id="Ydg-fD-yQy"/>
  14 + <viewControllerLayoutGuide type="bottom" id="xbc-2k-c8Z"/>
  15 + </layoutGuides>
  16 + <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
  17 + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
  18 + <subviews>
  19 + <imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4">
  20 + </imageView>
  21 + </subviews>
  22 + <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
  23 + <constraints>
  24 + <constraint firstItem="YRO-k0-Ey4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="1a2-6s-vTC"/>
  25 + <constraint firstItem="YRO-k0-Ey4" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="4X2-HB-R7a"/>
  26 + </constraints>
  27 + </view>
  28 + </viewController>
  29 + <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
  30 + </objects>
  31 + <point key="canvasLocation" x="53" y="375"/>
  32 + </scene>
  33 + </scenes>
  34 + <resources>
  35 + <image name="LaunchImage" width="168" height="185"/>
  36 + </resources>
  37 +</document>
  1 +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2 +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
  3 + <dependencies>
  4 + <deployment identifier="iOS"/>
  5 + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
  6 + </dependencies>
  7 + <scenes>
  8 + <!--Flutter View Controller-->
  9 + <scene sceneID="tne-QT-ifu">
  10 + <objects>
  11 + <viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController">
  12 + <layoutGuides>
  13 + <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
  14 + <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
  15 + </layoutGuides>
  16 + <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
  17 + <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
  18 + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
  19 + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
  20 + </view>
  21 + </viewController>
  22 + <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
  23 + </objects>
  24 + </scene>
  25 + </scenes>
  26 +</document>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>CFBundleDevelopmentRegion</key>
  6 + <string>en</string>
  7 + <key>CFBundleExecutable</key>
  8 + <string>$(EXECUTABLE_NAME)</string>
  9 + <key>CFBundleIdentifier</key>
  10 + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
  11 + <key>CFBundleInfoDictionaryVersion</key>
  12 + <string>6.0</string>
  13 + <key>CFBundleName</key>
  14 + <string>example</string>
  15 + <key>CFBundlePackageType</key>
  16 + <string>APPL</string>
  17 + <key>CFBundleShortVersionString</key>
  18 + <string>$(FLUTTER_BUILD_NAME)</string>
  19 + <key>CFBundleSignature</key>
  20 + <string>????</string>
  21 + <key>CFBundleVersion</key>
  22 + <string>$(FLUTTER_BUILD_NUMBER)</string>
  23 + <key>LSRequiresIPhoneOS</key>
  24 + <true/>
  25 + <key>UILaunchStoryboardName</key>
  26 + <string>LaunchScreen</string>
  27 + <key>UIMainStoryboardFile</key>
  28 + <string>Main</string>
  29 + <key>UISupportedInterfaceOrientations</key>
  30 + <array>
  31 + <string>UIInterfaceOrientationPortrait</string>
  32 + <string>UIInterfaceOrientationLandscapeLeft</string>
  33 + <string>UIInterfaceOrientationLandscapeRight</string>
  34 + </array>
  35 + <key>UISupportedInterfaceOrientations~ipad</key>
  36 + <array>
  37 + <string>UIInterfaceOrientationPortrait</string>
  38 + <string>UIInterfaceOrientationPortraitUpsideDown</string>
  39 + <string>UIInterfaceOrientationLandscapeLeft</string>
  40 + <string>UIInterfaceOrientationLandscapeRight</string>
  41 + </array>
  42 + <key>UIViewControllerBasedStatusBarAppearance</key>
  43 + <false/>
  44 +</dict>
  45 +</plist>
  1 +#import <Flutter/Flutter.h>
  2 +#import <UIKit/UIKit.h>
  3 +#import "AppDelegate.h"
  4 +
  5 +int main(int argc, char* argv[]) {
  6 + @autoreleasepool {
  7 + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
  8 + }
  9 +}
  1 +import 'dart:io';
  2 +import 'dart:async';
  3 +
  4 +import 'package:pdf/pdf.dart';
  5 +
  6 +Future<PdfDocument> generateDocument() async {
  7 + final pdf = PdfDocument(deflate: zlib.encode);
  8 + final page = PdfPage(pdf, pageFormat: PdfPageFormat.a4);
  9 + final g = page.getGraphics();
  10 + final font = PdfFont.helvetica(pdf);
  11 + final top = page.pageFormat.height;
  12 +
  13 + g.setColor(PdfColor(0.0, 1.0, 1.0));
  14 + g.drawRect(50.0 * PdfPageFormat.mm, top - 80.0 * PdfPageFormat.mm,
  15 + 100.0 * PdfPageFormat.mm, 50.0 * PdfPageFormat.mm);
  16 + g.fillPath();
  17 +
  18 + g.setColor(PdfColor(0.3, 0.3, 0.3));
  19 + g.drawString(font, 12.0, "Hello World!", 10.0 * PdfPageFormat.mm,
  20 + top - 10.0 * PdfPageFormat.mm);
  21 +
  22 + return pdf;
  23 +}
@@ -4,9 +4,12 @@ import 'dart:ui'; @@ -4,9 +4,12 @@ import 'dart:ui';
4 4
5 import 'package:flutter/material.dart'; 5 import 'package:flutter/material.dart';
6 import 'package:flutter/rendering.dart'; 6 import 'package:flutter/rendering.dart';
  7 +
7 import 'package:pdf/pdf.dart'; 8 import 'package:pdf/pdf.dart';
8 import 'package:printing/printing.dart'; 9 import 'package:printing/printing.dart';
9 10
  11 +import 'package:printing_example/document.dart';
  12 +
10 void main() => runApp(MaterialApp(home: MyApp())); 13 void main() => runApp(MaterialApp(home: MyApp()));
11 14
12 class MyApp extends StatefulWidget { 15 class MyApp extends StatefulWidget {
@@ -20,34 +23,15 @@ class MyAppState extends State<MyApp> { @@ -20,34 +23,15 @@ class MyAppState extends State<MyApp> {
20 final shareWidget = GlobalKey(); 23 final shareWidget = GlobalKey();
21 final previewContainer = GlobalKey(); 24 final previewContainer = GlobalKey();
22 25
23 - PdfDocument _generateDocument() {  
24 - final pdf = PdfDocument(deflate: zlib.encode);  
25 - final page = PdfPage(pdf, pageFormat: PdfPageFormat.a4);  
26 - final g = page.getGraphics();  
27 - final font = PdfFont.helvetica(pdf);  
28 - final top = page.pageFormat.height;  
29 -  
30 - g.setColor(PdfColor(0.0, 1.0, 1.0));  
31 - g.drawRect(50.0 * PdfPageFormat.mm, top - 80.0 * PdfPageFormat.mm,  
32 - 100.0 * PdfPageFormat.mm, 50.0 * PdfPageFormat.mm);  
33 - g.fillPath();  
34 -  
35 - g.setColor(PdfColor(0.3, 0.3, 0.3));  
36 - g.drawString(font, 12.0, "Hello World!", 10.0 * PdfPageFormat.mm,  
37 - top - 10.0 * PdfPageFormat.mm);  
38 -  
39 - return pdf;  
40 - }  
41 -  
42 - void _printPdf() { 26 + void _printPdf() async {
43 print("Print ..."); 27 print("Print ...");
44 - final pdf = _generateDocument(); 28 + final pdf = await generateDocument();
45 Printing.printPdf(document: pdf); 29 Printing.printPdf(document: pdf);
46 } 30 }
47 31
48 - void _sharePdf() { 32 + void _sharePdf() async {
49 print("Share ..."); 33 print("Share ...");
50 - final pdf = _generateDocument(); 34 + final pdf = await generateDocument();
51 35
52 // Calculate the widget center for iPad sharing popup position 36 // Calculate the widget center for iPad sharing popup position
53 final RenderBox referenceBox = 37 final RenderBox referenceBox =
@@ -4,13 +4,12 @@ description: Pdf Printing Example @@ -4,13 +4,12 @@ description: Pdf Printing Example
4 version: 1.0.0+1 4 version: 1.0.0+1
5 5
6 environment: 6 environment:
7 - sdk: ">=2.0.0-dev.68.0 <3.0.0" 7 + sdk: ">=2.0.0 <3.0.0"
8 8
9 dependencies: 9 dependencies:
10 flutter: 10 flutter:
11 sdk: flutter 11 sdk: flutter
12 printing: 12 printing:
13 - path: ../  
14 13
15 cupertino_icons: ^0.1.2 14 cupertino_icons: ^0.1.2
16 15
  1 +import 'dart:io';
  2 +
  3 +import 'package:flutter_test/flutter_test.dart';
  4 +
  5 +import 'package:printing_example/document.dart';
  6 +
  7 +void main() {
  8 + testWidgets('Generate the Pdf document', (WidgetTester tester) async {
  9 + final pdf = await generateDocument();
  10 + var file = File('document.pdf');
  11 + file.writeAsBytesSync(pdf.save());
  12 + });
  13 +}