├── .github ├── CONTRIBUTING.md ├── ISSUE_TEMPLATE.md └── PULL_REQUEST_TEMPLATE.md ├── .gitignore ├── .metadata ├── .travis.yml ├── README.md ├── android ├── app │ ├── build.gradle │ ├── google-services.json │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── example │ │ │ └── cerebroflutter │ │ │ └── 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 ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties └── settings.gradle ├── assets └── images │ ├── favicon.ico │ ├── fest-logo.png │ └── icon.png ├── ios ├── Flutter │ ├── AppFrameworkInfo.plist │ ├── Debug.xcconfig │ └── Release.xcconfig ├── Runner.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ └── xcschemes │ │ └── Runner.xcscheme ├── Runner.xcworkspace │ └── contents.xcworkspacedata └── 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 ├── main.dart ├── models │ ├── record.dart │ └── user.dart ├── screens │ ├── events.dart │ ├── login.dart │ └── splash.dart └── utils │ └── authManagement.dart ├── pubspec.yaml └── test └── sample_test.dart /.github/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | ## Contributions Best Practices 2 | 3 | **Commits** 4 | * Write clear meaningful git commit messages (Do read https://chris.beams.io/posts/git-commit/) 5 | * Make sure your PR's description contains GitHub's special keyword references that automatically close the related issue when the PR is merged. (More info at https://github.com/blog/1506-closing-issues-via-pull-requests ) 6 | * When you make very very minor changes to a PR of yours (like for example fixing a failing travis build or some small style corrections or minor changes requested by reviewers) make sure you squash your commits afterwards so that you don't have an absurd number of commits for a very small fix. (Learn how to squash at https://davidwalsh.name/squash-commits-git ) 7 | * When you're submitting a PR for a UI-related issue, it would be really awesome if you add a screenshot of your change or a link to a deployment where it can be tested out along with your PR. It makes it very easy for the reviewers and you'll also get reviews quicker. 8 | * If you are creating a issue, it would be awesome if you could add logs or crash reports as well as steps to reproduce it. 9 | 10 | **Join the development** 11 | * Before you join development, please set up the project on your local machine, run it and go through the application completely. Press on any button you can find and see where it leads to. Explore. (Don't worry ... Nothing will happen to the app or to you due to the exploring :wink: Only thing that will happen is, you'll be more familiar with what is where and might even get some cool ideas on how to improve various aspects of the app.) 12 | * If you would like to work on an issue, drop in a comment at the issue. If it is already assigned to someone, but there is no sign of any work being done, please free to drop in a comment so that the issue can be assigned to you if the previous assignee has dropped it entirely. 13 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | **Current behaviour** 2 | 3 | 4 | **Expected behaviour** 5 | 6 | 7 | **Steps to reproduce** 8 | 9 | **Screenshots** 10 | 11 | 12 | **Would you like to work on the issue?** 13 | 14 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 2 | - Fixes # 3 | 4 | 5 | 6 | ## Screenshots 7 | 8 | 9 | ### Before Change 10 | 11 | 12 | 13 | ### After change 14 | 15 | 16 | ## Description / Changes 17 | 18 | 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.lock 4 | *.log 5 | *.pyc 6 | *.swp 7 | .DS_Store 8 | .atom/ 9 | .buildlog/ 10 | .history 11 | .svn/ 12 | 13 | # IntelliJ related 14 | *.iml 15 | *.ipr 16 | *.iws 17 | .idea/ 18 | 19 | # Visual Studio Code related 20 | .vscode/ 21 | 22 | # Flutter/Dart/Pub related 23 | **/doc/api/ 24 | .dart_tool/ 25 | .flutter-plugins 26 | .packages 27 | .pub-cache/ 28 | .pub/ 29 | build/ 30 | 31 | # Android related 32 | **/android/**/gradle-wrapper.jar 33 | **/android/.gradle 34 | **/android/captures/ 35 | **/android/gradlew 36 | **/android/gradlew.bat 37 | **/android/local.properties 38 | **/android/**/GeneratedPluginRegistrant.java 39 | 40 | # iOS/XCode related 41 | **/ios/**/*.mode1v3 42 | **/ios/**/*.mode2v3 43 | **/ios/**/*.moved-aside 44 | **/ios/**/*.pbxuser 45 | **/ios/**/*.perspectivev3 46 | **/ios/**/*sync/ 47 | **/ios/**/.sconsign.dblite 48 | **/ios/**/.tags* 49 | **/ios/**/.vagrant/ 50 | **/ios/**/DerivedData/ 51 | **/ios/**/Icon? 52 | **/ios/**/Pods/ 53 | **/ios/**/.symlinks/ 54 | **/ios/**/profile 55 | **/ios/**/xcuserdata 56 | **/ios/.generated/ 57 | **/ios/Flutter/App.framework 58 | **/ios/Flutter/Flutter.framework 59 | **/ios/Flutter/Generated.xcconfig 60 | **/ios/Flutter/app.flx 61 | **/ios/Flutter/app.zip 62 | **/ios/Flutter/flutter_assets/ 63 | **/ios/ServiceDefinitions.json 64 | **/ios/Runner/GeneratedPluginRegistrant.* 65 | 66 | # Exceptions to above rules. 67 | !**/ios/**/default.mode1v3 68 | !**/ios/**/default.mode2v3 69 | !**/ios/**/default.pbxuser 70 | !**/ios/**/default.perspectivev3 71 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages 72 | -------------------------------------------------------------------------------- /.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: 5391447fae6209bb21a89e6a5a6583cac1af9b4b 8 | channel: beta 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | os: 2 | - linux 3 | sudo: false 4 | addons: 5 | apt: 6 | sources: 7 | - ubuntu-toolchain-r-test 8 | packages: 9 | - libstdc++6 10 | - fonts-droid 11 | git: 12 | depth: 3 13 | cache: 14 | directories: 15 | - $HOME/.pub-cache 16 | env: 17 | - FLUTTER_VERSION=beta 18 | - FLUTTER_VERSION=dev 19 | matrix: 20 | allow_failures: 21 | - env: FLUTTER_VERSION=dev 22 | before_script: 23 | - git clone https://github.com/flutter/flutter.git -b $FLUTTER_VERSION 24 | - ./flutter/bin/flutter doctor 25 | script: 26 | - ./flutter/bin/flutter test 27 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 |

cerebro-flutter

3 | 4 |

5 | 6 | 7 | 8 | 9 | 10 | 11 |

12 |
13 |

A native application of Cerebro for and with goodness of

