[READ-ONLY] Mirror of https://github.com/kristianbinau/HF4-appdev.
0

Configure Feed

Select the types of activity you want to include in your feed.

Init

Kristian Binau (Apr 28, 2022, 10:43 AM +0200) 594a00ad

+9106
+15
AndroidApiTest/.gitignore
··· 1 + *.iml 2 + .gradle 3 + /local.properties 4 + /.idea/caches 5 + /.idea/libraries 6 + /.idea/modules.xml 7 + /.idea/workspace.xml 8 + /.idea/navEditor.xml 9 + /.idea/assetWizardSettings.xml 10 + .DS_Store 11 + /build 12 + /captures 13 + .externalNativeBuild 14 + .cxx 15 + local.properties
+3
AndroidApiTest/.idea/.gitignore
··· 1 + # Default ignored files 2 + /shelf/ 3 + /workspace.xml
+6
AndroidApiTest/.idea/compiler.xml
··· 1 + <?xml version="1.0" encoding="UTF-8"?> 2 + <project version="4"> 3 + <component name="CompilerConfiguration"> 4 + <bytecodeTargetLevel target="11" /> 5 + </component> 6 + </project>
+20
AndroidApiTest/.idea/gradle.xml
··· 1 + <?xml version="1.0" encoding="UTF-8"?> 2 + <project version="4"> 3 + <component name="GradleMigrationSettings" migrationVersion="1" /> 4 + <component name="GradleSettings"> 5 + <option name="linkedExternalProjectsSettings"> 6 + <GradleProjectSettings> 7 + <option name="testRunner" value="GRADLE" /> 8 + <option name="distributionType" value="DEFAULT_WRAPPED" /> 9 + <option name="externalProjectPath" value="$PROJECT_DIR$" /> 10 + <option name="modules"> 11 + <set> 12 + <option value="$PROJECT_DIR$" /> 13 + <option value="$PROJECT_DIR$/app" /> 14 + </set> 15 + </option> 16 + <option name="resolveModulePerSourceSet" value="false" /> 17 + </GradleProjectSettings> 18 + </option> 19 + </component> 20 + </project>
+17
AndroidApiTest/.idea/misc.xml
··· 1 + <?xml version="1.0" encoding="UTF-8"?> 2 + <project version="4"> 3 + <component name="DesignSurface"> 4 + <option name="filePathToZoomLevelMap"> 5 + <map> 6 + <entry key="..\:/Users/krist/AndroidStudioProjects/AndroidApiTest/app/src/main/res/layout/activity_main.xml" value="0.5" /> 7 + <entry key="..\:/Users/krist/AndroidStudioProjects/AndroidApiTest/app/src/main/res/layout/activity_main2.xml" value="0.358695652173913" /> 8 + </map> 9 + </option> 10 + </component> 11 + <component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="Android Studio default JDK" project-jdk-type="JavaSDK"> 12 + <output url="file://$PROJECT_DIR$/build/classes" /> 13 + </component> 14 + <component name="ProjectType"> 15 + <option name="id" value="Android" /> 16 + </component> 17 + </project>
+1
AndroidApiTest/app/.gitignore
··· 1 + /build
+38
AndroidApiTest/app/build.gradle
··· 1 + plugins { 2 + id 'com.android.application' 3 + } 4 + 5 + android { 6 + compileSdk 32 7 + 8 + defaultConfig { 9 + applicationId "com.example.androidapitest" 10 + minSdk 28 11 + targetSdk 32 12 + versionCode 1 13 + versionName "1.0" 14 + 15 + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 16 + } 17 + 18 + buildTypes { 19 + release { 20 + minifyEnabled false 21 + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 22 + } 23 + } 24 + compileOptions { 25 + sourceCompatibility JavaVersion.VERSION_1_8 26 + targetCompatibility JavaVersion.VERSION_1_8 27 + } 28 + } 29 + 30 + dependencies { 31 + 32 + implementation 'androidx.appcompat:appcompat:1.3.0' 33 + implementation 'com.google.android.material:material:1.4.0' 34 + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' 35 + testImplementation 'junit:junit:4.13.2' 36 + androidTestImplementation 'androidx.test.ext:junit:1.1.3' 37 + androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' 38 + }
+21
AndroidApiTest/app/proguard-rules.pro
··· 1 + # Add project specific ProGuard rules here. 2 + # You can control the set of applied configuration files using the 3 + # proguardFiles setting in build.gradle. 4 + # 5 + # For more details, see 6 + # http://developer.android.com/guide/developing/tools/proguard.html 7 + 8 + # If your project uses WebView with JS, uncomment the following 9 + # and specify the fully qualified class name to the JavaScript interface 10 + # class: 11 + #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 + # public *; 13 + #} 14 + 15 + # Uncomment this to preserve the line number information for 16 + # debugging stack traces. 17 + #-keepattributes SourceFile,LineNumberTable 18 + 19 + # If you keep the line number information, uncomment this to 20 + # hide the original source file name. 21 + #-renamesourcefileattribute SourceFile
+26
AndroidApiTest/app/src/androidTest/java/com/example/androidapitest/ExampleInstrumentedTest.java
··· 1 + package com.example.androidapitest; 2 + 3 + import android.content.Context; 4 + 5 + import androidx.test.platform.app.InstrumentationRegistry; 6 + import androidx.test.ext.junit.runners.AndroidJUnit4; 7 + 8 + import org.junit.Test; 9 + import org.junit.runner.RunWith; 10 + 11 + import static org.junit.Assert.*; 12 + 13 + /** 14 + * Instrumented test, which will execute on an Android device. 15 + * 16 + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> 17 + */ 18 + @RunWith(AndroidJUnit4.class) 19 + public class ExampleInstrumentedTest { 20 + @Test 21 + public void useAppContext() { 22 + // Context of the app under test. 23 + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); 24 + assertEquals("com.example.androidapitest", appContext.getPackageName()); 25 + } 26 + }
+29
AndroidApiTest/app/src/main/AndroidManifest.xml
··· 1 + <?xml version="1.0" encoding="utf-8"?> 2 + <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 + package="com.example.androidapitest"> 4 + 5 + <uses-permission android:name="android.permission.CAMERA" /> 6 + <uses-permission android:name="android.permission.FLASHLIGHT" /> 7 + 8 + <application 9 + android:allowBackup="true" 10 + android:icon="@mipmap/ic_launcher" 11 + android:label="@string/app_name" 12 + android:roundIcon="@mipmap/ic_launcher_round" 13 + android:supportsRtl="true" 14 + android:theme="@style/Theme.AndroidApiTest"> 15 + <activity 16 + android:name=".MainActivity2" 17 + android:exported="false" /> 18 + <activity 19 + android:name=".MainActivity" 20 + android:exported="true"> 21 + <intent-filter> 22 + <action android:name="android.intent.action.MAIN" /> 23 + 24 + <category android:name="android.intent.category.LAUNCHER" /> 25 + </intent-filter> 26 + </activity> 27 + </application> 28 + 29 + </manifest>
+76
AndroidApiTest/app/src/main/java/com/example/androidapitest/MainActivity.java
··· 1 + package com.example.androidapitest; 2 + 3 + import androidx.appcompat.app.AppCompatActivity; 4 + 5 + import android.content.Context; 6 + import android.content.Intent; 7 + import android.hardware.camera2.CameraAccessException; 8 + import android.hardware.camera2.CameraManager; 9 + import android.os.Build; 10 + import android.os.Bundle; 11 + import android.view.View; 12 + import android.widget.Button; 13 + import android.widget.EditText; 14 + 15 + public class MainActivity extends AppCompatActivity { 16 + private Button btnFlash; 17 + private EditText editTextTextPersonName; 18 + private Button btnSendData; 19 + 20 + private boolean flashOn = false; 21 + 22 + @Override 23 + protected void onCreate(Bundle savedInstanceState) { 24 + super.onCreate(savedInstanceState); 25 + setContentView(R.layout.activity_main); 26 + 27 + this.btnFlash = (Button) this.findViewById(R.id.btnFlash); 28 + this.btnFlash.setOnClickListener(new View.OnClickListener() { 29 + 30 + @Override 31 + public void onClick(View arg0) { 32 + toggleFlash(); 33 + } 34 + }); 35 + 36 + this.btnSendData = (Button) this.findViewById(R.id.btnSendData); 37 + this.btnSendData.setOnClickListener(new View.OnClickListener() { 38 + 39 + @Override 40 + public void onClick(View arg0) { 41 + switchAndSend(); 42 + } 43 + }); 44 + } 45 + 46 + protected void switchAndSend() { 47 + this.editTextTextPersonName = (EditText) this.findViewById(R.id.editTextTextPersonName); 48 + 49 + Intent intent = new Intent(this, MainActivity2.class); 50 + intent.putExtra("MY_GRAND_MOTHERS_NAME", this.editTextTextPersonName.getText().toString()); 51 + startActivity(intent); 52 + } 53 + 54 + protected void toggleFlash() { 55 + CameraManager camManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); 56 + String cameraId = null; 57 + 58 + if (this.flashOn) { 59 + try { 60 + cameraId = camManager.getCameraIdList()[0]; 61 + camManager.setTorchMode(cameraId, false); 62 + this.flashOn = false; 63 + } catch (CameraAccessException e) { 64 + e.printStackTrace(); 65 + } 66 + } else { 67 + try { 68 + cameraId = camManager.getCameraIdList()[0]; 69 + camManager.setTorchMode(cameraId, true); 70 + this.flashOn = true; 71 + } catch (CameraAccessException e) { 72 + e.printStackTrace(); 73 + } 74 + } 75 + } 76 + }
+62
AndroidApiTest/app/src/main/java/com/example/androidapitest/MainActivity2.java
··· 1 + package com.example.androidapitest; 2 + 3 + import androidx.appcompat.app.AppCompatActivity; 4 + 5 + import android.content.ActivityNotFoundException; 6 + import android.content.Context; 7 + import android.content.Intent; 8 + import android.net.Uri; 9 + import android.os.Bundle; 10 + import android.util.Log; 11 + import android.view.View; 12 + import android.widget.Button; 13 + import android.widget.TextView; 14 + 15 + public class MainActivity2 extends AppCompatActivity { 16 + private TextView textViewName; 17 + private Button btnGoBack; 18 + private Button btnOpenApp; 19 + 20 + @Override 21 + protected void onCreate(Bundle savedInstanceState) { 22 + super.onCreate(savedInstanceState); 23 + setContentView(R.layout.activity_main2); 24 + 25 + this.textViewName = (TextView) this.findViewById(R.id.textViewName); 26 + 27 + String grandMothersName = getIntent().getStringExtra("MY_GRAND_MOTHERS_NAME"); 28 + this.textViewName.setText(grandMothersName); 29 + Log.i("Grand Mothers Name", grandMothersName); 30 + 31 + this.btnGoBack = (Button) this.findViewById(R.id.btnGoBack); 32 + this.btnGoBack.setOnClickListener(new View.OnClickListener() { 33 + 34 + @Override 35 + public void onClick(View arg0) { 36 + finish(); 37 + } 38 + }); 39 + 40 + Context vm = this; 41 + 42 + this.btnOpenApp = (Button) this.findViewById(R.id.btnOpenApp); 43 + this.btnOpenApp.setOnClickListener(new View.OnClickListener() { 44 + 45 + @Override 46 + public void onClick(View arg0) { 47 + watchYoutubeVideo(vm, "pTfC3YpMDMw"); 48 + } 49 + }); 50 + } 51 + 52 + protected void watchYoutubeVideo(Context context, String id) { 53 + Intent appIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("vnd.youtube:" + id)); 54 + Intent webIntent = new Intent(Intent.ACTION_VIEW, 55 + Uri.parse("http://www.youtube.com/watch?v=" + id)); 56 + try { 57 + context.startActivity(appIntent); 58 + } catch (ActivityNotFoundException ex) { 59 + context.startActivity(webIntent); 60 + } 61 + } 62 + }
+30
AndroidApiTest/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
··· 1 + <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 + xmlns:aapt="http://schemas.android.com/aapt" 3 + android:width="108dp" 4 + android:height="108dp" 5 + android:viewportWidth="108" 6 + android:viewportHeight="108"> 7 + <path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z"> 8 + <aapt:attr name="android:fillColor"> 9 + <gradient 10 + android:endX="85.84757" 11 + android:endY="92.4963" 12 + android:startX="42.9492" 13 + android:startY="49.59793" 14 + android:type="linear"> 15 + <item 16 + android:color="#44000000" 17 + android:offset="0.0" /> 18 + <item 19 + android:color="#00000000" 20 + android:offset="1.0" /> 21 + </gradient> 22 + </aapt:attr> 23 + </path> 24 + <path 25 + android:fillColor="#FFFFFF" 26 + android:fillType="nonZero" 27 + android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z" 28 + android:strokeWidth="1" 29 + android:strokeColor="#00000000" /> 30 + </vector>
+170
AndroidApiTest/app/src/main/res/drawable/ic_launcher_background.xml
··· 1 + <?xml version="1.0" encoding="utf-8"?> 2 + <vector xmlns:android="http://schemas.android.com/apk/res/android" 3 + android:width="108dp" 4 + android:height="108dp" 5 + android:viewportWidth="108" 6 + android:viewportHeight="108"> 7 + <path 8 + android:fillColor="#3DDC84" 9 + android:pathData="M0,0h108v108h-108z" /> 10 + <path 11 + android:fillColor="#00000000" 12 + android:pathData="M9,0L9,108" 13 + android:strokeWidth="0.8" 14 + android:strokeColor="#33FFFFFF" /> 15 + <path 16 + android:fillColor="#00000000" 17 + android:pathData="M19,0L19,108" 18 + android:strokeWidth="0.8" 19 + android:strokeColor="#33FFFFFF" /> 20 + <path 21 + android:fillColor="#00000000" 22 + android:pathData="M29,0L29,108" 23 + android:strokeWidth="0.8" 24 + android:strokeColor="#33FFFFFF" /> 25 + <path 26 + android:fillColor="#00000000" 27 + android:pathData="M39,0L39,108" 28 + android:strokeWidth="0.8" 29 + android:strokeColor="#33FFFFFF" /> 30 + <path 31 + android:fillColor="#00000000" 32 + android:pathData="M49,0L49,108" 33 + android:strokeWidth="0.8" 34 + android:strokeColor="#33FFFFFF" /> 35 + <path 36 + android:fillColor="#00000000" 37 + android:pathData="M59,0L59,108" 38 + android:strokeWidth="0.8" 39 + android:strokeColor="#33FFFFFF" /> 40 + <path 41 + android:fillColor="#00000000" 42 + android:pathData="M69,0L69,108" 43 + android:strokeWidth="0.8" 44 + android:strokeColor="#33FFFFFF" /> 45 + <path 46 + android:fillColor="#00000000" 47 + android:pathData="M79,0L79,108" 48 + android:strokeWidth="0.8" 49 + android:strokeColor="#33FFFFFF" /> 50 + <path 51 + android:fillColor="#00000000" 52 + android:pathData="M89,0L89,108" 53 + android:strokeWidth="0.8" 54 + android:strokeColor="#33FFFFFF" /> 55 + <path 56 + android:fillColor="#00000000" 57 + android:pathData="M99,0L99,108" 58 + android:strokeWidth="0.8" 59 + android:strokeColor="#33FFFFFF" /> 60 + <path 61 + android:fillColor="#00000000" 62 + android:pathData="M0,9L108,9" 63 + android:strokeWidth="0.8" 64 + android:strokeColor="#33FFFFFF" /> 65 + <path 66 + android:fillColor="#00000000" 67 + android:pathData="M0,19L108,19" 68 + android:strokeWidth="0.8" 69 + android:strokeColor="#33FFFFFF" /> 70 + <path 71 + android:fillColor="#00000000" 72 + android:pathData="M0,29L108,29" 73 + android:strokeWidth="0.8" 74 + android:strokeColor="#33FFFFFF" /> 75 + <path 76 + android:fillColor="#00000000" 77 + android:pathData="M0,39L108,39" 78 + android:strokeWidth="0.8" 79 + android:strokeColor="#33FFFFFF" /> 80 + <path 81 + android:fillColor="#00000000" 82 + android:pathData="M0,49L108,49" 83 + android:strokeWidth="0.8" 84 + android:strokeColor="#33FFFFFF" /> 85 + <path 86 + android:fillColor="#00000000" 87 + android:pathData="M0,59L108,59" 88 + android:strokeWidth="0.8" 89 + android:strokeColor="#33FFFFFF" /> 90 + <path 91 + android:fillColor="#00000000" 92 + android:pathData="M0,69L108,69" 93 + android:strokeWidth="0.8" 94 + android:strokeColor="#33FFFFFF" /> 95 + <path 96 + android:fillColor="#00000000" 97 + android:pathData="M0,79L108,79" 98 + android:strokeWidth="0.8" 99 + android:strokeColor="#33FFFFFF" /> 100 + <path 101 + android:fillColor="#00000000" 102 + android:pathData="M0,89L108,89" 103 + android:strokeWidth="0.8" 104 + android:strokeColor="#33FFFFFF" /> 105 + <path 106 + android:fillColor="#00000000" 107 + android:pathData="M0,99L108,99" 108 + android:strokeWidth="0.8" 109 + android:strokeColor="#33FFFFFF" /> 110 + <path 111 + android:fillColor="#00000000" 112 + android:pathData="M19,29L89,29" 113 + android:strokeWidth="0.8" 114 + android:strokeColor="#33FFFFFF" /> 115 + <path 116 + android:fillColor="#00000000" 117 + android:pathData="M19,39L89,39" 118 + android:strokeWidth="0.8" 119 + android:strokeColor="#33FFFFFF" /> 120 + <path 121 + android:fillColor="#00000000" 122 + android:pathData="M19,49L89,49" 123 + android:strokeWidth="0.8" 124 + android:strokeColor="#33FFFFFF" /> 125 + <path 126 + android:fillColor="#00000000" 127 + android:pathData="M19,59L89,59" 128 + android:strokeWidth="0.8" 129 + android:strokeColor="#33FFFFFF" /> 130 + <path 131 + android:fillColor="#00000000" 132 + android:pathData="M19,69L89,69" 133 + android:strokeWidth="0.8" 134 + android:strokeColor="#33FFFFFF" /> 135 + <path 136 + android:fillColor="#00000000" 137 + android:pathData="M19,79L89,79" 138 + android:strokeWidth="0.8" 139 + android:strokeColor="#33FFFFFF" /> 140 + <path 141 + android:fillColor="#00000000" 142 + android:pathData="M29,19L29,89" 143 + android:strokeWidth="0.8" 144 + android:strokeColor="#33FFFFFF" /> 145 + <path 146 + android:fillColor="#00000000" 147 + android:pathData="M39,19L39,89" 148 + android:strokeWidth="0.8" 149 + android:strokeColor="#33FFFFFF" /> 150 + <path 151 + android:fillColor="#00000000" 152 + android:pathData="M49,19L49,89" 153 + android:strokeWidth="0.8" 154 + android:strokeColor="#33FFFFFF" /> 155 + <path 156 + android:fillColor="#00000000" 157 + android:pathData="M59,19L59,89" 158 + android:strokeWidth="0.8" 159 + android:strokeColor="#33FFFFFF" /> 160 + <path 161 + android:fillColor="#00000000" 162 + android:pathData="M69,19L69,89" 163 + android:strokeWidth="0.8" 164 + android:strokeColor="#33FFFFFF" /> 165 + <path 166 + android:fillColor="#00000000" 167 + android:pathData="M79,19L79,89" 168 + android:strokeWidth="0.8" 169 + android:strokeColor="#33FFFFFF" /> 170 + </vector>
+56
AndroidApiTest/app/src/main/res/layout/activity_main.xml
··· 1 + <?xml version="1.0" encoding="utf-8"?> 2 + <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 + xmlns:app="http://schemas.android.com/apk/res-auto" 4 + xmlns:tools="http://schemas.android.com/tools" 5 + android:layout_width="match_parent" 6 + android:layout_height="match_parent" 7 + tools:context=".MainActivity"> 8 + 9 + <TextView 10 + android:id="@+id/textView" 11 + android:layout_width="wrap_content" 12 + android:layout_height="wrap_content" 13 + android:text="Hello World!" 14 + app:layout_constraintBottom_toBottomOf="parent" 15 + app:layout_constraintLeft_toLeftOf="parent" 16 + app:layout_constraintRight_toRightOf="parent" 17 + app:layout_constraintTop_toTopOf="parent" /> 18 + 19 + <Button 20 + android:id="@+id/btnFlash" 21 + android:layout_width="wrap_content" 22 + android:layout_height="wrap_content" 23 + android:layout_marginTop="16dp" 24 + android:text="Flash Light" 25 + app:layout_constraintBottom_toBottomOf="parent" 26 + app:layout_constraintEnd_toEndOf="parent" 27 + app:layout_constraintStart_toStartOf="parent" 28 + app:layout_constraintTop_toBottomOf="@+id/textView" 29 + tools:ignore="DuplicateSpeakableTextCheck" /> 30 + 31 + <LinearLayout 32 + android:layout_width="409dp" 33 + android:layout_height="53dp" 34 + android:layout_marginBottom="69dp" 35 + android:orientation="horizontal" 36 + app:layout_constraintBottom_toTopOf="@+id/btnFlash" 37 + app:layout_constraintStart_toStartOf="parent" 38 + app:layout_constraintTop_toBottomOf="@+id/textView"> 39 + 40 + <EditText 41 + android:id="@+id/editTextTextPersonName" 42 + android:layout_width="wrap_content" 43 + android:layout_height="wrap_content" 44 + android:ems="10" 45 + android:inputType="textPersonName" 46 + android:minHeight="48dp" 47 + android:text="Name" /> 48 + 49 + <Button 50 + android:id="@+id/btnSendData" 51 + android:layout_width="138dp" 52 + android:layout_height="wrap_content" 53 + android:text="Send Data" /> 54 + </LinearLayout> 55 + 56 + </androidx.constraintlayout.widget.ConstraintLayout>
+39
AndroidApiTest/app/src/main/res/layout/activity_main2.xml
··· 1 + <?xml version="1.0" encoding="utf-8"?> 2 + <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 + xmlns:app="http://schemas.android.com/apk/res-auto" 4 + xmlns:tools="http://schemas.android.com/tools" 5 + android:layout_width="match_parent" 6 + android:layout_height="match_parent" 7 + tools:context=".MainActivity2"> 8 + 9 + <Button 10 + android:id="@+id/btnGoBack" 11 + android:layout_width="wrap_content" 12 + android:layout_height="wrap_content" 13 + android:text="Go Back" 14 + app:layout_constraintBottom_toBottomOf="parent" 15 + app:layout_constraintEnd_toEndOf="parent" 16 + app:layout_constraintStart_toStartOf="parent" 17 + app:layout_constraintTop_toTopOf="parent" /> 18 + 19 + <TextView 20 + android:id="@+id/textViewName" 21 + android:layout_width="wrap_content" 22 + android:layout_height="wrap_content" 23 + android:layout_marginBottom="61dp" 24 + app:layout_constraintBottom_toTopOf="@+id/btnGoBack" 25 + app:layout_constraintEnd_toEndOf="parent" 26 + app:layout_constraintStart_toStartOf="parent" 27 + app:layout_constraintTop_toTopOf="parent" /> 28 + 29 + <Button 30 + android:id="@+id/btnOpenApp" 31 + android:layout_width="wrap_content" 32 + android:layout_height="wrap_content" 33 + android:layout_marginTop="160dp" 34 + android:text="Open App" 35 + app:layout_constraintBottom_toBottomOf="parent" 36 + app:layout_constraintEnd_toEndOf="parent" 37 + app:layout_constraintStart_toStartOf="parent" 38 + app:layout_constraintTop_toBottomOf="@+id/btnGoBack" /> 39 + </androidx.constraintlayout.widget.ConstraintLayout>
+5
AndroidApiTest/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
··· 1 + <?xml version="1.0" encoding="utf-8"?> 2 + <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> 3 + <background android:drawable="@drawable/ic_launcher_background" /> 4 + <foreground android:drawable="@drawable/ic_launcher_foreground" /> 5 + </adaptive-icon>
+5
AndroidApiTest/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
··· 1 + <?xml version="1.0" encoding="utf-8"?> 2 + <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> 3 + <background android:drawable="@drawable/ic_launcher_background" /> 4 + <foreground android:drawable="@drawable/ic_launcher_foreground" /> 5 + </adaptive-icon>
AndroidApiTest/app/src/main/res/mipmap-hdpi/ic_launcher.webp

This is a binary file and will not be displayed.

AndroidApiTest/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp

This is a binary file and will not be displayed.

AndroidApiTest/app/src/main/res/mipmap-mdpi/ic_launcher.webp

This is a binary file and will not be displayed.

AndroidApiTest/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp

This is a binary file and will not be displayed.

AndroidApiTest/app/src/main/res/mipmap-xhdpi/ic_launcher.webp

This is a binary file and will not be displayed.

AndroidApiTest/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp

This is a binary file and will not be displayed.

AndroidApiTest/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp

This is a binary file and will not be displayed.

AndroidApiTest/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp

This is a binary file and will not be displayed.

AndroidApiTest/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp

This is a binary file and will not be displayed.

AndroidApiTest/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp

This is a binary file and will not be displayed.

