├── .gitignore ├── .metadata ├── LICENSE ├── README.md ├── Screenshot ├── login_cover.png └── login_screens.png ├── android ├── app │ ├── build.gradle │ └── src │ │ ├── debug │ │ └── AndroidManifest.xml │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── sign_in_flutter │ │ │ │ └── MainActivity.java │ │ └── res │ │ │ ├── drawable │ │ │ └── launch_background.xml │ │ │ ├── mipmap-hdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-mdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxxhdpi │ │ │ └── ic_launcher.png │ │ │ └── values │ │ │ └── styles.xml │ │ └── profile │ │ └── AndroidManifest.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties └── settings.gradle ├── assets └── google_logo.png ├── codemagic.yaml ├── ios ├── Flutter │ ├── AppFrameworkInfo.plist │ ├── Debug.xcconfig │ └── Release.xcconfig ├── Podfile ├── Podfile.lock ├── Runner.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ └── xcschemes │ │ └── Runner.xcscheme ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── Runner │ ├── AppDelegate.h │ ├── AppDelegate.m │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── Icon-App-1024x1024@1x.png │ │ ├── Icon-App-20x20@1x.png │ │ ├── Icon-App-20x20@2x.png │ │ ├── Icon-App-20x20@3x.png │ │ ├── Icon-App-29x29@1x.png │ │ ├── Icon-App-29x29@2x.png │ │ ├── Icon-App-29x29@3x.png │ │ ├── Icon-App-40x40@1x.png │ │ ├── Icon-App-40x40@2x.png │ │ ├── Icon-App-40x40@3x.png │ │ ├── Icon-App-60x60@2x.png │ │ ├── Icon-App-60x60@3x.png │ │ ├── Icon-App-76x76@1x.png │ │ ├── Icon-App-76x76@2x.png │ │ └── Icon-App-83.5x83.5@2x.png │ └── LaunchImage.imageset │ │ ├── Contents.json │ │ ├── LaunchImage.png │ │ ├── LaunchImage@2x.png │ │ ├── LaunchImage@3x.png │ │ └── README.md │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Info.plist │ └── main.m ├── lib ├── first_screen.dart ├── login_page.dart ├── main.dart └── sign_in.dart ├── pubspec.lock ├── pubspec.yaml ├── release_notes.txt └── test └── login_test.dart /.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 | .dart_tool/ 26 | .flutter-plugins 27 | .packages 28 | .pub-cache/ 29 | .pub/ 30 | /build/ 31 | 32 | # Android related 33 | **/android/**/gradle-wrapper.jar 34 | **/android/.gradle 35 | **/android/captures/ 36 | **/android/gradlew 37 | **/android/gradlew.bat 38 | **/android/local.properties 39 | **/android/**/GeneratedPluginRegistrant.java 40 | **/android/app/google-services.json 41 | 42 | # iOS/XCode related 43 | **/ios/**/*.mode1v3 44 | **/ios/**/*.mode2v3 45 | **/ios/**/*.moved-aside 46 | **/ios/**/*.pbxuser 47 | **/ios/**/*.perspectivev3 48 | **/ios/**/*sync/ 49 | **/ios/**/.sconsign.dblite 50 | **/ios/**/.tags* 51 | **/ios/**/.vagrant/ 52 | **/ios/**/DerivedData/ 53 | **/ios/**/Icon? 54 | **/ios/**/Pods/ 55 | **/ios/**/.symlinks/ 56 | **/ios/**/profile 57 | **/ios/**/xcuserdata 58 | **/ios/.generated/ 59 | **/ios/Flutter/App.framework 60 | **/ios/Flutter/Flutter.framework 61 | **/ios/Flutter/Generated.xcconfig 62 | **/ios/Flutter/app.flx 63 | **/ios/Flutter/app.zip 64 | **/ios/Flutter/flutter_assets/ 65 | **/ios/ServiceDefinitions.json 66 | **/ios/Runner/GeneratedPluginRegistrant.* 67 | **/ios/Runner/GoogleService-Info.plist 68 | 69 | # Exceptions to above rules. 70 | !**/ios/**/default.mode1v3 71 | !**/ios/**/default.mode2v3 72 | !**/ios/**/default.pbxuser 73 | !**/ios/**/default.perspectivev3 74 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages 75 | .flutter-plugins-dependencies 76 | ios/Flutter/Flutter.podspec 77 | ios/Flutter/flutter_export_environment.sh 78 | ios/Flutter/.last_build_id 79 | -------------------------------------------------------------------------------- /.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: b712a172f9694745f50505c93340883493b505e5 8 | channel: stable 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Souvik Biswas 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | #### :warning: ARCHIVED: This repository is using Flutter 1.7 for the sample app. You can find the latest version of the similar implementation on [this new repo](https://github.com/sbis04/flutterfire-samples). The new version is using Flutter 2.0 (stable) with null safety enabled, and is tested on Android, iOS & Web. 2 | 3 | #### The updated Medium article for "Flutter: Implementing Google Sign In" is [here](https://medium.com/flutter-community/flutter-implementing-google-sign-in-71888bca24ed). 4 | 5 | --- 6 | 7 | # Flutter Google Sign In using Firebase 8 | ![codemagic](https://api.codemagic.io/apps/5d636daaf5035821fb723bc3/5d636daaf5035821fb723bc2/status_badge.svg) 9 | 10 |

11 | 12 |

13 | 14 | ### **Checkout my Medium article ["Flutter: Implementing Google Sign In"](https://medium.com/flutter-community/flutter-implementing-google-sign-in-71888bca24ed).** 15 | 16 | In this app, I have implemented **Google Sign In** using **Firebase** for both Android and iOS, fixing all the issues with the latest Flutter updates. To understand how to fix all the **Firebase** issues in **Flutter** make sure you check out my **Medium article**. 17 | 18 | > NOTE: The project is tested on **Flutter 1.7 (stable)** and using all the latest versions of the plugins. 19 | 20 | ## Project versions 21 | 22 | There are three versions of this project available: 23 | 24 | * Simple Google Sign In ([master](https://github.com/sbis04/sign_in_flutter/tree/master)) 25 | * Combined with Auto Login ([auto_login](https://github.com/sbis04/sign_in_flutter/tree/auto_login)) 26 | * Combined with Local Authentication using Biometric ([local_auth](https://github.com/sbis04/sign_in_flutter/tree/local_auth)) 27 | 28 | # Using this app 29 | If you want to clone and use this app, then you have to complete the following steps: 30 | 31 | ### Step 1: Generate the SHA-1 32 | 33 | Use the following command to generate **SHA-1**: 34 | 35 | ```bash 36 | keytool -list -v \ 37 | -alias androiddebugkey -keystore ~/.android/debug.keystore 38 | ``` 39 | 40 | ### Step 2: Complete the Firebase setup 41 | 42 | First of all, complete the whole Firebase setup for both **Android** and **iOS**. You will get two files while doing the setup, one for each platform. You have to place the **google-services.json** & **GoogleService-Info.plist** files in the respective directory of each platform. For more info, check out my Medium article. 43 | 44 | > NOTE: USE THE SHA-1 GENERATED FROM YOUR SYSTEM 45 | 46 | ### Step 3: Completing the iOS integration 47 | 48 | For the iOS part, you have to do one more step. You will find a **TODO** in **Info.plist** file, just complete that. 49 | 50 | ### Step 4: Run the app 51 | 52 | Now, you can run the app on your device using the command: 53 | 54 | ```bash 55 | flutter run 56 | ``` 57 | 58 | # Screenshots 59 | 60 |

61 | 62 |