14 | 15 | ## Getting Started 16 | 17 | This project is a starting point for a Flutter application. 18 | 19 | A few resources to get you started if this is your first Flutter project: 20 | 21 | - [Lab: Write your first Flutter app](https://flutter.io/docs/get-started/codelab) 22 | - [Cookbook: Useful Flutter samples](https://flutter.io/docs/cookbook) 23 | 24 | ### Authors ✍️ 25 | 26 | ©️ [Mobile Dev. Team Cerebro](https://github.com/orgs/cerebro-iiitv/teams/flutter-team) ✨ 27 | -------------------------------------------------------------------------------- /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 from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 26 | 27 | android { 28 | compileSdkVersion 27 29 | 30 | lintOptions { 31 | disable 'InvalidPackage' 32 | } 33 | 34 | defaultConfig { 35 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 36 | applicationId "com.example.cerebroflutter" 37 | minSdkVersion 21 38 | targetSdkVersion 27 39 | versionCode flutterVersionCode.toInteger() 40 | versionName flutterVersionName 41 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 42 | } 43 | 44 | buildTypes { 45 | release { 46 | // TODO: Add your own signing config for the release build. 47 | // Signing with the debug keys for now, so `flutter run --release` works. 48 | signingConfig signingConfigs.debug 49 | minifyEnabled true 50 | useProguard true 51 | 52 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 53 | } 54 | } 55 | } 56 | 57 | flutter { 58 | source '../..' 59 | } 60 | 61 | dependencies { 62 | testImplementation 'junit:junit:4.12' 63 | androidTestImplementation 'com.android.support.test:runner:1.0.2' 64 | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' 65 | implementation 'com.google.firebase:firebase-core:16.0.1' 66 | } 67 | 68 | apply plugin: 'com.google.gms.google-services' 69 | -------------------------------------------------------------------------------- /android/app/google-services.json: -------------------------------------------------------------------------------- 1 | { 2 | "project_info": { 3 | "project_number": "1059299836137", 4 | "firebase_url": "https://cerebro-2018-f1052.firebaseio.com", 5 | "project_id": "cerebro-2018-f1052", 6 | "storage_bucket": "cerebro-2018-f1052.appspot.com" 7 | }, 8 | "client": [ 9 | { 10 | "client_info": { 11 | "mobilesdk_app_id": "1:1059299836137:android:ac80a7c4c495aa4a", 12 | "android_client_info": { 13 | "package_name": "com.example.cerebroflutter" 14 | } 15 | }, 16 | "oauth_client": [ 17 | { 18 | "client_id": "1059299836137-ua40m9hh1f9k6qlt1b8opshhuqed0jhr.apps.googleusercontent.com", 19 | "client_type": 1, 20 | "android_info": { 21 | "package_name": "com.example.cerebroflutter", 22 | "certificate_hash": "dd6524ae8e63b010fbfc0059ed59daeeb3b35a35" 23 | } 24 | }, 25 | { 26 | "client_id": "1059299836137-dgdno06b08fl2634qggbh1okku97f8iu.apps.googleusercontent.com", 27 | "client_type": 1, 28 | "android_info": { 29 | "package_name": "com.example.cerebroflutter", 30 | "certificate_hash": "f6ea78594ee102f232a831fba5d78b56cd42383e" 31 | } 32 | }, 33 | { 34 | "client_id": "1059299836137-41pce639hfl79rmlrfluaamkcjrpbqsq.apps.googleusercontent.com", 35 | "client_type": 3 36 | } 37 | ], 38 | "api_key": [ 39 | { 40 | "current_key": "AIzaSyBnzTsGbYyE71zlwM2-hXVxig1xfCyB6Ec" 41 | } 42 | ], 43 | "services": { 44 | "analytics_service": { 45 | "status": 1 46 | }, 47 | "appinvite_service": { 48 | "status": 2, 49 | "other_platform_oauth_client": [ 50 | { 51 | "client_id": "1059299836137-41pce639hfl79rmlrfluaamkcjrpbqsq.apps.googleusercontent.com", 52 | "client_type": 3 53 | } 54 | ] 55 | }, 56 | "ads_service": { 57 | "status": 2 58 | } 59 | } 60 | }, 61 | { 62 | "client_info": { 63 | "mobilesdk_app_id": "1:1059299836137:android:d1ada98abff1de62", 64 | "android_client_info": { 65 | "package_name": "in.ac.iiitvadodara.cerebro" 66 | } 67 | }, 68 | "oauth_client": [ 69 | { 70 | "client_id": "1059299836137-glghq67josgvvr5v31e5bu03jhuq26fg.apps.googleusercontent.com", 71 | "client_type": 1, 72 | "android_info": { 73 | "package_name": "in.ac.iiitvadodara.cerebro", 74 | "certificate_hash": "d914fc16516288ef58fef6ce1e14e6ee868784e5" 75 | } 76 | }, 77 | { 78 | "client_id": "1059299836137-bk5p82oqvnonhdh8307pggv6inqgcted.apps.googleusercontent.com", 79 | "client_type": 1, 80 | "android_info": { 81 | "package_name": "in.ac.iiitvadodara.cerebro", 82 | "certificate_hash": "2ad4b84d0ddf0eed20beeec8e708c35606e19d2c" 83 | } 84 | }, 85 | { 86 | "client_id": "1059299836137-9t7qtm9apgfdsj8ul3i96jdqa6mgp4hj.apps.googleusercontent.com", 87 | "client_type": 1, 88 | "android_info": { 89 | "package_name": "in.ac.iiitvadodara.cerebro", 90 | "certificate_hash": "1b8b87a64e7271648aa435f4002057cea5d7b49b" 91 | } 92 | }, 93 | { 94 | "client_id": "1059299836137-djeq8rqotok56bqgja9blr7st1jp1f0l.apps.googleusercontent.com", 95 | "client_type": 1, 96 | "android_info": { 97 | "package_name": "in.ac.iiitvadodara.cerebro", 98 | "certificate_hash": "8102582adf3f0d04219366e0a15a13187cbaa29f" 99 | } 100 | }, 101 | { 102 | "client_id": "1059299836137-e349d8uoqtc03mamagg4j1krlnm999jc.apps.googleusercontent.com", 103 | "client_type": 1, 104 | "android_info": { 105 | "package_name": "in.ac.iiitvadodara.cerebro", 106 | "certificate_hash": "644b945c3813b1bec7c6e1dca81d0bd8a05af6a5" 107 | } 108 | }, 109 | { 110 | "client_id": "1059299836137-kq9bg2kslhmlejr9njvr0levou1532km.apps.googleusercontent.com", 111 | "client_type": 1, 112 | "android_info": { 113 | "package_name": "in.ac.iiitvadodara.cerebro", 114 | "certificate_hash": "f6ea78594ee102f232a831fba5d78b56cd42383e" 115 | } 116 | }, 117 | { 118 | "client_id": "1059299836137-41pce639hfl79rmlrfluaamkcjrpbqsq.apps.googleusercontent.com", 119 | "client_type": 3 120 | } 121 | ], 122 | "api_key": [ 123 | { 124 | "current_key": "AIzaSyBnzTsGbYyE71zlwM2-hXVxig1xfCyB6Ec" 125 | } 126 | ], 127 | "services": { 128 | "analytics_service": { 129 | "status": 1 130 | }, 131 | "appinvite_service": { 132 | "status": 2, 133 | "other_platform_oauth_client": [ 134 | { 135 | "client_id": "1059299836137-41pce639hfl79rmlrfluaamkcjrpbqsq.apps.googleusercontent.com", 136 | "client_type": 3 137 | } 138 | ] 139 | }, 140 | "ads_service": { 141 | "status": 2 142 | } 143 | } 144 | } 145 | ], 146 | "configuration_version": "1" 147 | } -------------------------------------------------------------------------------- /android/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | #Flutter Wrapper 2 | -keep class io.flutter.app.** { *; } 3 | -keep class io.flutter.plugin.** { *; } 4 | -keep class io.flutter.util.** { *; } 5 | -keep class io.flutter.view.** { *; } 6 | -keep class io.flutter.** { *; } 7 | -keep class io.flutter.plugins.** { *; } 8 | -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 8 | 9 | 10 | 15 | 19 | 26 | 30 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /android/app/src/main/java/com/example/cerebroflutter/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.cerebroflutter; 2 | 3 | import android.os.Bundle; 4 | import io.flutter.app.FlutterActivity; 5 | import io.flutter.plugins.GeneratedPluginRegistrant; 6 | 7 | public class MainActivity extends FlutterActivity { 8 | @Override 9 | protected void onCreate(Bundle savedInstanceState) { 10 | super.onCreate(savedInstanceState); 11 | GeneratedPluginRegistrant.registerWith(this); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /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/cerebro-iiitv/cerebro-flutter/1e402bad84dad3bda4d05dd06683f2b31c4a1dea/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cerebro-iiitv/cerebro-flutter/1e402bad84dad3bda4d05dd06683f2b31c4a1dea/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cerebro-iiitv/cerebro-flutter/1e402bad84dad3bda4d05dd06683f2b31c4a1dea/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cerebro-iiitv/cerebro-flutter/1e402bad84dad3bda4d05dd06683f2b31c4a1dea/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cerebro-iiitv/cerebro-flutter/1e402bad84dad3bda4d05dd06683f2b31c4a1dea/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | repositories { 3 | google() 4 | jcenter() 5 | } 6 | 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:3.2.1' 9 | classpath 'com.google.gms:google-services:3.2.1' 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 | -------------------------------------------------------------------------------- /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-4.10.2-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/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cerebro-iiitv/cerebro-flutter/1e402bad84dad3bda4d05dd06683f2b31c4a1dea/assets/images/favicon.ico -------------------------------------------------------------------------------- /assets/images/fest-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cerebro-iiitv/cerebro-flutter/1e402bad84dad3bda4d05dd06683f2b31c4a1dea/assets/images/fest-logo.png -------------------------------------------------------------------------------- /assets/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cerebro-iiitv/cerebro-flutter/1e402bad84dad3bda4d05dd06683f2b31c4a1dea/assets/images/icon.png -------------------------------------------------------------------------------- /ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 8.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /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 | 2D5378261FAA1A9400D5DBA9 /* flutter_assets in Resources */ = {isa = PBXBuildFile; fileRef = 2D5378251FAA1A9400D5DBA9 /* flutter_assets */; }; 12 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 13 | 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; 14 | 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 15 | 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; 16 | 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 17 | 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; }; 18 | 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; }; 19 | 97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; }; 20 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 21 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 22 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 23 | /* End PBXBuildFile section */ 24 | 25 | /* Begin PBXCopyFilesBuildPhase section */ 26 | 9705A1C41CF9048500538489 /* Embed Frameworks */ = { 27 | isa = PBXCopyFilesBuildPhase; 28 | buildActionMask = 2147483647; 29 | dstPath = ""; 30 | dstSubfolderSpec = 10; 31 | files = ( 32 | 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, 33 | 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, 34 | ); 35 | name = "Embed Frameworks"; 36 | runOnlyForDeploymentPostprocessing = 0; 37 | }; 38 | /* End PBXCopyFilesBuildPhase section */ 39 | 40 | /* Begin PBXFileReference section */ 41 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 42 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 43 | 2D5378251FAA1A9400D5DBA9 /* flutter_assets */ = {isa = PBXFileReference; lastKnownFileType = folder; name = flutter_assets; path = Flutter/flutter_assets; sourceTree = SOURCE_ROOT; }; 44 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 45 | 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; 46 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 47 | 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 48 | 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 49 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 50 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 51 | 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; 52 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 53 | 97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 54 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 55 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 56 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 57 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 58 | /* End PBXFileReference section */ 59 | 60 | /* Begin PBXFrameworksBuildPhase section */ 61 | 97C146EB1CF9000F007C117D /* Frameworks */ = { 62 | isa = PBXFrameworksBuildPhase; 63 | buildActionMask = 2147483647; 64 | files = ( 65 | 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, 66 | 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, 67 | ); 68 | runOnlyForDeploymentPostprocessing = 0; 69 | }; 70 | /* End PBXFrameworksBuildPhase section */ 71 | 72 | /* Begin PBXGroup section */ 73 | 9740EEB11CF90186004384FC /* Flutter */ = { 74 | isa = PBXGroup; 75 | children = ( 76 | 2D5378251FAA1A9400D5DBA9 /* flutter_assets */, 77 | 3B80C3931E831B6300D905FE /* App.framework */, 78 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, 79 | 9740EEBA1CF902C7004384FC /* Flutter.framework */, 80 | 9740EEB21CF90195004384FC /* Debug.xcconfig */, 81 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 82 | 9740EEB31CF90195004384FC /* Generated.xcconfig */, 83 | ); 84 | name = Flutter; 85 | sourceTree = ""; 86 | }; 87 | 97C146E51CF9000F007C117D = { 88 | isa = PBXGroup; 89 | children = ( 90 | 9740EEB11CF90186004384FC /* Flutter */, 91 | 97C146F01CF9000F007C117D /* Runner */, 92 | 97C146EF1CF9000F007C117D /* Products */, 93 | CF3B75C9A7D2FA2A4C99F110 /* Frameworks */, 94 | ); 95 | sourceTree = ""; 96 | }; 97 | 97C146EF1CF9000F007C117D /* Products */ = { 98 | isa = PBXGroup; 99 | children = ( 100 | 97C146EE1CF9000F007C117D /* Runner.app */, 101 | ); 102 | name = Products; 103 | sourceTree = ""; 104 | }; 105 | 97C146F01CF9000F007C117D /* Runner */ = { 106 | isa = PBXGroup; 107 | children = ( 108 | 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */, 109 | 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */, 110 | 97C146FA1CF9000F007C117D /* Main.storyboard */, 111 | 97C146FD1CF9000F007C117D /* Assets.xcassets */, 112 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 113 | 97C147021CF9000F007C117D /* Info.plist */, 114 | 97C146F11CF9000F007C117D /* Supporting Files */, 115 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 116 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 117 | ); 118 | path = Runner; 119 | sourceTree = ""; 120 | }; 121 | 97C146F11CF9000F007C117D /* Supporting Files */ = { 122 | isa = PBXGroup; 123 | children = ( 124 | 97C146F21CF9000F007C117D /* main.m */, 125 | ); 126 | name = "Supporting Files"; 127 | sourceTree = ""; 128 | }; 129 | /* End PBXGroup section */ 130 | 131 | /* Begin PBXNativeTarget section */ 132 | 97C146ED1CF9000F007C117D /* Runner */ = { 133 | isa = PBXNativeTarget; 134 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; 135 | buildPhases = ( 136 | 9740EEB61CF901F6004384FC /* Run Script */, 137 | 97C146EA1CF9000F007C117D /* Sources */, 138 | 97C146EB1CF9000F007C117D /* Frameworks */, 139 | 97C146EC1CF9000F007C117D /* Resources */, 140 | 9705A1C41CF9048500538489 /* Embed Frameworks */, 141 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */, 142 | ); 143 | buildRules = ( 144 | ); 145 | dependencies = ( 146 | ); 147 | name = Runner; 148 | productName = Runner; 149 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */; 150 | productType = "com.apple.product-type.application"; 151 | }; 152 | /* End PBXNativeTarget section */ 153 | 154 | /* Begin PBXProject section */ 155 | 97C146E61CF9000F007C117D /* Project object */ = { 156 | isa = PBXProject; 157 | attributes = { 158 | LastUpgradeCheck = 0910; 159 | ORGANIZATIONNAME = "The Chromium Authors"; 160 | TargetAttributes = { 161 | 97C146ED1CF9000F007C117D = { 162 | CreatedOnToolsVersion = 7.3.1; 163 | }; 164 | }; 165 | }; 166 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; 167 | compatibilityVersion = "Xcode 3.2"; 168 | developmentRegion = English; 169 | hasScannedForEncodings = 0; 170 | knownRegions = ( 171 | en, 172 | Base, 173 | ); 174 | mainGroup = 97C146E51CF9000F007C117D; 175 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */; 176 | projectDirPath = ""; 177 | projectRoot = ""; 178 | targets = ( 179 | 97C146ED1CF9000F007C117D /* Runner */, 180 | ); 181 | }; 182 | /* End PBXProject section */ 183 | 184 | /* Begin PBXResourcesBuildPhase section */ 185 | 97C146EC1CF9000F007C117D /* Resources */ = { 186 | isa = PBXResourcesBuildPhase; 187 | buildActionMask = 2147483647; 188 | files = ( 189 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 190 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, 191 | 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */, 192 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 193 | 2D5378261FAA1A9400D5DBA9 /* flutter_assets in Resources */, 194 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, 195 | ); 196 | runOnlyForDeploymentPostprocessing = 0; 197 | }; 198 | /* End PBXResourcesBuildPhase section */ 199 | 200 | /* Begin PBXShellScriptBuildPhase section */ 201 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { 202 | isa = PBXShellScriptBuildPhase; 203 | buildActionMask = 2147483647; 204 | files = ( 205 | ); 206 | inputPaths = ( 207 | ); 208 | name = "Thin Binary"; 209 | outputPaths = ( 210 | ); 211 | runOnlyForDeploymentPostprocessing = 0; 212 | shellPath = /bin/sh; 213 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; 214 | }; 215 | 9740EEB61CF901F6004384FC /* Run Script */ = { 216 | isa = PBXShellScriptBuildPhase; 217 | buildActionMask = 2147483647; 218 | files = ( 219 | ); 220 | inputPaths = ( 221 | ); 222 | name = "Run Script"; 223 | outputPaths = ( 224 | ); 225 | runOnlyForDeploymentPostprocessing = 0; 226 | shellPath = /bin/sh; 227 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; 228 | }; 229 | /* End PBXShellScriptBuildPhase section */ 230 | 231 | /* Begin PBXSourcesBuildPhase section */ 232 | 97C146EA1CF9000F007C117D /* Sources */ = { 233 | isa = PBXSourcesBuildPhase; 234 | buildActionMask = 2147483647; 235 | files = ( 236 | 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */, 237 | 97C146F31CF9000F007C117D /* main.m in Sources */, 238 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, 239 | ); 240 | runOnlyForDeploymentPostprocessing = 0; 241 | }; 242 | /* End PBXSourcesBuildPhase section */ 243 | 244 | /* Begin PBXVariantGroup section */ 245 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = { 246 | isa = PBXVariantGroup; 247 | children = ( 248 | 97C146FB1CF9000F007C117D /* Base */, 249 | ); 250 | name = Main.storyboard; 251 | sourceTree = ""; 252 | }; 253 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { 254 | isa = PBXVariantGroup; 255 | children = ( 256 | 97C147001CF9000F007C117D /* Base */, 257 | ); 258 | name = LaunchScreen.storyboard; 259 | sourceTree = ""; 260 | }; 261 | /* End PBXVariantGroup section */ 262 | 263 | /* Begin XCBuildConfiguration section */ 264 | 249021D3217E4FDB00AE95B9 /* Profile */ = { 265 | isa = XCBuildConfiguration; 266 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 267 | buildSettings = { 268 | ALWAYS_SEARCH_USER_PATHS = NO; 269 | CLANG_ANALYZER_NONNULL = YES; 270 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 271 | CLANG_CXX_LIBRARY = "libc++"; 272 | CLANG_ENABLE_MODULES = YES; 273 | CLANG_ENABLE_OBJC_ARC = YES; 274 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 275 | CLANG_WARN_BOOL_CONVERSION = YES; 276 | CLANG_WARN_COMMA = YES; 277 | CLANG_WARN_CONSTANT_CONVERSION = YES; 278 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 279 | CLANG_WARN_EMPTY_BODY = YES; 280 | CLANG_WARN_ENUM_CONVERSION = YES; 281 | CLANG_WARN_INFINITE_RECURSION = YES; 282 | CLANG_WARN_INT_CONVERSION = YES; 283 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 284 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 285 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 286 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 287 | CLANG_WARN_STRICT_PROTOTYPES = YES; 288 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 289 | CLANG_WARN_UNREACHABLE_CODE = YES; 290 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 291 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 292 | COPY_PHASE_STRIP = NO; 293 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 294 | ENABLE_NS_ASSERTIONS = NO; 295 | ENABLE_STRICT_OBJC_MSGSEND = YES; 296 | GCC_C_LANGUAGE_STANDARD = gnu99; 297 | GCC_NO_COMMON_BLOCKS = YES; 298 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 299 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 300 | GCC_WARN_UNDECLARED_SELECTOR = YES; 301 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 302 | GCC_WARN_UNUSED_FUNCTION = YES; 303 | GCC_WARN_UNUSED_VARIABLE = YES; 304 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 305 | MTL_ENABLE_DEBUG_INFO = NO; 306 | SDKROOT = iphoneos; 307 | TARGETED_DEVICE_FAMILY = "1,2"; 308 | VALIDATE_PRODUCT = YES; 309 | }; 310 | name = Profile; 311 | }; 312 | 249021D4217E4FDB00AE95B9 /* Profile */ = { 313 | isa = XCBuildConfiguration; 314 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 315 | buildSettings = { 316 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 317 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 318 | DEVELOPMENT_TEAM = S8QB4VV633; 319 | ENABLE_BITCODE = NO; 320 | FRAMEWORK_SEARCH_PATHS = ( 321 | "$(inherited)", 322 | "$(PROJECT_DIR)/Flutter", 323 | ); 324 | INFOPLIST_FILE = Runner/Info.plist; 325 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 326 | LIBRARY_SEARCH_PATHS = ( 327 | "$(inherited)", 328 | "$(PROJECT_DIR)/Flutter", 329 | ); 330 | PRODUCT_BUNDLE_IDENTIFIER = com.example.cerebroFlutter; 331 | PRODUCT_NAME = "$(TARGET_NAME)"; 332 | VERSIONING_SYSTEM = "apple-generic"; 333 | }; 334 | name = Profile; 335 | }; 336 | 97C147031CF9000F007C117D /* Debug */ = { 337 | isa = XCBuildConfiguration; 338 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 339 | buildSettings = { 340 | ALWAYS_SEARCH_USER_PATHS = NO; 341 | CLANG_ANALYZER_NONNULL = YES; 342 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 343 | CLANG_CXX_LIBRARY = "libc++"; 344 | CLANG_ENABLE_MODULES = YES; 345 | CLANG_ENABLE_OBJC_ARC = YES; 346 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 347 | CLANG_WARN_BOOL_CONVERSION = YES; 348 | CLANG_WARN_COMMA = YES; 349 | CLANG_WARN_CONSTANT_CONVERSION = YES; 350 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 351 | CLANG_WARN_EMPTY_BODY = YES; 352 | CLANG_WARN_ENUM_CONVERSION = YES; 353 | CLANG_WARN_INFINITE_RECURSION = YES; 354 | CLANG_WARN_INT_CONVERSION = YES; 355 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 356 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 357 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 358 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 359 | CLANG_WARN_STRICT_PROTOTYPES = YES; 360 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 361 | CLANG_WARN_UNREACHABLE_CODE = YES; 362 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 363 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 364 | COPY_PHASE_STRIP = NO; 365 | DEBUG_INFORMATION_FORMAT = dwarf; 366 | ENABLE_STRICT_OBJC_MSGSEND = YES; 367 | ENABLE_TESTABILITY = YES; 368 | GCC_C_LANGUAGE_STANDARD = gnu99; 369 | GCC_DYNAMIC_NO_PIC = NO; 370 | GCC_NO_COMMON_BLOCKS = YES; 371 | GCC_OPTIMIZATION_LEVEL = 0; 372 | GCC_PREPROCESSOR_DEFINITIONS = ( 373 | "DEBUG=1", 374 | "$(inherited)", 375 | ); 376 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 377 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 378 | GCC_WARN_UNDECLARED_SELECTOR = YES; 379 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 380 | GCC_WARN_UNUSED_FUNCTION = YES; 381 | GCC_WARN_UNUSED_VARIABLE = YES; 382 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 383 | MTL_ENABLE_DEBUG_INFO = YES; 384 | ONLY_ACTIVE_ARCH = YES; 385 | SDKROOT = iphoneos; 386 | TARGETED_DEVICE_FAMILY = "1,2"; 387 | }; 388 | name = Debug; 389 | }; 390 | 97C147041CF9000F007C117D /* Release */ = { 391 | isa = XCBuildConfiguration; 392 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 393 | buildSettings = { 394 | ALWAYS_SEARCH_USER_PATHS = NO; 395 | CLANG_ANALYZER_NONNULL = YES; 396 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 397 | CLANG_CXX_LIBRARY = "libc++"; 398 | CLANG_ENABLE_MODULES = YES; 399 | CLANG_ENABLE_OBJC_ARC = YES; 400 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 401 | CLANG_WARN_BOOL_CONVERSION = YES; 402 | CLANG_WARN_COMMA = YES; 403 | CLANG_WARN_CONSTANT_CONVERSION = YES; 404 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 405 | CLANG_WARN_EMPTY_BODY = YES; 406 | CLANG_WARN_ENUM_CONVERSION = YES; 407 | CLANG_WARN_INFINITE_RECURSION = YES; 408 | CLANG_WARN_INT_CONVERSION = YES; 409 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 410 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 411 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 412 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 413 | CLANG_WARN_STRICT_PROTOTYPES = YES; 414 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 415 | CLANG_WARN_UNREACHABLE_CODE = YES; 416 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 417 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 418 | COPY_PHASE_STRIP = NO; 419 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 420 | ENABLE_NS_ASSERTIONS = NO; 421 | ENABLE_STRICT_OBJC_MSGSEND = YES; 422 | GCC_C_LANGUAGE_STANDARD = gnu99; 423 | GCC_NO_COMMON_BLOCKS = YES; 424 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 425 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 426 | GCC_WARN_UNDECLARED_SELECTOR = YES; 427 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 428 | GCC_WARN_UNUSED_FUNCTION = YES; 429 | GCC_WARN_UNUSED_VARIABLE = YES; 430 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 431 | MTL_ENABLE_DEBUG_INFO = NO; 432 | SDKROOT = iphoneos; 433 | TARGETED_DEVICE_FAMILY = "1,2"; 434 | VALIDATE_PRODUCT = YES; 435 | }; 436 | name = Release; 437 | }; 438 | 97C147061CF9000F007C117D /* Debug */ = { 439 | isa = XCBuildConfiguration; 440 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 441 | buildSettings = { 442 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 443 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 444 | ENABLE_BITCODE = NO; 445 | FRAMEWORK_SEARCH_PATHS = ( 446 | "$(inherited)", 447 | "$(PROJECT_DIR)/Flutter", 448 | ); 449 | INFOPLIST_FILE = Runner/Info.plist; 450 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 451 | LIBRARY_SEARCH_PATHS = ( 452 | "$(inherited)", 453 | "$(PROJECT_DIR)/Flutter", 454 | ); 455 | PRODUCT_BUNDLE_IDENTIFIER = com.example.cerebroFlutter; 456 | PRODUCT_NAME = "$(TARGET_NAME)"; 457 | VERSIONING_SYSTEM = "apple-generic"; 458 | }; 459 | name = Debug; 460 | }; 461 | 97C147071CF9000F007C117D /* Release */ = { 462 | isa = XCBuildConfiguration; 463 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 464 | buildSettings = { 465 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 466 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 467 | ENABLE_BITCODE = NO; 468 | FRAMEWORK_SEARCH_PATHS = ( 469 | "$(inherited)", 470 | "$(PROJECT_DIR)/Flutter", 471 | ); 472 | INFOPLIST_FILE = Runner/Info.plist; 473 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 474 | LIBRARY_SEARCH_PATHS = ( 475 | "$(inherited)", 476 | "$(PROJECT_DIR)/Flutter", 477 | ); 478 | PRODUCT_BUNDLE_IDENTIFIER = com.example.cerebroFlutter; 479 | PRODUCT_NAME = "$(TARGET_NAME)"; 480 | VERSIONING_SYSTEM = "apple-generic"; 481 | }; 482 | name = Release; 483 | }; 484 | /* End XCBuildConfiguration section */ 485 | 486 | /* Begin XCConfigurationList section */ 487 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { 488 | isa = XCConfigurationList; 489 | buildConfigurations = ( 490 | 97C147031CF9000F007C117D /* Debug */, 491 | 97C147041CF9000F007C117D /* Release */, 492 | 249021D3217E4FDB00AE95B9 /* Profile */, 493 | ); 494 | defaultConfigurationIsVisible = 0; 495 | defaultConfigurationName = Release; 496 | }; 497 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { 498 | isa = XCConfigurationList; 499 | buildConfigurations = ( 500 | 97C147061CF9000F007C117D /* Debug */, 501 | 97C147071CF9000F007C117D /* Release */, 502 | 249021D4217E4FDB00AE95B9 /* Profile */, 503 | ); 504 | defaultConfigurationIsVisible = 0; 505 | defaultConfigurationName = Release; 506 | }; 507 | /* End XCConfigurationList section */ 508 | }; 509 | rootObject = 97C146E61CF9000F007C117D /* Project object */; 510 | } -------------------------------------------------------------------------------- /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 | 31 | 32 | 33 | 34 | 40 | 41 | 42 | 43 | 44 | 45 | 56 | 58 | 64 | 65 | 66 | 67 | 68 | 69 | 75 | 77 | 83 | 84 | 85 | 86 | 88 | 89 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /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/cerebro-iiitv/cerebro-flutter/1e402bad84dad3bda4d05dd06683f2b31c4a1dea/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/cerebro-iiitv/cerebro-flutter/1e402bad84dad3bda4d05dd06683f2b31c4a1dea/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/cerebro-iiitv/cerebro-flutter/1e402bad84dad3bda4d05dd06683f2b31c4a1dea/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/cerebro-iiitv/cerebro-flutter/1e402bad84dad3bda4d05dd06683f2b31c4a1dea/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/cerebro-iiitv/cerebro-flutter/1e402bad84dad3bda4d05dd06683f2b31c4a1dea/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/cerebro-iiitv/cerebro-flutter/1e402bad84dad3bda4d05dd06683f2b31c4a1dea/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/cerebro-iiitv/cerebro-flutter/1e402bad84dad3bda4d05dd06683f2b31c4a1dea/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/cerebro-iiitv/cerebro-flutter/1e402bad84dad3bda4d05dd06683f2b31c4a1dea/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/cerebro-iiitv/cerebro-flutter/1e402bad84dad3bda4d05dd06683f2b31c4a1dea/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/cerebro-iiitv/cerebro-flutter/1e402bad84dad3bda4d05dd06683f2b31c4a1dea/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/cerebro-iiitv/cerebro-flutter/1e402bad84dad3bda4d05dd06683f2b31c4a1dea/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/cerebro-iiitv/cerebro-flutter/1e402bad84dad3bda4d05dd06683f2b31c4a1dea/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/cerebro-iiitv/cerebro-flutter/1e402bad84dad3bda4d05dd06683f2b31c4a1dea/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/cerebro-iiitv/cerebro-flutter/1e402bad84dad3bda4d05dd06683f2b31c4a1dea/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/cerebro-iiitv/cerebro-flutter/1e402bad84dad3bda4d05dd06683f2b31c4a1dea/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/cerebro-iiitv/cerebro-flutter/1e402bad84dad3bda4d05dd06683f2b31c4a1dea/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cerebro-iiitv/cerebro-flutter/1e402bad84dad3bda4d05dd06683f2b31c4a1dea/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cerebro-iiitv/cerebro-flutter/1e402bad84dad3bda4d05dd06683f2b31c4a1dea/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 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | cerebro_flutter 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | $(FLUTTER_BUILD_NAME) 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(FLUTTER_BUILD_NUMBER) 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UISupportedInterfaceOrientations 30 | 31 | UIInterfaceOrientationPortrait 32 | UIInterfaceOrientationLandscapeLeft 33 | UIInterfaceOrientationLandscapeRight 34 | 35 | UISupportedInterfaceOrientations~ipad 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationPortraitUpsideDown 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | UIViewControllerBasedStatusBarAppearance 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /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/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:cerebro_flutter/screens/splash.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:cerebro_flutter/screens/events.dart'; 4 | import 'package:cerebro_flutter/screens/login.dart'; 5 | 6 | void main() => runApp(MyApp()); 7 | 8 | class CustomRoute extends MaterialPageRoute { 9 | CustomRoute({WidgetBuilder builder, RouteSettings settings}) 10 | : super(builder: builder, settings: settings); 11 | 12 | @override 13 | Widget buildTransitions(BuildContext context, Animation anim, 14 | Animation secondaryAnim, Widget child) { 15 | if (settings.isInitialRoute) return child; 16 | // Slide Transition for routing 17 | return SlideTransition( 18 | position: Tween(begin: Offset(1.0, 0.0), end: Offset.zero) 19 | .animate(anim), 20 | child: SlideTransition( 21 | position: Tween(begin: Offset.zero, end: Offset(1.0, 0.0)) 22 | .animate(secondaryAnim), 23 | child: child, 24 | ), 25 | ); 26 | } 27 | } 28 | 29 | class MyApp extends StatelessWidget { 30 | @override 31 | Widget build(BuildContext context) { 32 | return MaterialApp( 33 | debugShowCheckedModeBanner: false, 34 | title: 'Events', 35 | home: Splash(), 36 | theme: ThemeData.dark(), 37 | onGenerateRoute: (RouteSettings settings) { 38 | switch (settings.name) { 39 | case '/events': 40 | return CustomRoute( 41 | builder: (_) => EventsPage(), 42 | settings: settings, 43 | ); 44 | case '/login': 45 | return CustomRoute( 46 | builder: (_) => LoginPage(), 47 | settings: settings, 48 | ); 49 | } 50 | assert(false); 51 | }, 52 | ); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /lib/models/record.dart: -------------------------------------------------------------------------------- 1 | import 'package:cloud_firestore/cloud_firestore.dart'; 2 | 3 | class Event { 4 | final int id; 5 | final String name; 6 | final DateTime date; 7 | final String description; 8 | final String img; 9 | final String prize; 10 | final bool isTeam; 11 | final DocumentReference reference; 12 | 13 | Event.fromMap(Map map, {this.reference}) 14 | : assert(map['id'] != null), 15 | id = map['id'], 16 | date = map['date'], 17 | name = map['name'], 18 | prize = map['prize'], 19 | img = map['img'], 20 | isTeam = map['isTeam'], 21 | description = map['description']; 22 | 23 | Event.fromSnapshot(DocumentSnapshot snapshot) 24 | : this.fromMap(snapshot.data, reference: snapshot.reference); 25 | 26 | @override 27 | String toString() => "Event<$id|$name|$date>"; 28 | } 29 | -------------------------------------------------------------------------------- /lib/models/user.dart: -------------------------------------------------------------------------------- 1 | import 'package:firebase_auth/firebase_auth.dart'; 2 | 3 | class User { 4 | final String id; 5 | final String name; 6 | final String imgURL; 7 | 8 | const User(this.id, this.name, this.imgURL) 9 | : assert(id != null), 10 | assert(name != null), 11 | assert(imgURL != null); 12 | 13 | User.fromFirebaseUser(FirebaseUser user) 14 | : assert(user.uid != null), 15 | id = user.uid, 16 | name = user.displayName, 17 | imgURL = user.photoUrl; 18 | 19 | User.fromMap(Map map) 20 | : assert(map['id'] != null), 21 | id = map['id'], 22 | name = map['name'], 23 | imgURL = map['imgURL']; 24 | 25 | Map toJson() { 26 | Map _userMap = Map(); 27 | _userMap['id'] = this.id; 28 | _userMap['name'] = this.name; 29 | _userMap['imgURL'] = this.imgURL; 30 | return _userMap; 31 | } 32 | 33 | 34 | @override 35 | String toString() => "User<$id | $name | $imgURL>"; 36 | } 37 | -------------------------------------------------------------------------------- /lib/screens/events.dart: -------------------------------------------------------------------------------- 1 | import 'package:cached_network_image/cached_network_image.dart'; 2 | import 'package:cerebro_flutter/models/record.dart'; 3 | import 'package:cerebro_flutter/models/user.dart'; 4 | import 'package:cerebro_flutter/utils/authManagement.dart'; 5 | import 'package:cloud_firestore/cloud_firestore.dart'; 6 | import 'package:flutter/material.dart'; 7 | import 'package:intl/intl.dart'; 8 | 9 | class EventsPage extends StatefulWidget { 10 | @override 11 | _EventsPageState createState() => _EventsPageState(); 12 | } 13 | 14 | class _EventsPageState extends State { 15 | User curUser; 16 | Map registeredEvents = Map(); 17 | final TextEditingController teamNameController = TextEditingController(); 18 | 19 | Future fetchRegistered() async { 20 | Firestore.instance 21 | .collection(curUser.id) 22 | .document('events') 23 | .collection('registered') 24 | .getDocuments() 25 | .then((QuerySnapshot snapshot) { 26 | if (snapshot.documents != null) { 27 | var documents = snapshot.documents; 28 | for (final elem in documents) { 29 | setState(() { 30 | registeredEvents.putIfAbsent( 31 | elem.documentID, () => elem.data['isRegistered']); 32 | }); 33 | } 34 | } 35 | }); 36 | } 37 | 38 | @override 39 | void initState() { 40 | User user = AuthManager().getCurrentUser(); 41 | if (user != null) { 42 | setState(() { 43 | curUser = user; 44 | }); 45 | fetchRegistered(); 46 | } 47 | super.initState(); 48 | } 49 | 50 | @override 51 | Widget build(BuildContext context) { 52 | return Scaffold( 53 | appBar: AppBar( 54 | title: Text('Events List'), 55 | actions: [ 56 | Row( 57 | children: [ 58 | GestureDetector( 59 | child: CircleAvatar( 60 | backgroundImage: CachedNetworkImageProvider(curUser.imgURL), 61 | ), 62 | onTap: () { 63 | // TODO: Implement Hero animation to go to Profile page 64 | print('Go to Profile'); 65 | }, 66 | onLongPress: () {}, 67 | ), 68 | Padding( 69 | padding: EdgeInsets.symmetric(horizontal: 10.0), 70 | child: GestureDetector( 71 | child: Icon(Icons.exit_to_app, size: 30.0), 72 | onTap: () { 73 | AuthManager().signOut(); 74 | // Doing Pop and Push for the smooth closing animation 75 | Navigator.of(context).pushReplacementNamed('/login'); 76 | }, 77 | ), 78 | ) 79 | ], 80 | ), 81 | ], 82 | ), 83 | body: _buildBody(context), 84 | ); 85 | } 86 | 87 | Widget _buildBody(BuildContext context) { 88 | return StreamBuilder( 89 | stream: Firestore.instance.collection('events').snapshots(), 90 | builder: (context, snapshot) { 91 | if (!snapshot.hasData) return LinearProgressIndicator(); 92 | return _buildList(context, snapshot.data.documents); 93 | }, 94 | ); 95 | } 96 | 97 | Widget _buildList(BuildContext context, List snapshot) { 98 | return ListView( 99 | padding: const EdgeInsets.only(top: 20.0), 100 | children: snapshot.map((data) => _buildListItem(context, data)).toList(), 101 | ); 102 | } 103 | 104 | // Prompt to show that team should be added or not 105 | void showTeamPromptDialog( 106 | Event event, BuildContext context, BuildContext scContext) { 107 | showDialog( 108 | context: context, 109 | builder: (BuildContext alertContext) { 110 | return AlertDialog( 111 | title: Text("Confirm Team"), 112 | content: 113 | Text("Would you like to add team " + teamNameController.text), 114 | actions: [ 115 | FlatButton( 116 | onPressed: () { 117 | Firestore.instance 118 | .collection(event.name) 119 | .document(teamNameController.text) 120 | .setData({ 121 | 'members': [curUser.id] 122 | }).then((_) { 123 | print("Team added"); 124 | Firestore.instance 125 | .collection(curUser.id) 126 | .document('events') 127 | .collection('registered') 128 | .document(event.name) 129 | .setData({'isRegistered': true}).whenComplete(() { 130 | print('Success'); 131 | setState(() { 132 | registeredEvents[event.name] = true; 133 | }); 134 | }); 135 | displaySnackBar(scContext, "Registered for " + event.name); 136 | Navigator.pop(alertContext); 137 | }); 138 | }, 139 | child: Text("Submit"), 140 | ), 141 | ], 142 | ); 143 | }); 144 | } 145 | 146 | // Check if team exists or not 147 | void checkTeamName( 148 | Event event, BuildContext context, BuildContext scContext) { 149 | Firestore.instance 150 | .collection(event.name) 151 | .document(teamNameController.text) 152 | .get() 153 | .then((DocumentSnapshot doc) { 154 | if (doc.data == null) { 155 | // Team not found 156 | Navigator.pop(context); 157 | // Prompt user to add team 158 | showTeamPromptDialog(event, context, scContext); 159 | } else { 160 | // Team found 161 | print(doc.data); 162 | var oldList = doc.data['members'].toList(); 163 | bool alreadyHave = false; 164 | for (final memb in oldList) { 165 | if (memb == curUser.id) { 166 | alreadyHave = true; 167 | break; 168 | } 169 | } 170 | if (!alreadyHave) oldList.add(curUser.id); 171 | Firestore.instance 172 | .collection(event.name) 173 | .document(teamNameController.text) 174 | .updateData({'members': oldList}).then((_) { 175 | Firestore.instance 176 | .collection(curUser.id) 177 | .document('events') 178 | .collection('registered') 179 | .document(event.name) 180 | .setData({'isRegistered': true}).whenComplete(() { 181 | print('Success'); 182 | setState(() { 183 | registeredEvents[event.name] = true; 184 | }); 185 | }); 186 | displaySnackBar(scContext, "Registered for " + event.name); 187 | print("User added"); 188 | Navigator.pop(context); 189 | }); 190 | } 191 | }); 192 | } 193 | 194 | Widget teamNameForm( 195 | BuildContext context, Event event, BuildContext scContext) { 196 | return Column( 197 | crossAxisAlignment: CrossAxisAlignment.stretch, 198 | children: [ 199 | TextField( 200 | decoration: InputDecoration( 201 | border: OutlineInputBorder( 202 | borderRadius: BorderRadius.circular(10.0), 203 | ), 204 | labelText: "Enter Team Name", 205 | labelStyle: TextStyle( 206 | color: Colors.orange, 207 | ), 208 | focusedBorder: OutlineInputBorder( 209 | borderSide: BorderSide(color: Colors.orange), 210 | ), 211 | ), 212 | controller: teamNameController, 213 | ), 214 | SizedBox( 215 | height: 16.0, 216 | ), 217 | FlatButton( 218 | color: Colors.orange, 219 | onPressed: () { 220 | checkTeamName(event, context, scContext); 221 | }, 222 | shape: RoundedRectangleBorder( 223 | borderRadius: BorderRadius.circular(10.0), 224 | ), 225 | child: Padding( 226 | padding: EdgeInsets.all(16.0), 227 | child: Text("Submit"), 228 | ), 229 | ) 230 | ], 231 | ); 232 | } 233 | 234 | void displaySnackBar(BuildContext context, String message) { 235 | final snackBar = SnackBar( 236 | content: Text(message), 237 | ); 238 | Scaffold.of(context).showSnackBar(snackBar); 239 | } 240 | 241 | void handleEventReg(Event event, BuildContext context) { 242 | if (event.isTeam) { 243 | // Get User Team name 244 | showDialog( 245 | context: context, 246 | builder: (BuildContext formContext) { 247 | return SimpleDialog( 248 | contentPadding: EdgeInsets.all(16.0), 249 | shape: RoundedRectangleBorder( 250 | borderRadius: BorderRadius.circular(16.0), 251 | ), 252 | children: [ 253 | Container( 254 | width: 300.0, 255 | padding: EdgeInsets.all(16.0), 256 | child: teamNameForm(formContext, event, context), 257 | ), 258 | ], 259 | ); 260 | }); 261 | } else { 262 | // Set Local Details for user use 263 | Firestore.instance 264 | .collection(curUser.id) 265 | .document('events') 266 | .collection('registered') 267 | .document(event.name) 268 | .setData({'isRegistered': true}).whenComplete(() { 269 | print('Success'); 270 | setState(() { 271 | registeredEvents[event.name] = true; 272 | }); 273 | displaySnackBar(context, "Registered for " + event.name); 274 | }); 275 | 276 | // Set Global Event details for management use 277 | Firestore.instance 278 | .collection(event.name) 279 | .document() 280 | .setData(curUser.toJson()); 281 | } 282 | } 283 | 284 | // Remove user from the team 285 | void removeUserFromTeam( 286 | Event event, String documentID, Map data) { 287 | var updateList = List(); 288 | for (final elem in data['members']) { 289 | if (elem != curUser.id) { 290 | updateList.add(elem); 291 | } 292 | } 293 | if (updateList.isEmpty) { 294 | Firestore.instance 295 | .collection(event.name) 296 | .document(documentID) 297 | .delete() 298 | .whenComplete(() => print("Complete team deleted | No choice")); 299 | } else { 300 | Firestore.instance 301 | .collection(event.name) 302 | .document(documentID) 303 | .setData({'members': updateList}).whenComplete( 304 | () => print('User deleted from team')); 305 | } 306 | } 307 | 308 | // Unregister user from event 309 | void unregisterEvent(Event event, BuildContext context) { 310 | if (event.isTeam) { 311 | Firestore.instance 312 | .collection(event.name) 313 | .getDocuments() 314 | .then((querySnap) { 315 | var docs = querySnap.documents; 316 | for (final doc in docs) { 317 | for (final member in doc.data['members']) { 318 | if (member == curUser.id) { 319 | removeUserFromTeam(event, doc.documentID, doc.data); 320 | } 321 | } 322 | } 323 | }); 324 | } else { 325 | // Remove Global Registration for event use 326 | Firestore.instance 327 | .collection(event.name) 328 | .where("id", isEqualTo: curUser.id) 329 | .snapshots() 330 | .listen((data) => data.documents.forEach((doc) { 331 | Firestore.instance 332 | .collection(event.name) 333 | .document(doc.documentID) 334 | .delete() 335 | .whenComplete(() { 336 | print('Removed from event'); 337 | }); 338 | })); 339 | } 340 | // Remove Local Registration for user use 341 | Firestore.instance 342 | .collection(curUser.id) 343 | .document('events') 344 | .collection('registered') 345 | .document(event.name) 346 | .setData({'isRegistered': false}).whenComplete(() { 347 | print('Local Registration deleted'); 348 | setState(() { 349 | registeredEvents[event.name] = false; 350 | }); 351 | displaySnackBar(context, "Unregistered from " + event.name); 352 | }); 353 | } 354 | 355 | void showUnregisterPrompt(Event event, BuildContext context) { 356 | showDialog( 357 | context: context, 358 | builder: (BuildContext dialogContext) { 359 | return AlertDialog( 360 | title: Text('Unregister from ' + event.name), 361 | content: 362 | Text("Do you really want to unregister from " + event.name), 363 | actions: [ 364 | FlatButton( 365 | onPressed: () { 366 | Navigator.pop(dialogContext); 367 | }, 368 | child: Text("Cancel"), 369 | ), 370 | FlatButton( 371 | onPressed: () { 372 | unregisterEvent(event, context); 373 | Navigator.pop(dialogContext); 374 | }, 375 | child: Text("Unregister"), 376 | ), 377 | ], 378 | ); 379 | }); 380 | } 381 | 382 | // Handle Event Card Icon 383 | Widget _eventBtn(Event event) { 384 | bool isRegistered; 385 | if (registeredEvents.containsKey(event.name)) { 386 | if (registeredEvents[event.name]) 387 | isRegistered = true; 388 | else 389 | isRegistered = false; 390 | } else { 391 | isRegistered = false; 392 | } 393 | return AnimatedCrossFade( 394 | firstChild: Icon( 395 | Icons.add_circle_outline, 396 | ), 397 | secondChild: Icon( 398 | Icons.delete_outline, 399 | ), 400 | crossFadeState: 401 | isRegistered ? CrossFadeState.showSecond : CrossFadeState.showFirst, 402 | duration: Duration(milliseconds: 300), 403 | ); 404 | } 405 | 406 | Widget _buildListItem(BuildContext context, DocumentSnapshot data) { 407 | final _event = Event.fromSnapshot(data); 408 | 409 | String _date(DateTime timestamp) { 410 | return DateFormat.jm().add_yMMMd().format(timestamp); 411 | } 412 | 413 | if (registeredEvents != null) { 414 | return Padding( 415 | key: ValueKey(_event.id), 416 | padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0), 417 | child: Container( 418 | child: Card( 419 | elevation: 5.0, 420 | child: ListTile( 421 | leading: CachedNetworkImage( 422 | imageUrl: _event.img, 423 | placeholder: new CircularProgressIndicator(), 424 | errorWidget: new Icon(Icons.error), 425 | width: 60, 426 | height: 60, 427 | ), 428 | title: Text( 429 | _event.name, 430 | style: TextStyle( 431 | fontSize: 20.0, 432 | fontWeight: FontWeight.bold, 433 | color: Colors.orange), 434 | ), 435 | subtitle: Text(_date(_event.date)), 436 | trailing: IconButton( 437 | icon: _eventBtn(_event), 438 | iconSize: 30.0, 439 | onPressed: () { 440 | if (registeredEvents.containsKey(_event.name)) { 441 | if (registeredEvents[_event.name]) { 442 | if (_event.date.difference(DateTime.now()).inDays <= 2) 443 | displaySnackBar( 444 | context, "Cannot Unregister from " + _event.name); 445 | else { 446 | showUnregisterPrompt(_event, context); 447 | } 448 | } else { 449 | handleEventReg(_event, context); 450 | } 451 | } else { 452 | handleEventReg(_event, context); 453 | } 454 | }, 455 | ), 456 | onTap: () => print(_event), 457 | ), 458 | ), 459 | ), 460 | ); 461 | } else { 462 | return LinearProgressIndicator(); 463 | } 464 | } 465 | } 466 | -------------------------------------------------------------------------------- /lib/screens/login.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:firebase_auth/firebase_auth.dart'; 3 | import 'package:cerebro_flutter/utils/authManagement.dart'; 4 | 5 | class LoginPage extends StatefulWidget { 6 | _LoginPageState createState() => _LoginPageState(); 7 | } 8 | 9 | class _LoginPageState extends State { 10 | @override 11 | initState() { 12 | super.initState(); 13 | } 14 | 15 | Future _handleSignIn() async { 16 | FirebaseUser user = await AuthManager().signIn(); 17 | if (user != null) { 18 | Navigator.of(context).pushReplacementNamed('/events'); 19 | } 20 | } 21 | 22 | @override 23 | Widget build(BuildContext context) { 24 | Orientation currentOrientation = MediaQuery.of(context).orientation; 25 | var iconHeight, _verticalPadding; 26 | if (currentOrientation == Orientation.portrait) { 27 | iconHeight = 150.0; 28 | _verticalPadding = 110.0; 29 | } else { 30 | iconHeight = 120.0; 31 | _verticalPadding = 80.0; 32 | } 33 | return Stack( 34 | children: [ 35 | Container( 36 | padding: EdgeInsets.symmetric( 37 | vertical: _verticalPadding, 38 | horizontal: 50.0, 39 | ), 40 | alignment: Alignment.topCenter, 41 | child: Image( 42 | image: AssetImage('assets/images/fest-logo.png'), 43 | height: iconHeight, 44 | ), 45 | ), 46 | Center( 47 | child: Column( 48 | mainAxisAlignment: MainAxisAlignment.center, 49 | crossAxisAlignment: CrossAxisAlignment.center, 50 | children: [ 51 | OutlineButton( 52 | borderSide: BorderSide(color: Colors.deepOrange), 53 | shape: RoundedRectangleBorder( 54 | borderRadius: BorderRadius.circular(20.0), 55 | ), 56 | child: Text('Login with Google'), 57 | onPressed: () => _handleSignIn(), 58 | ), 59 | ], 60 | ), 61 | ) 62 | ], 63 | ); 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /lib/screens/splash.dart: -------------------------------------------------------------------------------- 1 | import 'package:cerebro_flutter/models/user.dart'; 2 | import 'package:cerebro_flutter/screens/login.dart'; 3 | import 'package:cerebro_flutter/screens/events.dart'; 4 | import 'package:cerebro_flutter/utils/authManagement.dart'; 5 | import 'package:flutter/material.dart'; 6 | import 'package:shared_preferences/shared_preferences.dart'; 7 | import 'package:splashscreen/splashscreen.dart'; 8 | import 'dart:convert'; 9 | 10 | class Splash extends StatefulWidget { 11 | @override 12 | _SplashState createState() => new _SplashState(); 13 | } 14 | 15 | class _SplashState extends State { 16 | final String _kUserPref = "UserPref"; 17 | Widget _routingWidget = LoginPage(); 18 | 19 | Future getSharedPref() async { 20 | final SharedPreferences _localPref = await SharedPreferences.getInstance(); 21 | String userProfile = _localPref.getString(_kUserPref); 22 | // Check if user is already saved in Shared Preference then move to Events Page 23 | // and not to LoginPage 24 | if (userProfile != null) { 25 | print('Already present user: ' + userProfile); 26 | AuthManager().setCurrentUser(User.fromMap(json.decode(userProfile))); 27 | setState(() { 28 | _routingWidget = EventsPage(); 29 | }); 30 | } 31 | } 32 | 33 | @override 34 | void initState() { 35 | super.initState(); 36 | getSharedPref(); 37 | } 38 | 39 | @override 40 | Widget build(BuildContext context) { 41 | return new SplashScreen( 42 | seconds: 4, 43 | navigateAfterSeconds: _routingWidget, 44 | title: Text( 45 | 'Just wait a little longer...', 46 | style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20.0), 47 | ), 48 | image: Image( 49 | image: AssetImage('assets/images/fest-logo.png'), 50 | height: 120, 51 | ), 52 | backgroundColor: Colors.black, 53 | styleTextUnderTheLoader: TextStyle(), 54 | photoSize: 100.0, 55 | onClick: () => print("Clicked Logo"), 56 | loaderColor: Colors.orange); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /lib/utils/authManagement.dart: -------------------------------------------------------------------------------- 1 | import 'package:firebase_auth/firebase_auth.dart'; 2 | import 'package:google_sign_in/google_sign_in.dart'; 3 | import 'package:cerebro_flutter/models/user.dart'; 4 | import 'package:shared_preferences/shared_preferences.dart'; 5 | import 'dart:convert'; 6 | import 'dart:async'; 7 | 8 | // Auth Manager class for managing authentication function 9 | class AuthManager { 10 | static FirebaseAuth _auth = FirebaseAuth.instance; 11 | static GoogleSignIn _googleSignIn = GoogleSignIn(); 12 | static String _kUserPref = "UserPref"; 13 | // Static user so that single copy exists among all instances 14 | static User _curUser; 15 | 16 | Future signIn() async { 17 | GoogleSignInAccount googleUser = await _googleSignIn.signIn(); 18 | GoogleSignInAuthentication googleAuth = await googleUser.authentication; 19 | FirebaseUser user = await _auth.signInWithGoogle( 20 | accessToken: googleAuth.accessToken, 21 | idToken: googleAuth.idToken, 22 | ); 23 | print("signed in " + user.displayName); 24 | assert(user != null); 25 | User _loggedInUser = User.fromFirebaseUser(user); 26 | print(_loggedInUser.toString()); 27 | _curUser = _loggedInUser; 28 | 29 | SharedPreferences pref = await SharedPreferences.getInstance(); 30 | final response = await pref 31 | .setString(_kUserPref, json.encode(_loggedInUser.toJson())) 32 | .then((_) { 33 | print('Shared Preference saved'); 34 | return user; 35 | }).catchError((_) { 36 | print('Unable to save to sharedPreference'); 37 | return null; 38 | }); 39 | 40 | return response; 41 | } 42 | 43 | Future signOut() async { 44 | SharedPreferences pref = await SharedPreferences.getInstance(); 45 | pref.remove(_kUserPref); 46 | print('User removed'); 47 | _curUser = null; 48 | return _auth.signOut(); 49 | } 50 | 51 | User getCurrentUser() { 52 | return _curUser; 53 | } 54 | 55 | void setCurrentUser(User curUser) { 56 | _curUser = curUser; 57 | } 58 | 59 | } 60 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: cerebro_flutter 2 | description: Native app for Cerebro IIITV 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 | # Read more about versioning at semver.org. 10 | version: 1.0.0+1 11 | 12 | environment: 13 | sdk: ">=2.0.0-dev.68.0 <3.0.0" 14 | 15 | dependencies: 16 | flutter: 17 | sdk: flutter 18 | cloud_firestore: ^0.8.2 19 | splashscreen: 20 | firebase_database: 21 | intl: ^0.15.7 22 | firebase_auth: 23 | firebase_core: 24 | google_sign_in: 25 | shared_preferences: 26 | cached_network_image: 27 | 28 | # The following adds the Cupertino Icons font to your application. 29 | # Use with the CupertinoIcons class for iOS style icons. 30 | cupertino_icons: ^0.1.2 31 | 32 | dev_dependencies: 33 | flutter_test: 34 | sdk: flutter 35 | 36 | flutter_icons: 37 | image_path: "assets/images/icon.png" 38 | android: true 39 | ios: true 40 | 41 | # For information on the generic Dart part of this file, see the 42 | # following page: https://www.dartlang.org/tools/pub/pubspec 43 | 44 | # The following section is specific to Flutter. 45 | flutter: 46 | 47 | # The following line ensures that the Material Icons font is 48 | # included with your application, so that you can use the icons in 49 | # the material Icons class. 50 | uses-material-design: true 51 | 52 | # To add assets to your application, add an assets section, like this: 53 | # assets: 54 | # - images/a_dot_burr.jpeg 55 | # - images/a_dot_ham.jpeg 56 | 57 | assets: 58 | - assets/images/fest-logo.png 59 | - assets/images/icon.png 60 | 61 | # An image asset can refer to one or more resolution-specific "variants", see 62 | # https://flutter.io/assets-and-images/#resolution-aware. 63 | 64 | # For details regarding adding assets from package dependencies, see 65 | # https://flutter.io/assets-and-images/#from-packages 66 | 67 | # To add custom fonts to your application, add a fonts section here, 68 | # in this "flutter" section. Each entry in this list should have a 69 | # "family" key with the font family name, and a "fonts" key with a 70 | # list giving the asset and other descriptors for the font. For 71 | # example: 72 | # fonts: 73 | # - family: Schyler 74 | # fonts: 75 | # - asset: fonts/Schyler-Regular.ttf 76 | # - asset: fonts/Schyler-Italic.ttf 77 | # style: italic 78 | # - family: Trajan Pro 79 | # fonts: 80 | # - asset: fonts/TrajanPro.ttf 81 | # - asset: fonts/TrajanPro_Bold.ttf 82 | # weight: 700 83 | # 84 | # For details regarding fonts from package dependencies, 85 | # see https://flutter.io/custom-fonts/#from-packages 86 | -------------------------------------------------------------------------------- /test/sample_test.dart: -------------------------------------------------------------------------------- 1 | // This is a basic Flutter widget test. 2 | // 3 | // To perform an interaction with a widget in your test, use the WidgetTester 4 | // utility that Flutter provides. For example, you can send tap and scroll 5 | // gestures. You can also use WidgetTester to find child widgets in the widget 6 | // tree, read text, and verify that the values of widget properties are correct. 7 | 8 | import 'package:flutter_test/flutter_test.dart'; 9 | 10 | void main() { 11 | test('sample_test', () async { 12 | var answer = 20; 13 | expect(answer, 20); 14 | }); 15 | } 16 | --------------------------------------------------------------------------------