+16
AndroidApiTest/app/src/main/res/values-night/themes.xml
··· 1 + <resources xmlns:tools="http://schemas.android.com/tools"> 2 + <!-- Base application theme. --> 3 + <style name="Theme.AndroidApiTest" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> 4 + <!-- Primary brand color. --> 5 + <item name="colorPrimary">@color/purple_200</item> 6 + <item name="colorPrimaryVariant">@color/purple_700</item> 7 + <item name="colorOnPrimary">@color/black</item> 8 + <!-- Secondary brand color. --> 9 + <item name="colorSecondary">@color/teal_200</item> 10 + <item name="colorSecondaryVariant">@color/teal_200</item> 11 + <item name="colorOnSecondary">@color/black</item> 12 + <!-- Status bar color. --> 13 + <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item> 14 + <!-- Customize your theme here. --> 15 + </style> 16 + </resources>
+10
AndroidApiTest/app/src/main/res/values/colors.xml
··· 1 + <?xml version="1.0" encoding="utf-8"?> 2 + <resources> 3 + <color name="purple_200">#FFBB86FC</color> 4 + <color name="purple_500">#FF6200EE</color> 5 + <color name="purple_700">#FF3700B3</color> 6 + <color name="teal_200">#FF03DAC5</color> 7 + <color name="teal_700">#FF018786</color> 8 + <color name="black">#FF000000</color> 9 + <color name="white">#FFFFFFFF</color> 10 + </resources>
+3
AndroidApiTest/app/src/main/res/values/strings.xml
··· 1 + <resources> 2 + <string name="app_name">AndroidApiTest</string> 3 + </resources>
+16
AndroidApiTest/app/src/main/res/values/themes.xml
··· 1 + <resources xmlns:tools="http://schemas.android.com/tools"> 2 + <!-- Base application theme. --> 3 + <style name="Theme.AndroidApiTest" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> 4 + <!-- Primary brand color. --> 5 + <item name="colorPrimary">@color/purple_500</item> 6 + <item name="colorPrimaryVariant">@color/purple_700</item> 7 + <item name="colorOnPrimary">@color/white</item> 8 + <!-- Secondary brand color. --> 9 + <item name="colorSecondary">@color/teal_200</item> 10 + <item name="colorSecondaryVariant">@color/teal_700</item> 11 + <item name="colorOnSecondary">@color/black</item> 12 + <!-- Status bar color. --> 13 + <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item> 14 + <!-- Customize your theme here. --> 15 + </style> 16 + </resources>
+17
AndroidApiTest/app/src/test/java/com/example/androidapitest/ExampleUnitTest.java
··· 1 + package com.example.androidapitest; 2 + 3 + import org.junit.Test; 4 + 5 + import static org.junit.Assert.*; 6 + 7 + /** 8 + * Example local unit test, which will execute on the development machine (host). 9 + * 10 + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> 11 + */ 12 + public class ExampleUnitTest { 13 + @Test 14 + public void addition_isCorrect() { 15 + assertEquals(4, 2 + 2); 16 + } 17 + }
+9
AndroidApiTest/build.gradle
··· 1 + // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 + plugins { 3 + id 'com.android.application' version '7.1.3' apply false 4 + id 'com.android.library' version '7.1.3' apply false 5 + } 6 + 7 + task clean(type: Delete) { 8 + delete rootProject.buildDir 9 + }
+21
AndroidApiTest/gradle.properties
··· 1 + # Project-wide Gradle settings. 2 + # IDE (e.g. Android Studio) users: 3 + # Gradle settings configured through the IDE *will override* 4 + # any settings specified in this file. 5 + # For more details on how to configure your build environment visit 6 + # http://www.gradle.org/docs/current/userguide/build_environment.html 7 + # Specifies the JVM arguments used for the daemon process. 8 + # The setting is particularly useful for tweaking memory settings. 9 + org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 10 + # When configured, Gradle will run in incubating parallel mode. 11 + # This option should only be used with decoupled projects. More details, visit 12 + # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 13 + # org.gradle.parallel=true 14 + # AndroidX package structure to make it clearer which packages are bundled with the 15 + # Android operating system, and which are packaged with your app"s APK 16 + # https://developer.android.com/topic/libraries/support-library/androidx-rn 17 + android.useAndroidX=true 18 + # Enables namespacing of each library's R class so that its R class includes only the 19 + # resources declared in the library itself and none from the library's dependencies, 20 + # thereby reducing the size of the R class for that library 21 + android.nonTransitiveRClass=true
AndroidApiTest/gradle/wrapper/gradle-wrapper.jar

This is a binary file and will not be displayed.