63 | 64 | # Plugins 65 | 66 | The plugins used in this project are: 67 | 68 | 1. [firebase_core](https://pub.dev/packages/firebase_core) 69 | 2. [firebase_auth](https://pub.dev/packages/firebase_auth). 70 | 3. [google_sign_in](https://pub.dev/packages/google_sign_in). 71 | 72 | Add this to your package's pubspec.yaml file to use **Firebase** & **Google Sign In**: 73 | 74 | ```yaml 75 | dependencies: 76 | firebase_core: ^0.5.0 77 | firebase_auth: ^0.18.0+1 78 | google_sign_in: ^4.5.3 79 | ``` 80 | Import using: 81 | 82 | ```dart 83 | import 'package:firebase_auth/firebase_auth.dart'; 84 | import 'package:firebase_core/firebase_core.dart'; 85 | import 'package:google_sign_in/google_sign_in.dart'; 86 | ``` 87 | 88 | # Methods 89 | 90 | Following are two useful methods for authentication using **Firebase** and **Google Sign In**. You can use these as the basic template for your starting project. 91 | 92 | **NOTE: These does not check for all edge cases and you should add other security restrictions as per your requirement in your production app** 93 | 94 | For signing in using a Google account: 95 | 96 | ```dart 97 | Future signInWithGoogle() async { 98 | await Firebase.initializeApp(); 99 | 100 | final GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn(); 101 | final GoogleSignInAuthentication googleSignInAuthentication = await googleSignInAccount.authentication; 102 | 103 | final AuthCredential credential = GoogleAuthProvider.credential( 104 | accessToken: googleSignInAuthentication.accessToken, 105 | idToken: googleSignInAuthentication.idToken, 106 | ); 107 | 108 | final UserCredential authResult = await _auth.signInWithCredential(credential); 109 | final User user = authResult.user; 110 | 111 | if (user != null) { 112 | // Checking if email and name is null 113 | assert(user.email != null); 114 | assert(user.displayName != null); 115 | assert(user.photoURL != null); 116 | 117 | name = user.displayName; 118 | email = user.email; 119 | imageUrl = user.photoURL; 120 | 121 | assert(!user.isAnonymous); 122 | assert(await user.getIdToken() != null); 123 | 124 | final User currentUser = _auth.currentUser; 125 | assert(user.uid == currentUser.uid); 126 | 127 | print('signInWithGoogle succeeded: $user'); 128 | 129 | return '$user'; 130 | } 131 | 132 | return null; 133 | } 134 | ``` 135 | 136 | For signing out of a Google account: 137 | 138 | ```dart 139 | Future signOutGoogle() async { 140 | await googleSignIn.signOut(); 141 | 142 | print("User Signed Out"); 143 | } 144 | ``` 145 | 146 | # License 147 | 148 | Copyright (c) 2019 Souvik Biswas 149 | 150 | Permission is hereby granted, free of charge, to any person obtaining a copy 151 | of this software and associated documentation files (the "Software"), to deal 152 | in the Software without restriction, including without limitation the rights 153 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 154 | copies of the Software, and to permit persons to whom the Software is 155 | furnished to do so, subject to the following conditions: 156 | 157 | The above copyright notice and this permission notice shall be included in all 158 | copies or substantial portions of the Software. 159 | 160 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 161 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 162 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 163 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 164 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 165 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 166 | SOFTWARE. 167 | -------------------------------------------------------------------------------- /Screenshot/login_cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbis04/sign_in_flutter/f96f82fe9ad723b9e650ecf7ff47b1f0fc8d9143/Screenshot/login_cover.png -------------------------------------------------------------------------------- /Screenshot/login_screens.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbis04/sign_in_flutter/f96f82fe9ad723b9e650ecf7ff47b1f0fc8d9143/Screenshot/login_screens.png -------------------------------------------------------------------------------- /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: 'com.google.gms.google-services' 26 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 27 | 28 | android { 29 | compileSdkVersion 30 30 | 31 | lintOptions { 32 | disable 'InvalidPackage' 33 | } 34 | 35 | defaultConfig { 36 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 37 | applicationId "com.example.sign_in_flutter" 38 | minSdkVersion 19 39 | targetSdkVersion 30 40 | versionCode flutterVersionCode.toInteger() 41 | versionName flutterVersionName 42 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 43 | } 44 | 45 | buildTypes { 46 | release { 47 | // TODO: Add your own signing config for the release build. 48 | // Signing with the debug keys for now, so `flutter run --release` works. 49 | signingConfig signingConfigs.debug 50 | } 51 | } 52 | } 53 | 54 | flutter { 55 | source '../..' 56 | } 57 | 58 | dependencies { 59 | testImplementation 'junit:junit:4.12' 60 | androidTestImplementation 'androidx.test:runner:1.1.1' 61 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' 62 | implementation 'com.google.firebase:firebase-core:17.0.0' 63 | } 64 | -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 9 | 12 | 19 | 23 | 27 | 28 | 29 | 30 | 31 | 32 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /android/app/src/main/java/com/example/sign_in_flutter/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.sign_in_flutter; 2 | 3 | import io.flutter.embedding.android.FlutterActivity; 4 | 5 | public class MainActivity extends FlutterActivity { 6 | } 7 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbis04/sign_in_flutter/f96f82fe9ad723b9e650ecf7ff47b1f0fc8d9143/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbis04/sign_in_flutter/f96f82fe9ad723b9e650ecf7ff47b1f0fc8d9143/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbis04/sign_in_flutter/f96f82fe9ad723b9e650ecf7ff47b1f0fc8d9143/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbis04/sign_in_flutter/f96f82fe9ad723b9e650ecf7ff47b1f0fc8d9143/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbis04/sign_in_flutter/f96f82fe9ad723b9e650ecf7ff47b1f0fc8d9143/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | repositories { 3 | google() 4 | jcenter() 5 | } 6 | 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:3.5.0' 9 | classpath 'com.google.gms:google-services:4.3.3' 10 | } 11 | } 12 | 13 | allprojects { 14 | repositories { 15 | google() 16 | jcenter() 17 | } 18 | } 19 | 20 | rootProject.buildDir = '../build' 21 | subprojects { 22 | project.buildDir = "${rootProject.buildDir}/${project.name}" 23 | } 24 | subprojects { 25 | project.evaluationDependsOn(':app') 26 | } 27 | 28 | task clean(type: Delete) { 29 | delete rootProject.buildDir 30 | } 31 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | 3 | android.useAndroidX=true 4 | android.enableJetifier=true 5 | android.enableR8=true 6 | -------------------------------------------------------------------------------- /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-5.4.1-all.zip 7 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() 4 | 5 | def plugins = new Properties() 6 | def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') 7 | if (pluginsFile.exists()) { 8 | pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } 9 | } 10 | 11 | plugins.each { name, path -> 12 | def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() 13 | include ":$name" 14 | project(":$name").projectDir = pluginDirectory 15 | } 16 | -------------------------------------------------------------------------------- /assets/google_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbis04/sign_in_flutter/f96f82fe9ad723b9e650ecf7ff47b1f0fc8d9143/assets/google_logo.png -------------------------------------------------------------------------------- /codemagic.yaml: -------------------------------------------------------------------------------- 1 | # Automatically generated on 2020-09-06 UTC from https://codemagic.io/app/5d636daaf5035821fb723bc3/settings 2 | # Note that this configuration is not an exact match to UI settings. Review and adjust as necessary. 3 | 4 | workflows: 5 | default-workflow: 6 | name: Default Workflow 7 | instance_type: mac_pro 8 | max_build_duration: 60 9 | environment: 10 | vars: 11 | IOS_FIREBASE_JSON: Encrypted(Z0FBQUFBQmZ3SzAxMUczR212d3pRemhxV2NZQnVhLS1MZ29PN2kwRWpyb2VUcXJlUF9qUmJtLTh3YVNFUUY3VjR0ZTZNWWZhUFBpdXNyeTVhY0otQzJId3RWZGFvOTF5UVlGV3VVR1dmakthaGZQa0RqLWQwdG5KVjJiTjFoTXF4OE5rTzhuOHR3dVJjSFAwZjI2TmRXRy1LWklMTTJRSy1nSGVJMnJwcHNjYjVZOEhqbU9KWVJTWTdQMEZuUHpoUGlCQjFka04wSDJic1pVWWhlb0VKcEtzRFI4LTJlV2RUcFRDRnFzanhnLVBkaUdVWGxTWHVNc3FxODk4dENDNFl2ZVVtTmNFQ1dnSzNTWnIxRDA2S1NlRjVvYl81SlFHZmFnd0NJRzJqNW82WXlpNm9JcjdDdV9NTWwxOTNXcHBUOEV5bnJLdEZucF9TcmFXZHJicEZkdUVVbVJDOFNEZmU5X0FpSDVrZl9DTUpNMlQ5bnZRZFlfbzJxWUJZX0s4QXJvbTNNTWw2czBKYkM0ejFNZm91c0laaW9zeFNUNlgyeXN5UWdqOHJxVDZDdW9vSmVad1YwMlZMbjNaWXBXUUliZDQ2V0JwQUhvRTFtZ0VJaUFZQkZkenhqSF9OVG45NUdhanRYbGJwRnpVMTVoLWx4NThJc1Bac0pBd1FPRGVoQmg5OWJqVXExbGt5VnUxZ3lfQktzcC1KUmE5dHRrbHYwQXBYekJNWUVlQjMwT2x4bEZjUjRXWld3TjlxdDNYTlJRcDJ4ZUt5R1RnXzZDUDhkNnd1U2VCNUQ0cXZncFJEQ2xubU5ubERaODZIVEZsRGxUU3ZUUUFVcHdkMHh6MmlxVVZ5Z0ZUbGk4ZjBhc2FkUEFYRlozVmlTQjg0WUtPazZHVFZPd1ZBeDhHaE5VVXAtZmRFWE9KX2dQdGlvUHRkdVIyV0tyd2JjSXBIYmNaS2YyTmZyS1hjWlhmNC1nODZydkNBOVgtRnRfbnZZcFI2M3hyczdldXlZWXlNNHNmWEl1eFNydU1oZUpJdEtVeW5SWE1vd1AwdmFKYjh1MFBqNlpZeDhEMmdZaDMtRk1RZ2liZUFONkgzbDI2OVhHSVVMMWVMMmFoN2VZSEVZcTBZa25QYzRWMkVBQV9JbUlGNEFNMFBtMXNfSW1ZMlZuRnd1cFlUempKMXR3WDFiN0pIX0diNUg0bEV2QzYzUER6ZGd5cFNBZHBfX2ZqTnpOdjN5amN2TFRwS2ViczVITElVSDFFZDZKaEhWOEdOdnBKX2k1U0FwZTN0dkJKV1UyWlBMV3NQUVlvb0x6b1JBTHhoUXpkUTRpUXJ1NGZ4Z0liWThCMjRGTmRpSGtJaWthamlUM3J3RVFPc0ZhVzNoZ1hZRG1TUFpBQXh1dDYxR1pUWlcwcXRkN2xSTGlWMXN3MWxaZ1hhWmI1czQ2dkd0eVlMYzgtYlEtRVo4UE8tN3RwQU03Ym1ucFVaMFpBbjV4b2oxZm9WYVFDb05pVzZJTHMwcExXaXZEcDgzdkhBXzdsUU4yU21pNjQtemVNZWRiRlYtR2JlRUlvUGlPN283TXlhNTNrRUxoMWZoSzJtSzBQQUxCc2Rac2N1NjMydkpqQklrc1hoSmgyeU8wR3VWSjk3Qm5ESlRMSUJiNUlHbnBRdlRpd2NPQjNFVUdXLVVCZjRPdzRPQVZ3cldMSlZtZ2lzeDZOSEpuMWRIQlFPdWdmMGtTTjl5UjI3TC1KdzE0Q29ieW15aDdJbXdma1dDTXVlanE0VUlaMzVMVUZmQ0NHOFJUTFFjVi0zWGhFZFlxY0NNdGtrMjI4Zm00VnFzb2RWV1kzMWZpRUFScWJWUlo3ZHZpNmlkclBzYjdYQzRpellzUXlDazJVTnhKX05Id1p3SHBHRGkzamVvR2Jwc0VRSkdyRW1qbkl2QWVEZ2VTd2RDN0lmbi12WUxvOEVTbXE2eXp2VGhXY0o4WGdaVVhiLVdEY1lKbmVnSG03SFo3YURPb1ZmTUxPRlFLTjVNUFUxSV9qUFNPbzMxdnd2RWdfTnpFSGRhS0VOeFp5aE50aWlmS2g2TXF5NUZvQzJRRFpPSHIxS05wQXk2aUZNYWdhMnd5ODA3Q1JvT3lNZGZWd2c0MlRGX0NNQ2ZvWE1NdVprWEpSMGxYa1lNaE56ckhiTmdfNkVkdGxrRlJoRFVmSFFONl9kdk1jdzR1RmZaU1RCUE1sY0d6UFdySkVBMUo0RXh1ZmJ3MFcydk84N29EYzRtRUhHX3NYVzJUbVJwYkx2NmZPVW9PTlJKNGczYktLR05JSEU2UGtTWm5YT0thcDlfUTREMWFOSHZ4STdTUjhFV3BpVmlNQkVNWUZZQ0kzQW1ybWM3WXlGMnVIRHJaNzlmM0VBa1FrLUhpcFFYa0I5UjgtSi1DdWpITlA1V05sMDJrWjdDakYyZlRVT3ltMlZSMzJIa0VtdGlyZ0JhYXQyQW5TRzN6Y1M0YklQWDJSbGdCeE5Ocnc3ZkVwU01ISWJkSzFxUzZCa2NIRVZOQjVxTi1PcVdfSkw3VWtpdGdxSzdJRDNUZ1hVMGh4SnhlajlLR2FDbnAyU21wNVF2X1FxWEVIWjROYU9YOXRyb28zcUlRU2VnVnpPakw2QlRIeXlPYjY5Nnk0ZnpXZ3dRWlBzNlNWaXdGLVl0WFc0M1Q4M2hOWUZxbUdUTzNWalV6ZWI1V1l5eEZfcWh3NEN2OERKck9MTzBMdEdJZTZGeHp0ZDJKek44RXhjbUFQNkFUQ3p4V1NfUHA1N05GNEZIN1RqdnFfUlRpaWpqaDRCZDFUWWRnSC1VYnQtbXlQVzJGVXUwcXFQbEl4OE5mMGdmT3UyNUhWajBkdzhIbThFcHNzSDgxYU10Tm9ScFAxbUs1Rzh0QVJiYVM2MkVLbUV4aVRBTkQ4T1hLb0xPd3RzajR3M3lRNngzdzVXUnpNbG4zMVMzVTk1LVZpUlZnZ3gwU00xS08zTTdORzlMLS1HQm54Z3dneW50NFM4QkcwU1FGMU5sUWVPaDlGS1pBT0kzWGp0M05SaVlRcmFfZTBKeGEzdHEyeTQ4OUtkbU1jQ0FuT2xxelMtM2JhSkRLY1VycEJOMTE5TVl5ZldhdzhUa2k4Q203RmpzZDNBLUEtSTVUemhuOHNUeXBqZHp4S0dhenNtX1RiX3NZc2Fmbm9RTXpBYllxTlk0TnppQnplVUhiR0RwZmtiXzg9) 12 | ANDROID_FIREBASE_JSON: Encrypted(Z0FBQUFBQmZ3SzBHY096dVhvVzNWYWpTOTFsUDdLaG5fdnhWRVNMWFo4d1NYak5LVW84bUpzbDh5TG9SUWIxc2xSUGZMQzM0WHBZRHdxc25sV2RYbzdXckpDQ21rTFpFY0wwMWRYSkR2ckhhdzg2TndqaFlsRWNHUnkxQjE3Nm9MZU1aNG03NkZ3NGFsNF9HcEt1Qm5IOElhaGc1Q1VDdEpJRlR5ZEdnUVdfUDc2MDU1NklWcndaUm5fY3Z5akxLdmZ6SGZZNFVCUzdRM2s5ekI3N1p1Q2hPRmpkZTFDZkZzbEVjX3czSF8xQWNaeEwtMFVYWjVXZktSNlVRaEd5cVdhaVcyN3pzd3NkMHkxWTE3dWhQQ1ZLNTQ2RmloWFdmSjBnb21naUhoVDVLcEZSRDZDVWZBc3N6akl2dVAzRWNiSHdCUUtpZ3BTTy1EanNLSjRKd0c5M3NXV1MzOFRWQUxMajZJeVNBYk95cWZNM2tDOGVac0dWcmdqZmFHcFZwa0t5ZlRsUkUtd054REdBMjR0S1lXQUg3NEZYdDZDeGpKdWFQN1RjY2FNYTZ1NDZFY00yeDQ5UUVrc0pOR3ctZHVlQ2ZZZ3pXZ2E3TDBMc01kcEFvY1B0Q2Jab3plY24tVWVISmtHQnhEdVlid0ItVnlXazNhZ2pGMU9TX1ZQZEZZdDhnZ2NHTUdqMTFhamxnSmx3d3ZFbVFWdVM3Nk1MdTNPblVMZjNhNXVVZGxkeldUWFhOcUhna1dBaWNjV1hQckY4Q25RUFNaNWlqSG5nRlRMSUhaOVQyQnVCTU5LbmhjR2dwdzlNSkYzREVSUU5LYmJBYWR6Z0RkQXpQUGRjMEdDRFg3bG1JNkpHbTJxLUxZZVBKSm1rUGs0dVVCRmhrNlRoSEFqQWJyVGlheXVXNWFGakJwaXE4dnpoRW9xRm13bi1HV29qd2otMkVCMVFUMGlZWm1JeFMzM2kyLUJ0eU9Ec1laU3ZMYjN0a001MGFCQ1RZbk51SlhuZGVzUFdvWmZfWHl2T3FQQTR1akprRWdZXzNaNFNjWTlUQ1RMcnFXV3p0c2pJaEUwdGtVOG9na1F0UWxrVE9hWWFxVTZDbjl2RUxFcUUwMk9KVEJrTGJTU19PaGZMck12SEo4d1lWVm15VjM0cGp4dkFCLWs5Q0laS2xxemJmWXc0LXV2aGVjTml3YWFYOERUUk9pUkFvbm1QdXRuSXFsaEMybC1jUmxKaVBKdG1zMk5NUV94R2xxSXo5SE1IX1RWb1A0WkRBeWZJMEpvNWRHQUk5eXd6NWdKQmRuV0VSRnZrUHl1U1VoajRKak0tNVRUdEpDUkxFUEpMVkJ0TDlNQkNlVFdlY1Bhd0dLLU45YU1ENl9LN3IydWY5cUhoMzBid0Z0NFNvOHJWSjJ4bG9zUUh5NnU1X2JfOHdJUWJCWEVCQ3BIc3YxUGRJQzRmaGZHZzRpUzMzVHVMNTMwUlptYXRHT3lyM0RQdHVTTHZjaVl4bnMtX2NBZ28ySWc4MjhxSWk0UGQ5ek0zcWdGQ2FuODZITlBqbmowMlVQOUR5MnlqM1JQMEZORzdjOTBPaUZQc3pMOHFaMmlRYkVkUHJiUVk3N3N0aVlyZ1J0N2pYNlc0NjIzekU3RlZYOTFnT09jN012cXpwN3FYY2NOMEJKbTRJNUYwWWZxTUEwNkhyQy1nR3FJSjJESU9YanlCYXlFcVpwQ2ZURW9VcHM4MHBiRWtRYWh4SzJLWjRtU0xTNjhMYkVtd2loQmR1WTBjMWFUazZ6eHo3ZXdBVExhZ21MNk9LZkc2akdnTXMwRnpIWWRVTW04Vm9VV2ZzMlZja0JUN19ONUtRcXlyajYzeXNQdTBjdUdMZVYtNmxlWWVfa1NjZ0FacGtPcy1VVkxsaUxOSGxYZVVHRE9sbUhDeEV0UTdkRWdTT3ZYVGgxSzZVbFJpNFFUQXByTjJyYnRvVFN0QW42Tkh1LURDUF9GaWQzbXNZdS1MTlN5RC15SXlFZmtJc3g5SjhrUHBPZWpaek4taEdQT2hQQWtPR3ItdlBWa1U0blc1VGhZcUNzdWJFQzdyQXU4WmQ0YktwMXpTTldfYTIzLXNvLWdtZTVQVGdMU3hhWjlGT3JYelpWU2dKcl9WZ3NFc25OWUU3WjU5SjM0MWpSTjFBVXpGaC1SaHJLODdMV3MtaVpyQ2JFMkYySkJZUERtbWk2TGg5Y1IyWnZoTEp2Q0M2VHRycnFidHlIZ3poRkxHT0Npb3drcGV5YlJ0WUpjOTNOYk9mRDB3QXNITmI5bkFkdHVlY1ZqcDMxMXVZalJnYVZ3elNlMUlQT0s0TlF4a0xqQlEycjdBcmdhRXJLbU5BOUQ2WmlPNmlUMDJWZ0Fxem1YeXROWnRzZlY2eHpvTmlGVWdnTTVDME1YN1RNX3R4SnROQzdnZkE1dkFzSlZEMzlnWHE4Vkk5NEVHX2o1MGZnU3BjbHk3WnhTXzdJbGRYWHcxb0ZpMVY4RmQwN1gzT3N3WmxBdHpjbG1naG9HT0NpM2p0SlNrOHk4cUNGWGp1dkw3MmtldFRCY1FyZ2pkYnBYYUVsaThzcWtOS2FBX1FPQ0Y0VU1VZmtuaFZtQUt6Qk1tQVBOVWwwYW1LZmI5cTh2aFU5WktSc0NtZ0lfa01KemR2SkI2VnlJMVdaaTBnQzVoMFVyQWh4OVI3R1BrZVoxeUhjWDI1VFRVazU0ZU1oV3lWYTJMVUYtcTczdnZtOEZKOWNnZFVXaEZxZnVCdXVqMTNSMVlZVGdCOFUxajNHLUNQSWRnQ3R4M0JnaEdtb193N29EaVZXV3o5MzlxSkpPQ2h1Vk1qNGw5eGlMdHZCOC1lYWo1NlFfV3VSQ2NpeU1HZGdlRndtamhhcy16UGxZMEphcFIzYl82MmR0UTZjMTFJTmVHdmRrLXlOWHNmTVFGZnE0S1JNV292UTVNQ0tZYjE0eUVnWjZGWi1xOGI3M2IyeWtVTWNlQ2tpY3hVbl9KYnJ2c01pbGtHODdCekhhQ1FVUVM1NHhwOXJRVFVPT20xVFdBR0tqbmVDTjZxU0ptQVhXaUdralg4dHlZR0VvMThZbHRCY0hGS3VNYmtBUnVaT0NUZkZHaWJEM05Qazl4VWhqWGNjVENLSEJHSWZxM1ZJQWJtWERPbl9uMWxMLXhJcUs5VmJRR2VEdkxMazdSOGh0LVI1b1MwOVlkdDZ0OEFQcG4xS1JxSFJRZ1NYeHRaQ1A1bXFUc3lGdjM5TXJIeUcya1VENkQ3ZFpsZFJqWFdVRzlLV3BQaTFkZTRKTXJUSzBMQm9XWkxWaTJLUmM4YnRqeDJESDl0c1pMWko0RkVESUlxNWxXUzNPX1BmakRXeVFfSnV3TFpWWV9nRmZzNlFPajdfMF9vNnI3clZxREx5V3R2TVhXUVJpUVV6ak5XamtZMzBlazV4VzBYaEZraVNvdWxHdWo5dkRLT09oOV9fVnVGZXBySmNaUVRpMUpKQlZkWnZBWEtIb05HaXNQdzgxQVJYUll2WGdsbjl4NXpSZE0xb1hZLWdKbzU1SEZPMGIwQVdNVmpsd25acUZrUFJranBKclBLeUtfOWs5NWxyWkczNUE2Yy13dVNKbHlmTGt4UTc1WkRaVnJBeXl5bmJRejJ2bV9TVm9waUwwU3hDbzdCc2tXZXZXcnYzOEY1Z3N1cXNNVlFpTHhHZE9EY2xpaXRuN1dMWkIxMWM0VnlhVVlKcmdXQWJieHhxMUtpTmhzekdUbFYxaV9CcVN5XzNJalk1UXZ2UDd1RUlMWnlFSHpJTzgzTHRVbDhUNEw5aEwzTkRlZEhCNVhUVWU4RG1pV0FCcVVtRWVfZnZHR0ppcG1kY2RXRFhPd1VxSjZfNFFFMEdXT196TVh5VzcwMFlLUmFpX0RWeHRlTURHNVVNeEVsbm96OWx3QXpMcFdRX2ZYSjNOYl93dnF6LVFKZVV4REtmaExkaGQxVnBIWGZrWE5SRGtCOTdFUUpZSm11WWFEOE5kQXhUS0tIY0hVZGZqZUtTZ3VDY2ZiaVQxcldudzN3bHBnMlk0LWtIRWc3cXYxdWF5RDJZNm5WRm5rdThBcUxscmlaR29mZ1ZlYmlFeVloM0d5OEMwSjI1ZjQ2VjV4eTVLU21OZ3JFV0dHenZGYWFzZHMxZ05rRW1nb2FxQjA3MjRZdV9HQnZMSHlQSlAxNGlhc2htZmI4c0VxYVhoT1pzNDJGTFFRZEdMX0N5SUpvdkpEbUZRRW40cGVDUDN1RWtvX2Jjck5GTFRORUh3cWUxejhaZjM4TEJxcGxmbUsyT2ZWMUlWNW1XTXhraTJ6cHBXeFZRT2RpQml3YnJBeTdTT0xXR2RKMDRNY0xkT2k5ZFZ5Rmd4NUJqSG9DbEE3UDNDRU9EakJHMGJnTHlJMERsakdnVDlvd0N3UDhja0J6R0JoTm9CdTRPcDFLbGtHMXhFMG5sd0haNWlsX3QwUFlYUEhoX3dFdnpyVGxMa18yM2REWG1zOHVvQUQ5eExQVW8yRUF5Vkw1Unk1bTU1WS1UNHVWME1PdVpXYU9fS0hMYXlGa1lMWUU0NkN2cWNFRTYzNG01UTVGYUw0SDk1eURNaklPQ3RGT1p4NzFLZW16TE5KOEI3M2ZUNTRPWE1BdnJWaFVnX2hsVUowUkRLZjBGWG9KY1ZIVE40Q2ZnQWdRbXFkVzM0elBVVWR0b29SQlJmVUpDdU9iZXpTV2tiQjVVa3ExSllUa3V4cmZQclM0ZFNIaXV1Z0pYYUlsSVJ2aTl0cFM=) 13 | flutter: stable 14 | xcode: latest 15 | cocoapods: 1.9.3 16 | cache: 17 | cache_paths: 18 | - $HOME/.gradle/caches 19 | - $HOME/Library/Caches/CocoaPods 20 | scripts: 21 | - | 22 | # Set up debug keystore 23 | rm -f ~/.android/debug.keystore 24 | keytool -genkeypair \ 25 | -alias androiddebugkey \ 26 | -keypass android \ 27 | -keystore ~/.android/debug.keystore \ 28 | -storepass android \ 29 | -dname 'CN=Android Debug,O=Android,C=US' \ 30 | -keyalg 'RSA' \ 31 | -keysize 2048 \ 32 | -validity 10000 33 | - | 34 | # Set up local properties 35 | echo "flutter.sdk=$HOME/programs/flutter" > "$FCI_BUILD_DIR/android/local.properties" 36 | - | 37 | # Get Flutter packages 38 | cd . && flutter packages pub get 39 | - | 40 | # Testing 41 | cd . && flutter test 42 | - | 43 | #!/bin/sh 44 | # Checking for Firebase secrets 45 | echo $ANDROID_FIREBASE_JSON | base64 --decode > $FCI_BUILD_DIR/android/app/google-services.json 46 | 47 | echo "Listing android Directory to confirm the google-services.json is there! " 48 | ls android/app/ 49 | 50 | echo $IOS_FIREBASE_JSON | base64 --decode > $FCI_BUILD_DIR/ios/Runner/GoogleService-Info.plist 51 | 52 | echo "\nListing iOS Directory to confirm the GoogleService-Info.plist is there! " 53 | ls ios/Runner/ 54 | - | 55 | # Building Android 56 | cd . && flutter build apk --debug 57 | - | 58 | # Building iOS 59 | find . -name "Podfile" -execdir pod install \; 60 | cd . && flutter build ios --debug --no-codesign 61 | artifacts: 62 | - build/**/outputs/**/*.apk 63 | - build/**/outputs/**/*.aab 64 | - build/**/outputs/**/mapping.txt 65 | - build/ios/ipa/*.ipa 66 | - /tmp/xcodebuild_logs/*.log 67 | - flutter_drive.log 68 | publishing: 69 | email: 70 | recipients: 71 | - sbis1999@gmail.com 72 | android-workflow: 73 | name: Android Workflow 74 | max_build_duration: 60 75 | environment: 76 | vars: 77 | ANDROID_FIREBASE_JSON: Encrypted(Z0FBQUFBQmZWTzNBSFUyZ0phY1A0emNYd1lLR0dNR3lYbkV3elVnSkx2YnRfYlpSeHlvRDRodkRKNzNpNTFUSkdraU1FTlU5RHBoVTJHOEZxcUcxSjR1VG81eE92UFN4MzNUYUl3bkY0VEJmeHV2ZFF0bEx3eHE1M2pqcjdpeUN1UUlUYUdqSHNLbUd5a2lYUmtMSDF5c3ZMQlhmY2l3YTNBeUdlVnM0UUdWMHJDaTE1S2dhODdSdWF4SC02Y0REeUo0aHVkOEJjVjBwbTlCZVNXN0F1aVlfMW44dmRjXzBzWDRLUW9xakw2UnFzN21hcEZsZXBES0NtV1k4SW1yRlFkWXZJRm45ZlhMYmFhOVZnaFpLT0tycnljMFhEeEN3eURjV2owTG0ya09tN2dyNlZLX0ZwZ00xYlc1aTZpbmtCNWpLMllGQkFBNmlTd0VUNXIzRDVBaFh5Q0VQRDhSbUJiZVRLTDhsOEFzWGU2cjZ6Y3BaWllzN3Z2UDN4SnBoZVJ0a1NEVEZBX2tKdDdwemdDcVhlblR1UDUzaUQ2VVlTTjc5SWJaYnNWaElhVU5wdUtKZGh1d25PNUt0QkhJbU03cjg4cUtHVnFLUHhwSG5sWWpYYzVPT1BLRlNaNnZONWZTakhtUmRNWFAwc1lybzVUdUw4MTYtMVJJX2E3WXkxQ2tSdHdsbHVzczQzZFZBcUNBeU5NR1ZzY1pJLV9GZkpPbjZQeHRqUC1scEtoMF80MGZhang4YkJRenJ5V1dKMUhlNXg5bGFPN0o2S1A4OTdfd3hXcnR4dEFfTy1jOTE2TnFtYTFJM0Z2OGFZUHRWcDlPU3B4Q1dJbmRRZS0wQ2xkbGtyNzZBWFVnaXdTTHlpSHRHVVZtcWd6TURjNU5TeV9ZZFJ5UElud3ZEWkRDTk1Sa1M1OWF6SE4waGhHRkVDNEU2VHdfRUNTeDRFOFZHUVYwd1F0Y1I0T1lpLXo3QjRxV3hfa3JHalZSVW9tN2VZTXRtcGZMaHhqUFlOWklGS2RVSkdzWGV2WVNSQTBXZFJQdk5xQ1N6YWlhcndVTUVuUkc3NnJlLVRJTEY4dGplUjE0TmNmSHc2ZFVhblZGVzgxaTZBY2MzR3NudGF1R05FUjBsVmllTGJQVHFZV2lLSEM2WjJ4UW1oaThlNS1kRFgzT1lJdW8xWGxvaUZMb1lNMHJZcTZWNG5Nb3VKVDJiSjN6N25LQTlDWHBKX3dsMUo5dDI0RWltSHVLV2RDeTFBSFo5OVdRNFVSSUdhelF2QVUwRHpvQWJkaWpaSTVBeFc1bmhyb3BBT2loT2ZhNEdiMVQ0eFRZWUxSYUtCN0l1ZUhhLTRPd2JSdE5TQjZ5bERWZm9Fc3NqbVZqcU8xemtpS0czN0c0R1N1bDdrLTZ0V3pVME1wYzRjTjNaZWVDc1MwVHFkd2lXNFBjMzVHUTVwcFJlM29NOGpKa3RXQXROa2FvbGlKSW9XQ2ZET0VGaFNuYnJ2T0FRZS1jdDNOcDY5elQ2YzBMX3VjOFRQYUlKeFpJT01VQXhoUHJCYjg4MUw2RDFEQV9MY0JIVUEwTDZJenN3SGFpUFI5QTZYSzBiQ19RZmFtdVFONTRfZzlENXpoWC1aMXI2XzFOUGxCRDQ0VlY4encxb0pGY3hZekdFdWxFN2FpN09QOXBBR25YYVhZSlU2ZkJCQTFINlFZS09BOTZCWm1tMmUxeGZqbW9ELXg3Y2ZNdzZ2TG40LVZrRlRpSV9OYmZ5MFVuaVp1YUdIcjJTLTFEeDlOaUJ5bkZPdHhxbnJldkhoMGJ0cmhlb0FsZDJEN0haczFXaVY0NGtJd2ZqZFprZjFIVXpGYTg3eC1pMkFTb1dBd1l2WTZXX0s3SWpyTmcwa2RnMlM5bzJjMlpfQTVZWTVwZnVNV04zMWJiYkFsMXNLNkZON0ZudE9CVkVaUmRCZU1BYTVBWm10c1AycjJMZ3k0WkZEaWJPbmpjN2NwbFFJVkZVRFR6bmhraFNNMEsxQkFDcjJEbjZFc2VfTzV0Zi1pelMxTU9vNGw0SU9Yd29zN3RCT3JJVEl4ei1GdmpIaENHZHhMRnEyckUyNGF5azBlZWc2REpNUWVteXdld2tOR2NSeDZCVmJ4aWhWeVVuTzlvQjNybFlaa0ROeUU2dmJHMWlYWFFGRmFFWmJtd21qNUJjX29CLTFXN1paN0pybjltLTliOUdRTXNnZjFVZnZmQjV6S3E5TC1RMTR2ak1mdFQ5NWlacEhKVlA3SU94UDJ0bGlhc3lmRUEtZjJaTHdSODJHY0dQMFgzdGNBVExpcmpkYXJsYV94NGtnZnlvRTZhT1NXbXh6T2U0QzRFbG9meFlDUEpaSFRqakRRZVhvcFFETTVudEF2OUhZelh0MVJVNUxfUWhXNHlWUGlCbnBXTUhJX3gzWG5qMWxwU2ZhYW9uWHlfZXA2MHZPNV9hQk9KcTJMUEwxREdNQmFLSXlOTmlSblJEUHg2T25lS1ZDcWV0RVZqZU41S1BfUkJVVy1uTUpxWDdXZGxqczNlaTdLMWw3Tk01Q1JHOFBBR3hnLV9xNVB4WTRHWF9XRWdSTHh2SnBwTEV6TVVOdTRHNHhtRGhnQ0RtcXlsUEZYQmdpd0NYeEk0OWJ5VE5jM2h4dk5ZYS1UbmhhZnZKenhqamdHUEo1bUVtLUZHY0VNRm9uOUtlX19rU0dSSjdGWW8xbWhvVVZzQ2hualRHWkt4ZTF2b0NxN21uNEp3VndfQURZZThWS0g4RzdfSnBPdWlSeHAyaHd6cGs1UmFReDdMbUFkd1YzN3I3bXFWUUxMV3RPLTNPNXNoZmxoNFRvdzQyZHc1SHdncjVvMWhFLWVqU3R2TWh2NjNEcC12VmRuMjNuWjRncmVtTHB1aENMTXpGYm1SS2tPR3pOaG85WFVObk5fcGNzei1xa0FvVU5JaEtvSU5odmQ3bURFNU5VdzhuR3V4SGNYR0tLM3I4bzZULVM2WDczWG85eFpLckVoalZMd0VmRF9mdTNQRXZiN2VydUJqcnFhOGt1ZGljSlhaODdDVS0wdFdkZjV0WGtSNGFXTldIMHJOczNnUDZVU0FsakFucU1YbUUyNHg3VC1OdTNtYzNNN2YtRU5zalNZOVhSWFI2ZHFtOEFGSjFWX2pQNHZUM1IwWnRHU2lDQ1pzRDM3NjZJSVoxZjdDajBlX2lndTQ1YksxR0IxdnlTaEdyTnczMmxrblBIbTlKN2pmdVdZaXNrcnZFSE53VW1nYkRZaTZTYnFtRGRlV3ZCbENxZTY3SnpZOUwzdGhFV3BvbGRkcHlobjh4eGQwbnE0dlJhWlBob1BSVnlpQ1JFYjdwTG90b0x5MENZQ3ZFZjNic09MbzZSc0N2cEJ0cjlMUG1BenA4TXpJdTdERThDRWRsOEd4LXBDcVd4TG5jWmJIS0p1MVQ1d3FWenc9PQ==) 78 | flutter: stable 79 | xcode: latest 80 | cocoapods: 1.9.3 81 | scripts: 82 | - | 83 | # set up debug keystore 84 | rm -f ~/.android/debug.keystore 85 | keytool -genkeypair \ 86 | -alias androiddebugkey \ 87 | -keypass android \ 88 | -keystore ~/.android/debug.keystore \ 89 | -storepass android \ 90 | -dname 'CN=Android Debug,O=Android,C=US' \ 91 | -keyalg 'RSA' \ 92 | -keysize 2048 \ 93 | -validity 10000 94 | - | 95 | # set up local properties 96 | echo "flutter.sdk=$HOME/programs/flutter" > "$FCI_BUILD_DIR/android/local.properties" 97 | - cd . && flutter packages pub get 98 | - cd . && flutter test 99 | - | 100 | #!/bin/sh 101 | echo $ANDROID_FIREBASE_JSON | base64 --decode > $FCI_BUILD_DIR/android/app/google-services.json 102 | 103 | echo "Listing android Directory to confirm the google-services.json is there! " 104 | ls android/app/ 105 | - cd . && flutter build apk --debug 106 | artifacts: 107 | - build/**/outputs/**/*.apk 108 | - build/**/outputs/**/*.aab 109 | - build/**/outputs/**/mapping.txt 110 | - flutter_drive.log 111 | publishing: 112 | email: 113 | recipients: 114 | - sbis1999@gmail.com 115 | ios-workflow: 116 | name: iOS Workflow 117 | max_build_duration: 60 118 | environment: 119 | vars: 120 | IOS_FIREBASE_JSON: Encrypted(Z0FBQUFBQmZWTzNBRzFVRVo0dkhvVWM4NllEcElmMDJ1cUVzNkZzT3hHZDQ1ejZGakZIT0pkd3RXOXFkbjNVZy1lQzdlWlFMQUVuUWJabFFDUzNPWVZ3VnVlSkJHYzZycjF6Q1JCUEJYMVhmalVHZ3NXR3BjU3M2SUlPYjU4VHR2LV9XRFkxOU5ZbnBVQzNHUWFzS1dBVEdDaU9zQklJeC1mOTBJYUlwblU0SndXZWo0R0xiWnZNZ2tyUjdUWnFYVF94NmZVQ1lnSTRrbjd3VldxcWFYYXMxcmt0cUNXUUVQQmhYc3NYNzRnREJoU1ZIODBIcktFa1I5YlJYQW1VaDRuTGNXQTZHYm5hR1VvV3Y2M0tqY01HOE9tcHNHTHhzUWVpOG02VGRoMURhV0xCdkVXcmRUZ0VXMWllXzU0UHp0RzRsYXdUS21JLWpuTGtzcEVtenY5cmdQU0tVQW1ZemVvMEE0X3JDQVFobkF1MlN2a1BpNk9EXzVSMDA4NzkxN0gzNUxaVlhwUVo3OUxwdm85WkN3VUtDeEdMRmNuTENfT042SDVUQzMweTBBYkljU3FfM3V3QnlCeUtxRElFdDdlOWlNTFBJTDhDZ2ZRYnJGak9kbTdDSkQwMEhEVXV2TmRTZ053d2RndTBRYV84VF9Gak5xNjkxeU9FRElRYkJBaE51alFUaEo5YWhSeFJrYmJFLWxfUkYzM3pva3RPZzR3RExFWldEcFd0QmZSSzRhYXJyQ1lIWVlUaXhSQ0V3OFg3Nl91RjZWdGJ6WWo4Z3htOUE0ODdPWXF2bFI2RmxKTkNNVjFMWnRKVnRyZGMwUzJTX2xRTWJ6dy0xdkc3R1ktZlZZNWtXX0hSWHVJWnhoQ2ZGVnVXbnJ3QzNPcUpVTEw5Ri1Gc1V4LVRzc1FkYXd3WjVOSGY3QW92MVREWW00UmVTRXBPZHp0NXB2WkFGQWV4Vkd1VmlfN0NIQXBMZGdqVkNWRXdGY29NX3lhcEJzYkdDVGlaSHJjM1BOT0R2dWlLa1BOX1MzbnBRNXdwM2xWUWFIbno5aktaczFseU5vejl2OWt6UE9mdDBKbk91S01JQmo4YWxBNGg3N0JTcHl1a2g3SkhsSUlwYTlsLU13dFY3MTZidzlqa2w0bThLT2JaTEJjdmFfeE8xdkwzdzk3YTdjM3g3aXBWczhnU0hFNHhnUWtwM2wxSDFSQTJ2SktEU2tnclExRmJiS3diSERRempJaTJ0bzczSUhsb0l1WG4yNFhURGowOWdidS16aUZFLWlkVERsd1BrWFJocVhnUE0wZ19ONzZMRzZmSUZmazhQcVV5MUEydXMxRHdZcGEwNHRRQVFYMk9EaHpUeDN3WkJvZzVoMk5jQnRVZGpHWE1wb2oxZzFOUmdod1dTdmFDS1JNUmtFaW5LdFBZeHp2d3pMUHVVenZqUlBURUpEV3JXY2xhb0c1VUl4cW56RTZ1WktQeTRpZlllTktONGFtenVoNFc3bml1V1pTNVlnQ2ZKRkdTcTBwNy1HWGxKYWlydkNXMTZqNkZOR2djWkNMRk5QNHlpdkQ2anBTVGV0VEZiZkZmZ2dfbXo5UFp3WnRUMGdjS0VsR3kyRjVMX2F4NmZNV00xNDZFS0pVOWYyYXo4dFNJSWgyVm55Mmx2X3o2YlBQd1l1SXN2M3o2Q3V2VWVWekt4cHVOTTVHR1Q2VlFwS2M4d1JTNU9GYnBnaVo5bTFwWUR2T29iLU9vako1c2FHUVREVFJwM1BVd2JxU1NKY3FTWlNqcGcxWWplTXpaUldMcUlCTm83YlczV1lSSWhwdm9LbU4zZDIzRU5obHhIM2N5U1dTdTVNenJhQk0xRm9SSzBneFJKbDEwNktpeVpRWHpJbll0d1pnS054MXdaM2F1TnpGOVFMeHBzUWdyM3dKWVgwNEtDWS1mNWRLUURlQmwtX0ZQM1dmNnY2WmFlbXktWXotb0Y5WmFFVk0wWkNhdHNMV3BDUW9kV0dSVl8yVElPbjJIcVYwU3NXNHIwZlJCemhXWjgxa1BLWHJRdlM5WGZmbHk3MkJjdGRMMjhyUUwwT1ktWC1jbXcwWmZRZUI1aGhLcGVyQ0JhNHI0SThHVUZzRjNHcVhIM0kwRjIxMzZYbFBGekhVUnhjVTl4cVVxSXl4X3IzLW1nOGRTS2FmQ2ZpeTBReWZLdXJfMElJX3drV3E2UlFrMTVndzBMcmp5eEc1UlJtTHQwbHhwQVdwSHcxSFhxTEVpazJQZVJsN29IaS1GSVFjcVhOclNFQk4zUDhtZmgzUGtpLU1UREQ3bWR5YlI1ZXBpTDA0Y3NyQjZGWjZHR0U1UDRqMmtpM2w3VkpTMWt4WkZaZVhERi1uT1RockZJdXFxaHcyQ3NpSGxOblNMZHZ3eFN4Tk5mNk1qSVV6N3hTRmp5Z3F6RHJJQ2gyMFVIMVhxbTBza1VXN1pGb0lCUi1JVWNoajdlT0h3Nkp0SFVoT2I5UVJuUTIyTk9iRDJYYmtlcTBCWlV1dG81U2ZmWG85dUNnck1uc0NzN3QzSmstNE45dkxDdjdMVFphRnBxTUVOclpyTnFGMjl1ZHc0Zl9XYU5jRGtzLUZwRWo1WTZXSUl6LVhQbndGOWlFUGtoN3RIV2lpU1dlRDN1ZnNXa0xLY3NxU08yeVdwajFuYW5iYlNzZTdjRjhubldfVDVZNkU5bU80NzR3WXlfdVluVk9zQ1JxM0VjcWc4aUhJblY3V29FZWt6U0FNVFJ3R19zdk5kWnRCVFdHRHZJbXJkX1Y5OXdCbGhiUVk5SjRIWjMzc0ZaWFczTjhkNU9CdTZ6ME53YTdETHU3QXlaYVVHM29QS3RpRjVWSmU4ZFc5REE5VE83d09nVlVzdGNvOEdBSnpMalZjQ3NlZXE2MEpiZVJLUkZiNmJGVk8zcEN1SGk2OW9Ec2FuU3dMTF9MSHVBTWxCQmVRUDJqbWZfVGFfOUFrcHdQTlNBYS1NTDBpZk1odUVJeWV5WXU2cmNRbXRWaE8tMXk2WS1EcElKT2N0eGVQb3JkNEpjRTZiNHIxXzlsdnBmZE15azZ2UVBYeWo5eVVWZmRNWkUxQzA5VEZ1RTNSVEhTSzlnanlpMXNKbHRFNzJyQ2dsUzNQUWlkcklhNGk0VTg0bG9KVGx2RDMwdnZueGNqVU15Q0MtUTlYNVZUcVM5RnJEMHRieHkxcWI0VFpVV3E0LS1Eb0hwOWxXQTJiUkxiQWxCLU12MVhyV1F4c1NEdWZ1WWM3ejdReHliVi11WndRPT0=) 121 | flutter: stable 122 | xcode: latest 123 | cocoapods: default 124 | scripts: 125 | - cd . && flutter packages pub get 126 | - cd . && flutter test 127 | - | 128 | #!/bin/sh 129 | echo $IOS_FIREBASE_JSON | base64 --decode > $FCI_BUILD_DIR/ios/Runner/GoogleService-Info.plist 130 | 131 | echo "\nListing iOS Directory to confirm the GoogleService-Info.plist is there! " 132 | ls ios/Runner/ 133 | - find . -name "Podfile" -execdir pod install \; 134 | - cd . && flutter build ios --debug --no-codesign 135 | artifacts: 136 | - build/ios/ipa/*.ipa 137 | - /tmp/xcodebuild_logs/*.log 138 | - flutter_drive.log 139 | publishing: 140 | email: 141 | recipients: 142 | - sbis1999@gmail.com 143 | -------------------------------------------------------------------------------- /ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 8.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment this line to define a global platform for your project 2 | platform :ios, '10.0' 3 | 4 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency. 5 | ENV['COCOAPODS_DISABLE_STATS'] = 'true' 6 | 7 | project 'Runner', { 8 | 'Debug' => :debug, 9 | 'Profile' => :release, 10 | 'Release' => :release, 11 | } 12 | 13 | def flutter_root 14 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) 15 | unless File.exist?(generated_xcode_build_settings_path) 16 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" 17 | end 18 | 19 | File.foreach(generated_xcode_build_settings_path) do |line| 20 | matches = line.match(/FLUTTER_ROOT\=(.*)/) 21 | return matches[1].strip if matches 22 | end 23 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" 24 | end 25 | 26 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) 27 | 28 | flutter_ios_podfile_setup 29 | 30 | target 'Runner' do 31 | flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) 32 | end 33 | 34 | post_install do |installer| 35 | installer.pods_project.targets.each do |target| 36 | flutter_additional_ios_build_settings(target) 37 | end 38 | end 39 | -------------------------------------------------------------------------------- /ios/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - AppAuth (1.4.0): 3 | - AppAuth/Core (= 1.4.0) 4 | - AppAuth/ExternalUserAgent (= 1.4.0) 5 | - AppAuth/Core (1.4.0) 6 | - AppAuth/ExternalUserAgent (1.4.0) 7 | - Firebase/Auth (6.26.0): 8 | - Firebase/CoreOnly 9 | - FirebaseAuth (~> 6.5.3) 10 | - Firebase/CoreOnly (6.26.0): 11 | - FirebaseCore (= 6.7.2) 12 | - firebase_auth (0.18.0-1): 13 | - Firebase/Auth (~> 6.26.0) 14 | - Firebase/CoreOnly (~> 6.26.0) 15 | - firebase_core 16 | - Flutter 17 | - firebase_core (0.5.0): 18 | - Firebase/CoreOnly (~> 6.26.0) 19 | - Flutter 20 | - FirebaseAuth (6.5.3): 21 | - FirebaseAuthInterop (~> 1.0) 22 | - FirebaseCore (~> 6.6) 23 | - GoogleUtilities/AppDelegateSwizzler (~> 6.5) 24 | - GoogleUtilities/Environment (~> 6.5) 25 | - GTMSessionFetcher/Core (~> 1.1) 26 | - FirebaseAuthInterop (1.1.0) 27 | - FirebaseCore (6.7.2): 28 | - FirebaseCoreDiagnostics (~> 1.3) 29 | - FirebaseCoreDiagnosticsInterop (~> 1.2) 30 | - GoogleUtilities/Environment (~> 6.5) 31 | - GoogleUtilities/Logger (~> 6.5) 32 | - FirebaseCoreDiagnostics (1.6.0): 33 | - GoogleDataTransport (~> 7.2) 34 | - GoogleUtilities/Environment (~> 6.7) 35 | - GoogleUtilities/Logger (~> 6.7) 36 | - nanopb (~> 1.30906.0) 37 | - FirebaseCoreDiagnosticsInterop (1.2.0) 38 | - Flutter (1.0.0) 39 | - google_sign_in (0.0.1): 40 | - Flutter 41 | - GoogleSignIn (~> 5.0) 42 | - GoogleDataTransport (7.3.0): 43 | - nanopb (~> 1.30906.0) 44 | - GoogleSignIn (5.0.2): 45 | - AppAuth (~> 1.2) 46 | - GTMAppAuth (~> 1.0) 47 | - GTMSessionFetcher/Core (~> 1.1) 48 | - GoogleUtilities/AppDelegateSwizzler (6.7.2): 49 | - GoogleUtilities/Environment 50 | - GoogleUtilities/Logger 51 | - GoogleUtilities/Network 52 | - GoogleUtilities/Environment (6.7.2): 53 | - PromisesObjC (~> 1.2) 54 | - GoogleUtilities/Logger (6.7.2): 55 | - GoogleUtilities/Environment 56 | - GoogleUtilities/Network (6.7.2): 57 | - GoogleUtilities/Logger 58 | - "GoogleUtilities/NSData+zlib" 59 | - GoogleUtilities/Reachability 60 | - "GoogleUtilities/NSData+zlib (6.7.2)" 61 | - GoogleUtilities/Reachability (6.7.2): 62 | - GoogleUtilities/Logger 63 | - GTMAppAuth (1.0.0): 64 | - AppAuth/Core (~> 1.0) 65 | - GTMSessionFetcher (~> 1.1) 66 | - GTMSessionFetcher (1.4.0): 67 | - GTMSessionFetcher/Full (= 1.4.0) 68 | - GTMSessionFetcher/Core (1.4.0) 69 | - GTMSessionFetcher/Full (1.4.0): 70 | - GTMSessionFetcher/Core (= 1.4.0) 71 | - nanopb (1.30906.0): 72 | - nanopb/decode (= 1.30906.0) 73 | - nanopb/encode (= 1.30906.0) 74 | - nanopb/decode (1.30906.0) 75 | - nanopb/encode (1.30906.0) 76 | - PromisesObjC (1.2.10) 77 | 78 | DEPENDENCIES: 79 | - firebase_auth (from `.symlinks/plugins/firebase_auth/ios`) 80 | - firebase_core (from `.symlinks/plugins/firebase_core/ios`) 81 | - Flutter (from `Flutter`) 82 | - google_sign_in (from `.symlinks/plugins/google_sign_in/ios`) 83 | 84 | SPEC REPOS: 85 | trunk: 86 | - AppAuth 87 | - Firebase 88 | - FirebaseAuth 89 | - FirebaseAuthInterop 90 | - FirebaseCore 91 | - FirebaseCoreDiagnostics 92 | - FirebaseCoreDiagnosticsInterop 93 | - GoogleDataTransport 94 | - GoogleSignIn 95 | - GoogleUtilities 96 | - GTMAppAuth 97 | - GTMSessionFetcher 98 | - nanopb 99 | - PromisesObjC 100 | 101 | EXTERNAL SOURCES: 102 | firebase_auth: 103 | :path: ".symlinks/plugins/firebase_auth/ios" 104 | firebase_core: 105 | :path: ".symlinks/plugins/firebase_core/ios" 106 | Flutter: 107 | :path: Flutter 108 | google_sign_in: 109 | :path: ".symlinks/plugins/google_sign_in/ios" 110 | 111 | SPEC CHECKSUMS: 112 | AppAuth: 31bcec809a638d7bd2f86ea8a52bd45f6e81e7c7 113 | Firebase: 7cf5f9c67f03cb3b606d1d6535286e1080e57eb6 114 | firebase_auth: c42c06a212439824b5da53437da905931e8e6b9a 115 | firebase_core: 3134fe79d257d430f163b558caf52a10a87efe8a 116 | FirebaseAuth: 7047aec89c0b17ecd924a550c853f0c27ac6015e 117 | FirebaseAuthInterop: a0f37ae05833af156e72028f648d313f7e7592e9 118 | FirebaseCore: f42e5e5f382cdcf6b617ed737bf6c871a6947b17 119 | FirebaseCoreDiagnostics: 7415bfb3883b3500c5a95c42b6ba66baae78f600 120 | FirebaseCoreDiagnosticsInterop: 296e2c5f5314500a850ad0b83e9e7c10b011a850 121 | Flutter: 0e3d915762c693b495b44d77113d4970485de6ec 122 | google_sign_in: 6bd214b9c154f881422f5fe27b66aaa7bbd580cc 123 | GoogleDataTransport: e85fb700c9b027079ce182c3d08e12e0f9618bb4 124 | GoogleSignIn: 7137d297ddc022a7e0aa4619c86d72c909fa7213 125 | GoogleUtilities: 7f2f5a07f888cdb145101d6042bc4422f57e70b3 126 | GTMAppAuth: 4deac854479704f348309e7b66189e604cf5e01e 127 | GTMSessionFetcher: 6f5c8abbab8a9bce4bb3f057e317728ec6182b10 128 | nanopb: 59317e09cf1f1a0af72f12af412d54edf52603fc 129 | PromisesObjC: b14b1c6b68e306650688599de8a45e49fae81151 130 | 131 | PODFILE CHECKSUM: 71873c66314521c52af462578c179fc55fc14b50 132 | 133 | COCOAPODS: 1.9.3 134 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 11 | 1D656CF8202CD31C0BDE80BE /* libPods-Runner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 345090217968755FB1CC7D97 /* libPods-Runner.a */; }; 12 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 13 | 6179CECC22D9C0860033C723 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 6179CECB22D9C0850033C723 /* GoogleService-Info.plist */; }; 14 | 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; }; 15 | 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; }; 16 | 97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; }; 17 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 18 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 19 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 20 | /* End PBXBuildFile section */ 21 | 22 | /* Begin PBXCopyFilesBuildPhase section */ 23 | 9705A1C41CF9048500538489 /* Embed Frameworks */ = { 24 | isa = PBXCopyFilesBuildPhase; 25 | buildActionMask = 2147483647; 26 | dstPath = ""; 27 | dstSubfolderSpec = 10; 28 | files = ( 29 | ); 30 | name = "Embed Frameworks"; 31 | runOnlyForDeploymentPostprocessing = 0; 32 | }; 33 | /* End PBXCopyFilesBuildPhase section */ 34 | 35 | /* Begin PBXFileReference section */ 36 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 37 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 38 | 1AC9FDA06D349A8DDFF9F5EC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 39 | 345090217968755FB1CC7D97 /* libPods-Runner.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Runner.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 40 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 41 | 6179CECB22D9C0850033C723 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; 42 | 6B151C1809F97BF269A0EBE5 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 43 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 44 | 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 45 | 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 46 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 47 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 48 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 49 | 97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 50 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 51 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 52 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 53 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 54 | F17C465FE9770B3CB7E17A1F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 55 | /* End PBXFileReference section */ 56 | 57 | /* Begin PBXFrameworksBuildPhase section */ 58 | 97C146EB1CF9000F007C117D /* Frameworks */ = { 59 | isa = PBXFrameworksBuildPhase; 60 | buildActionMask = 2147483647; 61 | files = ( 62 | 1D656CF8202CD31C0BDE80BE /* libPods-Runner.a in Frameworks */, 63 | ); 64 | runOnlyForDeploymentPostprocessing = 0; 65 | }; 66 | /* End PBXFrameworksBuildPhase section */ 67 | 68 | /* Begin PBXGroup section */ 69 | 83C1E3732CE30E9D5F159E82 /* Frameworks */ = { 70 | isa = PBXGroup; 71 | children = ( 72 | 345090217968755FB1CC7D97 /* libPods-Runner.a */, 73 | ); 74 | name = Frameworks; 75 | sourceTree = ""; 76 | }; 77 | 9740EEB11CF90186004384FC /* Flutter */ = { 78 | isa = PBXGroup; 79 | children = ( 80 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, 81 | 9740EEB21CF90195004384FC /* Debug.xcconfig */, 82 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 83 | 9740EEB31CF90195004384FC /* Generated.xcconfig */, 84 | ); 85 | name = Flutter; 86 | sourceTree = ""; 87 | }; 88 | 97C146E51CF9000F007C117D = { 89 | isa = PBXGroup; 90 | children = ( 91 | 9740EEB11CF90186004384FC /* Flutter */, 92 | 97C146F01CF9000F007C117D /* Runner */, 93 | 97C146EF1CF9000F007C117D /* Products */, 94 | B7EECCB499D544BB2F49BA1D /* Pods */, 95 | 83C1E3732CE30E9D5F159E82 /* Frameworks */, 96 | ); 97 | sourceTree = ""; 98 | }; 99 | 97C146EF1CF9000F007C117D /* Products */ = { 100 | isa = PBXGroup; 101 | children = ( 102 | 97C146EE1CF9000F007C117D /* Runner.app */, 103 | ); 104 | name = Products; 105 | sourceTree = ""; 106 | }; 107 | 97C146F01CF9000F007C117D /* Runner */ = { 108 | isa = PBXGroup; 109 | children = ( 110 | 6179CECB22D9C0850033C723 /* GoogleService-Info.plist */, 111 | 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */, 112 | 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */, 113 | 97C146FA1CF9000F007C117D /* Main.storyboard */, 114 | 97C146FD1CF9000F007C117D /* Assets.xcassets */, 115 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 116 | 97C147021CF9000F007C117D /* Info.plist */, 117 | 97C146F11CF9000F007C117D /* Supporting Files */, 118 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 119 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 120 | ); 121 | path = Runner; 122 | sourceTree = ""; 123 | }; 124 | 97C146F11CF9000F007C117D /* Supporting Files */ = { 125 | isa = PBXGroup; 126 | children = ( 127 | 97C146F21CF9000F007C117D /* main.m */, 128 | ); 129 | name = "Supporting Files"; 130 | sourceTree = ""; 131 | }; 132 | B7EECCB499D544BB2F49BA1D /* Pods */ = { 133 | isa = PBXGroup; 134 | children = ( 135 | 6B151C1809F97BF269A0EBE5 /* Pods-Runner.debug.xcconfig */, 136 | F17C465FE9770B3CB7E17A1F /* Pods-Runner.release.xcconfig */, 137 | 1AC9FDA06D349A8DDFF9F5EC /* Pods-Runner.profile.xcconfig */, 138 | ); 139 | path = Pods; 140 | sourceTree = ""; 141 | }; 142 | /* End PBXGroup section */ 143 | 144 | /* Begin PBXNativeTarget section */ 145 | 97C146ED1CF9000F007C117D /* Runner */ = { 146 | isa = PBXNativeTarget; 147 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; 148 | buildPhases = ( 149 | 1F22266B2B127C70F2E3B9F4 /* [CP] Check Pods Manifest.lock */, 150 | 9740EEB61CF901F6004384FC /* Run Script */, 151 | 97C146EA1CF9000F007C117D /* Sources */, 152 | 97C146EB1CF9000F007C117D /* Frameworks */, 153 | 97C146EC1CF9000F007C117D /* Resources */, 154 | 9705A1C41CF9048500538489 /* Embed Frameworks */, 155 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */, 156 | 4DB933A0D61D36B8308A964E /* [CP] Embed Pods Frameworks */, 157 | 6496F939B9C410B42C1D6C1E /* [CP] Copy Pods Resources */, 158 | ); 159 | buildRules = ( 160 | ); 161 | dependencies = ( 162 | ); 163 | name = Runner; 164 | productName = Runner; 165 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */; 166 | productType = "com.apple.product-type.application"; 167 | }; 168 | /* End PBXNativeTarget section */ 169 | 170 | /* Begin PBXProject section */ 171 | 97C146E61CF9000F007C117D /* Project object */ = { 172 | isa = PBXProject; 173 | attributes = { 174 | LastUpgradeCheck = 1020; 175 | ORGANIZATIONNAME = "The Chromium Authors"; 176 | TargetAttributes = { 177 | 97C146ED1CF9000F007C117D = { 178 | CreatedOnToolsVersion = 7.3.1; 179 | DevelopmentTeam = WJ48SZA38U; 180 | }; 181 | }; 182 | }; 183 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; 184 | compatibilityVersion = "Xcode 3.2"; 185 | developmentRegion = en; 186 | hasScannedForEncodings = 0; 187 | knownRegions = ( 188 | en, 189 | Base, 190 | ); 191 | mainGroup = 97C146E51CF9000F007C117D; 192 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */; 193 | projectDirPath = ""; 194 | projectRoot = ""; 195 | targets = ( 196 | 97C146ED1CF9000F007C117D /* Runner */, 197 | ); 198 | }; 199 | /* End PBXProject section */ 200 | 201 | /* Begin PBXResourcesBuildPhase section */ 202 | 97C146EC1CF9000F007C117D /* Resources */ = { 203 | isa = PBXResourcesBuildPhase; 204 | buildActionMask = 2147483647; 205 | files = ( 206 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 207 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, 208 | 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */, 209 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 210 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, 211 | 6179CECC22D9C0860033C723 /* GoogleService-Info.plist in Resources */, 212 | ); 213 | runOnlyForDeploymentPostprocessing = 0; 214 | }; 215 | /* End PBXResourcesBuildPhase section */ 216 | 217 | /* Begin PBXShellScriptBuildPhase section */ 218 | 1F22266B2B127C70F2E3B9F4 /* [CP] Check Pods Manifest.lock */ = { 219 | isa = PBXShellScriptBuildPhase; 220 | buildActionMask = 2147483647; 221 | files = ( 222 | ); 223 | inputFileListPaths = ( 224 | ); 225 | inputPaths = ( 226 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 227 | "${PODS_ROOT}/Manifest.lock", 228 | ); 229 | name = "[CP] Check Pods Manifest.lock"; 230 | outputFileListPaths = ( 231 | ); 232 | outputPaths = ( 233 | "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", 234 | ); 235 | runOnlyForDeploymentPostprocessing = 0; 236 | shellPath = /bin/sh; 237 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 238 | showEnvVarsInLog = 0; 239 | }; 240 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { 241 | isa = PBXShellScriptBuildPhase; 242 | buildActionMask = 2147483647; 243 | files = ( 244 | ); 245 | inputPaths = ( 246 | ); 247 | name = "Thin Binary"; 248 | outputPaths = ( 249 | ); 250 | runOnlyForDeploymentPostprocessing = 0; 251 | shellPath = /bin/sh; 252 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; 253 | }; 254 | 4DB933A0D61D36B8308A964E /* [CP] Embed Pods Frameworks */ = { 255 | isa = PBXShellScriptBuildPhase; 256 | buildActionMask = 2147483647; 257 | files = ( 258 | ); 259 | inputPaths = ( 260 | "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh", 261 | "${PODS_ROOT}/../Flutter/Flutter.framework", 262 | ); 263 | name = "[CP] Embed Pods Frameworks"; 264 | outputPaths = ( 265 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Flutter.framework", 266 | ); 267 | runOnlyForDeploymentPostprocessing = 0; 268 | shellPath = /bin/sh; 269 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; 270 | showEnvVarsInLog = 0; 271 | }; 272 | 6496F939B9C410B42C1D6C1E /* [CP] Copy Pods Resources */ = { 273 | isa = PBXShellScriptBuildPhase; 274 | buildActionMask = 2147483647; 275 | files = ( 276 | ); 277 | inputPaths = ( 278 | "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh", 279 | "${PODS_ROOT}/GoogleSignIn/Resources/GoogleSignIn.bundle", 280 | ); 281 | name = "[CP] Copy Pods Resources"; 282 | outputPaths = ( 283 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleSignIn.bundle", 284 | ); 285 | runOnlyForDeploymentPostprocessing = 0; 286 | shellPath = /bin/sh; 287 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; 288 | showEnvVarsInLog = 0; 289 | }; 290 | 9740EEB61CF901F6004384FC /* Run Script */ = { 291 | isa = PBXShellScriptBuildPhase; 292 | buildActionMask = 2147483647; 293 | files = ( 294 | ); 295 | inputPaths = ( 296 | ); 297 | name = "Run Script"; 298 | outputPaths = ( 299 | ); 300 | runOnlyForDeploymentPostprocessing = 0; 301 | shellPath = /bin/sh; 302 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; 303 | }; 304 | /* End PBXShellScriptBuildPhase section */ 305 | 306 | /* Begin PBXSourcesBuildPhase section */ 307 | 97C146EA1CF9000F007C117D /* Sources */ = { 308 | isa = PBXSourcesBuildPhase; 309 | buildActionMask = 2147483647; 310 | files = ( 311 | 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */, 312 | 97C146F31CF9000F007C117D /* main.m in Sources */, 313 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, 314 | ); 315 | runOnlyForDeploymentPostprocessing = 0; 316 | }; 317 | /* End PBXSourcesBuildPhase section */ 318 | 319 | /* Begin PBXVariantGroup section */ 320 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = { 321 | isa = PBXVariantGroup; 322 | children = ( 323 | 97C146FB1CF9000F007C117D /* Base */, 324 | ); 325 | name = Main.storyboard; 326 | sourceTree = ""; 327 | }; 328 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { 329 | isa = PBXVariantGroup; 330 | children = ( 331 | 97C147001CF9000F007C117D /* Base */, 332 | ); 333 | name = LaunchScreen.storyboard; 334 | sourceTree = ""; 335 | }; 336 | /* End PBXVariantGroup section */ 337 | 338 | /* Begin XCBuildConfiguration section */ 339 | 249021D3217E4FDB00AE95B9 /* Profile */ = { 340 | isa = XCBuildConfiguration; 341 | buildSettings = { 342 | ALWAYS_SEARCH_USER_PATHS = NO; 343 | CLANG_ANALYZER_NONNULL = YES; 344 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 345 | CLANG_CXX_LIBRARY = "libc++"; 346 | CLANG_ENABLE_MODULES = YES; 347 | CLANG_ENABLE_OBJC_ARC = YES; 348 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 349 | CLANG_WARN_BOOL_CONVERSION = YES; 350 | CLANG_WARN_COMMA = YES; 351 | CLANG_WARN_CONSTANT_CONVERSION = YES; 352 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 353 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 354 | CLANG_WARN_EMPTY_BODY = YES; 355 | CLANG_WARN_ENUM_CONVERSION = YES; 356 | CLANG_WARN_INFINITE_RECURSION = YES; 357 | CLANG_WARN_INT_CONVERSION = YES; 358 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 359 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 360 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 361 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 362 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 363 | CLANG_WARN_STRICT_PROTOTYPES = YES; 364 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 365 | CLANG_WARN_UNREACHABLE_CODE = YES; 366 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 367 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 368 | COPY_PHASE_STRIP = NO; 369 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 370 | ENABLE_NS_ASSERTIONS = NO; 371 | ENABLE_STRICT_OBJC_MSGSEND = YES; 372 | GCC_C_LANGUAGE_STANDARD = gnu99; 373 | GCC_NO_COMMON_BLOCKS = YES; 374 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 375 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 376 | GCC_WARN_UNDECLARED_SELECTOR = YES; 377 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 378 | GCC_WARN_UNUSED_FUNCTION = YES; 379 | GCC_WARN_UNUSED_VARIABLE = YES; 380 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 381 | MTL_ENABLE_DEBUG_INFO = NO; 382 | SDKROOT = iphoneos; 383 | TARGETED_DEVICE_FAMILY = "1,2"; 384 | VALIDATE_PRODUCT = YES; 385 | }; 386 | name = Profile; 387 | }; 388 | 249021D4217E4FDB00AE95B9 /* Profile */ = { 389 | isa = XCBuildConfiguration; 390 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 391 | buildSettings = { 392 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 393 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 394 | DEVELOPMENT_TEAM = WJ48SZA38U; 395 | ENABLE_BITCODE = NO; 396 | FRAMEWORK_SEARCH_PATHS = ( 397 | "$(inherited)", 398 | "$(PROJECT_DIR)/Flutter", 399 | ); 400 | INFOPLIST_FILE = Runner/Info.plist; 401 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 402 | LIBRARY_SEARCH_PATHS = ( 403 | "$(inherited)", 404 | "$(PROJECT_DIR)/Flutter", 405 | ); 406 | PRODUCT_BUNDLE_IDENTIFIER = com.souvikbiswas.signInFlutter; 407 | PRODUCT_NAME = "$(TARGET_NAME)"; 408 | VERSIONING_SYSTEM = "apple-generic"; 409 | }; 410 | name = Profile; 411 | }; 412 | 97C147031CF9000F007C117D /* Debug */ = { 413 | isa = XCBuildConfiguration; 414 | buildSettings = { 415 | ALWAYS_SEARCH_USER_PATHS = NO; 416 | CLANG_ANALYZER_NONNULL = YES; 417 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 418 | CLANG_CXX_LIBRARY = "libc++"; 419 | CLANG_ENABLE_MODULES = YES; 420 | CLANG_ENABLE_OBJC_ARC = YES; 421 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 422 | CLANG_WARN_BOOL_CONVERSION = YES; 423 | CLANG_WARN_COMMA = YES; 424 | CLANG_WARN_CONSTANT_CONVERSION = YES; 425 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 426 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 427 | CLANG_WARN_EMPTY_BODY = YES; 428 | CLANG_WARN_ENUM_CONVERSION = YES; 429 | CLANG_WARN_INFINITE_RECURSION = YES; 430 | CLANG_WARN_INT_CONVERSION = YES; 431 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 432 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 433 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 434 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 435 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 436 | CLANG_WARN_STRICT_PROTOTYPES = YES; 437 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 438 | CLANG_WARN_UNREACHABLE_CODE = YES; 439 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 440 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 441 | COPY_PHASE_STRIP = NO; 442 | DEBUG_INFORMATION_FORMAT = dwarf; 443 | ENABLE_STRICT_OBJC_MSGSEND = YES; 444 | ENABLE_TESTABILITY = YES; 445 | GCC_C_LANGUAGE_STANDARD = gnu99; 446 | GCC_DYNAMIC_NO_PIC = NO; 447 | GCC_NO_COMMON_BLOCKS = YES; 448 | GCC_OPTIMIZATION_LEVEL = 0; 449 | GCC_PREPROCESSOR_DEFINITIONS = ( 450 | "DEBUG=1", 451 | "$(inherited)", 452 | ); 453 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 454 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 455 | GCC_WARN_UNDECLARED_SELECTOR = YES; 456 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 457 | GCC_WARN_UNUSED_FUNCTION = YES; 458 | GCC_WARN_UNUSED_VARIABLE = YES; 459 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 460 | MTL_ENABLE_DEBUG_INFO = YES; 461 | ONLY_ACTIVE_ARCH = YES; 462 | SDKROOT = iphoneos; 463 | TARGETED_DEVICE_FAMILY = "1,2"; 464 | }; 465 | name = Debug; 466 | }; 467 | 97C147041CF9000F007C117D /* Release */ = { 468 | isa = XCBuildConfiguration; 469 | buildSettings = { 470 | ALWAYS_SEARCH_USER_PATHS = NO; 471 | CLANG_ANALYZER_NONNULL = YES; 472 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 473 | CLANG_CXX_LIBRARY = "libc++"; 474 | CLANG_ENABLE_MODULES = YES; 475 | CLANG_ENABLE_OBJC_ARC = YES; 476 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 477 | CLANG_WARN_BOOL_CONVERSION = YES; 478 | CLANG_WARN_COMMA = YES; 479 | CLANG_WARN_CONSTANT_CONVERSION = YES; 480 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 481 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 482 | CLANG_WARN_EMPTY_BODY = YES; 483 | CLANG_WARN_ENUM_CONVERSION = YES; 484 | CLANG_WARN_INFINITE_RECURSION = YES; 485 | CLANG_WARN_INT_CONVERSION = YES; 486 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 487 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 488 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 489 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 490 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 491 | CLANG_WARN_STRICT_PROTOTYPES = YES; 492 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 493 | CLANG_WARN_UNREACHABLE_CODE = YES; 494 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 495 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 496 | COPY_PHASE_STRIP = NO; 497 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 498 | ENABLE_NS_ASSERTIONS = NO; 499 | ENABLE_STRICT_OBJC_MSGSEND = YES; 500 | GCC_C_LANGUAGE_STANDARD = gnu99; 501 | GCC_NO_COMMON_BLOCKS = YES; 502 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 503 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 504 | GCC_WARN_UNDECLARED_SELECTOR = YES; 505 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 506 | GCC_WARN_UNUSED_FUNCTION = YES; 507 | GCC_WARN_UNUSED_VARIABLE = YES; 508 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 509 | MTL_ENABLE_DEBUG_INFO = NO; 510 | SDKROOT = iphoneos; 511 | TARGETED_DEVICE_FAMILY = "1,2"; 512 | VALIDATE_PRODUCT = YES; 513 | }; 514 | name = Release; 515 | }; 516 | 97C147061CF9000F007C117D /* Debug */ = { 517 | isa = XCBuildConfiguration; 518 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 519 | buildSettings = { 520 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 521 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 522 | DEVELOPMENT_TEAM = WJ48SZA38U; 523 | ENABLE_BITCODE = NO; 524 | FRAMEWORK_SEARCH_PATHS = ( 525 | "$(inherited)", 526 | "$(PROJECT_DIR)/Flutter", 527 | ); 528 | INFOPLIST_FILE = Runner/Info.plist; 529 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 530 | LIBRARY_SEARCH_PATHS = ( 531 | "$(inherited)", 532 | "$(PROJECT_DIR)/Flutter", 533 | ); 534 | PRODUCT_BUNDLE_IDENTIFIER = com.souvikbiswas.signInFlutter; 535 | PRODUCT_NAME = "$(TARGET_NAME)"; 536 | VERSIONING_SYSTEM = "apple-generic"; 537 | }; 538 | name = Debug; 539 | }; 540 | 97C147071CF9000F007C117D /* Release */ = { 541 | isa = XCBuildConfiguration; 542 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 543 | buildSettings = { 544 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 545 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 546 | DEVELOPMENT_TEAM = WJ48SZA38U; 547 | ENABLE_BITCODE = NO; 548 | FRAMEWORK_SEARCH_PATHS = ( 549 | "$(inherited)", 550 | "$(PROJECT_DIR)/Flutter", 551 | ); 552 | INFOPLIST_FILE = Runner/Info.plist; 553 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 554 | LIBRARY_SEARCH_PATHS = ( 555 | "$(inherited)", 556 | "$(PROJECT_DIR)/Flutter", 557 | ); 558 | PRODUCT_BUNDLE_IDENTIFIER = com.souvikbiswas.signInFlutter; 559 | PRODUCT_NAME = "$(TARGET_NAME)"; 560 | VERSIONING_SYSTEM = "apple-generic"; 561 | }; 562 | name = Release; 563 | }; 564 | /* End XCBuildConfiguration section */ 565 | 566 | /* Begin XCConfigurationList section */ 567 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { 568 | isa = XCConfigurationList; 569 | buildConfigurations = ( 570 | 97C147031CF9000F007C117D /* Debug */, 571 | 97C147041CF9000F007C117D /* Release */, 572 | 249021D3217E4FDB00AE95B9 /* Profile */, 573 | ); 574 | defaultConfigurationIsVisible = 0; 575 | defaultConfigurationName = Release; 576 | }; 577 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { 578 | isa = XCConfigurationList; 579 | buildConfigurations = ( 580 | 97C147061CF9000F007C117D /* Debug */, 581 | 97C147071CF9000F007C117D /* Release */, 582 | 249021D4217E4FDB00AE95B9 /* Profile */, 583 | ); 584 | defaultConfigurationIsVisible = 0; 585 | defaultConfigurationName = Release; 586 | }; 587 | /* End XCConfigurationList section */ 588 | }; 589 | rootObject = 97C146E61CF9000F007C117D /* Project object */; 590 | } 591 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | @interface AppDelegate : FlutterAppDelegate 5 | 6 | @end 7 | -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.m: -------------------------------------------------------------------------------- 1 | #include "AppDelegate.h" 2 | #include "GeneratedPluginRegistrant.h" 3 | 4 | @implementation AppDelegate 5 | 6 | - (BOOL)application:(UIApplication *)application 7 | didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 8 | [GeneratedPluginRegistrant registerWithRegistry:self]; 9 | // Override point for customization after application launch. 10 | return [super application:application didFinishLaunchingWithOptions:launchOptions]; 11 | } 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-App-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-App-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-App-29x29@1x.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-App-29x29@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-App-29x29@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-App-40x40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-App-40x40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-App-60x60@2x.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "60x60", 53 | "idiom" : "iphone", 54 | "filename" : "Icon-App-60x60@3x.png", 55 | "scale" : "3x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "Icon-App-20x20@1x.png", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "size" : "20x20", 65 | "idiom" : "ipad", 66 | "filename" : "Icon-App-20x20@2x.png", 67 | "scale" : "2x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-App-29x29@1x.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "29x29", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-App-29x29@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-App-40x40@1x.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "40x40", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-App-40x40@2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-App-76x76@1x.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "76x76", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-App-76x76@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "83.5x83.5", 107 | "idiom" : "ipad", 108 | "filename" : "Icon-App-83.5x83.5@2x.png", 109 | "scale" : "2x" 110 | }, 111 | { 112 | "size" : "1024x1024", 113 | "idiom" : "ios-marketing", 114 | "filename" : "Icon-App-1024x1024@1x.png", 115 | "scale" : "1x" 116 | } 117 | ], 118 | "info" : { 119 | "version" : 1, 120 | "author" : "xcode" 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbis04/sign_in_flutter/f96f82fe9ad723b9e650ecf7ff47b1f0fc8d9143/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbis04/sign_in_flutter/f96f82fe9ad723b9e650ecf7ff47b1f0fc8d9143/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbis04/sign_in_flutter/f96f82fe9ad723b9e650ecf7ff47b1f0fc8d9143/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbis04/sign_in_flutter/f96f82fe9ad723b9e650ecf7ff47b1f0fc8d9143/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbis04/sign_in_flutter/f96f82fe9ad723b9e650ecf7ff47b1f0fc8d9143/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbis04/sign_in_flutter/f96f82fe9ad723b9e650ecf7ff47b1f0fc8d9143/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbis04/sign_in_flutter/f96f82fe9ad723b9e650ecf7ff47b1f0fc8d9143/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbis04/sign_in_flutter/f96f82fe9ad723b9e650ecf7ff47b1f0fc8d9143/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbis04/sign_in_flutter/f96f82fe9ad723b9e650ecf7ff47b1f0fc8d9143/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbis04/sign_in_flutter/f96f82fe9ad723b9e650ecf7ff47b1f0fc8d9143/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbis04/sign_in_flutter/f96f82fe9ad723b9e650ecf7ff47b1f0fc8d9143/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbis04/sign_in_flutter/f96f82fe9ad723b9e650ecf7ff47b1f0fc8d9143/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbis04/sign_in_flutter/f96f82fe9ad723b9e650ecf7ff47b1f0fc8d9143/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbis04/sign_in_flutter/f96f82fe9ad723b9e650ecf7ff47b1f0fc8d9143/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbis04/sign_in_flutter/f96f82fe9ad723b9e650ecf7ff47b1f0fc8d9143/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchImage.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchImage@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "LaunchImage@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbis04/sign_in_flutter/f96f82fe9ad723b9e650ecf7ff47b1f0fc8d9143/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbis04/sign_in_flutter/f96f82fe9ad723b9e650ecf7ff47b1f0fc8d9143/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbis04/sign_in_flutter/f96f82fe9ad723b9e650ecf7ff47b1f0fc8d9143/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | sign_in_flutter 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | $(FLUTTER_BUILD_NAME) 19 | CFBundleSignature 20 | ???? 21 | CFBundleURLTypes 22 | 23 | 24 | CFBundleTypeRole 25 | Editor 26 | CFBundleURLSchemes 27 | 28 | com.googleusercontent.apps.893614701966-9icn86n48j5hgtpp2lb0vvkmbi6j86de 29 | 30 | 31 | 32 | CFBundleVersion 33 | $(FLUTTER_BUILD_NUMBER) 34 | LSRequiresIPhoneOS 35 | 36 | UILaunchStoryboardName 37 | LaunchScreen 38 | UIMainStoryboardFile 39 | Main 40 | UISupportedInterfaceOrientations 41 | 42 | UIInterfaceOrientationPortrait 43 | UIInterfaceOrientationLandscapeLeft 44 | UIInterfaceOrientationLandscapeRight 45 | 46 | UISupportedInterfaceOrientations~ipad 47 | 48 | UIInterfaceOrientationPortrait 49 | UIInterfaceOrientationPortraitUpsideDown 50 | UIInterfaceOrientationLandscapeLeft 51 | UIInterfaceOrientationLandscapeRight 52 | 53 | UIViewControllerBasedStatusBarAppearance 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /ios/Runner/main.m: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | #import "AppDelegate.h" 4 | 5 | int main(int argc, char* argv[]) { 6 | @autoreleasepool { 7 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /lib/first_screen.dart: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2019 Souvik Biswas 2 | 3 | // Permission is hereby granted, free of charge, to any person obtaining a copy 4 | // of this software and associated documentation files (the "Software"), to deal 5 | // in the Software without restriction, including without limitation the rights 6 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | // copies of the Software, and to permit persons to whom the Software is 8 | // furnished to do so, subject to the following conditions: 9 | 10 | // The above copyright notice and this permission notice shall be included in all 11 | // copies or substantial portions of the Software. 12 | 13 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | // SOFTWARE. 20 | 21 | import 'package:flutter/material.dart'; 22 | import 'package:sign_in_flutter/login_page.dart'; 23 | import 'package:sign_in_flutter/sign_in.dart'; 24 | 25 | class FirstScreen extends StatelessWidget { 26 | @override 27 | Widget build(BuildContext context) { 28 | return Scaffold( 29 | body: Container( 30 | decoration: BoxDecoration( 31 | gradient: LinearGradient( 32 | begin: Alignment.topRight, 33 | end: Alignment.bottomLeft, 34 | colors: [Colors.blue[100], Colors.blue[400]], 35 | ), 36 | ), 37 | child: Center( 38 | child: Column( 39 | mainAxisAlignment: MainAxisAlignment.center, 40 | mainAxisSize: MainAxisSize.max, 41 | children: [ 42 | CircleAvatar( 43 | backgroundImage: NetworkImage( 44 | imageUrl, 45 | ), 46 | radius: 60, 47 | backgroundColor: Colors.transparent, 48 | ), 49 | SizedBox(height: 40), 50 | Text( 51 | 'NAME', 52 | style: TextStyle( 53 | fontSize: 15, 54 | fontWeight: FontWeight.bold, 55 | color: Colors.black54), 56 | ), 57 | Text( 58 | name, 59 | style: TextStyle( 60 | fontSize: 25, 61 | color: Colors.deepPurple, 62 | fontWeight: FontWeight.bold), 63 | ), 64 | SizedBox(height: 20), 65 | Text( 66 | 'EMAIL', 67 | style: TextStyle( 68 | fontSize: 15, 69 | fontWeight: FontWeight.bold, 70 | color: Colors.black54), 71 | ), 72 | Text( 73 | email, 74 | style: TextStyle( 75 | fontSize: 25, 76 | color: Colors.deepPurple, 77 | fontWeight: FontWeight.bold), 78 | ), 79 | SizedBox(height: 40), 80 | RaisedButton( 81 | onPressed: () { 82 | signOutGoogle(); 83 | Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (context) {return LoginPage();}), ModalRoute.withName('/')); 84 | }, 85 | color: Colors.deepPurple, 86 | child: Padding( 87 | padding: const EdgeInsets.all(8.0), 88 | child: Text( 89 | 'Sign Out', 90 | style: TextStyle(fontSize: 25, color: Colors.white), 91 | ), 92 | ), 93 | elevation: 5, 94 | shape: RoundedRectangleBorder( 95 | borderRadius: BorderRadius.circular(40)), 96 | ) 97 | ], 98 | ), 99 | ), 100 | ), 101 | ); 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /lib/login_page.dart: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2019 Souvik Biswas 2 | 3 | // Permission is hereby granted, free of charge, to any person obtaining a copy 4 | // of this software and associated documentation files (the "Software"), to deal 5 | // in the Software without restriction, including without limitation the rights 6 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | // copies of the Software, and to permit persons to whom the Software is 8 | // furnished to do so, subject to the following conditions: 9 | 10 | // The above copyright notice and this permission notice shall be included in all 11 | // copies or substantial portions of the Software. 12 | 13 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | // SOFTWARE. 20 | 21 | import 'package:flutter/material.dart'; 22 | import 'package:sign_in_flutter/sign_in.dart'; 23 | 24 | import 'first_screen.dart'; 25 | 26 | class LoginPage extends StatefulWidget { 27 | @override 28 | _LoginPageState createState() => _LoginPageState(); 29 | } 30 | 31 | class _LoginPageState extends State { 32 | @override 33 | Widget build(BuildContext context) { 34 | return Scaffold( 35 | body: Container( 36 | color: Colors.white, 37 | child: Center( 38 | child: Column( 39 | mainAxisSize: MainAxisSize.max, 40 | mainAxisAlignment: MainAxisAlignment.center, 41 | children: [ 42 | FlutterLogo(size: 150), 43 | SizedBox(height: 50), 44 | _signInButton(), 45 | ], 46 | ), 47 | ), 48 | ), 49 | ); 50 | } 51 | 52 | Widget _signInButton() { 53 | return OutlineButton( 54 | splashColor: Colors.grey, 55 | onPressed: () { 56 | signInWithGoogle().then((result) { 57 | if (result != null) { 58 | Navigator.of(context).push( 59 | MaterialPageRoute( 60 | builder: (context) { 61 | return FirstScreen(); 62 | }, 63 | ), 64 | ); 65 | } 66 | }); 67 | }, 68 | shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(40)), 69 | highlightElevation: 0, 70 | borderSide: BorderSide(color: Colors.grey), 71 | child: Padding( 72 | padding: const EdgeInsets.fromLTRB(0, 10, 0, 10), 73 | child: Row( 74 | mainAxisSize: MainAxisSize.min, 75 | mainAxisAlignment: MainAxisAlignment.center, 76 | children: [ 77 | Image(image: AssetImage("assets/google_logo.png"), height: 35.0), 78 | Padding( 79 | padding: const EdgeInsets.only(left: 10), 80 | child: Text( 81 | 'Sign in with Google', 82 | style: TextStyle( 83 | fontSize: 20, 84 | color: Colors.grey, 85 | ), 86 | ), 87 | ) 88 | ], 89 | ), 90 | ), 91 | ); 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /lib/main.dart: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2019 Souvik Biswas 2 | 3 | // Permission is hereby granted, free of charge, to any person obtaining a copy 4 | // of this software and associated documentation files (the "Software"), to deal 5 | // in the Software without restriction, including without limitation the rights 6 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | // copies of the Software, and to permit persons to whom the Software is 8 | // furnished to do so, subject to the following conditions: 9 | 10 | // The above copyright notice and this permission notice shall be included in all 11 | // copies or substantial portions of the Software. 12 | 13 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | // SOFTWARE. 20 | 21 | import 'package:flutter/material.dart'; 22 | 23 | import 'login_page.dart'; 24 | 25 | void main() => runApp(MyApp()); 26 | 27 | class MyApp extends StatelessWidget { 28 | @override 29 | Widget build(BuildContext context) { 30 | return MaterialApp( 31 | debugShowCheckedModeBanner: false, 32 | title: 'Flutter Login', 33 | theme: ThemeData( 34 | primarySwatch: Colors.blue, 35 | ), 36 | home: LoginPage(), 37 | ); 38 | } 39 | } -------------------------------------------------------------------------------- /lib/sign_in.dart: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2019 Souvik Biswas 2 | 3 | // Permission is hereby granted, free of charge, to any person obtaining a copy 4 | // of this software and associated documentation files (the "Software"), to deal 5 | // in the Software without restriction, including without limitation the rights 6 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | // copies of the Software, and to permit persons to whom the Software is 8 | // furnished to do so, subject to the following conditions: 9 | 10 | // The above copyright notice and this permission notice shall be included in all 11 | // copies or substantial portions of the Software. 12 | 13 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | // SOFTWARE. 20 | 21 | import 'package:firebase_auth/firebase_auth.dart'; 22 | import 'package:firebase_core/firebase_core.dart'; 23 | import 'package:google_sign_in/google_sign_in.dart'; 24 | 25 | final FirebaseAuth _auth = FirebaseAuth.instance; 26 | final GoogleSignIn googleSignIn = GoogleSignIn(); 27 | 28 | String name; 29 | String email; 30 | String imageUrl; 31 | 32 | Future signInWithGoogle() async { 33 | await Firebase.initializeApp(); 34 | 35 | final GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn(); 36 | final GoogleSignInAuthentication googleSignInAuthentication = 37 | await googleSignInAccount.authentication; 38 | 39 | final AuthCredential credential = GoogleAuthProvider.credential( 40 | accessToken: googleSignInAuthentication.accessToken, 41 | idToken: googleSignInAuthentication.idToken, 42 | ); 43 | 44 | final UserCredential authResult = 45 | await _auth.signInWithCredential(credential); 46 | final User user = authResult.user; 47 | 48 | if (user != null) { 49 | // Checking if email and name is null 50 | assert(user.email != null); 51 | assert(user.displayName != null); 52 | assert(user.photoURL != null); 53 | 54 | name = user.displayName; 55 | email = user.email; 56 | imageUrl = user.photoURL; 57 | 58 | // Only taking the first part of the name, i.e., First Name 59 | if (name.contains(" ")) { 60 | name = name.substring(0, name.indexOf(" ")); 61 | } 62 | 63 | assert(!user.isAnonymous); 64 | assert(await user.getIdToken() != null); 65 | 66 | final User currentUser = _auth.currentUser; 67 | assert(user.uid == currentUser.uid); 68 | 69 | print('signInWithGoogle succeeded: $user'); 70 | 71 | return '$user'; 72 | } 73 | 74 | return null; 75 | } 76 | 77 | Future signOutGoogle() async { 78 | await googleSignIn.signOut(); 79 | 80 | print("User Signed Out"); 81 | } 82 | -------------------------------------------------------------------------------- /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.5.0-nullsafety" 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-nullsafety" 18 | characters: 19 | dependency: transitive 20 | description: 21 | name: characters 22 | url: "https://pub.dartlang.org" 23 | source: hosted 24 | version: "1.1.0-nullsafety.2" 25 | charcode: 26 | dependency: transitive 27 | description: 28 | name: charcode 29 | url: "https://pub.dartlang.org" 30 | source: hosted 31 | version: "1.2.0-nullsafety" 32 | clock: 33 | dependency: transitive 34 | description: 35 | name: clock 36 | url: "https://pub.dartlang.org" 37 | source: hosted 38 | version: "1.1.0-nullsafety" 39 | collection: 40 | dependency: transitive 41 | description: 42 | name: collection 43 | url: "https://pub.dartlang.org" 44 | source: hosted 45 | version: "1.15.0-nullsafety.2" 46 | cupertino_icons: 47 | dependency: "direct main" 48 | description: 49 | name: cupertino_icons 50 | url: "https://pub.dartlang.org" 51 | source: hosted 52 | version: "0.1.2" 53 | fake_async: 54 | dependency: transitive 55 | description: 56 | name: fake_async 57 | url: "https://pub.dartlang.org" 58 | source: hosted 59 | version: "1.1.0-nullsafety" 60 | firebase: 61 | dependency: transitive 62 | description: 63 | name: firebase 64 | url: "https://pub.dartlang.org" 65 | source: hosted 66 | version: "7.3.0" 67 | firebase_auth: 68 | dependency: "direct main" 69 | description: 70 | name: firebase_auth 71 | url: "https://pub.dartlang.org" 72 | source: hosted 73 | version: "0.18.0+1" 74 | firebase_auth_platform_interface: 75 | dependency: transitive 76 | description: 77 | name: firebase_auth_platform_interface 78 | url: "https://pub.dartlang.org" 79 | source: hosted 80 | version: "2.0.1" 81 | firebase_auth_web: 82 | dependency: transitive 83 | description: 84 | name: firebase_auth_web 85 | url: "https://pub.dartlang.org" 86 | source: hosted 87 | version: "0.3.0+1" 88 | firebase_core: 89 | dependency: "direct main" 90 | description: 91 | name: firebase_core 92 | url: "https://pub.dartlang.org" 93 | source: hosted 94 | version: "0.5.0" 95 | firebase_core_platform_interface: 96 | dependency: transitive 97 | description: 98 | name: firebase_core_platform_interface 99 | url: "https://pub.dartlang.org" 100 | source: hosted 101 | version: "2.0.0" 102 | firebase_core_web: 103 | dependency: transitive 104 | description: 105 | name: firebase_core_web 106 | url: "https://pub.dartlang.org" 107 | source: hosted 108 | version: "0.2.0" 109 | flutter: 110 | dependency: "direct main" 111 | description: flutter 112 | source: sdk 113 | version: "0.0.0" 114 | flutter_test: 115 | dependency: "direct dev" 116 | description: flutter 117 | source: sdk 118 | version: "0.0.0" 119 | flutter_web_plugins: 120 | dependency: transitive 121 | description: flutter 122 | source: sdk 123 | version: "0.0.0" 124 | google_sign_in: 125 | dependency: "direct main" 126 | description: 127 | name: google_sign_in 128 | url: "https://pub.dartlang.org" 129 | source: hosted 130 | version: "4.5.3" 131 | google_sign_in_platform_interface: 132 | dependency: transitive 133 | description: 134 | name: google_sign_in_platform_interface 135 | url: "https://pub.dartlang.org" 136 | source: hosted 137 | version: "1.1.1" 138 | google_sign_in_web: 139 | dependency: transitive 140 | description: 141 | name: google_sign_in_web 142 | url: "https://pub.dartlang.org" 143 | source: hosted 144 | version: "0.9.1" 145 | http: 146 | dependency: transitive 147 | description: 148 | name: http 149 | url: "https://pub.dartlang.org" 150 | source: hosted 151 | version: "0.12.0+4" 152 | http_parser: 153 | dependency: transitive 154 | description: 155 | name: http_parser 156 | url: "https://pub.dartlang.org" 157 | source: hosted 158 | version: "3.1.3" 159 | intl: 160 | dependency: transitive 161 | description: 162 | name: intl 163 | url: "https://pub.dartlang.org" 164 | source: hosted 165 | version: "0.16.1" 166 | js: 167 | dependency: transitive 168 | description: 169 | name: js 170 | url: "https://pub.dartlang.org" 171 | source: hosted 172 | version: "0.6.1+1" 173 | matcher: 174 | dependency: transitive 175 | description: 176 | name: matcher 177 | url: "https://pub.dartlang.org" 178 | source: hosted 179 | version: "0.12.10-nullsafety" 180 | meta: 181 | dependency: transitive 182 | description: 183 | name: meta 184 | url: "https://pub.dartlang.org" 185 | source: hosted 186 | version: "1.3.0-nullsafety.2" 187 | path: 188 | dependency: transitive 189 | description: 190 | name: path 191 | url: "https://pub.dartlang.org" 192 | source: hosted 193 | version: "1.8.0-nullsafety" 194 | pedantic: 195 | dependency: transitive 196 | description: 197 | name: pedantic 198 | url: "https://pub.dartlang.org" 199 | source: hosted 200 | version: "1.8.0+1" 201 | plugin_platform_interface: 202 | dependency: transitive 203 | description: 204 | name: plugin_platform_interface 205 | url: "https://pub.dartlang.org" 206 | source: hosted 207 | version: "1.0.2" 208 | quiver: 209 | dependency: transitive 210 | description: 211 | name: quiver 212 | url: "https://pub.dartlang.org" 213 | source: hosted 214 | version: "2.1.3" 215 | sky_engine: 216 | dependency: transitive 217 | description: flutter 218 | source: sdk 219 | version: "0.0.99" 220 | source_span: 221 | dependency: transitive 222 | description: 223 | name: source_span 224 | url: "https://pub.dartlang.org" 225 | source: hosted 226 | version: "1.8.0-nullsafety" 227 | stack_trace: 228 | dependency: transitive 229 | description: 230 | name: stack_trace 231 | url: "https://pub.dartlang.org" 232 | source: hosted 233 | version: "1.10.0-nullsafety" 234 | stream_channel: 235 | dependency: transitive 236 | description: 237 | name: stream_channel 238 | url: "https://pub.dartlang.org" 239 | source: hosted 240 | version: "2.1.0-nullsafety" 241 | string_scanner: 242 | dependency: transitive 243 | description: 244 | name: string_scanner 245 | url: "https://pub.dartlang.org" 246 | source: hosted 247 | version: "1.1.0-nullsafety" 248 | term_glyph: 249 | dependency: transitive 250 | description: 251 | name: term_glyph 252 | url: "https://pub.dartlang.org" 253 | source: hosted 254 | version: "1.2.0-nullsafety" 255 | test_api: 256 | dependency: transitive 257 | description: 258 | name: test_api 259 | url: "https://pub.dartlang.org" 260 | source: hosted 261 | version: "0.2.19-nullsafety" 262 | typed_data: 263 | dependency: transitive 264 | description: 265 | name: typed_data 266 | url: "https://pub.dartlang.org" 267 | source: hosted 268 | version: "1.3.0-nullsafety.2" 269 | vector_math: 270 | dependency: transitive 271 | description: 272 | name: vector_math 273 | url: "https://pub.dartlang.org" 274 | source: hosted 275 | version: "2.1.0-nullsafety.2" 276 | sdks: 277 | dart: ">=2.10.0-0.0.dev <2.10.0" 278 | flutter: ">=1.12.13+hotfix.5 <2.0.0" 279 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: sign_in_flutter 2 | description: A new Flutter project. 3 | 4 | # The following defines the version and build number for your application. 5 | # A version number is three numbers separated by dots, like 1.2.43 6 | # followed by an optional build number separated by a +. 7 | # Both the version and the builder number may be overridden in flutter 8 | # build by specifying --build-name and --build-number, respectively. 9 | # In Android, build-name is used as versionName while build-number used as versionCode. 10 | # Read more about Android versioning at https://developer.android.com/studio/publish/versioning 11 | # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. 12 | # Read more about iOS versioning at 13 | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html 14 | version: 1.0.0+1 15 | 16 | environment: 17 | sdk: ">=2.1.0 <3.0.0" 18 | 19 | dependencies: 20 | flutter: 21 | sdk: flutter 22 | 23 | # The following adds the Cupertino Icons font to your application. 24 | # Use with the CupertinoIcons class for iOS style icons. 25 | cupertino_icons: ^0.1.2 26 | firebase_core: ^0.5.0 27 | firebase_auth: ^0.18.0+1 28 | google_sign_in: ^4.5.3 29 | 30 | dev_dependencies: 31 | flutter_test: 32 | sdk: flutter 33 | 34 | 35 | # For information on the generic Dart part of this file, see the 36 | # following page: https://dart.dev/tools/pub/pubspec 37 | 38 | # The following section is specific to Flutter. 39 | flutter: 40 | 41 | # The following line ensures that the Material Icons font is 42 | # included with your application, so that you can use the icons in 43 | # the material Icons class. 44 | uses-material-design: true 45 | 46 | # To add assets to your application, add an assets section, like this: 47 | assets: 48 | - assets/ 49 | # - images/a_dot_ham.jpeg 50 | 51 | # An image asset can refer to one or more resolution-specific "variants", see 52 | # https://flutter.dev/assets-and-images/#resolution-aware. 53 | 54 | # For details regarding adding assets from package dependencies, see 55 | # https://flutter.dev/assets-and-images/#from-packages 56 | 57 | # To add custom fonts to your application, add a fonts section here, 58 | # in this "flutter" section. Each entry in this list should have a 59 | # "family" key with the font family name, and a "fonts" key with a 60 | # list giving the asset and other descriptors for the font. For 61 | # example: 62 | # fonts: 63 | # - family: Schyler 64 | # fonts: 65 | # - asset: fonts/Schyler-Regular.ttf 66 | # - asset: fonts/Schyler-Italic.ttf 67 | # style: italic 68 | # - family: Trajan Pro 69 | # fonts: 70 | # - asset: fonts/TrajanPro.ttf 71 | # - asset: fonts/TrajanPro_Bold.ttf 72 | # weight: 700 73 | # 74 | # For details regarding fonts from package dependencies, 75 | # see https://flutter.dev/custom-fonts/#from-packages 76 | -------------------------------------------------------------------------------- /release_notes.txt: -------------------------------------------------------------------------------- 1 | Version 3.2.0: Add support for auto login 2 | -------------------------------------------------------------------------------- /test/login_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_test/flutter_test.dart'; 3 | import 'package:sign_in_flutter/login_page.dart'; 4 | 5 | void main() { 6 | Widget makeTestableWidget({Widget child}) { 7 | return MaterialApp( 8 | home: child, 9 | ); 10 | } 11 | 12 | testWidgets('Login screen test', (WidgetTester tester) async { 13 | LoginPage loginScreen = LoginPage(); 14 | 15 | await tester.pumpWidget(makeTestableWidget(child: loginScreen)); 16 | 17 | expect(find.byType(FlutterLogo), findsOneWidget); 18 | expect(find.byType(OutlineButton), findsOneWidget); 19 | expect(find.text('Sign in with Google'), findsOneWidget); 20 | 21 | print('Found Flutter logo.'); 22 | print('Button found.'); 23 | print('Found the login button text.'); 24 | }); 25 | } 26 | --------------------------------------------------------------------------------