+6
AndroidApiTest/gradle/wrapper/gradle-wrapper.properties
··· 1 + #Mon Apr 25 13:25:28 CEST 2022 2 + distributionBase=GRADLE_USER_HOME 3 + distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip 4 + distributionPath=wrapper/dists 5 + zipStorePath=wrapper/dists 6 + zipStoreBase=GRADLE_USER_HOME
+185
AndroidApiTest/gradlew
··· 1 + #!/usr/bin/env sh 2 + 3 + # 4 + # Copyright 2015 the original author or authors. 5 + # 6 + # Licensed under the Apache License, Version 2.0 (the "License"); 7 + # you may not use this file except in compliance with the License. 8 + # You may obtain a copy of the License at 9 + # 10 + # https://www.apache.org/licenses/LICENSE-2.0 11 + # 12 + # Unless required by applicable law or agreed to in writing, software 13 + # distributed under the License is distributed on an "AS IS" BASIS, 14 + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 + # See the License for the specific language governing permissions and 16 + # limitations under the License. 17 + # 18 + 19 + ############################################################################## 20 + ## 21 + ## Gradle start up script for UN*X 22 + ## 23 + ############################################################################## 24 + 25 + # Attempt to set APP_HOME 26 + # Resolve links: $0 may be a link 27 + PRG="$0" 28 + # Need this for relative symlinks. 29 + while [ -h "$PRG" ] ; do 30 + ls=`ls -ld "$PRG"` 31 + link=`expr "$ls" : '.*-> \(.*\)$'` 32 + if expr "$link" : '/.*' > /dev/null; then 33 + PRG="$link" 34 + else 35 + PRG=`dirname "$PRG"`"/$link" 36 + fi 37 + done 38 + SAVED="`pwd`" 39 + cd "`dirname \"$PRG\"`/" >/dev/null 40 + APP_HOME="`pwd -P`" 41 + cd "$SAVED" >/dev/null 42 + 43 + APP_NAME="Gradle" 44 + APP_BASE_NAME=`basename "$0"` 45 + 46 + # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 47 + DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' 48 + 49 + # Use the maximum available, or set MAX_FD != -1 to use that value. 50 + MAX_FD="maximum" 51 + 52 + warn () { 53 + echo "$*" 54 + } 55 + 56 + die () { 57 + echo 58 + echo "$*" 59 + echo 60 + exit 1 61 + } 62 + 63 + # OS specific support (must be 'true' or 'false'). 64 + cygwin=false 65 + msys=false 66 + darwin=false 67 + nonstop=false 68 + case "`uname`" in 69 + CYGWIN* ) 70 + cygwin=true 71 + ;; 72 + Darwin* ) 73 + darwin=true 74 + ;; 75 + MINGW* ) 76 + msys=true 77 + ;; 78 + NONSTOP* ) 79 + nonstop=true 80 + ;; 81 + esac 82 + 83 + CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 84 + 85 + 86 + # Determine the Java command to use to start the JVM. 87 + if [ -n "$JAVA_HOME" ] ; then 88 + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 89 + # IBM's JDK on AIX uses strange locations for the executables 90 + JAVACMD="$JAVA_HOME/jre/sh/java" 91 + else 92 + JAVACMD="$JAVA_HOME/bin/java" 93 + fi 94 + if [ ! -x "$JAVACMD" ] ; then 95 + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 96 + 97 + Please set the JAVA_HOME variable in your environment to match the 98 + location of your Java installation." 99 + fi 100 + else 101 + JAVACMD="java" 102 + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 103 + 104 + Please set the JAVA_HOME variable in your environment to match the 105 + location of your Java installation." 106 + fi 107 + 108 + # Increase the maximum file descriptors if we can. 109 + if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then 110 + MAX_FD_LIMIT=`ulimit -H -n` 111 + if [ $? -eq 0 ] ; then 112 + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 113 + MAX_FD="$MAX_FD_LIMIT" 114 + fi 115 + ulimit -n $MAX_FD 116 + if [ $? -ne 0 ] ; then 117 + warn "Could not set maximum file descriptor limit: $MAX_FD" 118 + fi 119 + else 120 + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 121 + fi 122 + fi 123 + 124 + # For Darwin, add options to specify how the application appears in the dock 125 + if $darwin; then 126 + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 127 + fi 128 + 129 + # For Cygwin or MSYS, switch paths to Windows format before running java 130 + if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then 131 + APP_HOME=`cygpath --path --mixed "$APP_HOME"` 132 + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 133 + 134 + JAVACMD=`cygpath --unix "$JAVACMD"` 135 + 136 + # We build the pattern for arguments to be converted via cygpath 137 + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 138 + SEP="" 139 + for dir in $ROOTDIRSRAW ; do 140 + ROOTDIRS="$ROOTDIRS$SEP$dir" 141 + SEP="|" 142 + done 143 + OURCYGPATTERN="(^($ROOTDIRS))" 144 + # Add a user-defined pattern to the cygpath arguments 145 + if [ "$GRADLE_CYGPATTERN" != "" ] ; then 146 + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 147 + fi 148 + # Now convert the arguments - kludge to limit ourselves to /bin/sh 149 + i=0 150 + for arg in "$@" ; do 151 + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 152 + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 153 + 154 + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 155 + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 156 + else 157 + eval `echo args$i`="\"$arg\"" 158 + fi 159 + i=`expr $i + 1` 160 + done 161 + case $i in 162 + 0) set -- ;; 163 + 1) set -- "$args0" ;; 164 + 2) set -- "$args0" "$args1" ;; 165 + 3) set -- "$args0" "$args1" "$args2" ;; 166 + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; 167 + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 168 + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 169 + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 170 + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 171 + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 172 + esac 173 + fi 174 + 175 + # Escape application args 176 + save () { 177 + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done 178 + echo " " 179 + } 180 + APP_ARGS=`save "$@"` 181 + 182 + # Collect all arguments for the java command, following the shell quoting and substitution rules 183 + eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" 184 + 185 + exec "$JAVACMD" "$@"
+89
AndroidApiTest/gradlew.bat
··· 1 + @rem 2 + @rem Copyright 2015 the original author or authors. 3 + @rem 4 + @rem Licensed under the Apache License, Version 2.0 (the "License"); 5 + @rem you may not use this file except in compliance with the License. 6 + @rem You may obtain a copy of the License at 7 + @rem 8 + @rem https://www.apache.org/licenses/LICENSE-2.0 9 + @rem 10 + @rem Unless required by applicable law or agreed to in writing, software 11 + @rem distributed under the License is distributed on an "AS IS" BASIS, 12 + @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 + @rem See the License for the specific language governing permissions and 14 + @rem limitations under the License. 15 + @rem 16 + 17 + @if "%DEBUG%" == "" @echo off 18 + @rem ########################################################################## 19 + @rem 20 + @rem Gradle startup script for Windows 21 + @rem 22 + @rem ########################################################################## 23 + 24 + @rem Set local scope for the variables with windows NT shell 25 + if "%OS%"=="Windows_NT" setlocal 26 + 27 + set DIRNAME=%~dp0 28 + if "%DIRNAME%" == "" set DIRNAME=. 29 + set APP_BASE_NAME=%~n0 30 + set APP_HOME=%DIRNAME% 31 + 32 + @rem Resolve any "." and ".." in APP_HOME to make it shorter. 33 + for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi 34 + 35 + @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 36 + set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" 37 + 38 + @rem Find java.exe 39 + if defined JAVA_HOME goto findJavaFromJavaHome 40 + 41 + set JAVA_EXE=java.exe 42 + %JAVA_EXE% -version >NUL 2>&1 43 + if "%ERRORLEVEL%" == "0" goto execute 44 + 45 + echo. 46 + echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 47 + echo. 48 + echo Please set the JAVA_HOME variable in your environment to match the 49 + echo location of your Java installation. 50 + 51 + goto fail 52 + 53 + :findJavaFromJavaHome 54 + set JAVA_HOME=%JAVA_HOME:"=% 55 + set JAVA_EXE=%JAVA_HOME%/bin/java.exe 56 + 57 + if exist "%JAVA_EXE%" goto execute 58 + 59 + echo. 60 + echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 61 + echo. 62 + echo Please set the JAVA_HOME variable in your environment to match the 63 + echo location of your Java installation. 64 + 65 + goto fail 66 + 67 + :execute 68 + @rem Setup the command line 69 + 70 + set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 71 + 72 + 73 + @rem Execute Gradle 74 + "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* 75 + 76 + :end 77 + @rem End local scope for the variables with windows NT shell 78 + if "%ERRORLEVEL%"=="0" goto mainEnd 79 + 80 + :fail 81 + rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 82 + rem the _cmd.exe /c_ return code! 83 + if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 84 + exit /b 1 85 + 86 + :mainEnd 87 + if "%OS%"=="Windows_NT" endlocal 88 + 89 + :omega
+16
AndroidApiTest/settings.gradle
··· 1 + pluginManagement { 2 + repositories { 3 + gradlePluginPortal() 4 + google() 5 + mavenCentral() 6 + } 7 + } 8 + dependencyResolutionManagement { 9 + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) 10 + repositories { 11 + google() 12 + mavenCentral() 13 + } 14 + } 15 + rootProject.name = "AndroidApiTest" 16 + include ':app'
+15
CalculatorJavaBasic/.gitignore
··· 1 + *.iml 2 + .gradle 3 + /local.properties 4 + /.idea/caches 5 + /.idea/libraries 6 + /.idea/modules.xml 7 + /.idea/workspace.xml 8 + /.idea/navEditor.xml 9 + /.idea/assetWizardSettings.xml 10 + .DS_Store 11 + /build 12 + /captures 13 + .externalNativeBuild 14 + .cxx 15 + local.properties
+3
CalculatorJavaBasic/.idea/.gitignore
··· 1 + # Default ignored files 2 + /shelf/ 3 + /workspace.xml
+6
CalculatorJavaBasic/.idea/compiler.xml
··· 1 + <?xml version="1.0" encoding="UTF-8"?> 2 + <project version="4"> 3 + <component name="CompilerConfiguration"> 4 + <bytecodeTargetLevel target="11" /> 5 + </component> 6 + </project>
+20
CalculatorJavaBasic/.idea/gradle.xml
··· 1 + <?xml version="1.0" encoding="UTF-8"?> 2 + <project version="4"> 3 + <component name="GradleMigrationSettings" migrationVersion="1" /> 4 + <component name="GradleSettings"> 5 + <option name="linkedExternalProjectsSettings"> 6 + <GradleProjectSettings> 7 + <option name="testRunner" value="GRADLE" /> 8 + <option name="distributionType" value="DEFAULT_WRAPPED" /> 9 + <option name="externalProjectPath" value="$PROJECT_DIR$" /> 10 + <option name="modules"> 11 + <set> 12 + <option value="$PROJECT_DIR$" /> 13 + <option value="$PROJECT_DIR$/app" /> 14 + </set> 15 + </option> 16 + <option name="resolveModulePerSourceSet" value="false" /> 17 + </GradleProjectSettings> 18 + </option> 19 + </component> 20 + </project>
+17
CalculatorJavaBasic/.idea/misc.xml
··· 1 + <?xml version="1.0" encoding="UTF-8"?> 2 + <project version="4"> 3 + <component name="DesignSurface"> 4 + <option name="filePathToZoomLevelMap"> 5 + <map> 6 + <entry key="..\:/Users/krist/AndroidStudioProjects/CalculatorJavaBasic/app/src/main/res/layout-land/activity_main.xml" value="0.25" /> 7 + <entry key="..\:/Users/krist/AndroidStudioProjects/CalculatorJavaBasic/app/src/main/res/layout/activity_main.xml" value="0.22" /> 8 + </map> 9 + </option> 10 + </component> 11 + <component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="Android Studio default JDK" project-jdk-type="JavaSDK"> 12 + <output url="file://$PROJECT_DIR$/build/classes" /> 13 + </component> 14 + <component name="ProjectType"> 15 + <option name="id" value="Android" /> 16 + </component> 17 + </project>
+1
CalculatorJavaBasic/app/.gitignore
··· 1 + /build
+38
CalculatorJavaBasic/app/build.gradle
··· 1 + plugins { 2 + id 'com.android.application' 3 + } 4 + 5 + android { 6 + compileSdk 32 7 + 8 + defaultConfig { 9 + applicationId "com.example.calculatorjavabasic" 10 + minSdk 28 11 + targetSdk 32 12 + versionCode 1 13 + versionName "1.0" 14 + 15 + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 16 + } 17 + 18 + buildTypes { 19 + release { 20 + minifyEnabled false 21 + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 22 + } 23 + } 24 + compileOptions { 25 + sourceCompatibility JavaVersion.VERSION_1_8 26 + targetCompatibility JavaVersion.VERSION_1_8 27 + } 28 + } 29 + 30 + dependencies { 31 + 32 + implementation 'androidx.appcompat:appcompat:1.3.0' 33 + implementation 'com.google.android.material:material:1.4.0' 34 + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' 35 + testImplementation 'junit:junit:4.13.2' 36 + androidTestImplementation 'androidx.test.ext:junit:1.1.3' 37 + androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' 38 + }
+21
CalculatorJavaBasic/app/proguard-rules.pro
··· 1 + # Add project specific ProGuard rules here. 2 + # You can control the set of applied configuration files using the 3 + # proguardFiles setting in build.gradle. 4 + # 5 + # For more details, see 6 + # http://developer.android.com/guide/developing/tools/proguard.html 7 + 8 + # If your project uses WebView with JS, uncomment the following 9 + # and specify the fully qualified class name to the JavaScript interface 10 + # class: 11 + #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 + # public *; 13 + #} 14 + 15 + # Uncomment this to preserve the line number information for 16 + # debugging stack traces. 17 + #-keepattributes SourceFile,LineNumberTable 18 + 19 + # If you keep the line number information, uncomment this to 20 + # hide the original source file name. 21 + #-renamesourcefileattribute SourceFile
+26
CalculatorJavaBasic/app/src/androidTest/java/com/example/calculatorjavabasic/ExampleInstrumentedTest.java
··· 1 + package com.example.calculatorjavabasic; 2 + 3 + import android.content.Context; 4 + 5 + import androidx.test.platform.app.InstrumentationRegistry; 6 + import androidx.test.ext.junit.runners.AndroidJUnit4; 7 + 8 + import org.junit.Test; 9 + import org.junit.runner.RunWith; 10 + 11 + import static org.junit.Assert.*; 12 + 13 + /** 14 + * Instrumented test, which will execute on an Android device. 15 + * 16 + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> 17 + */ 18 + @RunWith(AndroidJUnit4.class) 19 + public class ExampleInstrumentedTest { 20 + @Test 21 + public void useAppContext() { 22 + // Context of the app under test. 23 + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); 24 + assertEquals("com.example.calculatorjavabasic", appContext.getPackageName()); 25 + } 26 + }
+24
CalculatorJavaBasic/app/src/main/AndroidManifest.xml
··· 1 + <?xml version="1.0" encoding="utf-8"?> 2 + <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 + package="com.example.calculatorjavabasic"> 4 + 5 + <application 6 + android:allowBackup="true" 7 + android:icon="@mipmap/ic_launcher" 8 + android:label="@string/app_name" 9 + android:roundIcon="@mipmap/ic_launcher_round" 10 + android:supportsRtl="true" 11 + android:theme="@style/Theme.CalculatorJavaBasic"> 12 + <activity 13 + android:name=".MainActivity" 14 + android:exported="true" 15 + android:configChanges="orientation|screenSize"> 16 + <intent-filter> 17 + <action android:name="android.intent.action.MAIN" /> 18 + 19 + <category android:name="android.intent.category.LAUNCHER" /> 20 + </intent-filter> 21 + </activity> 22 + </application> 23 + 24 + </manifest>
+317
CalculatorJavaBasic/app/src/main/java/com/example/calculatorjavabasic/MainActivity.java
··· 1 + package com.example.calculatorjavabasic; 2 + 3 + import androidx.appcompat.app.AppCompatActivity; 4 + 5 + import android.os.Bundle; 6 + import android.util.Log; 7 + import android.widget.Button; 8 + import android.widget.TextView; 9 + import android.view.View; 10 + import android.view.View.OnClickListener; 11 + 12 + public class MainActivity extends AppCompatActivity { 13 + private Button btnZero; 14 + private Button btnOne; 15 + private Button btnTwo; 16 + private Button btnThree; 17 + private Button btnFour; 18 + private Button btnFive; 19 + private Button btnSix; 20 + private Button btnSeven; 21 + private Button btnEight; 22 + private Button btnNine; 23 + private Button btnAdd; 24 + private Button btnSubtract; 25 + private Button btnMultiply; 26 + private Button btnDivide; 27 + private Button btnEquals; 28 + 29 + private Button btnClear; 30 + private Button btnBack; 31 + 32 + private TextView txtInput; 33 + private TextView txtSolution; 34 + 35 + private Integer firstField; 36 + private Integer secondField; 37 + private String operator; 38 + 39 + 40 + @Override 41 + protected void onCreate(Bundle savedInstanceState) { 42 + super.onCreate(savedInstanceState); 43 + setContentView(R.layout.activity_main); 44 + 45 + Log.i("WAR", "efheybuiwfuiwb"); 46 + 47 + this.txtInput = (TextView) this.findViewById(R.id.txtInput); 48 + this.txtSolution = (TextView) this.findViewById(R.id.txtSolution); 49 + 50 + this.btnZero = (Button) this.findViewById(R.id.btnZero); 51 + this.btnZero.setOnClickListener(new OnClickListener() { 52 + 53 + @Override 54 + public void onClick(View arg0) { 55 + numberClick(0); 56 + updateInputField(); 57 + } 58 + }); 59 + 60 + this.btnOne = (Button) this.findViewById(R.id.btnOne); 61 + this.btnOne.setOnClickListener(new OnClickListener() { 62 + 63 + @Override 64 + public void onClick(View arg0) { 65 + numberClick(1); 66 + updateInputField(); 67 + } 68 + }); 69 + 70 + this.btnTwo = (Button) this.findViewById(R.id.btnTwo); 71 + this.btnTwo.setOnClickListener(new OnClickListener() { 72 + 73 + @Override 74 + public void onClick(View arg0) { 75 + numberClick(2); 76 + updateInputField(); 77 + } 78 + }); 79 + 80 + this.btnThree = (Button) this.findViewById(R.id.btnThree); 81 + this.btnThree.setOnClickListener(new OnClickListener() { 82 + 83 + @Override 84 + public void onClick(View arg0) { 85 + numberClick(3); 86 + updateInputField(); 87 + } 88 + }); 89 + 90 + this.btnFour = (Button) this.findViewById(R.id.btnFour); 91 + this.btnFour.setOnClickListener(new OnClickListener() { 92 + 93 + @Override 94 + public void onClick(View arg0) { 95 + numberClick(4); 96 + updateInputField(); 97 + } 98 + }); 99 + 100 + this.btnFive = (Button) this.findViewById(R.id.btnFive); 101 + this.btnFive.setOnClickListener(new OnClickListener() { 102 + 103 + @Override 104 + public void onClick(View arg0) { 105 + numberClick(5); 106 + updateInputField(); 107 + } 108 + }); 109 + 110 + this.btnSix = (Button) this.findViewById(R.id.btnSix); 111 + this.btnSix.setOnClickListener(new OnClickListener() { 112 + 113 + @Override 114 + public void onClick(View arg0) { 115 + numberClick(6); 116 + updateInputField(); 117 + } 118 + }); 119 + 120 + this.btnSeven = (Button) this.findViewById(R.id.btnSeven); 121 + this.btnSeven.setOnClickListener(new OnClickListener() { 122 + 123 + @Override 124 + public void onClick(View arg0) { 125 + numberClick(7); 126 + updateInputField(); 127 + } 128 + }); 129 + 130 + this.btnEight = (Button) this.findViewById(R.id.btnEight); 131 + this.btnEight.setOnClickListener(new OnClickListener() { 132 + 133 + @Override 134 + public void onClick(View arg0) { 135 + numberClick(8); 136 + updateInputField(); 137 + } 138 + }); 139 + 140 + this.btnNine = (Button) this.findViewById(R.id.btnNine); 141 + this.btnNine.setOnClickListener(new OnClickListener() { 142 + 143 + @Override 144 + public void onClick(View arg0) { 145 + numberClick(9); 146 + updateInputField(); 147 + } 148 + }); 149 + 150 + this.btnSubtract = (Button) this.findViewById(R.id.btnSubtract); 151 + this.btnSubtract.setOnClickListener(new OnClickListener() { 152 + 153 + @Override 154 + public void onClick(View arg0) { 155 + operatorClick("-"); 156 + updateInputField(); 157 + } 158 + }); 159 + 160 + this.btnMultiply = (Button) this.findViewById(R.id.btnMultiply); 161 + this.btnMultiply.setOnClickListener(new OnClickListener() { 162 + 163 + @Override 164 + public void onClick(View arg0) { 165 + operatorClick("*"); 166 + updateInputField(); 167 + } 168 + }); 169 + 170 + this.btnDivide = (Button) this.findViewById(R.id.btnDivide); 171 + this.btnDivide.setOnClickListener(new OnClickListener() { 172 + 173 + @Override 174 + public void onClick(View arg0) { 175 + operatorClick("/"); 176 + updateInputField(); 177 + } 178 + }); 179 + 180 + this.btnAdd = (Button) this.findViewById(R.id.btnAdd); 181 + this.btnAdd.setOnClickListener(new OnClickListener() { 182 + 183 + @Override 184 + public void onClick(View arg0) { 185 + operatorClick("+"); 186 + updateInputField(); 187 + } 188 + }); 189 + 190 + this.btnEquals = (Button) this.findViewById(R.id.btnEquals); 191 + this.btnEquals.setOnClickListener(new OnClickListener() { 192 + 193 + @Override 194 + public void onClick(View arg0) { 195 + operatorClick("="); 196 + updateInputField(); 197 + } 198 + }); 199 + 200 + this.btnClear = (Button) this.findViewById(R.id.btnClear); 201 + this.btnClear.setOnClickListener(new OnClickListener() { 202 + 203 + @Override 204 + public void onClick(View arg0) { 205 + clearClick(); 206 + updateInputField(); 207 + } 208 + }); 209 + 210 + this.btnBack = (Button) this.findViewById(R.id.btnBack); 211 + this.btnBack.setOnClickListener(new OnClickListener() { 212 + 213 + @Override 214 + public void onClick(View arg0) { 215 + backClick(); 216 + updateInputField(); 217 + } 218 + }); 219 + } 220 + 221 + protected void numberClick(Integer clickedNumber) { 222 + Log.i("ClickedOnNumber", clickedNumber.toString()); 223 + txtInput.setText(clickedNumber.toString()); 224 + if (this.operator == null) { 225 + if (this.firstField != null) { 226 + this.firstField = Integer.parseInt(this.firstField + "" + clickedNumber); 227 + } else { 228 + this.firstField = clickedNumber; 229 + } 230 + } else { 231 + if (this.secondField != null) { 232 + this.secondField = Integer.parseInt(this.secondField + "" + clickedNumber); 233 + } else { 234 + this.secondField = clickedNumber; 235 + } 236 + } 237 + } 238 + 239 + protected void operatorClick(String clickedOperator) { 240 + Log.i("ClickedOnOperator", clickedOperator); 241 + 242 + if (this.secondField == null) { 243 + this.operator = clickedOperator; 244 + return; 245 + } 246 + 247 + if (this.operator == "+") { 248 + this.firstField = this.firstField + this.secondField; 249 + } 250 + 251 + if (this.operator == "-") { 252 + this.firstField = this.firstField - this.secondField; 253 + } 254 + 255 + if (this.operator == "/") { 256 + this.firstField = this.firstField / this.secondField; 257 + } 258 + 259 + if (this.operator == "*") { 260 + this.firstField = this.firstField * this.secondField; 261 + } 262 + 263 + if (clickedOperator == "=") { 264 + this.operator = null; 265 + } else { 266 + this.operator = clickedOperator; 267 + } 268 + this.secondField = null; 269 + } 270 + 271 + protected void updateInputField() { 272 + String inputFieldText = ""; 273 + 274 + if (this.firstField != null) { 275 + inputFieldText = inputFieldText.concat(this.firstField.toString()); 276 + } 277 + 278 + if (this.operator != null) { 279 + inputFieldText = inputFieldText.concat(this.operator); 280 + } 281 + 282 + if (this.secondField != null) { 283 + inputFieldText = inputFieldText.concat(this.secondField.toString()); 284 + } 285 + 286 + Log.i("setText:", inputFieldText); 287 + this.txtInput.setText(inputFieldText); 288 + } 289 + 290 + protected void clearClick() { 291 + this.firstField = null; 292 + this.secondField = null; 293 + this.operator = null; 294 + } 295 + 296 + protected void backClick() { 297 + if (this.secondField != null) { 298 + String secondFieldString = this.secondField.toString(); 299 + 300 + if (secondFieldString.length() > 1) { 301 + this.secondField = Integer.parseInt(secondFieldString.substring(0, secondFieldString.length() - 1)); 302 + } else { 303 + this.secondField = null; 304 + } 305 + } else if (this.operator != null) { 306 + this.operator = null; 307 + } else if (this.firstField != null) { 308 + String firstFieldString = this.firstField.toString(); 309 + 310 + if (firstFieldString.length() > 1) { 311 + this.firstField = Integer.parseInt(firstFieldString.substring(0, firstFieldString.length() - 1)); 312 + } else { 313 + this.firstField = null; 314 + } 315 + } 316 + } 317 + }
+30
CalculatorJavaBasic/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
··· 1 + <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 + xmlns:aapt="http://schemas.android.com/aapt" 3 + android:width="108dp" 4 + android:height="108dp" 5 + android:viewportWidth="108" 6 + android:viewportHeight="108"> 7 + <path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z"> 8 + <aapt:attr name="android:fillColor"> 9 + <gradient 10 + android:endX="85.84757" 11 + android:endY="92.4963" 12 + android:startX="42.9492" 13 + android:startY="49.59793" 14 + android:type="linear"> 15 + <item 16 + android:color="#44000000" 17 + android:offset="0.0" /> 18 + <item 19 + android:color="#00000000" 20 + android:offset="1.0" /> 21 + </gradient> 22 + </aapt:attr> 23 + </path> 24 + <path 25 + android:fillColor="#FFFFFF" 26 + android:fillType="nonZero" 27 + android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z" 28 + android:strokeWidth="1" 29 + android:strokeColor="#00000000" /> 30 + </vector>
+170
CalculatorJavaBasic/app/src/main/res/drawable/ic_launcher_background.xml
··· 1 + <?xml version="1.0" encoding="utf-8"?> 2 + <vector xmlns:android="http://schemas.android.com/apk/res/android" 3 + android:width="108dp" 4 + android:height="108dp" 5 + android:viewportWidth="108" 6 + android:viewportHeight="108"> 7 + <path 8 + android:fillColor="#3DDC84" 9 + android:pathData="M0,0h108v108h-108z" /> 10 + <path 11 + android:fillColor="#00000000" 12 + android:pathData="M9,0L9,108" 13 + android:strokeWidth="0.8" 14 + android:strokeColor="#33FFFFFF" /> 15 + <path 16 + android:fillColor="#00000000" 17 + android:pathData="M19,0L19,108" 18 + android:strokeWidth="0.8" 19 + android:strokeColor="#33FFFFFF" /> 20 + <path 21 + android:fillColor="#00000000" 22 + android:pathData="M29,0L29,108" 23 + android:strokeWidth="0.8" 24 + android:strokeColor="#33FFFFFF" /> 25 + <path 26 + android:fillColor="#00000000" 27 + android:pathData="M39,0L39,108" 28 + android:strokeWidth="0.8" 29 + android:strokeColor="#33FFFFFF" /> 30 + <path 31 + android:fillColor="#00000000" 32 + android:pathData="M49,0L49,108" 33 + android:strokeWidth="0.8" 34 + android:strokeColor="#33FFFFFF" /> 35 + <path 36 + android:fillColor="#00000000" 37 + android:pathData="M59,0L59,108" 38 + android:strokeWidth="0.8" 39 + android:strokeColor="#33FFFFFF" /> 40 + <path 41 + android:fillColor="#00000000" 42 + android:pathData="M69,0L69,108" 43 + android:strokeWidth="0.8" 44 + android:strokeColor="#33FFFFFF" /> 45 + <path 46 + android:fillColor="#00000000" 47 + android:pathData="M79,0L79,108" 48 + android:strokeWidth="0.8" 49 + android:strokeColor="#33FFFFFF" /> 50 + <path 51 + android:fillColor="#00000000" 52 + android:pathData="M89,0L89,108" 53 + android:strokeWidth="0.8" 54 + android:strokeColor="#33FFFFFF" /> 55 + <path 56 + android:fillColor="#00000000" 57 + android:pathData="M99,0L99,108" 58 + android:strokeWidth="0.8" 59 + android:strokeColor="#33FFFFFF" /> 60 + <path 61 + android:fillColor="#00000000" 62 + android:pathData="M0,9L108,9" 63 + android:strokeWidth="0.8" 64 + android:strokeColor="#33FFFFFF" /> 65 + <path 66 + android:fillColor="#00000000" 67 + android:pathData="M0,19L108,19" 68 + android:strokeWidth="0.8" 69 + android:strokeColor="#33FFFFFF" /> 70 + <path 71 + android:fillColor="#00000000" 72 + android:pathData="M0,29L108,29" 73 + android:strokeWidth="0.8" 74 + android:strokeColor="#33FFFFFF" /> 75 + <path 76 + android:fillColor="#00000000" 77 + android:pathData="M0,39L108,39" 78 + android:strokeWidth="0.8" 79 + android:strokeColor="#33FFFFFF" /> 80 + <path 81 + android:fillColor="#00000000" 82 + android:pathData="M0,49L108,49" 83 + android:strokeWidth="0.8" 84 + android:strokeColor="#33FFFFFF" /> 85 + <path 86 + android:fillColor="#00000000" 87 + android:pathData="M0,59L108,59" 88 + android:strokeWidth="0.8" 89 + android:strokeColor="#33FFFFFF" /> 90 + <path 91 + android:fillColor="#00000000" 92 + android:pathData="M0,69L108,69" 93 + android:strokeWidth="0.8" 94 + android:strokeColor="#33FFFFFF" /> 95 + <path 96 + android:fillColor="#00000000" 97 + android:pathData="M0,79L108,79" 98 + android:strokeWidth="0.8" 99 + android:strokeColor="#33FFFFFF" /> 100 + <path 101 + android:fillColor="#00000000" 102 + android:pathData="M0,89L108,89" 103 + android:strokeWidth="0.8" 104 + android:strokeColor="#33FFFFFF" /> 105 + <path 106 + android:fillColor="#00000000" 107 + android:pathData="M0,99L108,99" 108 + android:strokeWidth="0.8" 109 + android:strokeColor="#33FFFFFF" /> 110 + <path 111 + android:fillColor="#00000000" 112 + android:pathData="M19,29L89,29" 113 + android:strokeWidth="0.8" 114 + android:strokeColor="#33FFFFFF" /> 115 + <path 116 + android:fillColor="#00000000" 117 + android:pathData="M19,39L89,39" 118 + android:strokeWidth="0.8" 119 + android:strokeColor="#33FFFFFF" /> 120 + <path 121 + android:fillColor="#00000000" 122 + android:pathData="M19,49L89,49" 123 + android:strokeWidth="0.8" 124 + android:strokeColor="#33FFFFFF" /> 125 + <path 126 + android:fillColor="#00000000" 127 + android:pathData="M19,59L89,59" 128 + android:strokeWidth="0.8" 129 + android:strokeColor="#33FFFFFF" /> 130 + <path 131 + android:fillColor="#00000000" 132 + android:pathData="M19,69L89,69" 133 + android:strokeWidth="0.8" 134 + android:strokeColor="#33FFFFFF" /> 135 + <path 136 + android:fillColor="#00000000" 137 + android:pathData="M19,79L89,79" 138 + android:strokeWidth="0.8" 139 + android:strokeColor="#33FFFFFF" /> 140 + <path 141 + android:fillColor="#00000000" 142 + android:pathData="M29,19L29,89" 143 + android:strokeWidth="0.8" 144 + android:strokeColor="#33FFFFFF" /> 145 + <path 146 + android:fillColor="#00000000" 147 + android:pathData="M39,19L39,89" 148 + android:strokeWidth="0.8" 149 + android:strokeColor="#33FFFFFF" /> 150 + <path 151 + android:fillColor="#00000000" 152 + android:pathData="M49,19L49,89" 153 + android:strokeWidth="0.8" 154 + android:strokeColor="#33FFFFFF" /> 155 + <path 156 + android:fillColor="#00000000" 157 + android:pathData="M59,19L59,89" 158 + android:strokeWidth="0.8" 159 + android:strokeColor="#33FFFFFF" /> 160 + <path 161 + android:fillColor="#00000000" 162 + android:pathData="M69,19L69,89" 163 + android:strokeWidth="0.8" 164 + android:strokeColor="#33FFFFFF" /> 165 + <path 166 + android:fillColor="#00000000" 167 + android:pathData="M79,19L79,89" 168 + android:strokeWidth="0.8" 169 + android:strokeColor="#33FFFFFF" /> 170 + </vector>
+255
CalculatorJavaBasic/app/src/main/res/layout-land/activity_main.xml
··· 1 + <?xml version="1.0" encoding="utf-8"?> 2 + <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 + android:orientation="vertical" 4 + android:layout_width="fill_parent" 5 + android:layout_height="fill_parent"> 6 + 7 + 8 + <LinearLayout 9 + android:layout_width="fill_parent" 10 + android:layout_height="50dp" 11 + android:layout_weight="0.67" 12 + android:orientation="vertical"> 13 + 14 + 15 + <TextView 16 + android:id="@+id/txtSolution" 17 + android:layout_width="fill_parent" 18 + android:layout_height="wrap_content" 19 + android:layout_weight="0.50" 20 + android:gravity="right" 21 + android:paddingTop="5sp" 22 + android:paddingRight="10sp" 23 + android:textSize="5pt" 24 + android:textStyle="bold" /> 25 + 26 + 27 + <TextView 28 + android:id="@+id/txtInput" 29 + android:layout_width="match_parent" 30 + android:layout_height="wrap_content" 31 + android:layout_weight="0.50" 32 + android:gravity="right" 33 + android:paddingTop="5sp" 34 + android:paddingRight="10sp" 35 + android:textSize="5pt" 36 + android:textStyle="bold"/> 37 + 38 + </LinearLayout> 39 + 40 + 41 + <LinearLayout 42 + android:layout_width="fill_parent" 43 + android:layout_height="55dp" 44 + android:orientation="horizontal"> 45 + 46 + 47 + <Button 48 + android:id="@+id/btnClear" 49 + android:layout_width="wrap_content" 50 + android:layout_height="60dp" 51 + android:layout_weight="5" 52 + android:text="Clear" 53 + android:textSize="30sp" 54 + android:textStyle="bold" /> 55 + 56 + <Button 57 + android:id="@+id/btnBack" 58 + android:layout_width="wrap_content" 59 + android:layout_height="60dp" 60 + android:layout_weight=".51" 61 + android:text="BS" 62 + android:textSize="30sp" 63 + android:textStyle="bold" /> 64 + 65 + </LinearLayout> 66 + 67 + <LinearLayout 68 + android:layout_width="fill_parent" 69 + android:layout_height="55dp" 70 + android:orientation="horizontal"> 71 + 72 + 73 + <Button 74 + android:id="@+id/btnSeven" 75 + android:layout_width="wrap_content" 76 + android:layout_height="60dp" 77 + android:layout_weight="1" 78 + android:text="7" 79 + android:textSize="30sp" 80 + android:textStyle="bold" /> 81 + 82 + 83 + <Button 84 + android:id="@+id/btnEight" 85 + android:layout_width="wrap_content" 86 + android:layout_height="60dp" 87 + android:layout_weight="1" 88 + android:text="8" 89 + android:textSize="30sp" 90 + android:textStyle="bold" /> 91 + 92 + 93 + <Button 94 + android:id="@+id/btnNine" 95 + android:layout_width="wrap_content" 96 + android:layout_height="60dp" 97 + android:layout_weight="1" 98 + android:text="9" 99 + android:textSize="30sp" 100 + android:textStyle="bold" /> 101 + 102 + 103 + <Button 104 + android:id="@+id/btnDivide" 105 + android:layout_width="wrap_content" 106 + android:layout_height="60dp" 107 + android:layout_weight="1.15" 108 + android:text="/" 109 + android:textSize="30sp" 110 + android:textStyle="bold" /> 111 + 112 + </LinearLayout> 113 + 114 + <LinearLayout 115 + android:layout_width="fill_parent" 116 + android:layout_height="55dp" 117 + android:orientation="horizontal"> 118 + 119 + 120 + <Button 121 + android:id="@+id/btnFour" 122 + android:layout_width="wrap_content" 123 + android:layout_height="60dp" 124 + android:layout_weight="1" 125 + android:text="4" 126 + android:textSize="30sp" 127 + android:textStyle="bold" /> 128 + 129 + 130 + <Button 131 + android:id="@+id/btnFive" 132 + android:layout_width="wrap_content" 133 + android:layout_height="60dp" 134 + android:layout_weight="1" 135 + android:text="5" 136 + android:textSize="30sp" 137 + android:textStyle="bold" /> 138 + 139 + 140 + <Button 141 + android:id="@+id/btnSix" 142 + android:layout_width="wrap_content" 143 + android:layout_height="60dp" 144 + android:layout_weight="1" 145 + android:text="6" 146 + android:textSize="30sp" 147 + android:textStyle="bold" /> 148 + 149 + 150 + <Button 151 + android:id="@+id/btnMultiply" 152 + android:layout_width="wrap_content" 153 + android:layout_height="60dp" 154 + android:layout_weight=".98" 155 + android:text="x" 156 + android:textSize="30sp" 157 + android:textStyle="bold" /> 158 + 159 + </LinearLayout> 160 + 161 + <LinearLayout 162 + android:layout_width="fill_parent" 163 + android:layout_height="55dp" 164 + android:orientation="horizontal"> 165 + 166 + 167 + <Button 168 + android:id="@+id/btnOne" 169 + android:layout_width="wrap_content" 170 + android:layout_height="60dp" 171 + android:layout_weight="1" 172 + android:text="1" 173 + android:textSize="30sp" 174 + android:textStyle="bold" /> 175 + 176 + 177 + <Button 178 + android:id="@+id/btnTwo" 179 + android:layout_width="wrap_content" 180 + android:layout_height="60dp" 181 + android:layout_weight="1" 182 + android:text="2" 183 + android:textSize="30sp" 184 + android:textStyle="bold" /> 185 + 186 + 187 + <Button 188 + android:id="@+id/btnThree" 189 + android:layout_width="wrap_content" 190 + android:layout_height="60dp" 191 + android:layout_weight="1" 192 + android:text="3" 193 + android:textSize="30sp" 194 + android:textStyle="bold" /> 195 + 196 + 197 + <Button 198 + android:id="@+id/btnSubtract" 199 + android:layout_width="wrap_content" 200 + android:layout_height="60dp" 201 + android:layout_weight="1.27" 202 + android:text="-" 203 + android:textSize="30sp" 204 + android:textStyle="bold" /> 205 + 206 + </LinearLayout> 207 + 208 + <LinearLayout 209 + android:layout_width="fill_parent" 210 + android:layout_height="55dp" 211 + android:orientation="horizontal"> 212 + 213 + 214 + <Button 215 + android:id="@+id/btnDecimal" 216 + android:layout_width="wrap_content" 217 + android:layout_height="60dp" 218 + android:layout_weight="1.22" 219 + android:text="" 220 + android:textSize="30sp" 221 + android:textStyle="bold" /> 222 + 223 + 224 + <Button 225 + android:id="@+id/btnZero" 226 + android:layout_width="wrap_content" 227 + android:layout_height="60dp" 228 + android:layout_weight=".98" 229 + android:text="0" 230 + android:textSize="30sp" 231 + android:textStyle="bold" /> 232 + 233 + 234 + <Button 235 + android:id="@+id/btnEquals" 236 + android:layout_width="wrap_content" 237 + android:layout_height="60dp" 238 + android:layout_weight=".95" 239 + android:text="=" 240 + android:textSize="30sp" 241 + android:textStyle="bold" /> 242 + 243 + 244 + <Button 245 + android:id="@+id/btnAdd" 246 + android:layout_width="wrap_content" 247 + android:layout_height="60dp" 248 + android:layout_weight=".93" 249 + android:text="+" 250 + android:textSize="30sp" 251 + android:textStyle="bold" /> 252 + 253 + </LinearLayout> 254 + 255 + </LinearLayout>
+255
CalculatorJavaBasic/app/src/main/res/layout/activity_main.xml
··· 1 + <?xml version="1.0" encoding="utf-8"?> 2 + <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 + android:orientation="vertical" 4 + android:layout_width="fill_parent" 5 + android:layout_height="fill_parent"> 6 + 7 + 8 + <LinearLayout 9 + android:layout_width="fill_parent" 10 + android:layout_height="50dp" 11 + android:layout_weight="0.67" 12 + android:orientation="vertical"> 13 + 14 + 15 + <TextView 16 + android:id="@+id/txtSolution" 17 + android:layout_width="fill_parent" 18 + android:layout_height="wrap_content" 19 + android:layout_weight="0.50" 20 + android:gravity="right" 21 + android:paddingTop="5sp" 22 + android:paddingRight="10sp" 23 + android:textSize="5pt" 24 + android:textStyle="bold" /> 25 + 26 + 27 + <TextView 28 + android:id="@+id/txtInput" 29 + android:layout_width="match_parent" 30 + android:layout_height="wrap_content" 31 + android:layout_weight="0.50" 32 + android:gravity="right" 33 + android:paddingTop="5sp" 34 + android:paddingRight="10sp" 35 + android:textSize="5pt" 36 + android:textStyle="bold"/> 37 + 38 + </LinearLayout> 39 + 40 + 41 + <LinearLayout 42 + android:layout_width="fill_parent" 43 + android:layout_height="55dp" 44 + android:orientation="horizontal"> 45 + 46 + 47 + <Button 48 + android:id="@+id/btnClear" 49 + android:layout_width="wrap_content" 50 + android:layout_height="60dp" 51 + android:layout_weight="5" 52 + android:text="Clear" 53 + android:textSize="30sp" 54 + android:textStyle="bold" /> 55 + 56 + <Button 57 + android:id="@+id/btnBack" 58 + android:layout_width="wrap_content" 59 + android:layout_height="60dp" 60 + android:layout_weight=".51" 61 + android:text="BS" 62 + android:textSize="30sp" 63 + android:textStyle="bold" /> 64 + 65 + </LinearLayout> 66 + 67 + <LinearLayout 68 + android:layout_width="fill_parent" 69 + android:layout_height="55dp" 70 + android:orientation="horizontal"> 71 + 72 + 73 + <Button 74 + android:id="@+id/btnSeven" 75 + android:layout_width="wrap_content" 76 + android:layout_height="60dp" 77 + android:layout_weight="1" 78 + android:text="7" 79 + android:textSize="30sp" 80 + android:textStyle="bold" /> 81 + 82 + 83 + <Button 84 + android:id="@+id/btnEight" 85 + android:layout_width="wrap_content" 86 + android:layout_height="60dp" 87 + android:layout_weight="1" 88 + android:text="8" 89 + android:textSize="30sp" 90 + android:textStyle="bold" /> 91 + 92 + 93 + <Button 94 + android:id="@+id/btnNine" 95 + android:layout_width="wrap_content" 96 + android:layout_height="60dp" 97 + android:layout_weight="1" 98 + android:text="9" 99 + android:textSize="30sp" 100 + android:textStyle="bold" /> 101 + 102 + 103 + <Button 104 + android:id="@+id/btnDivide" 105 + android:layout_width="wrap_content" 106 + android:layout_height="60dp" 107 + android:layout_weight="1.15" 108 + android:text="/" 109 + android:textSize="30sp" 110 + android:textStyle="bold" /> 111 + 112 + </LinearLayout> 113 + 114 + <LinearLayout 115 + android:layout_width="fill_parent" 116 + android:layout_height="55dp" 117 + android:orientation="horizontal"> 118 + 119 + 120 + <Button 121 + android:id="@+id/btnFour" 122 + android:layout_width="wrap_content" 123 + android:layout_height="60dp" 124 + android:layout_weight="1" 125 + android:text="4" 126 + android:textSize="30sp" 127 + android:textStyle="bold" /> 128 + 129 + 130 + <Button 131 + android:id="@+id/btnFive" 132 + android:layout_width="wrap_content" 133 + android:layout_height="60dp" 134 + android:layout_weight="1" 135 + android:text="5" 136 + android:textSize="30sp" 137 + android:textStyle="bold" /> 138 + 139 + 140 + <Button 141 + android:id="@+id/btnSix" 142 + android:layout_width="wrap_content" 143 + android:layout_height="60dp" 144 + android:layout_weight="1" 145 + android:text="6" 146 + android:textSize="30sp" 147 + android:textStyle="bold" /> 148 + 149 + 150 + <Button 151 + android:id="@+id/btnMultiply" 152 + android:layout_width="wrap_content" 153 + android:layout_height="60dp" 154 + android:layout_weight=".98" 155 + android:text="x" 156 + android:textSize="30sp" 157 + android:textStyle="bold" /> 158 + 159 + </LinearLayout> 160 + 161 + <LinearLayout 162 + android:layout_width="fill_parent" 163 + android:layout_height="55dp" 164 + android:orientation="horizontal"> 165 + 166 + 167 + <Button 168 + android:id="@+id/btnOne" 169 + android:layout_width="wrap_content" 170 + android:layout_height="60dp" 171 + android:layout_weight="1" 172 + android:text="1" 173 + android:textSize="30sp" 174 + android:textStyle="bold" /> 175 + 176 + 177 + <Button 178 + android:id="@+id/btnTwo" 179 + android:layout_width="wrap_content" 180 + android:layout_height="60dp" 181 + android:layout_weight="1" 182 + android:text="2" 183 + android:textSize="30sp" 184 + android:textStyle="bold" /> 185 + 186 + 187 + <Button 188 + android:id="@+id/btnThree" 189 + android:layout_width="wrap_content" 190 + android:layout_height="60dp" 191 + android:layout_weight="1" 192 + android:text="3" 193 + android:textSize="30sp" 194 + android:textStyle="bold" /> 195 + 196 + 197 + <Button 198 + android:id="@+id/btnSubtract" 199 + android:layout_width="wrap_content" 200 + android:layout_height="60dp" 201 + android:layout_weight="1.27" 202 + android:text="-" 203 + android:textSize="30sp" 204 + android:textStyle="bold" /> 205 + 206 + </LinearLayout> 207 + 208 + <LinearLayout 209 + android:layout_width="fill_parent" 210 + android:layout_height="55dp" 211 + android:orientation="horizontal"> 212 + 213 + 214 + <Button 215 + android:id="@+id/btnDecimal" 216 + android:layout_width="wrap_content" 217 + android:layout_height="60dp" 218 + android:layout_weight="1.22" 219 + android:text="" 220 + android:textSize="30sp" 221 + android:textStyle="bold" /> 222 + 223 + 224 + <Button 225 + android:id="@+id/btnZero" 226 + android:layout_width="wrap_content" 227 + android:layout_height="60dp" 228 + android:layout_weight=".98" 229 + android:text="0" 230 + android:textSize="30sp" 231 + android:textStyle="bold" /> 232 + 233 + 234 + <Button 235 + android:id="@+id/btnEquals" 236 + android:layout_width="wrap_content" 237 + android:layout_height="60dp" 238 + android:layout_weight=".95" 239 + android:text="=" 240 + android:textSize="30sp" 241 + android:textStyle="bold" /> 242 + 243 + 244 + <Button 245 + android:id="@+id/btnAdd" 246 + android:layout_width="wrap_content" 247 + android:layout_height="60dp" 248 + android:layout_weight=".93" 249 + android:text="+" 250 + android:textSize="30sp" 251 + android:textStyle="bold" /> 252 + 253 + </LinearLayout> 254 + 255 + </LinearLayout>
+5
CalculatorJavaBasic/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
··· 1 + <?xml version="1.0" encoding="utf-8"?> 2 + <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> 3 + <background android:drawable="@drawable/ic_launcher_background" /> 4 + <foreground android:drawable="@drawable/ic_launcher_foreground" /> 5 + </adaptive-icon>
+5
CalculatorJavaBasic/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
··· 1 + <?xml version="1.0" encoding="utf-8"?> 2 + <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> 3 + <background android:drawable="@drawable/ic_launcher_background" /> 4 + <foreground android:drawable="@drawable/ic_launcher_foreground" /> 5 + </adaptive-icon>
CalculatorJavaBasic/app/src/main/res/mipmap-hdpi/ic_launcher.webp

This is a binary file and will not be displayed.

CalculatorJavaBasic/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp

This is a binary file and will not be displayed.

CalculatorJavaBasic/app/src/main/res/mipmap-mdpi/ic_launcher.webp

This is a binary file and will not be displayed.

CalculatorJavaBasic/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp

This is a binary file and will not be displayed.

CalculatorJavaBasic/app/src/main/res/mipmap-xhdpi/ic_launcher.webp

This is a binary file and will not be displayed.

CalculatorJavaBasic/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp

This is a binary file and will not be displayed.

CalculatorJavaBasic/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp

This is a binary file and will not be displayed.

CalculatorJavaBasic/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp

This is a binary file and will not be displayed.

CalculatorJavaBasic/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp

This is a binary file and will not be displayed.

CalculatorJavaBasic/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp

This is a binary file and will not be displayed.

+16
CalculatorJavaBasic/app/src/main/res/values-night/themes.xml
··· 1 + <resources xmlns:tools="http://schemas.android.com/tools"> 2 + <!-- Base application theme. --> 3 + <style name="Theme.CalculatorJavaBasic" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> 4 + <!-- Primary brand color. --> 5 + <item name="colorPrimary">@color/purple_200</item> 6 + <item name="colorPrimaryVariant">@color/purple_700</item> 7 + <item name="colorOnPrimary">@color/black</item> 8 + <!-- Secondary brand color. --> 9 + <item name="colorSecondary">@color/teal_200</item> 10 + <item name="colorSecondaryVariant">@color/teal_200</item> 11 + <item name="colorOnSecondary">@color/black</item> 12 + <!-- Status bar color. --> 13 + <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item> 14 + <!-- Customize your theme here. --> 15 + </style> 16 + </resources>
+10
CalculatorJavaBasic/app/src/main/res/values/colors.xml
··· 1 + <?xml version="1.0" encoding="utf-8"?> 2 + <resources> 3 + <color name="purple_200">#FFBB86FC</color> 4 + <color name="purple_500">#FF6200EE</color> 5 + <color name="purple_700">#FF3700B3</color> 6 + <color name="teal_200">#FF03DAC5</color> 7 + <color name="teal_700">#FF018786</color> 8 + <color name="black">#FF000000</color> 9 + <color name="white">#FFFFFFFF</color> 10 + </resources>
+3
CalculatorJavaBasic/app/src/main/res/values/strings.xml
··· 1 + <resources> 2 + <string name="app_name">CalculatorJavaBasic</string> 3 + </resources>
+16
CalculatorJavaBasic/app/src/main/res/values/themes.xml
··· 1 + <resources xmlns:tools="http://schemas.android.com/tools"> 2 + <!-- Base application theme. --> 3 + <style name="Theme.CalculatorJavaBasic" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> 4 + <!-- Primary brand color. --> 5 + <item name="colorPrimary">@color/purple_500</item> 6 + <item name="colorPrimaryVariant">@color/purple_700</item> 7 + <item name="colorOnPrimary">@color/white</item> 8 + <!-- Secondary brand color. --> 9 + <item name="colorSecondary">@color/teal_200</item> 10 + <item name="colorSecondaryVariant">@color/teal_700</item> 11 + <item name="colorOnSecondary">@color/black</item> 12 + <!-- Status bar color. --> 13 + <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item> 14 + <!-- Customize your theme here. --> 15 + </style> 16 + </resources>
+17
CalculatorJavaBasic/app/src/test/java/com/example/calculatorjavabasic/ExampleUnitTest.java
··· 1 + package com.example.calculatorjavabasic; 2 + 3 + import org.junit.Test; 4 + 5 + import static org.junit.Assert.*; 6 + 7 + /** 8 + * Example local unit test, which will execute on the development machine (host). 9 + * 10 + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> 11 + */ 12 + public class ExampleUnitTest { 13 + @Test 14 + public void addition_isCorrect() { 15 + assertEquals(4, 2 + 2); 16 + } 17 + }
+9
CalculatorJavaBasic/build.gradle
··· 1 + // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 + plugins { 3 + id 'com.android.application' version '7.1.3' apply false 4 + id 'com.android.library' version '7.1.3' apply false 5 + } 6 + 7 + task clean(type: Delete) { 8 + delete rootProject.buildDir 9 + }
+21
CalculatorJavaBasic/gradle.properties
··· 1 + # Project-wide Gradle settings. 2 + # IDE (e.g. Android Studio) users: 3 + # Gradle settings configured through the IDE *will override* 4 + # any settings specified in this file. 5 + # For more details on how to configure your build environment visit 6 + # http://www.gradle.org/docs/current/userguide/build_environment.html 7 + # Specifies the JVM arguments used for the daemon process. 8 + # The setting is particularly useful for tweaking memory settings. 9 + org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 10 + # When configured, Gradle will run in incubating parallel mode. 11 + # This option should only be used with decoupled projects. More details, visit 12 + # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 13 + # org.gradle.parallel=true 14 + # AndroidX package structure to make it clearer which packages are bundled with the 15 + # Android operating system, and which are packaged with your app"s APK 16 + # https://developer.android.com/topic/libraries/support-library/androidx-rn 17 + android.useAndroidX=true 18 + # Enables namespacing of each library's R class so that its R class includes only the 19 + # resources declared in the library itself and none from the library's dependencies, 20 + # thereby reducing the size of the R class for that library 21 + android.nonTransitiveRClass=true
CalculatorJavaBasic/gradle/wrapper/gradle-wrapper.jar

This is a binary file and will not be displayed.

+6
CalculatorJavaBasic/gradle/wrapper/gradle-wrapper.properties
··· 1 + #Mon Apr 25 10:18:13 CEST 2022 2 + distributionBase=GRADLE_USER_HOME 3 + distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip 4 + distributionPath=wrapper/dists 5 + zipStorePath=wrapper/dists 6 + zipStoreBase=GRADLE_USER_HOME
+185
CalculatorJavaBasic/gradlew
··· 1 + #!/usr/bin/env sh 2 + 3 + # 4 + # Copyright 2015 the original author or authors. 5 + # 6 + # Licensed under the Apache License, Version 2.0 (the "License"); 7 + # you may not use this file except in compliance with the License. 8 + # You may obtain a copy of the License at 9 + # 10 + # https://www.apache.org/licenses/LICENSE-2.0 11 + # 12 + # Unless required by applicable law or agreed to in writing, software 13 + # distributed under the License is distributed on an "AS IS" BASIS, 14 + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 + # See the License for the specific language governing permissions and 16 + # limitations under the License. 17 + # 18 + 19 + ############################################################################## 20 + ## 21 + ## Gradle start up script for UN*X 22 + ## 23 + ############################################################################## 24 + 25 + # Attempt to set APP_HOME 26 + # Resolve links: $0 may be a link 27 + PRG="$0" 28 + # Need this for relative symlinks. 29 + while [ -h "$PRG" ] ; do 30 + ls=`ls -ld "$PRG"` 31 + link=`expr "$ls" : '.*-> \(.*\)$'` 32 + if expr "$link" : '/.*' > /dev/null; then 33 + PRG="$link" 34 + else 35 + PRG=`dirname "$PRG"`"/$link" 36 + fi 37 + done 38 + SAVED="`pwd`" 39 + cd "`dirname \"$PRG\"`/" >/dev/null 40 + APP_HOME="`pwd -P`" 41 + cd "$SAVED" >/dev/null 42 + 43 + APP_NAME="Gradle" 44 + APP_BASE_NAME=`basename "$0"` 45 + 46 + # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 47 + DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' 48 + 49 + # Use the maximum available, or set MAX_FD != -1 to use that value. 50 + MAX_FD="maximum" 51 + 52 + warn () { 53 + echo "$*" 54 + } 55 + 56 + die () { 57 + echo 58 + echo "$*" 59 + echo 60 + exit 1 61 + } 62 + 63 + # OS specific support (must be 'true' or 'false'). 64 + cygwin=false 65 + msys=false 66 + darwin=false 67 + nonstop=false 68 + case "`uname`" in 69 + CYGWIN* ) 70 + cygwin=true 71 + ;; 72 + Darwin* ) 73 + darwin=true 74 + ;; 75 + MINGW* ) 76 + msys=true 77 + ;; 78 + NONSTOP* ) 79 + nonstop=true 80 + ;; 81 + esac 82 + 83 + CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 84 + 85 + 86 + # Determine the Java command to use to start the JVM. 87 + if [ -n "$JAVA_HOME" ] ; then 88 + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 89 + # IBM's JDK on AIX uses strange locations for the executables 90 + JAVACMD="$JAVA_HOME/jre/sh/java" 91 + else 92 + JAVACMD="$JAVA_HOME/bin/java" 93 + fi 94 + if [ ! -x "$JAVACMD" ] ; then 95 + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 96 + 97 + Please set the JAVA_HOME variable in your environment to match the 98 + location of your Java installation." 99 + fi 100 + else 101 + JAVACMD="java" 102 + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 103 + 104 + Please set the JAVA_HOME variable in your environment to match the 105 + location of your Java installation." 106 + fi 107 + 108 + # Increase the maximum file descriptors if we can. 109 + if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then 110 + MAX_FD_LIMIT=`ulimit -H -n` 111 + if [ $? -eq 0 ] ; then 112 + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 113 + MAX_FD="$MAX_FD_LIMIT" 114 + fi 115 + ulimit -n $MAX_FD 116 + if [ $? -ne 0 ] ; then 117 + warn "Could not set maximum file descriptor limit: $MAX_FD" 118 + fi 119 + else 120 + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 121 + fi 122 + fi 123 + 124 + # For Darwin, add options to specify how the application appears in the dock 125 + if $darwin; then 126 + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 127 + fi 128 + 129 + # For Cygwin or MSYS, switch paths to Windows format before running java 130 + if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then 131 + APP_HOME=`cygpath --path --mixed "$APP_HOME"` 132 + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 133 + 134 + JAVACMD=`cygpath --unix "$JAVACMD"` 135 + 136 + # We build the pattern for arguments to be converted via cygpath 137 + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 138 + SEP="" 139 + for dir in $ROOTDIRSRAW ; do 140 + ROOTDIRS="$ROOTDIRS$SEP$dir" 141 + SEP="|" 142 + done 143 + OURCYGPATTERN="(^($ROOTDIRS))" 144 + # Add a user-defined pattern to the cygpath arguments 145 + if [ "$GRADLE_CYGPATTERN" != "" ] ; then 146 + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 147 + fi 148 + # Now convert the arguments - kludge to limit ourselves to /bin/sh 149 + i=0 150 + for arg in "$@" ; do 151 + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 152 + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 153 + 154 + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 155 + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 156 + else 157 + eval `echo args$i`="\"$arg\"" 158 + fi 159 + i=`expr $i + 1` 160 + done 161 + case $i in 162 + 0) set -- ;; 163 + 1) set -- "$args0" ;; 164 + 2) set -- "$args0" "$args1" ;; 165 + 3) set -- "$args0" "$args1" "$args2" ;; 166 + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; 167 + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 168 + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 169 + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 170 + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 171 + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 172 + esac 173 + fi 174 + 175 + # Escape application args 176 + save () { 177 + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done 178 + echo " " 179 + } 180 + APP_ARGS=`save "$@"` 181 + 182 + # Collect all arguments for the java command, following the shell quoting and substitution rules 183 + eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" 184 + 185 + exec "$JAVACMD" "$@"
+89
CalculatorJavaBasic/gradlew.bat
··· 1 + @rem 2 + @rem Copyright 2015 the original author or authors. 3 + @rem 4 + @rem Licensed under the Apache License, Version 2.0 (the "License"); 5 + @rem you may not use this file except in compliance with the License. 6 + @rem You may obtain a copy of the License at 7 + @rem 8 + @rem https://www.apache.org/licenses/LICENSE-2.0 9 + @rem 10 + @rem Unless required by applicable law or agreed to in writing, software 11 + @rem distributed under the License is distributed on an "AS IS" BASIS, 12 + @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 + @rem See the License for the specific language governing permissions and 14 + @rem limitations under the License. 15 + @rem 16 + 17 + @if "%DEBUG%" == "" @echo off 18 + @rem ########################################################################## 19 + @rem 20 + @rem Gradle startup script for Windows 21 + @rem 22 + @rem ########################################################################## 23 + 24 + @rem Set local scope for the variables with windows NT shell 25 + if "%OS%"=="Windows_NT" setlocal 26 + 27 + set DIRNAME=%~dp0 28 + if "%DIRNAME%" == "" set DIRNAME=. 29 + set APP_BASE_NAME=%~n0 30 + set APP_HOME=%DIRNAME% 31 + 32 + @rem Resolve any "." and ".." in APP_HOME to make it shorter. 33 + for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi 34 + 35 + @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 36 + set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" 37 + 38 + @rem Find java.exe 39 + if defined JAVA_HOME goto findJavaFromJavaHome 40 + 41 + set JAVA_EXE=java.exe 42 + %JAVA_EXE% -version >NUL 2>&1 43 + if "%ERRORLEVEL%" == "0" goto execute 44 + 45 + echo. 46 + echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 47 + echo. 48 + echo Please set the JAVA_HOME variable in your environment to match the 49 + echo location of your Java installation. 50 + 51 + goto fail 52 + 53 + :findJavaFromJavaHome 54 + set JAVA_HOME=%JAVA_HOME:"=% 55 + set JAVA_EXE=%JAVA_HOME%/bin/java.exe 56 + 57 + if exist "%JAVA_EXE%" goto execute 58 + 59 + echo. 60 + echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 61 + echo. 62 + echo Please set the JAVA_HOME variable in your environment to match the 63 + echo location of your Java installation. 64 + 65 + goto fail 66 + 67 + :execute 68 + @rem Setup the command line 69 + 70 + set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 71 + 72 + 73 + @rem Execute Gradle 74 + "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* 75 + 76 + :end 77 + @rem End local scope for the variables with windows NT shell 78 + if "%ERRORLEVEL%"=="0" goto mainEnd 79 + 80 + :fail 81 + rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 82 + rem the _cmd.exe /c_ return code! 83 + if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 84 + exit /b 1 85 + 86 + :mainEnd 87 + if "%OS%"=="Windows_NT" endlocal 88 + 89 + :omega
+16
CalculatorJavaBasic/settings.gradle
··· 1 + pluginManagement { 2 + repositories { 3 + gradlePluginPortal() 4 + google() 5 + mavenCentral() 6 + } 7 + } 8 + dependencyResolutionManagement { 9 + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) 10 + repositories { 11 + google() 12 + mavenCentral() 13 + } 14 + } 15 + rootProject.name = "CalculatorJavaBasic" 16 + include ':app'
+46
flutter_test_app/.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
+10
flutter_test_app/.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: 5464c5bac742001448fe4fc0597be939379f88ea 8 + channel: stable 9 + 10 + project_type: app
+16
flutter_test_app/README.md
··· 1 + # flutter_test_app 2 + 3 + A new Flutter project. 4 + 5 + ## Getting Started 6 + 7 + This project is a starting point for a Flutter application. 8 + 9 + A few resources to get you started if this is your first Flutter project: 10 + 11 + - [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab) 12 + - [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook) 13 + 14 + For help getting started with Flutter, view our 15 + [online documentation](https://flutter.dev/docs), which offers tutorials, 16 + samples, guidance on mobile development, and a full API reference.
+29
flutter_test_app/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
+13
flutter_test_app/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
+68
flutter_test_app/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 "me.binau.flutter_test_app" 47 + minSdkVersion flutter.minSdkVersion 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 + }
+7
flutter_test_app/android/app/src/debug/AndroidManifest.xml
··· 1 + <manifest xmlns:android="http://schemas.android.com/apk/res/android" 2 + package="me.binau.flutter_test_app"> 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>
+34
flutter_test_app/android/app/src/main/AndroidManifest.xml
··· 1 + <manifest xmlns:android="http://schemas.android.com/apk/res/android" 2 + package="me.binau.flutter_test_app"> 3 + <application 4 + android:label="flutter_test_app" 5 + android:name="${applicationName}" 6 + android:icon="@mipmap/ic_launcher"> 7 + <activity 8 + android:name=".MainActivity" 9 + android:exported="true" 10 + android:launchMode="singleTop" 11 + android:theme="@style/LaunchTheme" 12 + android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" 13 + android:hardwareAccelerated="true" 14 + android:windowSoftInputMode="adjustResize"> 15 + <!-- Specifies an Android theme to apply to this Activity as soon as 16 + the Android process has started. This theme is visible to the user 17 + while the Flutter UI initializes. After that, this theme continues 18 + to determine the Window background behind the Flutter UI. --> 19 + <meta-data 20 + android:name="io.flutter.embedding.android.NormalTheme" 21 + android:resource="@style/NormalTheme" 22 + /> 23 + <intent-filter> 24 + <action android:name="android.intent.action.MAIN"/> 25 + <category android:name="android.intent.category.LAUNCHER"/> 26 + </intent-filter> 27 + </activity> 28 + <!-- Don't delete the meta-data below. 29 + This is used by the Flutter tool to generate GeneratedPluginRegistrant.java --> 30 + <meta-data 31 + android:name="flutterEmbedding" 32 + android:value="2" /> 33 + </application> 34 + </manifest>
+6
flutter_test_app/android/app/src/main/kotlin/me/binau/flutter_test_app/MainActivity.kt
··· 1 + package me.binau.flutter_test_app 2 + 3 + import io.flutter.embedding.android.FlutterActivity 4 + 5 + class MainActivity: FlutterActivity() { 6 + }
+12
flutter_test_app/android/app/src/main/res/drawable-v21/launch_background.xml
··· 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:colorBackground" /> 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>
+12
flutter_test_app/android/app/src/main/res/drawable/launch_background.xml
··· 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>
flutter_test_app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png

This is a binary file and will not be displayed.

flutter_test_app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png

This is a binary file and will not be displayed.

flutter_test_app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png

This is a binary file and will not be displayed.

flutter_test_app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png

This is a binary file and will not be displayed.

flutter_test_app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png

This is a binary file and will not be displayed.

+18
flutter_test_app/android/app/src/main/res/values-night/styles.xml
··· 1 + <?xml version="1.0" encoding="utf-8"?> 2 + <resources> 3 + <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on --> 4 + <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar"> 5 + <!-- Show a splash screen on the activity. Automatically removed when 6 + Flutter draws its first frame --> 7 + <item name="android:windowBackground">@drawable/launch_background</item> 8 + </style> 9 + <!-- Theme applied to the Android Window as soon as the process has started. 10 + This theme determines the color of the Android Window while your 11 + Flutter UI initializes, as well as behind your Flutter UI while its 12 + running. 13 + 14 + This Theme is only used starting with V2 of Flutter's Android embedding. --> 15 + <style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar"> 16 + <item name="android:windowBackground">?android:colorBackground</item> 17 + </style> 18 + </resources>
+18
flutter_test_app/android/app/src/main/res/values/styles.xml
··· 1 + <?xml version="1.0" encoding="utf-8"?> 2 + <resources> 3 + <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off --> 4 + <style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar"> 5 + <!-- Show a splash screen on the activity. Automatically removed when 6 + Flutter draws its first frame --> 7 + <item name="android:windowBackground">@drawable/launch_background</item> 8 + </style> 9 + <!-- Theme applied to the Android Window as soon as the process has started. 10 + This theme determines the color of the Android Window while your 11 + Flutter UI initializes, as well as behind your Flutter UI while its 12 + running. 13 + 14 + This Theme is only used starting with V2 of Flutter's Android embedding. --> 15 + <style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar"> 16 + <item name="android:windowBackground">?android:colorBackground</item> 17 + </style> 18 + </resources>
+7
flutter_test_app/android/app/src/profile/AndroidManifest.xml
··· 1 + <manifest xmlns:android="http://schemas.android.com/apk/res/android" 2 + package="me.binau.flutter_test_app"> 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>
+31
flutter_test_app/android/build.gradle
··· 1 + buildscript { 2 + ext.kotlin_version = '1.6.10' 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 + }
+3
flutter_test_app/android/gradle.properties
··· 1 + org.gradle.jvmargs=-Xmx1536M 2 + android.useAndroidX=true 3 + android.enableJetifier=true
+6
flutter_test_app/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
+11
flutter_test_app/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"
+34
flutter_test_app/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
+26
flutter_test_app/ios/Flutter/AppFrameworkInfo.plist
··· 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>9.0</string> 25 + </dict> 26 + </plist>
+1
flutter_test_app/ios/Flutter/Debug.xcconfig
··· 1 + #include "Generated.xcconfig"
+1
flutter_test_app/ios/Flutter/Release.xcconfig
··· 1 + #include "Generated.xcconfig"
+481
flutter_test_app/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 = "<group>"; }; 33 + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; }; 34 + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; }; 35 + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; }; 36 + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; 37 + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; }; 38 + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; }; 39 + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; }; 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 = "<group>"; }; 42 + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; 43 + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; 44 + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; 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 = "<group>"; 68 + }; 69 + 97C146E51CF9000F007C117D = { 70 + isa = PBXGroup; 71 + children = ( 72 + 9740EEB11CF90186004384FC /* Flutter */, 73 + 97C146F01CF9000F007C117D /* Runner */, 74 + 97C146EF1CF9000F007C117D /* Products */, 75 + ); 76 + sourceTree = "<group>"; 77 + }; 78 + 97C146EF1CF9000F007C117D /* Products */ = { 79 + isa = PBXGroup; 80 + children = ( 81 + 97C146EE1CF9000F007C117D /* Runner.app */, 82 + ); 83 + name = Products; 84 + sourceTree = "<group>"; 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 = "<group>"; 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 = "<group>"; 222 + }; 223 + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { 224 + isa = PBXVariantGroup; 225 + children = ( 226 + 97C147001CF9000F007C117D /* Base */, 227 + ); 228 + name = LaunchScreen.storyboard; 229 + sourceTree = "<group>"; 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 = me.binau.flutterTestApp; 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 = me.binau.flutterTestApp; 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 = me.binau.flutterTestApp; 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 + }
+7
flutter_test_app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
··· 1 + <?xml version="1.0" encoding="UTF-8"?> 2 + <Workspace 3 + version = "1.0"> 4 + <FileRef 5 + location = "self:"> 6 + </FileRef> 7 + </Workspace>
+8
flutter_test_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
··· 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>IDEDidComputeMac32BitWarning</key> 6 + <true/> 7 + </dict> 8 + </plist>
+8
flutter_test_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
··· 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>PreviewsEnabled</key> 6 + <false/> 7 + </dict> 8 + </plist>
+87
flutter_test_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
··· 1 + <?xml version="1.0" encoding="UTF-8"?> 2 + <Scheme 3 + LastUpgradeVersion = "1300" 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 + shouldUseLaunchSchemeArgsEnv = "YES"> 30 + <MacroExpansion> 31 + <BuildableReference 32 + BuildableIdentifier = "primary" 33 + BlueprintIdentifier = "97C146ED1CF9000F007C117D" 34 + BuildableName = "Runner.app" 35 + BlueprintName = "Runner" 36 + ReferencedContainer = "container:Runner.xcodeproj"> 37 + </BuildableReference> 38 + </MacroExpansion> 39 + <Testables> 40 + </Testables> 41 + </TestAction> 42 + <LaunchAction 43 + buildConfiguration = "Debug" 44 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" 45 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" 46 + launchStyle = "0" 47 + useCustomWorkingDirectory = "NO" 48 + ignoresPersistentStateOnLaunch = "NO" 49 + debugDocumentVersioning = "YES" 50 + debugServiceExtension = "internal" 51 + allowLocationSimulation = "YES"> 52 + <BuildableProductRunnable 53 + runnableDebuggingMode = "0"> 54 + <BuildableReference 55 + BuildableIdentifier = "primary" 56 + BlueprintIdentifier = "97C146ED1CF9000F007C117D" 57 + BuildableName = "Runner.app" 58 + BlueprintName = "Runner" 59 + ReferencedContainer = "container:Runner.xcodeproj"> 60 + </BuildableReference> 61 + </BuildableProductRunnable> 62 + </LaunchAction> 63 + <ProfileAction 64 + buildConfiguration = "Profile" 65 + shouldUseLaunchSchemeArgsEnv = "YES" 66 + savedToolIdentifier = "" 67 + useCustomWorkingDirectory = "NO" 68 + debugDocumentVersioning = "YES"> 69 + <BuildableProductRunnable 70 + runnableDebuggingMode = "0"> 71 + <BuildableReference 72 + BuildableIdentifier = "primary" 73 + BlueprintIdentifier = "97C146ED1CF9000F007C117D" 74 + BuildableName = "Runner.app" 75 + BlueprintName = "Runner" 76 + ReferencedContainer = "container:Runner.xcodeproj"> 77 + </BuildableReference> 78 + </BuildableProductRunnable> 79 + </ProfileAction> 80 + <AnalyzeAction 81 + buildConfiguration = "Debug"> 82 + </AnalyzeAction> 83 + <ArchiveAction 84 + buildConfiguration = "Release" 85 + revealArchiveInOrganizer = "YES"> 86 + </ArchiveAction> 87 + </Scheme>
+7
flutter_test_app/ios/Runner.xcworkspace/contents.xcworkspacedata
··· 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>
+8
flutter_test_app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
··· 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>IDEDidComputeMac32BitWarning</key> 6 + <true/> 7 + </dict> 8 + </plist>
+8
flutter_test_app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
··· 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>PreviewsEnabled</key> 6 + <false/> 7 + </dict> 8 + </plist>
+13
flutter_test_app/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 + }
+122
flutter_test_app/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 + }
flutter_test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png

This is a binary file and will not be displayed.

flutter_test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png

This is a binary file and will not be displayed.

flutter_test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png

This is a binary file and will not be displayed.

flutter_test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png

This is a binary file and will not be displayed.

flutter_test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png

This is a binary file and will not be displayed.

flutter_test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png

This is a binary file and will not be displayed.

flutter_test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png

This is a binary file and will not be displayed.

flutter_test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png

This is a binary file and will not be displayed.

flutter_test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png

This is a binary file and will not be displayed.

flutter_test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png

This is a binary file and will not be displayed.

flutter_test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png

This is a binary file and will not be displayed.

flutter_test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png

This is a binary file and will not be displayed.

flutter_test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png

This is a binary file and will not be displayed.

flutter_test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png

This is a binary file and will not be displayed.

flutter_test_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png

This is a binary file and will not be displayed.

+23
flutter_test_app/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 + }
flutter_test_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png

This is a binary file and will not be displayed.

flutter_test_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png

This is a binary file and will not be displayed.

flutter_test_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png

This is a binary file and will not be displayed.

+5
flutter_test_app/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.
+37
flutter_test_app/ios/Runner/Base.lproj/LaunchScreen.storyboard
··· 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>
+26
flutter_test_app/ios/Runner/Base.lproj/Main.storyboard
··· 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>
+47
flutter_test_app/ios/Runner/Info.plist
··· 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>$(DEVELOPMENT_LANGUAGE)</string> 7 + <key>CFBundleDisplayName</key> 8 + <string>Flutter Test App</string> 9 + <key>CFBundleExecutable</key> 10 + <string>$(EXECUTABLE_NAME)</string> 11 + <key>CFBundleIdentifier</key> 12 + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> 13 + <key>CFBundleInfoDictionaryVersion</key> 14 + <string>6.0</string> 15 + <key>CFBundleName</key> 16 + <string>flutter_test_app</string> 17 + <key>CFBundlePackageType</key> 18 + <string>APPL</string> 19 + <key>CFBundleShortVersionString</key> 20 + <string>$(FLUTTER_BUILD_NAME)</string> 21 + <key>CFBundleSignature</key> 22 + <string>????</string> 23 + <key>CFBundleVersion</key> 24 + <string>$(FLUTTER_BUILD_NUMBER)</string> 25 + <key>LSRequiresIPhoneOS</key> 26 + <true/> 27 + <key>UILaunchStoryboardName</key> 28 + <string>LaunchScreen</string> 29 + <key>UIMainStoryboardFile</key> 30 + <string>Main</string> 31 + <key>UISupportedInterfaceOrientations</key> 32 + <array> 33 + <string>UIInterfaceOrientationPortrait</string> 34 + <string>UIInterfaceOrientationLandscapeLeft</string> 35 + <string>UIInterfaceOrientationLandscapeRight</string> 36 + </array> 37 + <key>UISupportedInterfaceOrientations~ipad</key> 38 + <array> 39 + <string>UIInterfaceOrientationPortrait</string> 40 + <string>UIInterfaceOrientationPortraitUpsideDown</string> 41 + <string>UIInterfaceOrientationLandscapeLeft</string> 42 + <string>UIInterfaceOrientationLandscapeRight</string> 43 + </array> 44 + <key>UIViewControllerBasedStatusBarAppearance</key> 45 + <false/> 46 + </dict> 47 + </plist>
+1
flutter_test_app/ios/Runner/Runner-Bridging-Header.h
··· 1 + #import "GeneratedPluginRegistrant.h"
+58
flutter_test_app/lib/components/body.dart
··· 1 + import 'package:flutter/material.dart'; 2 + 3 + class CalculatorBody extends StatelessWidget { 4 + const CalculatorBody({ 5 + Key? key, 6 + num? firstSection, 7 + String? operator, 8 + num? secondSection, 9 + required bool darkTheme, 10 + }) : _firstSection = firstSection, 11 + _operator = operator, 12 + _secondSection = secondSection, 13 + _darkTheme = darkTheme, 14 + super(key: key); 15 + 16 + final num? _firstSection; 17 + final String? _operator; 18 + final num? _secondSection; 19 + final bool _darkTheme; 20 + 21 + String getText() { 22 + String returnString = ""; 23 + 24 + if (_firstSection != null) { 25 + debugPrint('getText: FirstSection:' + _firstSection.toString()); 26 + returnString = returnString + _firstSection.toString(); 27 + } 28 + 29 + if (_operator != null) { 30 + debugPrint('getText: Operator:' + _operator.toString()); 31 + returnString = returnString + _operator.toString(); 32 + } 33 + 34 + if (_secondSection != null) { 35 + debugPrint('getText: SecondSection:' + _secondSection.toString()); 36 + returnString = returnString + _secondSection.toString(); 37 + } 38 + debugPrint('getText: ' + returnString.toString()); 39 + 40 + return returnString; 41 + } 42 + 43 + @override 44 + Widget build(BuildContext context) { 45 + return Expanded( 46 + child: Container( 47 + padding: const EdgeInsets.all(20), 48 + alignment: Alignment.bottomRight, 49 + child: Text( 50 + getText(), 51 + style: Theme.of(context).textTheme.headline2?.copyWith( 52 + color: _darkTheme ? Colors.white : Colors.black, 53 + ), 54 + ), 55 + ), 56 + ); 57 + } 58 + }
+80
flutter_test_app/lib/components/button.dart
··· 1 + import 'package:flutter_test_app/utils/theme.dart'; 2 + import 'package:flutter/material.dart'; 3 + 4 + class CalculatorButton extends StatelessWidget { 5 + final String type; 6 + final int flex; 7 + final String buttonText; 8 + final VoidCallback onPressed; 9 + const CalculatorButton({ 10 + Key? key, 11 + required this.buttonText, 12 + required this.onPressed, 13 + this.flex = 1, 14 + this.type = "number", 15 + }) : super(key: key); 16 + 17 + @override 18 + Widget build(BuildContext context) { 19 + return Expanded( 20 + flex: flex, 21 + child: Container( 22 + margin: const EdgeInsets.symmetric( 23 + vertical: 10, 24 + horizontal: 5, 25 + ), 26 + decoration: BoxDecoration( 27 + borderRadius: BorderRadius.circular(50), 28 + ), 29 + child: TextButton( 30 + child: Text( 31 + buttonText, 32 + style: const TextStyle( 33 + fontSize: 32, 34 + ), 35 + ), 36 + onPressed: onPressed, 37 + style: ButtonStyle( 38 + shape: MaterialStateProperty.resolveWith( 39 + (states) => RoundedRectangleBorder( 40 + borderRadius: BorderRadius.circular(50), 41 + ), 42 + ), 43 + backgroundColor: MaterialStateProperty.resolveWith( 44 + (states) => bgColor(), 45 + ), 46 + foregroundColor: MaterialStateProperty.resolveWith( 47 + (states) => fgColor(), 48 + ), 49 + ), 50 + ), 51 + ), 52 + ); 53 + } 54 + 55 + Color bgColor() { 56 + switch (type) { 57 + case "number": 58 + return CalculatorTheme.numberButtonColor; 59 + case "operator": 60 + return CalculatorTheme.operationButtonColor; 61 + case "function": 62 + return CalculatorTheme.functionButtonColor; 63 + default: 64 + return CalculatorTheme.numberButtonColor; 65 + } 66 + } 67 + 68 + Color fgColor() { 69 + switch (type) { 70 + case "number": 71 + return CalculatorTheme.numberButtonTextColor; 72 + case "operator": 73 + return CalculatorTheme.operationButtonTextColor; 74 + case "function": 75 + return CalculatorTheme.functionButtonTextColor; 76 + default: 77 + return CalculatorTheme.numberButtonColor; 78 + } 79 + } 80 + }
+199
flutter_test_app/lib/components/keypad.dart
··· 1 + import 'package:flutter_test_app/components/button.dart'; 2 + import 'package:flutter/material.dart'; 3 + 4 + class KeyPad extends StatelessWidget { 5 + final bool darkTheme; 6 + const KeyPad({ 7 + Key? key, 8 + required this.onNumberSelect, 9 + required this.onOperatorSelect, 10 + required this.onClearSelect, 11 + this.darkTheme = true, 12 + }) : super(key: key); 13 + 14 + final setNumberCallback onNumberSelect; 15 + final setOperatorCallback onOperatorSelect; 16 + final setClearCallback onClearSelect; 17 + 18 + @override 19 + Widget build(BuildContext context) { 20 + return AnimatedContainer( 21 + duration: const Duration(milliseconds: 300), 22 + decoration: BoxDecoration( 23 + borderRadius: const BorderRadius.only( 24 + topLeft: Radius.circular(20), 25 + topRight: Radius.circular(20), 26 + ), 27 + gradient: LinearGradient( 28 + colors: [ 29 + darkTheme ? const Color(0xFF383838) : const Color(0xFFA1A1A1), 30 + darkTheme ? const Color(0xFF666666) : const Color(0xFF6C6C6C), 31 + ], 32 + begin: Alignment.topCenter, 33 + end: Alignment.bottomCenter, 34 + ), 35 + ), 36 + padding: const EdgeInsets.all(10.0), 37 + child: Column( 38 + children: [ 39 + Row( 40 + children: [ 41 + CalculatorButton( 42 + buttonText: "AC", 43 + onPressed: () { 44 + onClearSelect(false); 45 + }, 46 + type: "function", 47 + ), 48 + CalculatorButton( 49 + buttonText: "BS", 50 + onPressed: () { 51 + onClearSelect(true); 52 + }, 53 + type: "function", 54 + ), 55 + CalculatorButton( 56 + buttonText: "", 57 + onPressed: () {}, 58 + type: "function", 59 + ), 60 + CalculatorButton( 61 + buttonText: "/", 62 + onPressed: () {}, 63 + type: "operator", 64 + ), 65 + ], 66 + ), 67 + Row( 68 + mainAxisAlignment: MainAxisAlignment.center, 69 + children: [ 70 + CalculatorButton( 71 + buttonText: "7", 72 + onPressed: () { 73 + onNumberSelect(7); 74 + }, 75 + type: "number", 76 + ), 77 + CalculatorButton( 78 + buttonText: "8", 79 + onPressed: () { 80 + onNumberSelect(8); 81 + }, 82 + type: "number", 83 + ), 84 + CalculatorButton( 85 + buttonText: "9", 86 + onPressed: () { 87 + onNumberSelect(9); 88 + }, 89 + type: "number", 90 + ), 91 + CalculatorButton( 92 + buttonText: "*", 93 + onPressed: () { 94 + onOperatorSelect("*"); 95 + }, 96 + type: "operator", 97 + ), 98 + ], 99 + ), 100 + 101 + Row( 102 + mainAxisAlignment: MainAxisAlignment.center, 103 + children: [ 104 + CalculatorButton( 105 + buttonText: "4", 106 + onPressed: () { 107 + onNumberSelect(4); 108 + }, 109 + type: "number", 110 + ), 111 + CalculatorButton( 112 + buttonText: "5", 113 + onPressed: () { 114 + onNumberSelect(5); 115 + }, 116 + type: "number", 117 + ), 118 + CalculatorButton( 119 + buttonText: "6", 120 + onPressed: () { 121 + onNumberSelect(6); 122 + }, 123 + type: "number", 124 + ), 125 + CalculatorButton( 126 + buttonText: "-", 127 + onPressed: () { 128 + onOperatorSelect("-"); 129 + }, 130 + type: "operator", 131 + ), 132 + ], 133 + ), 134 + Row( 135 + mainAxisAlignment: MainAxisAlignment.center, 136 + children: [ 137 + CalculatorButton( 138 + buttonText: "1", 139 + onPressed: () { 140 + onNumberSelect(1); 141 + }, 142 + type: "number", 143 + ), 144 + CalculatorButton( 145 + buttonText: "2", 146 + onPressed: () { 147 + onNumberSelect(2); 148 + }, 149 + type: "number", 150 + ), 151 + CalculatorButton( 152 + buttonText: "3", 153 + onPressed: () { 154 + onNumberSelect(3); 155 + }, 156 + type: "number", 157 + ), 158 + CalculatorButton( 159 + buttonText: "+", 160 + onPressed: () { 161 + onOperatorSelect("+"); 162 + }, 163 + type: "operator", 164 + ), 165 + ], 166 + ), 167 + Row( 168 + mainAxisAlignment: MainAxisAlignment.center, 169 + children: [ 170 + CalculatorButton( 171 + buttonText: "0", 172 + onPressed: () { 173 + onNumberSelect(0); 174 + }, 175 + flex: 2, 176 + ), 177 + CalculatorButton( 178 + buttonText: "", 179 + onPressed: () {}, 180 + type: "number", 181 + ), 182 + CalculatorButton( 183 + buttonText: "=", 184 + onPressed: () { 185 + onOperatorSelect("="); 186 + }, 187 + type: "operator", 188 + ), 189 + ], 190 + ) 191 + ], 192 + ), 193 + ); 194 + } 195 + } 196 + 197 + typedef setNumberCallback = void Function(num number); 198 + typedef setOperatorCallback = void Function(String operator); 199 + typedef setClearCallback = void Function(bool onlyOne);
+32
flutter_test_app/lib/components/theme_changer.dart
··· 1 + import 'package:flutter/material.dart'; 2 + 3 + class ChangeThemeButton extends StatelessWidget { 4 + final VoidCallback? onPressed; 5 + final bool darkTheme; 6 + const ChangeThemeButton({ 7 + Key? key, 8 + this.onPressed, 9 + this.darkTheme = true, 10 + }) : super(key: key); 11 + 12 + @override 13 + Widget build(BuildContext context) { 14 + return AnimatedContainer( 15 + duration: const Duration(milliseconds: 500), 16 + decoration: BoxDecoration( 17 + border: Border.all( 18 + color: darkTheme ? Colors.white : Colors.black, 19 + ), 20 + borderRadius: BorderRadius.circular(30), 21 + ), 22 + child: IconButton( 23 + onPressed: onPressed, 24 + icon: Icon( 25 + Icons.dark_mode_outlined, 26 + size: 20, 27 + color: darkTheme ? Colors.white : Colors.black, 28 + ), 29 + ), 30 + ); 31 + } 32 + }
+166
flutter_test_app/lib/screens/home.dart
··· 1 + import 'package:flutter_test_app/components/body.dart'; 2 + import 'package:flutter_test_app/components/keypad.dart'; 3 + import 'package:flutter_test_app/components/theme_changer.dart'; 4 + import 'package:flutter/material.dart'; 5 + 6 + class Home extends StatefulWidget { 7 + const Home({Key? key}) : super(key: key); 8 + 9 + @override 10 + State<Home> createState() => HomeState(); 11 + } 12 + 13 + class HomeState extends State<Home> { 14 + bool _darkTheme = true; 15 + num? _firstSection; 16 + String? _operator; 17 + num? _secondSection; 18 + 19 + void changeTheme() { 20 + setState(() { 21 + debugPrint('ChangeTheme'); 22 + _darkTheme = !_darkTheme; 23 + }); 24 + } 25 + 26 + void setNum(num number) { 27 + setState(() { 28 + debugPrint('setNum: ' + number.toString()); 29 + 30 + if (_operator == null) { 31 + if (_firstSection != null) { 32 + _firstSection = num.parse(_firstSection.toString() + number.toString()); 33 + } else { 34 + _firstSection = number; 35 + } 36 + } else { 37 + if (_secondSection != null) { 38 + _secondSection = num.parse(_secondSection.toString() + number.toString()); 39 + } else { 40 + _secondSection = number; 41 + } 42 + } 43 + 44 + 45 + }); 46 + } 47 + 48 + void setOperator(String operator) { 49 + setState(() { 50 + debugPrint('setOperator: ' + operator.toString()); 51 + 52 + if (_secondSection == null) { 53 + _operator = operator; 54 + return; 55 + } 56 + 57 + if (_operator == "+") { 58 + _firstSection = (_firstSection! + _secondSection!)!; 59 + } 60 + 61 + if (_operator == "-") { 62 + _firstSection = (_firstSection! - _secondSection!)!; 63 + } 64 + 65 + if (_operator == "/") { 66 + _firstSection = (_firstSection! / _secondSection!)!; 67 + } 68 + 69 + if (_operator == "*") { 70 + _firstSection = (_firstSection! * _secondSection!)!; 71 + } 72 + 73 + if (operator == "=") { 74 + _operator = null; 75 + } else { 76 + _operator = operator; 77 + } 78 + _secondSection = null; 79 + }); 80 + } 81 + 82 + void setClear(bool onlyOne) { 83 + setState(() { 84 + debugPrint('setClear: ' + onlyOne.toString()); 85 + 86 + if (onlyOne) { 87 + if (_secondSection != null) { 88 + String secondFieldString = _secondSection.toString(); 89 + 90 + if (secondFieldString.length > 1) { 91 + _secondSection = num.parse(secondFieldString.substring(0, secondFieldString.length - 1)); 92 + } else { 93 + _secondSection = null; 94 + } 95 + } else if (_operator != null) { 96 + _operator = null; 97 + } else if (_firstSection != null) { 98 + String firstFieldString = _firstSection.toString(); 99 + 100 + if (firstFieldString.length > 1) { 101 + _firstSection = num.parse(firstFieldString.substring(0, firstFieldString.length - 1)); 102 + } else { 103 + _firstSection = null; 104 + } 105 + } 106 + } else { 107 + _firstSection = null; 108 + _operator = null; 109 + _secondSection = null; 110 + } 111 + }); 112 + } 113 + 114 + @override 115 + Widget build(BuildContext context) { 116 + return Scaffold( 117 + appBar: AppBar( 118 + backgroundColor: Colors.transparent, 119 + elevation: 0, 120 + leading: Padding( 121 + padding: const EdgeInsets.all(5.0), 122 + child: ChangeThemeButton( 123 + onPressed: changeTheme, 124 + darkTheme: _darkTheme, 125 + ), 126 + ), 127 + ), 128 + extendBodyBehindAppBar: true, 129 + body: AnimatedContainer( 130 + duration: const Duration(milliseconds: 400), 131 + decoration: BoxDecoration( 132 + gradient: LinearGradient( 133 + colors: [ 134 + _darkTheme ? const Color(0xFF1E1E1E) : const Color(0xFFFFFFFF), 135 + _darkTheme ? const Color(0xFF666666) : const Color(0xFFD2D2D2), 136 + ], 137 + begin: Alignment.topCenter, 138 + end: Alignment.bottomCenter, 139 + ), 140 + ), 141 + child: Column( 142 + children: [ 143 + CalculatorBody( 144 + firstSection: _firstSection, 145 + operator: _operator, 146 + secondSection: _secondSection, 147 + darkTheme: _darkTheme, 148 + ), 149 + KeyPad( 150 + darkTheme: _darkTheme, 151 + onNumberSelect: (num number) { 152 + setNum(number); 153 + }, 154 + onOperatorSelect: (String operator) { 155 + setOperator(operator); 156 + }, 157 + onClearSelect: (bool onlyOne) { 158 + setClear(onlyOne); 159 + }, 160 + ), 161 + ], 162 + ), 163 + ), 164 + ); 165 + } 166 + }
+11
flutter_test_app/lib/utils/theme.dart
··· 1 + import 'package:flutter/material.dart'; 2 + 3 + class CalculatorTheme { 4 + static const Color functionButtonColor = Color(0xFFC4C4C4); 5 + static const Color operationButtonColor = Color(0xFFFFA11F); 6 + static const Color numberButtonColor = Color(0xFF000000); 7 + 8 + static const Color functionButtonTextColor = Color(0xFF000000); 9 + static const Color operationButtonTextColor = Color(0xFFFFFFFF); 10 + static const Color numberButtonTextColor = Color(0xFFFFFFFF); 11 + }
+174
flutter_test_app/pubspec.lock
··· 1 + # Generated by pub 2 + # See https://dart.dev/tools/pub/glossary#lockfile 3 + packages: 4 + async: 5 + dependency: transitive 6 + description: 7 + name: async 8 + url: "https://pub.dartlang.org" 9 + source: hosted 10 + version: "2.8.2" 11 + boolean_selector: 12 + dependency: transitive 13 + description: 14 + name: boolean_selector 15 + url: "https://pub.dartlang.org" 16 + source: hosted 17 + version: "2.1.0" 18 + characters: 19 + dependency: transitive 20 + description: 21 + name: characters 22 + url: "https://pub.dartlang.org" 23 + source: hosted 24 + version: "1.2.0" 25 + charcode: 26 + dependency: transitive 27 + description: 28 + name: charcode 29 + url: "https://pub.dartlang.org" 30 + source: hosted 31 + version: "1.3.1" 32 + clock: 33 + dependency: transitive 34 + description: 35 + name: clock 36 + url: "https://pub.dartlang.org" 37 + source: hosted 38 + version: "1.1.0" 39 + collection: 40 + dependency: transitive 41 + description: 42 + name: collection 43 + url: "https://pub.dartlang.org" 44 + source: hosted 45 + version: "1.15.0" 46 + cupertino_icons: 47 + dependency: "direct main" 48 + description: 49 + name: cupertino_icons 50 + url: "https://pub.dartlang.org" 51 + source: hosted 52 + version: "1.0.4" 53 + fake_async: 54 + dependency: transitive 55 + description: 56 + name: fake_async 57 + url: "https://pub.dartlang.org" 58 + source: hosted 59 + version: "1.2.0" 60 + flutter: 61 + dependency: "direct main" 62 + description: flutter 63 + source: sdk 64 + version: "0.0.0" 65 + flutter_lints: 66 + dependency: "direct dev" 67 + description: 68 + name: flutter_lints 69 + url: "https://pub.dartlang.org" 70 + source: hosted 71 + version: "1.0.4" 72 + flutter_test: 73 + dependency: "direct dev" 74 + description: flutter 75 + source: sdk 76 + version: "0.0.0" 77 + lints: 78 + dependency: transitive 79 + description: 80 + name: lints 81 + url: "https://pub.dartlang.org" 82 + source: hosted 83 + version: "1.0.1" 84 + matcher: 85 + dependency: transitive 86 + description: 87 + name: matcher 88 + url: "https://pub.dartlang.org" 89 + source: hosted 90 + version: "0.12.11" 91 + material_color_utilities: 92 + dependency: transitive 93 + description: 94 + name: material_color_utilities 95 + url: "https://pub.dartlang.org" 96 + source: hosted 97 + version: "0.1.3" 98 + meta: 99 + dependency: transitive 100 + description: 101 + name: meta 102 + url: "https://pub.dartlang.org" 103 + source: hosted 104 + version: "1.7.0" 105 + path: 106 + dependency: transitive 107 + description: 108 + name: path 109 + url: "https://pub.dartlang.org" 110 + source: hosted 111 + version: "1.8.0" 112 + sky_engine: 113 + dependency: transitive 114 + description: flutter 115 + source: sdk 116 + version: "0.0.99" 117 + source_span: 118 + dependency: transitive 119 + description: 120 + name: source_span 121 + url: "https://pub.dartlang.org" 122 + source: hosted 123 + version: "1.8.1" 124 + stack_trace: 125 + dependency: transitive 126 + description: 127 + name: stack_trace 128 + url: "https://pub.dartlang.org" 129 + source: hosted 130 + version: "1.10.0" 131 + stream_channel: 132 + dependency: transitive 133 + description: 134 + name: stream_channel 135 + url: "https://pub.dartlang.org" 136 + source: hosted 137 + version: "2.1.0" 138 + string_scanner: 139 + dependency: transitive 140 + description: 141 + name: string_scanner 142 + url: "https://pub.dartlang.org" 143 + source: hosted 144 + version: "1.1.0" 145 + term_glyph: 146 + dependency: transitive 147 + description: 148 + name: term_glyph 149 + url: "https://pub.dartlang.org" 150 + source: hosted 151 + version: "1.2.0" 152 + test_api: 153 + dependency: transitive 154 + description: 155 + name: test_api 156 + url: "https://pub.dartlang.org" 157 + source: hosted 158 + version: "0.4.8" 159 + typed_data: 160 + dependency: transitive 161 + description: 162 + name: typed_data 163 + url: "https://pub.dartlang.org" 164 + source: hosted 165 + version: "1.3.0" 166 + vector_math: 167 + dependency: transitive 168 + description: 169 + name: vector_math 170 + url: "https://pub.dartlang.org" 171 + source: hosted 172 + version: "2.1.1" 173 + sdks: 174 + dart: ">=2.16.2 <3.0.0"
+89
flutter_test_app/pubspec.yaml
··· 1 + name: flutter_test_app 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.16.2 <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 + 38 + dev_dependencies: 39 + flutter_test: 40 + sdk: flutter 41 + 42 + # The "flutter_lints" package below contains a set of recommended lints to 43 + # encourage good coding practices. The lint set provided by the package is 44 + # activated in the `analysis_options.yaml` file located at the root of your 45 + # package. See that file for information about deactivating specific lint 46 + # rules and activating additional ones. 47 + flutter_lints: ^1.0.0 48 + 49 + # For information on the generic Dart part of this file, see the 50 + # following page: https://dart.dev/tools/pub/pubspec 51 + 52 + # The following section is specific to Flutter. 53 + flutter: 54 + 55 + # The following line ensures that the Material Icons font is 56 + # included with your application, so that you can use the icons in 57 + # the material Icons class. 58 + uses-material-design: true 59 + 60 + # To add assets to your application, add an assets section, like this: 61 + # assets: 62 + # - images/a_dot_burr.jpeg 63 + # - images/a_dot_ham.jpeg 64 + 65 + # An image asset can refer to one or more resolution-specific "variants", see 66 + # https://flutter.dev/assets-and-images/#resolution-aware. 67 + 68 + # For details regarding adding assets from package dependencies, see 69 + # https://flutter.dev/assets-and-images/#from-packages 70 + 71 + # To add custom fonts to your application, add a fonts section here, 72 + # in this "flutter" section. Each entry in this list should have a 73 + # "family" key with the font family name, and a "fonts" key with a 74 + # list giving the asset and other descriptors for the font. For 75 + # example: 76 + # fonts: 77 + # - family: Schyler 78 + # fonts: 79 + # - asset: fonts/Schyler-Regular.ttf 80 + # - asset: fonts/Schyler-Italic.ttf 81 + # style: italic 82 + # - family: Trajan Pro 83 + # fonts: 84 + # - asset: fonts/TrajanPro.ttf 85 + # - asset: fonts/TrajanPro_Bold.ttf 86 + # weight: 700 87 + # 88 + # For details regarding fonts from package dependencies, 89 + # see https://flutter.dev/custom-fonts/#from-packages
+30
flutter_test_app/test/widget_test.dart
··· 1 + // This is a basic Flutter widget test. 2 + // 3 + // To perform an interaction with a widget in your test, use the WidgetTester 4 + // utility that Flutter provides. For example, you can send tap and scroll 5 + // gestures. You can also use WidgetTester to find child widgets in the widget 6 + // tree, read text, and verify that the values of widget properties are correct. 7 + 8 + import 'package:flutter/material.dart'; 9 + import 'package:flutter_test/flutter_test.dart'; 10 + 11 + import 'package:flutter_test_app/main.dart'; 12 + 13 + void main() { 14 + testWidgets('Counter increments smoke test', (WidgetTester tester) async { 15 + // Build our app and trigger a frame. 16 + await tester.pumpWidget(const MyApp()); 17 + 18 + // Verify that our counter starts at 0. 19 + expect(find.text('0'), findsOneWidget); 20 + expect(find.text('1'), findsNothing); 21 + 22 + // Tap the '+' icon and trigger a frame. 23 + await tester.tap(find.byIcon(Icons.add)); 24 + await tester.pump(); 25 + 26 + // Verify that our counter has incremented. 27 + expect(find.text('0'), findsNothing); 28 + expect(find.text('1'), findsOneWidget); 29 + }); 30 + }
+46
local_communications_app/.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
+10
local_communications_app/.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: 5464c5bac742001448fe4fc0597be939379f88ea 8 + channel: stable 9 + 10 + project_type: app
+16
local_communications_app/README.md
··· 1 + # local_communications_app 2 + 3 + A new NFC Flutter project. 4 + 5 + ## Getting Started 6 + 7 + This project is a starting point for a Flutter application. 8 + 9 + A few resources to get you started if this is your first Flutter project: 10 + 11 + - [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab) 12 + - [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook) 13 + 14 + For help getting started with Flutter, view our 15 + [online documentation](https://flutter.dev/docs), which offers tutorials, 16 + samples, guidance on mobile development, and a full API reference.
+29
local_communications_app/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
+13
local_communications_app/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
+68
local_communications_app/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 "me.binau.local_communications_app" 47 + minSdkVersion flutter.minSdkVersion 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 + }
+7
local_communications_app/android/app/src/debug/AndroidManifest.xml
··· 1 + <manifest xmlns:android="http://schemas.android.com/apk/res/android" 2 + package="me.binau.local_communications_app"> 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>
+34
local_communications_app/android/app/src/main/AndroidManifest.xml
··· 1 + <manifest xmlns:android="http://schemas.android.com/apk/res/android" 2 + package="me.binau.local_communications_app"> 3 + <application 4 + android:label="local_communications_app" 5 + android:name="${applicationName}" 6 + android:icon="@mipmap/ic_launcher"> 7 + <activity 8 + android:name=".MainActivity" 9 + android:exported="true" 10 + android:launchMode="singleTop" 11 + android:theme="@style/LaunchTheme" 12 + android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" 13 + android:hardwareAccelerated="true" 14 + android:windowSoftInputMode="adjustResize"> 15 + <!-- Specifies an Android theme to apply to this Activity as soon as 16 + the Android process has started. This theme is visible to the user 17 + while the Flutter UI initializes. After that, this theme continues 18 + to determine the Window background behind the Flutter UI. --> 19 + <meta-data 20 + android:name="io.flutter.embedding.android.NormalTheme" 21 + android:resource="@style/NormalTheme" 22 + /> 23 + <intent-filter> 24 + <action android:name="android.intent.action.MAIN"/> 25 + <category android:name="android.intent.category.LAUNCHER"/> 26 + </intent-filter> 27 + </activity> 28 + <!-- Don't delete the meta-data below. 29 + This is used by the Flutter tool to generate GeneratedPluginRegistrant.java --> 30 + <meta-data 31 + android:name="flutterEmbedding" 32 + android:value="2" /> 33 + </application> 34 + </manifest>
+6
local_communications_app/android/app/src/main/kotlin/me/binau/local_communications_app/MainActivity.kt
··· 1 + package me.binau.local_communications_app 2 + 3 + import io.flutter.embedding.android.FlutterActivity 4 + 5 + class MainActivity: FlutterActivity() { 6 + }
+12
local_communications_app/android/app/src/main/res/drawable-v21/launch_background.xml
··· 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:colorBackground" /> 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>
+12
local_communications_app/android/app/src/main/res/drawable/launch_background.xml
··· 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>
local_communications_app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png

This is a binary file and will not be displayed.

local_communications_app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png

This is a binary file and will not be displayed.

local_communications_app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png

This is a binary file and will not be displayed.

local_communications_app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png

This is a binary file and will not be displayed.

local_communications_app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png

This is a binary file and will not be displayed.

+18
local_communications_app/android/app/src/main/res/values-night/styles.xml
··· 1 + <?xml version="1.0" encoding="utf-8"?> 2 + <resources> 3 + <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on --> 4 + <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar"> 5 + <!-- Show a splash screen on the activity. Automatically removed when 6 + Flutter draws its first frame --> 7 + <item name="android:windowBackground">@drawable/launch_background</item> 8 + </style> 9 + <!-- Theme applied to the Android Window as soon as the process has started. 10 + This theme determines the color of the Android Window while your 11 + Flutter UI initializes, as well as behind your Flutter UI while its 12 + running. 13 + 14 + This Theme is only used starting with V2 of Flutter's Android embedding. --> 15 + <style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar"> 16 + <item name="android:windowBackground">?android:colorBackground</item> 17 + </style> 18 + </resources>
+18
local_communications_app/android/app/src/main/res/values/styles.xml
··· 1 + <?xml version="1.0" encoding="utf-8"?> 2 + <resources> 3 + <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off --> 4 + <style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar"> 5 + <!-- Show a splash screen on the activity. Automatically removed when 6 + Flutter draws its first frame --> 7 + <item name="android:windowBackground">@drawable/launch_background</item> 8 + </style> 9 + <!-- Theme applied to the Android Window as soon as the process has started. 10 + This theme determines the color of the Android Window while your 11 + Flutter UI initializes, as well as behind your Flutter UI while its 12 + running. 13 + 14 + This Theme is only used starting with V2 of Flutter's Android embedding. --> 15 + <style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar"> 16 + <item name="android:windowBackground">?android:colorBackground</item> 17 + </style> 18 + </resources>
+7
local_communications_app/android/app/src/profile/AndroidManifest.xml
··· 1 + <manifest xmlns:android="http://schemas.android.com/apk/res/android" 2 + package="me.binau.local_communications_app"> 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>
+31
local_communications_app/android/build.gradle
··· 1 + buildscript { 2 + ext.kotlin_version = '1.6.10' 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 + }
+3
local_communications_app/android/gradle.properties
··· 1 + org.gradle.jvmargs=-Xmx1536M 2 + android.useAndroidX=true 3 + android.enableJetifier=true
+6
local_communications_app/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
+11
local_communications_app/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"
+34
local_communications_app/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
+26
local_communications_app/ios/Flutter/AppFrameworkInfo.plist
··· 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>9.0</string> 25 + </dict> 26 + </plist>
+1
local_communications_app/ios/Flutter/Debug.xcconfig
··· 1 + #include "Generated.xcconfig"
+1
local_communications_app/ios/Flutter/Release.xcconfig
··· 1 + #include "Generated.xcconfig"
+481
local_communications_app/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 = "<group>"; }; 33 + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; }; 34 + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; }; 35 + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; }; 36 + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; 37 + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; }; 38 + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; }; 39 + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; }; 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 = "<group>"; }; 42 + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; 43 + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; 44 + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; 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 = "<group>"; 68 + }; 69 + 97C146E51CF9000F007C117D = { 70 + isa = PBXGroup; 71 + children = ( 72 + 9740EEB11CF90186004384FC /* Flutter */, 73 + 97C146F01CF9000F007C117D /* Runner */, 74 + 97C146EF1CF9000F007C117D /* Products */, 75 + ); 76 + sourceTree = "<group>"; 77 + }; 78 + 97C146EF1CF9000F007C117D /* Products */ = { 79 + isa = PBXGroup; 80 + children = ( 81 + 97C146EE1CF9000F007C117D /* Runner.app */, 82 + ); 83 + name = Products; 84 + sourceTree = "<group>"; 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 = "<group>"; 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 = "<group>"; 222 + }; 223 + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { 224 + isa = PBXVariantGroup; 225 + children = ( 226 + 97C147001CF9000F007C117D /* Base */, 227 + ); 228 + name = LaunchScreen.storyboard; 229 + sourceTree = "<group>"; 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 = me.binau.localCommunicationsApp; 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 = me.binau.localCommunicationsApp; 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 = me.binau.localCommunicationsApp; 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 + }
+7
local_communications_app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
··· 1 + <?xml version="1.0" encoding="UTF-8"?> 2 + <Workspace 3 + version = "1.0"> 4 + <FileRef 5 + location = "self:"> 6 + </FileRef> 7 + </Workspace>
+8
local_communications_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
··· 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>IDEDidComputeMac32BitWarning</key> 6 + <true/> 7 + </dict> 8 + </plist>
+8
local_communications_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
··· 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>PreviewsEnabled</key> 6 + <false/> 7 + </dict> 8 + </plist>
+87
local_communications_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
··· 1 + <?xml version="1.0" encoding="UTF-8"?> 2 + <Scheme 3 + LastUpgradeVersion = "1300" 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 + shouldUseLaunchSchemeArgsEnv = "YES"> 30 + <MacroExpansion> 31 + <BuildableReference 32 + BuildableIdentifier = "primary" 33 + BlueprintIdentifier = "97C146ED1CF9000F007C117D" 34 + BuildableName = "Runner.app" 35 + BlueprintName = "Runner" 36 + ReferencedContainer = "container:Runner.xcodeproj"> 37 + </BuildableReference> 38 + </MacroExpansion> 39 + <Testables> 40 + </Testables> 41 + </TestAction> 42 + <LaunchAction 43 + buildConfiguration = "Debug" 44 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" 45 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" 46 + launchStyle = "0" 47 + useCustomWorkingDirectory = "NO" 48 + ignoresPersistentStateOnLaunch = "NO" 49 + debugDocumentVersioning = "YES" 50 + debugServiceExtension = "internal" 51 + allowLocationSimulation = "YES"> 52 + <BuildableProductRunnable 53 + runnableDebuggingMode = "0"> 54 + <BuildableReference 55 + BuildableIdentifier = "primary" 56 + BlueprintIdentifier = "97C146ED1CF9000F007C117D" 57 + BuildableName = "Runner.app" 58 + BlueprintName = "Runner" 59 + ReferencedContainer = "container:Runner.xcodeproj"> 60 + </BuildableReference> 61 + </BuildableProductRunnable> 62 + </LaunchAction> 63 + <ProfileAction 64 + buildConfiguration = "Profile" 65 + shouldUseLaunchSchemeArgsEnv = "YES" 66 + savedToolIdentifier = "" 67 + useCustomWorkingDirectory = "NO" 68 + debugDocumentVersioning = "YES"> 69 + <BuildableProductRunnable 70 + runnableDebuggingMode = "0"> 71 + <BuildableReference 72 + BuildableIdentifier = "primary" 73 + BlueprintIdentifier = "97C146ED1CF9000F007C117D" 74 + BuildableName = "Runner.app" 75 + BlueprintName = "Runner" 76 + ReferencedContainer = "container:Runner.xcodeproj"> 77 + </BuildableReference> 78 + </BuildableProductRunnable> 79 + </ProfileAction> 80 + <AnalyzeAction 81 + buildConfiguration = "Debug"> 82 + </AnalyzeAction> 83 + <ArchiveAction 84 + buildConfiguration = "Release" 85 + revealArchiveInOrganizer = "YES"> 86 + </ArchiveAction> 87 + </Scheme>
+7
local_communications_app/ios/Runner.xcworkspace/contents.xcworkspacedata
··· 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>
+8
local_communications_app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
··· 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>IDEDidComputeMac32BitWarning</key> 6 + <true/> 7 + </dict> 8 + </plist>
+8
local_communications_app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
··· 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>PreviewsEnabled</key> 6 + <false/> 7 + </dict> 8 + </plist>
+13
local_communications_app/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 + }
+122
local_communications_app/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 + }
local_communications_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png

This is a binary file and will not be displayed.

local_communications_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png

This is a binary file and will not be displayed.

local_communications_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png

This is a binary file and will not be displayed.

local_communications_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png

This is a binary file and will not be displayed.

local_communications_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png

This is a binary file and will not be displayed.

local_communications_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png

This is a binary file and will not be displayed.

local_communications_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png

This is a binary file and will not be displayed.

local_communications_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png

This is a binary file and will not be displayed.

local_communications_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png

This is a binary file and will not be displayed.

local_communications_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png

This is a binary file and will not be displayed.

local_communications_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png

This is a binary file and will not be displayed.

local_communications_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png

This is a binary file and will not be displayed.

local_communications_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png

This is a binary file and will not be displayed.

local_communications_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png

This is a binary file and will not be displayed.

local_communications_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png

This is a binary file and will not be displayed.

+23
local_communications_app/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 + }
local_communications_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png

This is a binary file and will not be displayed.

local_communications_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png

This is a binary file and will not be displayed.

local_communications_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png

This is a binary file and will not be displayed.

+5
local_communications_app/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.
+37
local_communications_app/ios/Runner/Base.lproj/LaunchScreen.storyboard
··· 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>
+26
local_communications_app/ios/Runner/Base.lproj/Main.storyboard
··· 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>
+47
local_communications_app/ios/Runner/Info.plist
··· 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>$(DEVELOPMENT_LANGUAGE)</string> 7 + <key>CFBundleDisplayName</key> 8 + <string>Local Communications App</string> 9 + <key>CFBundleExecutable</key> 10 + <string>$(EXECUTABLE_NAME)</string> 11 + <key>CFBundleIdentifier</key> 12 + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> 13 + <key>CFBundleInfoDictionaryVersion</key> 14 + <string>6.0</string> 15 + <key>CFBundleName</key> 16 + <string>local_communications_app</string> 17 + <key>CFBundlePackageType</key> 18 + <string>APPL</string> 19 + <key>CFBundleShortVersionString</key> 20 + <string>$(FLUTTER_BUILD_NAME)</string> 21 + <key>CFBundleSignature</key> 22 + <string>????</string> 23 + <key>CFBundleVersion</key> 24 + <string>$(FLUTTER_BUILD_NUMBER)</string> 25 + <key>LSRequiresIPhoneOS</key> 26 + <true/> 27 + <key>UILaunchStoryboardName</key> 28 + <string>LaunchScreen</string> 29 + <key>UIMainStoryboardFile</key> 30 + <string>Main</string> 31 + <key>UISupportedInterfaceOrientations</key> 32 + <array> 33 + <string>UIInterfaceOrientationPortrait</string> 34 + <string>UIInterfaceOrientationLandscapeLeft</string> 35 + <string>UIInterfaceOrientationLandscapeRight</string> 36 + </array> 37 + <key>UISupportedInterfaceOrientations~ipad</key> 38 + <array> 39 + <string>UIInterfaceOrientationPortrait</string> 40 + <string>UIInterfaceOrientationPortraitUpsideDown</string> 41 + <string>UIInterfaceOrientationLandscapeLeft</string> 42 + <string>UIInterfaceOrientationLandscapeRight</string> 43 + </array> 44 + <key>UIViewControllerBasedStatusBarAppearance</key> 45 + <false/> 46 + </dict> 47 + </plist>
+1
local_communications_app/ios/Runner/Runner-Bridging-Header.h
··· 1 + #import "GeneratedPluginRegistrant.h"
+51
local_communications_app/lib/components/my_bottom_nav_bar.dart
··· 1 + import 'package:flutter/material.dart'; 2 + import 'package:flutter_svg/flutter_svg.dart'; 3 + 4 + import '../../constants.dart'; 5 + 6 + 7 + 8 + class MyBottomNavBar extends StatelessWidget { 9 + const MyBottomNavBar({ 10 + Key? key, 11 + }) : super(key: key); 12 + 13 + @override 14 + Widget build(BuildContext context) { 15 + return Container( 16 + padding: const EdgeInsets.only( 17 + left: kDefaultPadding * 2, 18 + right: kDefaultPadding * 2, 19 + bottom: kDefaultPadding, 20 + ), 21 + height: 80, 22 + decoration: BoxDecoration( 23 + color: Colors.white, 24 + boxShadow: [ 25 + BoxShadow( 26 + offset: const Offset(0, -10), 27 + blurRadius: 35, 28 + color: kPrimaryColor.withOpacity(0.38), 29 + ), 30 + ], 31 + ), 32 + child: Row( 33 + mainAxisAlignment: MainAxisAlignment.spaceBetween, 34 + children: <Widget>[ 35 + IconButton( 36 + icon: SvgPicture.asset("assets/icons/flower.svg"), 37 + onPressed: () {}, 38 + ), 39 + IconButton( 40 + icon: SvgPicture.asset("assets/icons/heart-icon.svg"), 41 + onPressed: () {}, 42 + ), 43 + IconButton( 44 + icon: SvgPicture.asset("assets/icons/user-icon.svg"), 45 + onPressed: () {}, 46 + ), 47 + ], 48 + ), 49 + ); 50 + } 51 + }
+8
local_communications_app/lib/constants.dart
··· 1 + import 'package:flutter/material.dart'; 2 + 3 + // Colors that we use in our app 4 + const kPrimaryColor = Color(0xFF0C9869); 5 + const kTextColor = Color(0xFF3C4046); 6 + const kBackgroundColor = Color(0xFFF9F8FD); 7 + 8 + const double kDefaultPadding = 20.0;
+23
local_communications_app/lib/main.dart
··· 1 + import 'package:flutter/material.dart'; 2 + 3 + import 'screens/home/home_screen.dart'; 4 + 5 + void main() { 6 + runApp(const MyApp()); 7 + } 8 + 9 + class MyApp extends StatelessWidget { 10 + const MyApp({Key? key}) : super(key: key); 11 + 12 + @override 13 + Widget build(BuildContext context) { 14 + return MaterialApp( 15 + title: 'Plant App', 16 + debugShowCheckedModeBanner: false, 17 + theme: ThemeData( 18 + primarySwatch: Colors.green, 19 + ), 20 + home: HomeScreen(), 21 + ); 22 + } 23 + }
+51
local_communications_app/lib/screens/details/components/body.dart
··· 1 + import 'package:flutter/material.dart'; 2 + import 'package:local_communications_app/constants.dart'; 3 + 4 + import 'image_and_icons.dart'; 5 + import 'title_and_price.dart'; 6 + 7 + class Body extends StatelessWidget { 8 + @override 9 + Widget build(BuildContext context) { 10 + Size size = MediaQuery.of(context).size; 11 + return SingleChildScrollView( 12 + child: Column( 13 + children: <Widget>[ 14 + ImageAndIcons(size: size), 15 + TitleAndPrice(title: "Angelica", country: "Russia", price: 440), 16 + const SizedBox(height: kDefaultPadding), 17 + Row( 18 + children: <Widget>[ 19 + SizedBox( 20 + width: size.width / 2, 21 + height: 84, 22 + child: FlatButton( 23 + shape: const RoundedRectangleBorder( 24 + borderRadius: BorderRadius.only( 25 + topRight: Radius.circular(20), 26 + ), 27 + ), 28 + color: kPrimaryColor, 29 + onPressed: () {}, 30 + child: const Text( 31 + "Buy Now", 32 + style: TextStyle( 33 + color: Colors.white, 34 + fontSize: 16, 35 + ), 36 + ), 37 + ), 38 + ), 39 + Expanded( 40 + child: FlatButton( 41 + onPressed: () {}, 42 + child: const Text("Description"), 43 + ), 44 + ), 45 + ], 46 + ), 47 + ], 48 + ), 49 + ); 50 + } 51 + }
+41
local_communications_app/lib/screens/details/components/icon_card.dart
··· 1 + import 'package:flutter/material.dart'; 2 + import 'package:flutter_svg/flutter_svg.dart'; 3 + 4 + import '../../../constants.dart'; 5 + 6 + class IconCard extends StatelessWidget { 7 + const IconCard({ 8 + Key? key, 9 + required this.icon, 10 + }) : super(key: key); 11 + 12 + final String icon; 13 + 14 + @override 15 + Widget build(BuildContext context) { 16 + Size size = MediaQuery.of(context).size; 17 + return Container( 18 + margin: EdgeInsets.symmetric(vertical: size.height * 0.03), 19 + padding: const EdgeInsets.all(kDefaultPadding / 2), 20 + height: 62, 21 + width: 62, 22 + decoration: BoxDecoration( 23 + color: kBackgroundColor, 24 + borderRadius: BorderRadius.circular(6), 25 + boxShadow: [ 26 + BoxShadow( 27 + offset: const Offset(0, 15), 28 + blurRadius: 22, 29 + color: kPrimaryColor.withOpacity(0.22), 30 + ), 31 + const BoxShadow( 32 + offset: Offset(-15, -15), 33 + blurRadius: 20, 34 + color: Colors.white, 35 + ), 36 + ], 37 + ), 38 + child: SvgPicture.asset(icon), 39 + ); 40 + } 41 + }
+76
local_communications_app/lib/screens/details/components/image_and_icons.dart
··· 1 + import 'package:flutter/material.dart'; 2 + import 'package:flutter_svg/flutter_svg.dart'; 3 + 4 + import '../../../constants.dart'; 5 + import 'icon_card.dart'; 6 + 7 + class ImageAndIcons extends StatelessWidget { 8 + const ImageAndIcons({ 9 + Key? key, 10 + required this.size, 11 + }) : super(key: key); 12 + 13 + final Size size; 14 + 15 + @override 16 + Widget build(BuildContext context) { 17 + return Padding( 18 + padding: const EdgeInsets.only(bottom: kDefaultPadding * 3), 19 + child: SizedBox( 20 + height: size.height * 0.8, 21 + child: Row( 22 + children: <Widget>[ 23 + Expanded( 24 + child: Padding( 25 + padding: 26 + const EdgeInsets.symmetric(vertical: kDefaultPadding * 3), 27 + child: Column( 28 + children: <Widget>[ 29 + Align( 30 + alignment: Alignment.topLeft, 31 + child: IconButton( 32 + padding: 33 + const EdgeInsets.symmetric(horizontal: kDefaultPadding), 34 + icon: SvgPicture.asset("assets/icons/back_arrow.svg"), 35 + onPressed: () { 36 + Navigator.pop(context); 37 + }, 38 + ), 39 + ), 40 + Spacer(), 41 + IconCard(icon: "assets/icons/sun.svg"), 42 + IconCard(icon: "assets/icons/icon_2.svg"), 43 + IconCard(icon: "assets/icons/icon_3.svg"), 44 + IconCard(icon: "assets/icons/icon_4.svg"), 45 + ], 46 + ), 47 + ), 48 + ), 49 + Container( 50 + height: size.height * 0.8, 51 + width: size.width * 0.75, 52 + decoration: BoxDecoration( 53 + borderRadius: BorderRadius.only( 54 + topLeft: Radius.circular(63), 55 + bottomLeft: Radius.circular(63), 56 + ), 57 + boxShadow: [ 58 + BoxShadow( 59 + offset: Offset(0, 10), 60 + blurRadius: 60, 61 + color: kPrimaryColor.withOpacity(0.29), 62 + ), 63 + ], 64 + image: DecorationImage( 65 + alignment: Alignment.centerLeft, 66 + fit: BoxFit.cover, 67 + image: AssetImage("assets/images/img.png"), 68 + ), 69 + ), 70 + ), 71 + ], 72 + ), 73 + ), 74 + ); 75 + } 76 + }
+55
local_communications_app/lib/screens/details/components/title_and_price.dart
··· 1 + import 'package:flutter/material.dart'; 2 + 3 + import '../../../constants.dart'; 4 + 5 + class TitleAndPrice extends StatelessWidget { 6 + const TitleAndPrice({ 7 + Key? key, 8 + required this.title, 9 + required this.country, 10 + required this.price, 11 + }) : super(key: key); 12 + 13 + final String title, country; 14 + final int price; 15 + 16 + @override 17 + Widget build(BuildContext context) { 18 + return Padding( 19 + padding: const EdgeInsets.symmetric(horizontal: kDefaultPadding), 20 + child: Row( 21 + children: <Widget>[ 22 + RichText( 23 + text: TextSpan( 24 + children: [ 25 + TextSpan( 26 + text: "$title\n", 27 + style: Theme.of(context) 28 + .textTheme 29 + .headline4! 30 + .copyWith(color: kTextColor, fontWeight: FontWeight.bold), 31 + ), 32 + TextSpan( 33 + text: country, 34 + style: const TextStyle( 35 + fontSize: 20, 36 + color: kPrimaryColor, 37 + fontWeight: FontWeight.w300, 38 + ), 39 + ), 40 + ], 41 + ), 42 + ), 43 + const Spacer(), 44 + Text( 45 + "\$$price", 46 + style: Theme.of(context) 47 + .textTheme 48 + .headline5! 49 + .copyWith(color: kPrimaryColor), 50 + ) 51 + ], 52 + ), 53 + ); 54 + } 55 + }
+13
local_communications_app/lib/screens/details/details_screen.dart
··· 1 + import 'package:flutter/material.dart'; 2 + import 'package:local_communications_app/screens/details/components/body.dart'; 3 + 4 + class DetailsScreen extends StatelessWidget { 5 + const DetailsScreen({Key? key}) : super(key: key); 6 + 7 + @override 8 + Widget build(BuildContext context) { 9 + return Scaffold( 10 + body: Body(), 11 + ); 12 + } 13 + }
+30
local_communications_app/lib/screens/home/components/body.dart
··· 1 + import 'package:flutter/material.dart'; 2 + import 'package:local_communications_app/constants.dart'; 3 + 4 + import 'featurred_plants.dart'; 5 + import 'header_with_seachbox.dart'; 6 + import 'recomend_plants.dart'; 7 + import 'title_with_more_bbtn.dart'; 8 + 9 + 10 + class Body extends StatelessWidget { 11 + @override 12 + Widget build(BuildContext context) { 13 + // It will provie us total height and width of our screen 14 + Size size = MediaQuery.of(context).size; 15 + // it enable scrolling on small device 16 + return SingleChildScrollView( 17 + child: Column( 18 + crossAxisAlignment: CrossAxisAlignment.start, 19 + children: <Widget>[ 20 + HeaderWithSearchBox(size: size), 21 + TitleWithMoreBtn(title: "Recomended", press: () {}), 22 + RecomendsPlants(), 23 + TitleWithMoreBtn(title: "Featured Plants", press: () {}), 24 + FeaturedPlants(), 25 + const SizedBox(height: kDefaultPadding), 26 + ], 27 + ), 28 + ); 29 + } 30 + }
+62
local_communications_app/lib/screens/home/components/featurred_plants.dart
··· 1 + import 'package:flutter/material.dart'; 2 + 3 + import '../../../constants.dart'; 4 + 5 + class FeaturedPlants extends StatelessWidget { 6 + const FeaturedPlants({ 7 + Key? key, 8 + }) : super(key: key); 9 + 10 + @override 11 + Widget build(BuildContext context) { 12 + return SingleChildScrollView( 13 + scrollDirection: Axis.horizontal, 14 + child: Row( 15 + children: <Widget>[ 16 + FeaturePlantCard( 17 + image: "assets/images/bottom_img_1.png", 18 + press: () {}, 19 + ), 20 + FeaturePlantCard( 21 + image: "assets/images/bottom_img_2.png", 22 + press: () {}, 23 + ), 24 + ], 25 + ), 26 + ); 27 + } 28 + } 29 + 30 + class FeaturePlantCard extends StatelessWidget { 31 + const FeaturePlantCard({ 32 + Key? key, 33 + required this.image, 34 + required this.press, 35 + }) : super(key: key); 36 + final String image; 37 + final Function press; 38 + 39 + @override 40 + Widget build(BuildContext context) { 41 + Size size = MediaQuery.of(context).size; 42 + return GestureDetector( 43 + onTap:()=> press, 44 + child: Container( 45 + margin: const EdgeInsets.only( 46 + left: kDefaultPadding, 47 + top: kDefaultPadding / 2, 48 + bottom: kDefaultPadding / 2, 49 + ), 50 + width: size.width * 0.8, 51 + height: 185, 52 + decoration: BoxDecoration( 53 + borderRadius: BorderRadius.circular(10), 54 + image: DecorationImage( 55 + fit: BoxFit.cover, 56 + image: AssetImage(image), 57 + ), 58 + ), 59 + ), 60 + ); 61 + } 62 + }
+95
local_communications_app/lib/screens/home/components/header_with_seachbox.dart
··· 1 + import 'package:flutter/material.dart'; 2 + import 'package:flutter_svg/flutter_svg.dart'; 3 + 4 + import '../../../constants.dart'; 5 + 6 + class HeaderWithSearchBox extends StatelessWidget { 7 + const HeaderWithSearchBox({ 8 + Key? key, 9 + required this.size, 10 + }) :super(key: key); 11 + 12 + final Size size; 13 + 14 + @override 15 + Widget build(BuildContext context) { 16 + return Container( 17 + margin: const EdgeInsets.only(bottom: kDefaultPadding * 2.5), 18 + // It will cover 20% of our total height 19 + height: size.height * 0.2, 20 + child: Stack( 21 + children: <Widget>[ 22 + Container( 23 + padding: const EdgeInsets.only( 24 + left: kDefaultPadding, 25 + right: kDefaultPadding, 26 + bottom: 36 + kDefaultPadding, 27 + ), 28 + height: size.height * 0.2 - 27, 29 + decoration: const BoxDecoration( 30 + color: kPrimaryColor, 31 + borderRadius: BorderRadius.only( 32 + bottomLeft: Radius.circular(36), 33 + bottomRight: Radius.circular(36), 34 + ), 35 + ), 36 + child: Row( 37 + children: <Widget>[ 38 + Text( 39 + 'Hi Uishopy!', 40 + style: Theme.of(context).textTheme.headline5!.copyWith( 41 + color: Colors.white, fontWeight: FontWeight.bold), 42 + ), 43 + const Spacer(), 44 + Image.asset("assets/images/logo.png") 45 + ], 46 + ), 47 + ), 48 + Positioned( 49 + bottom: 0, 50 + left: 0, 51 + right: 0, 52 + child: Container( 53 + alignment: Alignment.center, 54 + margin: const EdgeInsets.symmetric(horizontal: kDefaultPadding), 55 + padding: const EdgeInsets.symmetric(horizontal: kDefaultPadding), 56 + height: 54, 57 + decoration: BoxDecoration( 58 + color: Colors.white, 59 + borderRadius: BorderRadius.circular(20), 60 + boxShadow: [ 61 + BoxShadow( 62 + offset: Offset(0, 10), 63 + blurRadius: 50, 64 + color: kPrimaryColor.withOpacity(0.23), 65 + ), 66 + ], 67 + ), 68 + child: Row( 69 + children: <Widget>[ 70 + Expanded( 71 + child: TextField( 72 + onChanged: (value) {}, 73 + decoration: InputDecoration( 74 + hintText: "Search", 75 + hintStyle: TextStyle( 76 + color: kPrimaryColor.withOpacity(0.5), 77 + ), 78 + enabledBorder: InputBorder.none, 79 + focusedBorder: InputBorder.none, 80 + // surffix isn't working properly with SVG 81 + // thats why we use row 82 + // suffixIcon: SvgPicture.asset("assets/icons/search.svg"), 83 + ), 84 + ), 85 + ), 86 + SvgPicture.asset("assets/icons/search.svg"), 87 + ], 88 + ), 89 + ), 90 + ), 91 + ], 92 + ), 93 + ); 94 + } 95 + }
+142
local_communications_app/lib/screens/home/components/recomend_plants.dart
··· 1 + import 'package:flutter/material.dart'; 2 + 3 + import '../../../constants.dart'; 4 + import '../../details/details_screen.dart'; 5 + 6 + class RecomendsPlants extends StatelessWidget { 7 + const RecomendsPlants({ 8 + Key? key, 9 + }) : super(key: key); 10 + 11 + @override 12 + Widget build(BuildContext context) { 13 + return SingleChildScrollView( 14 + scrollDirection: Axis.horizontal, 15 + child: Row( 16 + children: <Widget>[ 17 + RecomendPlantCard( 18 + image: "assets/images/image_1.png", 19 + title: "Samantha", 20 + country: "Russia", 21 + price: 440, 22 + press: () { 23 + print('asdasd'); 24 + Navigator.push( 25 + context, 26 + MaterialPageRoute( 27 + builder: (context) => const DetailsScreen(), 28 + ), 29 + ); 30 + }, 31 + ), 32 + RecomendPlantCard( 33 + image: "assets/images/image_2.png", 34 + title: "Angelica", 35 + country: "Russia", 36 + price: 440, 37 + press: () { 38 + Navigator.push( 39 + context, 40 + MaterialPageRoute( 41 + builder: (context) => DetailsScreen(), 42 + ), 43 + ); 44 + }, 45 + ), 46 + RecomendPlantCard( 47 + image: "assets/images/image_3.png", 48 + title: "Samantha", 49 + country: "Russia", 50 + price: 440, 51 + press: () {}, 52 + ), 53 + ], 54 + ), 55 + ); 56 + } 57 + } 58 + 59 + class RecomendPlantCard extends StatelessWidget { 60 + const RecomendPlantCard({ 61 + Key? key, 62 + required this.image, 63 + required this.title, 64 + required this.country, 65 + required this.price, 66 + required this.press, 67 + }) : super(key: key); 68 + 69 + final String image, title, country; 70 + final int price; 71 + final Function press; 72 + 73 + @override 74 + Widget build(BuildContext context) { 75 + Size size = MediaQuery.of(context).size; 76 + return InkWell( 77 + onTap: (){ press();}, 78 + child: Container( 79 + margin: const EdgeInsets.only( 80 + left: kDefaultPadding, 81 + top: kDefaultPadding / 2, 82 + bottom: kDefaultPadding * 2.5, 83 + ), 84 + width: size.width * 0.4, 85 + child: Column( 86 + children: <Widget>[ 87 + Image.asset(image), 88 + GestureDetector( 89 + onTap: () { 90 + press(); 91 + }, 92 + child: Container( 93 + padding: const EdgeInsets.all(kDefaultPadding / 2), 94 + decoration: BoxDecoration( 95 + color: Colors.white, 96 + borderRadius: const BorderRadius.only( 97 + bottomLeft: Radius.circular(10), 98 + bottomRight: Radius.circular(10), 99 + ), 100 + boxShadow: [ 101 + BoxShadow( 102 + offset: Offset(0, 10), 103 + blurRadius: 50, 104 + color: kPrimaryColor.withOpacity(0.23), 105 + ), 106 + ], 107 + ), 108 + child: Row( 109 + children: <Widget>[ 110 + RichText( 111 + text: TextSpan( 112 + children: [ 113 + TextSpan( 114 + text: "$title\n".toUpperCase(), 115 + style: Theme.of(context).textTheme.button), 116 + TextSpan( 117 + text: country.toUpperCase(), 118 + style: TextStyle( 119 + color: kPrimaryColor.withOpacity(0.5), 120 + ), 121 + ), 122 + ], 123 + ), 124 + ), 125 + Spacer(), 126 + Text( 127 + '\$$price', 128 + style: Theme.of(context) 129 + .textTheme 130 + .button! 131 + .copyWith(color: kPrimaryColor), 132 + ) 133 + ], 134 + ), 135 + ), 136 + ) 137 + ], 138 + ), 139 + ), 140 + ); 141 + } 142 + }
+74
local_communications_app/lib/screens/home/components/title_with_more_bbtn.dart
··· 1 + import 'package:flutter/material.dart'; 2 + 3 + import '../../../constants.dart'; 4 + 5 + class TitleWithMoreBtn extends StatelessWidget { 6 + const TitleWithMoreBtn({ 7 + Key? key, 8 + required this.title, 9 + required this.press, 10 + }) : super(key: key); 11 + final String title; 12 + final Function press; 13 + 14 + @override 15 + Widget build(BuildContext context) { 16 + return Padding( 17 + padding: const EdgeInsets.symmetric(horizontal: kDefaultPadding), 18 + child: Row( 19 + children: <Widget>[ 20 + TitleWithCustomUnderline(text: title), 21 + Spacer(), 22 + FlatButton( 23 + shape: RoundedRectangleBorder( 24 + borderRadius: BorderRadius.circular(20), 25 + ), 26 + color: kPrimaryColor, 27 + onPressed:()=> press, 28 + child: const Text( 29 + "More", 30 + style: TextStyle(color: Colors.white), 31 + ), 32 + ), 33 + ], 34 + ), 35 + ); 36 + } 37 + } 38 + 39 + class TitleWithCustomUnderline extends StatelessWidget { 40 + const TitleWithCustomUnderline({ 41 + Key? key, 42 + required this.text, 43 + }) : super(key: key); 44 + 45 + final String text; 46 + 47 + @override 48 + Widget build(BuildContext context) { 49 + return SizedBox( 50 + height: 24, 51 + child: Stack( 52 + children: <Widget>[ 53 + Padding( 54 + padding: const EdgeInsets.only(left: kDefaultPadding / 4), 55 + child: Text( 56 + text, 57 + style: const TextStyle(fontSize: 20, fontWeight: FontWeight.bold), 58 + ), 59 + ), 60 + Positioned( 61 + bottom: 0, 62 + left: 0, 63 + right: 0, 64 + child: Container( 65 + margin: const EdgeInsets.only(right: kDefaultPadding / 4), 66 + height: 7, 67 + color: kPrimaryColor.withOpacity(0.2), 68 + ), 69 + ) 70 + ], 71 + ), 72 + ); 73 + } 74 + }
+28
local_communications_app/lib/screens/home/home_screen.dart
··· 1 + import 'package:flutter/material.dart'; 2 + import 'package:flutter_svg/svg.dart'; 3 + import 'package:local_communications_app/components/my_bottom_nav_bar.dart'; 4 + import 'package:local_communications_app/screens/home/components/body.dart'; 5 + 6 + import '../../constants.dart'; 7 + 8 + class HomeScreen extends StatelessWidget { 9 + @override 10 + Widget build(BuildContext context) { 11 + return Scaffold( 12 + appBar: buildAppBar(), 13 + body: Body(), 14 + bottomNavigationBar: const MyBottomNavBar(), 15 + ); 16 + } 17 + 18 + AppBar buildAppBar() { 19 + return AppBar( 20 + backgroundColor: kPrimaryColor, 21 + elevation: 0, 22 + leading: IconButton( 23 + icon: SvgPicture.asset("assets/icons/menu.svg"), 24 + onPressed: () {}, 25 + ), 26 + ); 27 + } 28 + }
+210
local_communications_app/pubspec.lock
··· 1 + # Generated by pub 2 + # See https://dart.dev/tools/pub/glossary#lockfile 3 + packages: 4 + async: 5 + dependency: transitive 6 + description: 7 + name: async 8 + url: "https://pub.dartlang.org" 9 + source: hosted 10 + version: "2.8.2" 11 + boolean_selector: 12 + dependency: transitive 13 + description: 14 + name: boolean_selector 15 + url: "https://pub.dartlang.org" 16 + source: hosted 17 + version: "2.1.0" 18 + characters: 19 + dependency: transitive 20 + description: 21 + name: characters 22 + url: "https://pub.dartlang.org" 23 + source: hosted 24 + version: "1.2.0" 25 + charcode: 26 + dependency: transitive 27 + description: 28 + name: charcode 29 + url: "https://pub.dartlang.org" 30 + source: hosted 31 + version: "1.3.1" 32 + clock: 33 + dependency: transitive 34 + description: 35 + name: clock 36 + url: "https://pub.dartlang.org" 37 + source: hosted 38 + version: "1.1.0" 39 + collection: 40 + dependency: transitive 41 + description: 42 + name: collection 43 + url: "https://pub.dartlang.org" 44 + source: hosted 45 + version: "1.15.0" 46 + cupertino_icons: 47 + dependency: "direct main" 48 + description: 49 + name: cupertino_icons 50 + url: "https://pub.dartlang.org" 51 + source: hosted 52 + version: "1.0.4" 53 + fake_async: 54 + dependency: transitive 55 + description: 56 + name: fake_async 57 + url: "https://pub.dartlang.org" 58 + source: hosted 59 + version: "1.2.0" 60 + flutter: 61 + dependency: "direct main" 62 + description: flutter 63 + source: sdk 64 + version: "0.0.0" 65 + flutter_lints: 66 + dependency: "direct dev" 67 + description: 68 + name: flutter_lints 69 + url: "https://pub.dartlang.org" 70 + source: hosted 71 + version: "1.0.4" 72 + flutter_svg: 73 + dependency: "direct main" 74 + description: 75 + name: flutter_svg 76 + url: "https://pub.dartlang.org" 77 + source: hosted 78 + version: "1.0.3" 79 + flutter_test: 80 + dependency: "direct dev" 81 + description: flutter 82 + source: sdk 83 + version: "0.0.0" 84 + lints: 85 + dependency: transitive 86 + description: 87 + name: lints 88 + url: "https://pub.dartlang.org" 89 + source: hosted 90 + version: "1.0.1" 91 + matcher: 92 + dependency: transitive 93 + description: 94 + name: matcher 95 + url: "https://pub.dartlang.org" 96 + source: hosted 97 + version: "0.12.11" 98 + material_color_utilities: 99 + dependency: transitive 100 + description: 101 + name: material_color_utilities 102 + url: "https://pub.dartlang.org" 103 + source: hosted 104 + version: "0.1.3" 105 + meta: 106 + dependency: transitive 107 + description: 108 + name: meta 109 + url: "https://pub.dartlang.org" 110 + source: hosted 111 + version: "1.7.0" 112 + path: 113 + dependency: transitive 114 + description: 115 + name: path 116 + url: "https://pub.dartlang.org" 117 + source: hosted 118 + version: "1.8.0" 119 + path_drawing: 120 + dependency: transitive 121 + description: 122 + name: path_drawing 123 + url: "https://pub.dartlang.org" 124 + source: hosted 125 + version: "1.0.0" 126 + path_parsing: 127 + dependency: transitive 128 + description: 129 + name: path_parsing 130 + url: "https://pub.dartlang.org" 131 + source: hosted 132 + version: "1.0.0" 133 + petitparser: 134 + dependency: transitive 135 + description: 136 + name: petitparser 137 + url: "https://pub.dartlang.org" 138 + source: hosted 139 + version: "4.4.0" 140 + sky_engine: 141 + dependency: transitive 142 + description: flutter 143 + source: sdk 144 + version: "0.0.99" 145 + source_span: 146 + dependency: transitive 147 + description: 148 + name: source_span 149 + url: "https://pub.dartlang.org" 150 + source: hosted 151 + version: "1.8.1" 152 + stack_trace: 153 + dependency: transitive 154 + description: 155 + name: stack_trace 156 + url: "https://pub.dartlang.org" 157 + source: hosted 158 + version: "1.10.0" 159 + stream_channel: 160 + dependency: transitive 161 + description: 162 + name: stream_channel 163 + url: "https://pub.dartlang.org" 164 + source: hosted 165 + version: "2.1.0" 166 + string_scanner: 167 + dependency: transitive 168 + description: 169 + name: string_scanner 170 + url: "https://pub.dartlang.org" 171 + source: hosted 172 + version: "1.1.0" 173 + term_glyph: 174 + dependency: transitive 175 + description: 176 + name: term_glyph 177 + url: "https://pub.dartlang.org" 178 + source: hosted 179 + version: "1.2.0" 180 + test_api: 181 + dependency: transitive 182 + description: 183 + name: test_api 184 + url: "https://pub.dartlang.org" 185 + source: hosted 186 + version: "0.4.8" 187 + typed_data: 188 + dependency: transitive 189 + description: 190 + name: typed_data 191 + url: "https://pub.dartlang.org" 192 + source: hosted 193 + version: "1.3.0" 194 + vector_math: 195 + dependency: transitive 196 + description: 197 + name: vector_math 198 + url: "https://pub.dartlang.org" 199 + source: hosted 200 + version: "2.1.1" 201 + xml: 202 + dependency: transitive 203 + description: 204 + name: xml 205 + url: "https://pub.dartlang.org" 206 + source: hosted 207 + version: "5.3.1" 208 + sdks: 209 + dart: ">=2.16.2 <3.0.0" 210 + flutter: ">=2.4.0-0.0.pre"
+90
local_communications_app/pubspec.yaml
··· 1 + name: local_communications_app 2 + description: A new NFC 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.16.2 <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 + flutter_svg: ^1.0.3 38 + 39 + dev_dependencies: 40 + flutter_test: 41 + sdk: flutter 42 + 43 + # The "flutter_lints" package below contains a set of recommended lints to 44 + # encourage good coding practices. The lint set provided by the package is 45 + # activated in the `analysis_options.yaml` file located at the root of your 46 + # package. See that file for information about deactivating specific lint 47 + # rules and activating additional ones. 48 + flutter_lints: ^1.0.0 49 + 50 + # For information on the generic Dart part of this file, see the 51 + # following page: https://dart.dev/tools/pub/pubspec 52 + 53 + # The following section is specific to Flutter. 54 + flutter: 55 + 56 + # The following line ensures that the Material Icons font is 57 + # included with your application, so that you can use the icons in 58 + # the material Icons class. 59 + uses-material-design: true 60 + 61 + # To add assets to your application, add an assets section, like this: 62 + # assets: 63 + # - images/a_dot_burr.jpeg 64 + # - images/a_dot_ham.jpeg 65 + 66 + # An image asset can refer to one or more resolution-specific "variants", see 67 + # https://flutter.dev/assets-and-images/#resolution-aware. 68 + 69 + # For details regarding adding assets from package dependencies, see 70 + # https://flutter.dev/assets-and-images/#from-packages 71 + 72 + # To add custom fonts to your application, add a fonts section here, 73 + # in this "flutter" section. Each entry in this list should have a 74 + # "family" key with the font family name, and a "fonts" key with a 75 + # list giving the asset and other descriptors for the font. For 76 + # example: 77 + # fonts: 78 + # - family: Schyler 79 + # fonts: 80 + # - asset: fonts/Schyler-Regular.ttf 81 + # - asset: fonts/Schyler-Italic.ttf 82 + # style: italic 83 + # - family: Trajan Pro 84 + # fonts: 85 + # - asset: fonts/TrajanPro.ttf 86 + # - asset: fonts/TrajanPro_Bold.ttf 87 + # weight: 700 88 + # 89 + # For details regarding fonts from package dependencies, 90 + # see https://flutter.dev/custom-fonts/#from-packages
+30
local_communications_app/test/widget_test.dart
··· 1 + // This is a basic Flutter widget test. 2 + // 3 + // To perform an interaction with a widget in your test, use the WidgetTester 4 + // utility that Flutter provides. For example, you can send tap and scroll 5 + // gestures. You can also use WidgetTester to find child widgets in the widget 6 + // tree, read text, and verify that the values of widget properties are correct. 7 + 8 + import 'package:flutter/material.dart'; 9 + import 'package:flutter_test/flutter_test.dart'; 10 + 11 + import 'package:local_communications_app/main.dart'; 12 + 13 + void main() { 14 + testWidgets('Counter increments smoke test', (WidgetTester tester) async { 15 + // Build our app and trigger a frame. 16 + await tester.pumpWidget(const MyApp()); 17 + 18 + // Verify that our counter starts at 0. 19 + expect(find.text('0'), findsOneWidget); 20 + expect(find.text('1'), findsNothing); 21 + 22 + // Tap the '+' icon and trigger a frame. 23 + await tester.tap(find.byIcon(Icons.add)); 24 + await tester.pump(); 25 + 26 + // Verify that our counter has incremented. 27 + expect(find.text('0'), findsNothing); 28 + expect(find.text('1'), findsOneWidget); 29 + }); 30 + }
+46
nfc_flutter_example/.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
+10
nfc_flutter_example/.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: 5464c5bac742001448fe4fc0597be939379f88ea 8 + channel: stable 9 + 10 + project_type: app
+16
nfc_flutter_example/README.md
··· 1 + # nfc_flutter_example 2 + 3 + A new Flutter project. 4 + 5 + ## Getting Started 6 + 7 + This project is a starting point for a Flutter application. 8 + 9 + A few resources to get you started if this is your first Flutter project: 10 + 11 + - [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab) 12 + - [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook) 13 + 14 + For help getting started with Flutter, view our 15 + [online documentation](https://flutter.dev/docs), which offers tutorials, 16 + samples, guidance on mobile development, and a full API reference.
+29
nfc_flutter_example/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
+13
nfc_flutter_example/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
+68
nfc_flutter_example/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 "me.binau.nfc_flutter_example" 47 + minSdkVersion flutter.minSdkVersion 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 + }
+7
nfc_flutter_example/android/app/src/debug/AndroidManifest.xml
··· 1 + <manifest xmlns:android="http://schemas.android.com/apk/res/android" 2 + package="me.binau.nfc_flutter_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>
+34
nfc_flutter_example/android/app/src/main/AndroidManifest.xml
··· 1 + <manifest xmlns:android="http://schemas.android.com/apk/res/android" 2 + package="me.binau.nfc_flutter_example"> 3 + <application 4 + android:label="nfc_flutter_example" 5 + android:name="${applicationName}" 6 + android:icon="@mipmap/ic_launcher"> 7 + <activity 8 + android:name=".MainActivity" 9 + android:exported="true" 10 + android:launchMode="singleTop" 11 + android:theme="@style/LaunchTheme" 12 + android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" 13 + android:hardwareAccelerated="true" 14 + android:windowSoftInputMode="adjustResize"> 15 + <!-- Specifies an Android theme to apply to this Activity as soon as 16 + the Android process has started. This theme is visible to the user 17 + while the Flutter UI initializes. After that, this theme continues 18 + to determine the Window background behind the Flutter UI. --> 19 + <meta-data 20 + android:name="io.flutter.embedding.android.NormalTheme" 21 + android:resource="@style/NormalTheme" 22 + /> 23 + <intent-filter> 24 + <action android:name="android.intent.action.MAIN"/> 25 + <category android:name="android.intent.category.LAUNCHER"/> 26 + </intent-filter> 27 + </activity> 28 + <!-- Don't delete the meta-data below. 29 + This is used by the Flutter tool to generate GeneratedPluginRegistrant.java --> 30 + <meta-data 31 + android:name="flutterEmbedding" 32 + android:value="2" /> 33 + </application> 34 + </manifest>
+6
nfc_flutter_example/android/app/src/main/kotlin/me/binau/nfc_flutter_example/MainActivity.kt
··· 1 + package me.binau.nfc_flutter_example 2 + 3 + import io.flutter.embedding.android.FlutterActivity 4 + 5 + class MainActivity: FlutterActivity() { 6 + }
+12
nfc_flutter_example/android/app/src/main/res/drawable-v21/launch_background.xml
··· 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:colorBackground" /> 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>
+12
nfc_flutter_example/android/app/src/main/res/drawable/launch_background.xml
··· 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>
nfc_flutter_example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png

This is a binary file and will not be displayed.

nfc_flutter_example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png

This is a binary file and will not be displayed.

nfc_flutter_example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png

This is a binary file and will not be displayed.

nfc_flutter_example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png

This is a binary file and will not be displayed.

nfc_flutter_example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png

This is a binary file and will not be displayed.

+18
nfc_flutter_example/android/app/src/main/res/values-night/styles.xml
··· 1 + <?xml version="1.0" encoding="utf-8"?> 2 + <resources> 3 + <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on --> 4 + <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar"> 5 + <!-- Show a splash screen on the activity. Automatically removed when 6 + Flutter draws its first frame --> 7 + <item name="android:windowBackground">@drawable/launch_background</item> 8 + </style> 9 + <!-- Theme applied to the Android Window as soon as the process has started. 10 + This theme determines the color of the Android Window while your 11 + Flutter UI initializes, as well as behind your Flutter UI while its 12 + running. 13 + 14 + This Theme is only used starting with V2 of Flutter's Android embedding. --> 15 + <style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar"> 16 + <item name="android:windowBackground">?android:colorBackground</item> 17 + </style> 18 + </resources>
+18
nfc_flutter_example/android/app/src/main/res/values/styles.xml
··· 1 + <?xml version="1.0" encoding="utf-8"?> 2 + <resources> 3 + <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off --> 4 + <style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar"> 5 + <!-- Show a splash screen on the activity. Automatically removed when 6 + Flutter draws its first frame --> 7 + <item name="android:windowBackground">@drawable/launch_background</item> 8 + </style> 9 + <!-- Theme applied to the Android Window as soon as the process has started. 10 + This theme determines the color of the Android Window while your 11 + Flutter UI initializes, as well as behind your Flutter UI while its 12 + running. 13 + 14 + This Theme is only used starting with V2 of Flutter's Android embedding. --> 15 + <style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar"> 16 + <item name="android:windowBackground">?android:colorBackground</item> 17 + </style> 18 + </resources>
+7
nfc_flutter_example/android/app/src/profile/AndroidManifest.xml
··· 1 + <manifest xmlns:android="http://schemas.android.com/apk/res/android" 2 + package="me.binau.nfc_flutter_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>
+31
nfc_flutter_example/android/build.gradle
··· 1 + buildscript { 2 + ext.kotlin_version = '1.6.10' 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 + }
+3
nfc_flutter_example/android/gradle.properties
··· 1 + org.gradle.jvmargs=-Xmx1536M 2 + android.useAndroidX=true 3 + android.enableJetifier=true
+6
nfc_flutter_example/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
+11
nfc_flutter_example/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"
+34
nfc_flutter_example/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
+26
nfc_flutter_example/ios/Flutter/AppFrameworkInfo.plist
··· 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>9.0</string> 25 + </dict> 26 + </plist>
+1
nfc_flutter_example/ios/Flutter/Debug.xcconfig
··· 1 + #include "Generated.xcconfig"
+1
nfc_flutter_example/ios/Flutter/Release.xcconfig
··· 1 + #include "Generated.xcconfig"
+481
nfc_flutter_example/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 = "<group>"; }; 33 + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; }; 34 + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; }; 35 + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; }; 36 + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; 37 + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; }; 38 + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; }; 39 + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; }; 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 = "<group>"; }; 42 + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; 43 + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; 44 + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; 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 = "<group>"; 68 + }; 69 + 97C146E51CF9000F007C117D = { 70 + isa = PBXGroup; 71 + children = ( 72 + 9740EEB11CF90186004384FC /* Flutter */, 73 + 97C146F01CF9000F007C117D /* Runner */, 74 + 97C146EF1CF9000F007C117D /* Products */, 75 + ); 76 + sourceTree = "<group>"; 77 + }; 78 + 97C146EF1CF9000F007C117D /* Products */ = { 79 + isa = PBXGroup; 80 + children = ( 81 + 97C146EE1CF9000F007C117D /* Runner.app */, 82 + ); 83 + name = Products; 84 + sourceTree = "<group>"; 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 = "<group>"; 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 = "<group>"; 222 + }; 223 + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { 224 + isa = PBXVariantGroup; 225 + children = ( 226 + 97C147001CF9000F007C117D /* Base */, 227 + ); 228 + name = LaunchScreen.storyboard; 229 + sourceTree = "<group>"; 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 = me.binau.nfcFlutterExample; 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 = me.binau.nfcFlutterExample; 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 = me.binau.nfcFlutterExample; 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 + }
+7
nfc_flutter_example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
··· 1 + <?xml version="1.0" encoding="UTF-8"?> 2 + <Workspace 3 + version = "1.0"> 4 + <FileRef 5 + location = "self:"> 6 + </FileRef> 7 + </Workspace>
+8
nfc_flutter_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
··· 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>IDEDidComputeMac32BitWarning</key> 6 + <true/> 7 + </dict> 8 + </plist>
+8
nfc_flutter_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
··· 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>PreviewsEnabled</key> 6 + <false/> 7 + </dict> 8 + </plist>
+87
nfc_flutter_example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
··· 1 + <?xml version="1.0" encoding="UTF-8"?> 2 + <Scheme 3 + LastUpgradeVersion = "1300" 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 + shouldUseLaunchSchemeArgsEnv = "YES"> 30 + <MacroExpansion> 31 + <BuildableReference 32 + BuildableIdentifier = "primary" 33 + BlueprintIdentifier = "97C146ED1CF9000F007C117D" 34 + BuildableName = "Runner.app" 35 + BlueprintName = "Runner" 36 + ReferencedContainer = "container:Runner.xcodeproj"> 37 + </BuildableReference> 38 + </MacroExpansion> 39 + <Testables> 40 + </Testables> 41 + </TestAction> 42 + <LaunchAction 43 + buildConfiguration = "Debug" 44 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" 45 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" 46 + launchStyle = "0" 47 + useCustomWorkingDirectory = "NO" 48 + ignoresPersistentStateOnLaunch = "NO" 49 + debugDocumentVersioning = "YES" 50 + debugServiceExtension = "internal" 51 + allowLocationSimulation = "YES"> 52 + <BuildableProductRunnable 53 + runnableDebuggingMode = "0"> 54 + <BuildableReference 55 + BuildableIdentifier = "primary" 56 + BlueprintIdentifier = "97C146ED1CF9000F007C117D" 57 + BuildableName = "Runner.app" 58 + BlueprintName = "Runner" 59 + ReferencedContainer = "container:Runner.xcodeproj"> 60 + </BuildableReference> 61 + </BuildableProductRunnable> 62 + </LaunchAction> 63 + <ProfileAction 64 + buildConfiguration = "Profile" 65 + shouldUseLaunchSchemeArgsEnv = "YES" 66 + savedToolIdentifier = "" 67 + useCustomWorkingDirectory = "NO" 68 + debugDocumentVersioning = "YES"> 69 + <BuildableProductRunnable 70 + runnableDebuggingMode = "0"> 71 + <BuildableReference 72 + BuildableIdentifier = "primary" 73 + BlueprintIdentifier = "97C146ED1CF9000F007C117D" 74 + BuildableName = "Runner.app" 75 + BlueprintName = "Runner" 76 + ReferencedContainer = "container:Runner.xcodeproj"> 77 + </BuildableReference> 78 + </BuildableProductRunnable> 79 + </ProfileAction> 80 + <AnalyzeAction 81 + buildConfiguration = "Debug"> 82 + </AnalyzeAction> 83 + <ArchiveAction 84 + buildConfiguration = "Release" 85 + revealArchiveInOrganizer = "YES"> 86 + </ArchiveAction> 87 + </Scheme>
+7
nfc_flutter_example/ios/Runner.xcworkspace/contents.xcworkspacedata
··· 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>
+8
nfc_flutter_example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
··· 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>IDEDidComputeMac32BitWarning</key> 6 + <true/> 7 + </dict> 8 + </plist>
+8
nfc_flutter_example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
··· 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>PreviewsEnabled</key> 6 + <false/> 7 + </dict> 8 + </plist>
+13
nfc_flutter_example/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 + }
+122
nfc_flutter_example/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 + }
nfc_flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png

This is a binary file and will not be displayed.

nfc_flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png

This is a binary file and will not be displayed.

nfc_flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png

This is a binary file and will not be displayed.

nfc_flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png

This is a binary file and will not be displayed.

nfc_flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png

This is a binary file and will not be displayed.

nfc_flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png

This is a binary file and will not be displayed.

nfc_flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png

This is a binary file and will not be displayed.

nfc_flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png

This is a binary file and will not be displayed.

nfc_flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png

This is a binary file and will not be displayed.

nfc_flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png

This is a binary file and will not be displayed.

nfc_flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png

This is a binary file and will not be displayed.

nfc_flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png

This is a binary file and will not be displayed.

nfc_flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png

This is a binary file and will not be displayed.

nfc_flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png

This is a binary file and will not be displayed.

nfc_flutter_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png

This is a binary file and will not be displayed.

+23
nfc_flutter_example/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 + }
nfc_flutter_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png

This is a binary file and will not be displayed.

nfc_flutter_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png

This is a binary file and will not be displayed.

nfc_flutter_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png

This is a binary file and will not be displayed.

+5
nfc_flutter_example/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.
+37
nfc_flutter_example/ios/Runner/Base.lproj/LaunchScreen.storyboard
··· 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>
+26
nfc_flutter_example/ios/Runner/Base.lproj/Main.storyboard
··· 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>
+47
nfc_flutter_example/ios/Runner/Info.plist
··· 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>$(DEVELOPMENT_LANGUAGE)</string> 7 + <key>CFBundleDisplayName</key> 8 + <string>Nfc Flutter Example</string> 9 + <key>CFBundleExecutable</key> 10 + <string>$(EXECUTABLE_NAME)</string> 11 + <key>CFBundleIdentifier</key> 12 + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> 13 + <key>CFBundleInfoDictionaryVersion</key> 14 + <string>6.0</string> 15 + <key>CFBundleName</key> 16 + <string>nfc_flutter_example</string> 17 + <key>CFBundlePackageType</key> 18 + <string>APPL</string> 19 + <key>CFBundleShortVersionString</key> 20 + <string>$(FLUTTER_BUILD_NAME)</string> 21 + <key>CFBundleSignature</key> 22 + <string>????</string> 23 + <key>CFBundleVersion</key> 24 + <string>$(FLUTTER_BUILD_NUMBER)</string> 25 + <key>LSRequiresIPhoneOS</key> 26 + <true/> 27 + <key>UILaunchStoryboardName</key> 28 + <string>LaunchScreen</string> 29 + <key>UIMainStoryboardFile</key> 30 + <string>Main</string> 31 + <key>UISupportedInterfaceOrientations</key> 32 + <array> 33 + <string>UIInterfaceOrientationPortrait</string> 34 + <string>UIInterfaceOrientationLandscapeLeft</string> 35 + <string>UIInterfaceOrientationLandscapeRight</string> 36 + </array> 37 + <key>UISupportedInterfaceOrientations~ipad</key> 38 + <array> 39 + <string>UIInterfaceOrientationPortrait</string> 40 + <string>UIInterfaceOrientationPortraitUpsideDown</string> 41 + <string>UIInterfaceOrientationLandscapeLeft</string> 42 + <string>UIInterfaceOrientationLandscapeRight</string> 43 + </array> 44 + <key>UIViewControllerBasedStatusBarAppearance</key> 45 + <false/> 46 + </dict> 47 + </plist>
+1
nfc_flutter_example/ios/Runner/Runner-Bridging-Header.h
··· 1 + #import "GeneratedPluginRegistrant.h"
+350
nfc_flutter_example/lib/main.dart
··· 1 + import 'dart:async'; 2 + import 'dart:convert'; 3 + import 'dart:io'; 4 + import 'package:device_info/device_info.dart'; 5 + import 'package:flutter_styled_toast/flutter_styled_toast.dart'; 6 + import 'package:flutter/material.dart'; 7 + import 'package:flutter_nearby_connections/flutter_nearby_connections.dart'; 8 + 9 + void main() { 10 + runApp(MyApp()); 11 + } 12 + 13 + Route<dynamic> generateRoute(RouteSettings settings) { 14 + switch (settings.name) { 15 + case '/': 16 + return MaterialPageRoute(builder: (_) => Home()); 17 + case 'browser': 18 + return MaterialPageRoute( 19 + builder: (_) => DevicesListScreen(deviceType: DeviceType.browser)); 20 + case 'advertiser': 21 + return MaterialPageRoute( 22 + builder: (_) => DevicesListScreen(deviceType: DeviceType.advertiser)); 23 + default: 24 + return MaterialPageRoute( 25 + builder: (_) => Scaffold( 26 + body: Center( 27 + child: Text('No route defined for ${settings.name}')), 28 + )); 29 + } 30 + } 31 + 32 + class MyApp extends StatelessWidget { 33 + @override 34 + Widget build(BuildContext context) { 35 + return MaterialApp( 36 + onGenerateRoute: generateRoute, 37 + initialRoute: '/', 38 + ); 39 + } 40 + } 41 + 42 + class Home extends StatelessWidget { 43 + @override 44 + Widget build(BuildContext context) { 45 + return Scaffold( 46 + body: Column( 47 + children: [ 48 + Expanded( 49 + child: InkWell( 50 + onTap: () { 51 + Navigator.pushNamed(context, 'browser'); 52 + }, 53 + child: Container( 54 + color: Colors.red, 55 + child: Center( 56 + child: Text( 57 + 'BROWSER', 58 + style: TextStyle(color: Colors.white, fontSize: 40), 59 + )), 60 + ), 61 + ), 62 + ), 63 + Expanded( 64 + child: InkWell( 65 + onTap: () { 66 + Navigator.pushNamed(context, 'advertiser'); 67 + }, 68 + child: Container( 69 + color: Colors.green, 70 + child: Center( 71 + child: Text( 72 + 'ADVERTISER', 73 + style: TextStyle(color: Colors.white, fontSize: 40), 74 + )), 75 + ), 76 + ), 77 + ), 78 + ], 79 + ), 80 + ); 81 + } 82 + } 83 + 84 + enum DeviceType { advertiser, browser } 85 + 86 + class DevicesListScreen extends StatefulWidget { 87 + const DevicesListScreen({required this.deviceType}); 88 + 89 + final DeviceType deviceType; 90 + 91 + @override 92 + _DevicesListScreenState createState() => _DevicesListScreenState(); 93 + } 94 + 95 + class _DevicesListScreenState extends State<DevicesListScreen> { 96 + List<Device> devices = []; 97 + List<Device> connectedDevices = []; 98 + late NearbyService nearbyService; 99 + late StreamSubscription subscription; 100 + late StreamSubscription receivedDataSubscription; 101 + 102 + bool isInit = false; 103 + 104 + @override 105 + void initState() { 106 + super.initState(); 107 + init(); 108 + } 109 + 110 + @override 111 + void dispose() { 112 + subscription.cancel(); 113 + receivedDataSubscription.cancel(); 114 + nearbyService.stopBrowsingForPeers(); 115 + nearbyService.stopAdvertisingPeer(); 116 + super.dispose(); 117 + } 118 + 119 + @override 120 + Widget build(BuildContext context) { 121 + return Scaffold( 122 + appBar: AppBar( 123 + title: Text(widget.deviceType.toString().substring(11).toUpperCase()), 124 + ), 125 + backgroundColor: Colors.white, 126 + body: ListView.builder( 127 + itemCount: getItemCount(), 128 + itemBuilder: (context, index) { 129 + final device = widget.deviceType == DeviceType.advertiser 130 + ? connectedDevices[index] 131 + : devices[index]; 132 + return Container( 133 + margin: EdgeInsets.all(8.0), 134 + child: Column( 135 + children: [ 136 + Row( 137 + children: [ 138 + Expanded( 139 + child: GestureDetector( 140 + onTap: () => _onTabItemListener(device), 141 + child: Column( 142 + children: [ 143 + Text(device.deviceName), 144 + Text( 145 + getStateName(device.state), 146 + style: TextStyle( 147 + color: getStateColor(device.state)), 148 + ), 149 + ], 150 + crossAxisAlignment: CrossAxisAlignment.start, 151 + ), 152 + )), 153 + // Request connect 154 + GestureDetector( 155 + onTap: () => _onButtonClicked(device), 156 + child: Container( 157 + margin: EdgeInsets.symmetric(horizontal: 8.0), 158 + padding: EdgeInsets.all(8.0), 159 + height: 35, 160 + width: 100, 161 + color: getButtonColor(device.state), 162 + child: Center( 163 + child: Text( 164 + getButtonStateName(device.state), 165 + style: TextStyle( 166 + color: Colors.white, 167 + fontWeight: FontWeight.bold), 168 + ), 169 + ), 170 + ), 171 + ) 172 + ], 173 + ), 174 + SizedBox( 175 + height: 8.0, 176 + ), 177 + Divider( 178 + height: 1, 179 + color: Colors.grey, 180 + ) 181 + ], 182 + ), 183 + ); 184 + })); 185 + } 186 + 187 + String getStateName(SessionState state) { 188 + switch (state) { 189 + case SessionState.notConnected: 190 + return "disconnected"; 191 + case SessionState.connecting: 192 + return "waiting"; 193 + default: 194 + return "connected"; 195 + } 196 + } 197 + 198 + String getButtonStateName(SessionState state) { 199 + switch (state) { 200 + case SessionState.notConnected: 201 + case SessionState.connecting: 202 + return "Connect"; 203 + default: 204 + return "Disconnect"; 205 + } 206 + } 207 + 208 + Color getStateColor(SessionState state) { 209 + switch (state) { 210 + case SessionState.notConnected: 211 + return Colors.black; 212 + case SessionState.connecting: 213 + return Colors.grey; 214 + default: 215 + return Colors.green; 216 + } 217 + } 218 + 219 + Color getButtonColor(SessionState state) { 220 + switch (state) { 221 + case SessionState.notConnected: 222 + case SessionState.connecting: 223 + return Colors.green; 224 + default: 225 + return Colors.red; 226 + } 227 + } 228 + 229 + _onTabItemListener(Device device) { 230 + if (device.state == SessionState.connected) { 231 + showDialog( 232 + context: context, 233 + builder: (BuildContext context) { 234 + final myController = TextEditingController(); 235 + return AlertDialog( 236 + title: Text("Send message"), 237 + content: TextField(controller: myController), 238 + actions: [ 239 + TextButton( 240 + child: Text("Cancel"), 241 + onPressed: () { 242 + Navigator.of(context).pop(); 243 + }, 244 + ), 245 + TextButton( 246 + child: Text("Send"), 247 + onPressed: () { 248 + nearbyService.sendMessage( 249 + device.deviceId, myController.text); 250 + myController.text = ''; 251 + }, 252 + ) 253 + ], 254 + ); 255 + }); 256 + } 257 + } 258 + 259 + int getItemCount() { 260 + if (widget.deviceType == DeviceType.advertiser) { 261 + return connectedDevices.length; 262 + } else { 263 + return devices.length; 264 + } 265 + } 266 + 267 + _onButtonClicked(Device device) { 268 + switch (device.state) { 269 + case SessionState.notConnected: 270 + nearbyService.invitePeer( 271 + deviceID: device.deviceId, 272 + deviceName: device.deviceName, 273 + ); 274 + break; 275 + case SessionState.connected: 276 + nearbyService.disconnectPeer(deviceID: device.deviceId); 277 + break; 278 + case SessionState.connecting: 279 + break; 280 + } 281 + } 282 + 283 + void init() async { 284 + nearbyService = NearbyService(); 285 + String devInfo = ''; 286 + DeviceInfoPlugin deviceInfo = DeviceInfoPlugin(); 287 + if (Platform.isAndroid) { 288 + AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo; 289 + devInfo = androidInfo.model; 290 + } 291 + if (Platform.isIOS) { 292 + IosDeviceInfo iosInfo = await deviceInfo.iosInfo; 293 + devInfo = iosInfo.localizedModel; 294 + } 295 + await nearbyService.init( 296 + serviceType: 'mpconn', 297 + deviceName: devInfo, 298 + strategy: Strategy.P2P_CLUSTER, 299 + callback: (isRunning) async { 300 + if (isRunning) { 301 + if (widget.deviceType == DeviceType.browser) { 302 + 303 + await nearbyService.stopBrowsingForPeers(); 304 + await Future.delayed(Duration(microseconds: 200)); 305 + await nearbyService.startBrowsingForPeers(); 306 + } else { 307 + await nearbyService.stopAdvertisingPeer(); 308 + await nearbyService.stopBrowsingForPeers(); 309 + await Future.delayed(Duration(microseconds: 200)); 310 + await nearbyService.startAdvertisingPeer(); 311 + await nearbyService.startBrowsingForPeers(); 312 + } 313 + } 314 + }); 315 + subscription = 316 + nearbyService.stateChangedSubscription(callback: (devicesList) { 317 + devicesList.forEach((element) { 318 + print( 319 + " deviceId: ${element.deviceId} | deviceName: ${element.deviceName} | state: ${element.state}"); 320 + 321 + if (Platform.isAndroid) { 322 + if (element.state == SessionState.connected) { 323 + nearbyService.stopBrowsingForPeers(); 324 + } else { 325 + nearbyService.startBrowsingForPeers(); 326 + } 327 + } 328 + }); 329 + 330 + setState(() { 331 + devices.clear(); 332 + devices.addAll(devicesList); 333 + connectedDevices.clear(); 334 + connectedDevices.addAll(devicesList 335 + .where((d) => d.state == SessionState.connected) 336 + .toList()); 337 + }); 338 + }); 339 + 340 + receivedDataSubscription = 341 + nearbyService.dataReceivedSubscription(callback: (data) { 342 + print("dataReceivedSubscription: ${jsonEncode(data)}"); 343 + showToast(jsonEncode(data), 344 + context: context, 345 + axis: Axis.horizontal, 346 + alignment: Alignment.center, 347 + position: StyledToastPosition.bottom); 348 + }); 349 + } 350 + }
+222
nfc_flutter_example/pubspec.lock
··· 1 + # Generated by pub 2 + # See https://dart.dev/tools/pub/glossary#lockfile 3 + packages: 4 + async: 5 + dependency: transitive 6 + description: 7 + name: async 8 + url: "https://pub.dartlang.org" 9 + source: hosted 10 + version: "2.8.2" 11 + boolean_selector: 12 + dependency: transitive 13 + description: 14 + name: boolean_selector 15 + url: "https://pub.dartlang.org" 16 + source: hosted 17 + version: "2.1.0" 18 + characters: 19 + dependency: transitive 20 + description: 21 + name: characters 22 + url: "https://pub.dartlang.org" 23 + source: hosted 24 + version: "1.2.0" 25 + charcode: 26 + dependency: transitive 27 + description: 28 + name: charcode 29 + url: "https://pub.dartlang.org" 30 + source: hosted 31 + version: "1.3.1" 32 + clock: 33 + dependency: transitive 34 + description: 35 + name: clock 36 + url: "https://pub.dartlang.org" 37 + source: hosted 38 + version: "1.1.0" 39 + collection: 40 + dependency: transitive 41 + description: 42 + name: collection 43 + url: "https://pub.dartlang.org" 44 + source: hosted 45 + version: "1.15.0" 46 + cupertino_icons: 47 + dependency: "direct main" 48 + description: 49 + name: cupertino_icons 50 + url: "https://pub.dartlang.org" 51 + source: hosted 52 + version: "1.0.4" 53 + device_info: 54 + dependency: "direct main" 55 + description: 56 + name: device_info 57 + url: "https://pub.dartlang.org" 58 + source: hosted 59 + version: "2.0.3" 60 + device_info_platform_interface: 61 + dependency: transitive 62 + description: 63 + name: device_info_platform_interface 64 + url: "https://pub.dartlang.org" 65 + source: hosted 66 + version: "2.0.1" 67 + fake_async: 68 + dependency: transitive 69 + description: 70 + name: fake_async 71 + url: "https://pub.dartlang.org" 72 + source: hosted 73 + version: "1.2.0" 74 + flutter: 75 + dependency: "direct main" 76 + description: flutter 77 + source: sdk 78 + version: "0.0.0" 79 + flutter_lints: 80 + dependency: "direct dev" 81 + description: 82 + name: flutter_lints 83 + url: "https://pub.dartlang.org" 84 + source: hosted 85 + version: "1.0.4" 86 + flutter_localizations: 87 + dependency: transitive 88 + description: flutter 89 + source: sdk 90 + version: "0.0.0" 91 + flutter_nearby_connections: 92 + dependency: "direct main" 93 + description: 94 + name: flutter_nearby_connections 95 + url: "https://pub.dartlang.org" 96 + source: hosted 97 + version: "1.1.1" 98 + flutter_styled_toast: 99 + dependency: "direct main" 100 + description: 101 + name: flutter_styled_toast 102 + url: "https://pub.dartlang.org" 103 + source: hosted 104 + version: "2.0.0" 105 + flutter_test: 106 + dependency: "direct dev" 107 + description: flutter 108 + source: sdk 109 + version: "0.0.0" 110 + intl: 111 + dependency: transitive 112 + description: 113 + name: intl 114 + url: "https://pub.dartlang.org" 115 + source: hosted 116 + version: "0.17.0" 117 + lints: 118 + dependency: transitive 119 + description: 120 + name: lints 121 + url: "https://pub.dartlang.org" 122 + source: hosted 123 + version: "1.0.1" 124 + matcher: 125 + dependency: transitive 126 + description: 127 + name: matcher 128 + url: "https://pub.dartlang.org" 129 + source: hosted 130 + version: "0.12.11" 131 + material_color_utilities: 132 + dependency: transitive 133 + description: 134 + name: material_color_utilities 135 + url: "https://pub.dartlang.org" 136 + source: hosted 137 + version: "0.1.3" 138 + meta: 139 + dependency: transitive 140 + description: 141 + name: meta 142 + url: "https://pub.dartlang.org" 143 + source: hosted 144 + version: "1.7.0" 145 + path: 146 + dependency: transitive 147 + description: 148 + name: path 149 + url: "https://pub.dartlang.org" 150 + source: hosted 151 + version: "1.8.0" 152 + plugin_platform_interface: 153 + dependency: transitive 154 + description: 155 + name: plugin_platform_interface 156 + url: "https://pub.dartlang.org" 157 + source: hosted 158 + version: "2.1.2" 159 + sky_engine: 160 + dependency: transitive 161 + description: flutter 162 + source: sdk 163 + version: "0.0.99" 164 + source_span: 165 + dependency: transitive 166 + description: 167 + name: source_span 168 + url: "https://pub.dartlang.org" 169 + source: hosted 170 + version: "1.8.1" 171 + stack_trace: 172 + dependency: transitive 173 + description: 174 + name: stack_trace 175 + url: "https://pub.dartlang.org" 176 + source: hosted 177 + version: "1.10.0" 178 + stream_channel: 179 + dependency: transitive 180 + description: 181 + name: stream_channel 182 + url: "https://pub.dartlang.org" 183 + source: hosted 184 + version: "2.1.0" 185 + string_scanner: 186 + dependency: transitive 187 + description: 188 + name: string_scanner 189 + url: "https://pub.dartlang.org" 190 + source: hosted 191 + version: "1.1.0" 192 + term_glyph: 193 + dependency: transitive 194 + description: 195 + name: term_glyph 196 + url: "https://pub.dartlang.org" 197 + source: hosted 198 + version: "1.2.0" 199 + test_api: 200 + dependency: transitive 201 + description: 202 + name: test_api 203 + url: "https://pub.dartlang.org" 204 + source: hosted 205 + version: "0.4.8" 206 + typed_data: 207 + dependency: transitive 208 + description: 209 + name: typed_data 210 + url: "https://pub.dartlang.org" 211 + source: hosted 212 + version: "1.3.0" 213 + vector_math: 214 + dependency: transitive 215 + description: 216 + name: vector_math 217 + url: "https://pub.dartlang.org" 218 + source: hosted 219 + version: "2.1.1" 220 + sdks: 221 + dart: ">=2.16.2 <3.0.0" 222 + flutter: ">=1.12.13+hotfix.5"
+92
nfc_flutter_example/pubspec.yaml
··· 1 + name: nfc_flutter_example 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.16.2 <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 + flutter_nearby_connections: ^1.1.1 38 + flutter_styled_toast: ^2.0.0 39 + device_info: ^2.0.3 40 + 41 + dev_dependencies: 42 + flutter_test: 43 + sdk: flutter 44 + 45 + # The "flutter_lints" package below contains a set of recommended lints to 46 + # encourage good coding practices. The lint set provided by the package is 47 + # activated in the `analysis_options.yaml` file located at the root of your 48 + # package. See that file for information about deactivating specific lint 49 + # rules and activating additional ones. 50 + flutter_lints: ^1.0.0 51 + 52 + # For information on the generic Dart part of this file, see the 53 + # following page: https://dart.dev/tools/pub/pubspec 54 + 55 + # The following section is specific to Flutter. 56 + flutter: 57 + 58 + # The following line ensures that the Material Icons font is 59 + # included with your application, so that you can use the icons in 60 + # the material Icons class. 61 + uses-material-design: true 62 + 63 + # To add assets to your application, add an assets section, like this: 64 + # assets: 65 + # - images/a_dot_burr.jpeg 66 + # - images/a_dot_ham.jpeg 67 + 68 + # An image asset can refer to one or more resolution-specific "variants", see 69 + # https://flutter.dev/assets-and-images/#resolution-aware. 70 + 71 + # For details regarding adding assets from package dependencies, see 72 + # https://flutter.dev/assets-and-images/#from-packages 73 + 74 + # To add custom fonts to your application, add a fonts section here, 75 + # in this "flutter" section. Each entry in this list should have a 76 + # "family" key with the font family name, and a "fonts" key with a 77 + # list giving the asset and other descriptors for the font. For 78 + # example: 79 + # fonts: 80 + # - family: Schyler 81 + # fonts: 82 + # - asset: fonts/Schyler-Regular.ttf 83 + # - asset: fonts/Schyler-Italic.ttf 84 + # style: italic 85 + # - family: Trajan Pro 86 + # fonts: 87 + # - asset: fonts/TrajanPro.ttf 88 + # - asset: fonts/TrajanPro_Bold.ttf 89 + # weight: 700 90 + # 91 + # For details regarding fonts from package dependencies, 92 + # see https://flutter.dev/custom-fonts/#from-packages
+30
nfc_flutter_example/test/widget_test.dart
··· 1 + // This is a basic Flutter widget test. 2 + // 3 + // To perform an interaction with a widget in your test, use the WidgetTester 4 + // utility that Flutter provides. For example, you can send tap and scroll 5 + // gestures. You can also use WidgetTester to find child widgets in the widget 6 + // tree, read text, and verify that the values of widget properties are correct. 7 + 8 + import 'package:flutter/material.dart'; 9 + import 'package:flutter_test/flutter_test.dart'; 10 + 11 + import 'package:nfc_flutter_example/main.dart'; 12 + 13 + void main() { 14 + testWidgets('Counter increments smoke test', (WidgetTester tester) async { 15 + // Build our app and trigger a frame. 16 + await tester.pumpWidget(const MyApp()); 17 + 18 + // Verify that our counter starts at 0. 19 + expect(find.text('0'), findsOneWidget); 20 + expect(find.text('1'), findsNothing); 21 + 22 + // Tap the '+' icon and trigger a frame. 23 + await tester.tap(find.byIcon(Icons.add)); 24 + await tester.pump(); 25 + 26 + // Verify that our counter has incremented. 27 + expect(find.text('0'), findsNothing); 28 + expect(find.text('1'), findsOneWidget); 29 + }); 30 + }