├── .gitignore ├── .metadata ├── README.md ├── android ├── .gitignore ├── app │ ├── build.gradle │ ├── google-services.json │ └── src │ │ ├── debug │ │ └── AndroidManifest.xml │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── kotlin │ │ │ └── com │ │ │ │ └── devsnik │ │ │ │ └── profile │ │ │ │ └── MainActivity.kt │ │ └── 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 ├── avtar1.png ├── avtar2.png ├── avtar3.png ├── avtar4.png ├── avtar5.png ├── nav_contact.svg ├── nav_group.svg ├── nav_home.svg ├── nav_portfolio.svg └── nav_time.svg ├── ios ├── .gitignore ├── Flutter │ ├── AppFrameworkInfo.plist │ ├── Debug.xcconfig │ └── Release.xcconfig ├── Podfile ├── Runner.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ └── WorkspaceSettings.xcsettings │ └── xcshareddata │ │ └── xcschemes │ │ └── Runner.xcscheme ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── IDEWorkspaceChecks.plist │ │ └── WorkspaceSettings.xcsettings └── Runner │ ├── AppDelegate.swift │ ├── 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 │ └── Runner-Bridging-Header.h ├── lib ├── controller │ └── firebase_controller.dart ├── main.dart ├── pages │ ├── contact_page.dart │ ├── experience_page.dart │ ├── home_page.dart │ ├── portfolio_page.dart │ └── team_page.dart ├── utils │ ├── AppColors.dart │ ├── AppIcons.dart │ ├── common_string.dart │ └── text_style.dart └── widgets │ ├── app_image_widget.dart │ ├── app_shimmer_effect.dart │ ├── navigation_menu_widget.dart │ └── svg_loader.dart ├── pubspec.lock ├── pubspec.yaml ├── test └── widget_test.dart └── web ├── favicon.png ├── icons ├── Icon-192.png └── Icon-512.png ├── index.html └── manifest.json /.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 | .flutter-plugins-dependencies 28 | .packages 29 | .pub-cache/ 30 | .pub/ 31 | /build/ 32 | 33 | # Web related 34 | lib/generated_plugin_registrant.dart 35 | 36 | # Symbolication related 37 | app.*.symbols 38 | 39 | # Obfuscation related 40 | app.*.map.json 41 | 42 | # Exceptions to above rules. 43 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages 44 | -------------------------------------------------------------------------------- /.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: e6b34c2b5c96bb95325269a29a84e83ed8909b5f 8 | channel: beta 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Flutter App - CV Portfolio App - Flutter UI 2 | 3 | ## [Watch it on YouTube Part:1](https://youtu.be/cd-RzMCVqzA) 4 | 5 | ## [Watch it on YouTube Part:2](https://youtu.be/ba54zrWNSTw) 6 | 7 | -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | -------------------------------------------------------------------------------- /android/app/build.gradle: -------------------------------------------------------------------------------- 1 | def localProperties = new Properties() 2 | def localPropertiesFile = rootProject.file('local.properties') 3 | if (localPropertiesFile.exists()) { 4 | localPropertiesFile.withReader('UTF-8') { reader -> 5 | localProperties.load(reader) 6 | } 7 | } 8 | 9 | def flutterRoot = localProperties.getProperty('flutter.sdk') 10 | if (flutterRoot == null) { 11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") 12 | } 13 | 14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode') 15 | if (flutterVersionCode == null) { 16 | flutterVersionCode = '1' 17 | } 18 | 19 | def flutterVersionName = localProperties.getProperty('flutter.versionName') 20 | if (flutterVersionName == null) { 21 | flutterVersionName = '1.0' 22 | } 23 | 24 | apply plugin: 'com.android.application' 25 | apply plugin: 'kotlin-android' 26 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 27 | apply plugin: 'com.google.gms.google-services' //this line 28 | 29 | android { 30 | compileSdkVersion 28 31 | 32 | sourceSets { 33 | main.java.srcDirs += 'src/main/kotlin' 34 | } 35 | 36 | lintOptions { 37 | disable 'InvalidPackage' 38 | } 39 | 40 | defaultConfig { 41 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 42 | applicationId "com.devsnik.profile" 43 | minSdkVersion 16 44 | targetSdkVersion 28 45 | versionCode flutterVersionCode.toInteger() 46 | versionName flutterVersionName 47 | } 48 | 49 | buildTypes { 50 | release { 51 | // TODO: Add your own signing config for the release build. 52 | // Signing with the debug keys for now, so `flutter run --release` works. 53 | signingConfig signingConfigs.debug 54 | } 55 | } 56 | } 57 | 58 | flutter { 59 | source '../..' 60 | } 61 | 62 | dependencies { 63 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 64 | implementation platform('com.google.firebase:firebase-bom:28.2.0') 65 | implementation 'com.google.firebase:firebase-analytics' 66 | } 67 | -------------------------------------------------------------------------------- /android/app/google-services.json: -------------------------------------------------------------------------------- 1 | { 2 | "project_info": { 3 | "project_number": "307546348166", 4 | "firebase_url": "https://live-on-play-store.firebaseio.com", 5 | "project_id": "live-on-play-store", 6 | "storage_bucket": "live-on-play-store.appspot.com" 7 | }, 8 | "client": [ 9 | { 10 | "client_info": { 11 | "mobilesdk_app_id": "1:307546348166:android:34807e68f527bfef7fcf07", 12 | "android_client_info": { 13 | "package_name": "com.devsnik.bhakti" 14 | } 15 | }, 16 | "oauth_client": [ 17 | { 18 | "client_id": "307546348166-qiguhrbhpqae6od9jjicg8ghrrhv714j.apps.googleusercontent.com", 19 | "client_type": 1, 20 | "android_info": { 21 | "package_name": "com.devsnik.bhakti", 22 | "certificate_hash": "584c381853a4b19062b5d2003d2817d4a687b636" 23 | } 24 | }, 25 | { 26 | "client_id": "307546348166-b9i0nepqrsu02oaobvb5biljj4ddv5eu.apps.googleusercontent.com", 27 | "client_type": 3 28 | } 29 | ], 30 | "api_key": [ 31 | { 32 | "current_key": "AIzaSyDMrLVCwQeBJ6ljnGSVZxcU1BinecmqCqo" 33 | } 34 | ], 35 | "services": { 36 | "appinvite_service": { 37 | "other_platform_oauth_client": [ 38 | { 39 | "client_id": "307546348166-b9i0nepqrsu02oaobvb5biljj4ddv5eu.apps.googleusercontent.com", 40 | "client_type": 3 41 | } 42 | ] 43 | } 44 | } 45 | }, 46 | { 47 | "client_info": { 48 | "mobilesdk_app_id": "1:307546348166:android:c2e4944a2f06559b7fcf07", 49 | "android_client_info": { 50 | "package_name": "com.devsnik.profile" 51 | } 52 | }, 53 | "oauth_client": [ 54 | { 55 | "client_id": "307546348166-b9i0nepqrsu02oaobvb5biljj4ddv5eu.apps.googleusercontent.com", 56 | "client_type": 3 57 | } 58 | ], 59 | "api_key": [ 60 | { 61 | "current_key": "AIzaSyDMrLVCwQeBJ6ljnGSVZxcU1BinecmqCqo" 62 | } 63 | ], 64 | "services": { 65 | "appinvite_service": { 66 | "other_platform_oauth_client": [ 67 | { 68 | "client_id": "307546348166-b9i0nepqrsu02oaobvb5biljj4ddv5eu.apps.googleusercontent.com", 69 | "client_type": 3 70 | } 71 | ] 72 | } 73 | } 74 | }, 75 | { 76 | "client_info": { 77 | "mobilesdk_app_id": "1:307546348166:android:bf0a689a821e94a97fcf07", 78 | "android_client_info": { 79 | "package_name": "com.videodownloader.whatsappstatus" 80 | } 81 | }, 82 | "oauth_client": [ 83 | { 84 | "client_id": "307546348166-b9i0nepqrsu02oaobvb5biljj4ddv5eu.apps.googleusercontent.com", 85 | "client_type": 3 86 | } 87 | ], 88 | "api_key": [ 89 | { 90 | "current_key": "AIzaSyDMrLVCwQeBJ6ljnGSVZxcU1BinecmqCqo" 91 | } 92 | ], 93 | "services": { 94 | "appinvite_service": { 95 | "other_platform_oauth_client": [ 96 | { 97 | "client_id": "307546348166-b9i0nepqrsu02oaobvb5biljj4ddv5eu.apps.googleusercontent.com", 98 | "client_type": 3 99 | } 100 | ] 101 | } 102 | } 103 | } 104 | ], 105 | "configuration_version": "1" 106 | } -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 8 | 12 | 19 | 23 | 27 | 32 | 36 | 37 | 38 | 39 | 40 | 41 | 43 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /android/app/src/main/kotlin/com/devsnik/profile/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.devsnik.profile 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: 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/ravi84184/Build-an-CV-Portfolio-Minimal-App-Flutter-Tutorial/d64acde1b8bfef6f6384c5230200f00253bf7d1e/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ravi84184/Build-an-CV-Portfolio-Minimal-App-Flutter-Tutorial/d64acde1b8bfef6f6384c5230200f00253bf7d1e/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ravi84184/Build-an-CV-Portfolio-Minimal-App-Flutter-Tutorial/d64acde1b8bfef6f6384c5230200f00253bf7d1e/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ravi84184/Build-an-CV-Portfolio-Minimal-App-Flutter-Tutorial/d64acde1b8bfef6f6384c5230200f00253bf7d1e/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ravi84184/Build-an-CV-Portfolio-Minimal-App-Flutter-Tutorial/d64acde1b8bfef6f6384c5230200f00253bf7d1e/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.3.50' 3 | repositories { 4 | google() 5 | jcenter() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:3.5.0' 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | classpath 'com.google.gms:google-services:4.3.3' 12 | } 13 | } 14 | 15 | allprojects { 16 | repositories { 17 | google() 18 | jcenter() 19 | } 20 | } 21 | 22 | rootProject.buildDir = '../build' 23 | subprojects { 24 | project.buildDir = "${rootProject.buildDir}/${project.name}" 25 | } 26 | subprojects { 27 | project.evaluationDependsOn(':app') 28 | } 29 | 30 | task clean(type: Delete) { 31 | delete rootProject.buildDir 32 | } 33 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.enableR8=true 3 | android.useAndroidX=true 4 | android.enableJetifier=true 5 | -------------------------------------------------------------------------------- /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.6.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/avtar1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ravi84184/Build-an-CV-Portfolio-Minimal-App-Flutter-Tutorial/d64acde1b8bfef6f6384c5230200f00253bf7d1e/assets/avtar1.png -------------------------------------------------------------------------------- /assets/avtar2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ravi84184/Build-an-CV-Portfolio-Minimal-App-Flutter-Tutorial/d64acde1b8bfef6f6384c5230200f00253bf7d1e/assets/avtar2.png -------------------------------------------------------------------------------- /assets/avtar3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ravi84184/Build-an-CV-Portfolio-Minimal-App-Flutter-Tutorial/d64acde1b8bfef6f6384c5230200f00253bf7d1e/assets/avtar3.png -------------------------------------------------------------------------------- /assets/avtar4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ravi84184/Build-an-CV-Portfolio-Minimal-App-Flutter-Tutorial/d64acde1b8bfef6f6384c5230200f00253bf7d1e/assets/avtar4.png -------------------------------------------------------------------------------- /assets/avtar5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ravi84184/Build-an-CV-Portfolio-Minimal-App-Flutter-Tutorial/d64acde1b8bfef6f6384c5230200f00253bf7d1e/assets/avtar5.png -------------------------------------------------------------------------------- /assets/nav_contact.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 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 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /assets/nav_group.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 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 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /assets/nav_home.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 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 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /assets/nav_portfolio.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/nav_time.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ios/.gitignore: -------------------------------------------------------------------------------- 1 | *.mode1v3 2 | *.mode2v3 3 | *.moved-aside 4 | *.pbxuser 5 | *.perspectivev3 6 | **/*sync/ 7 | .sconsign.dblite 8 | .tags* 9 | **/.vagrant/ 10 | **/DerivedData/ 11 | Icon? 12 | **/Pods/ 13 | **/.symlinks/ 14 | profile 15 | xcuserdata 16 | **/.generated/ 17 | Flutter/App.framework 18 | Flutter/Flutter.framework 19 | Flutter/Flutter.podspec 20 | Flutter/Generated.xcconfig 21 | Flutter/app.flx 22 | Flutter/app.zip 23 | Flutter/flutter_assets/ 24 | Flutter/flutter_export_environment.sh 25 | ServiceDefinitions.json 26 | Runner/GeneratedPluginRegistrant.* 27 | 28 | # Exceptions to above rules. 29 | !default.mode1v3 30 | !default.mode2v3 31 | !default.pbxuser 32 | !default.perspectivev3 33 | -------------------------------------------------------------------------------- /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, '9.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 | use_frameworks! 32 | use_modular_headers! 33 | 34 | flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) 35 | end 36 | 37 | post_install do |installer| 38 | installer.pods_project.targets.each do |target| 39 | flutter_additional_ios_build_settings(target) 40 | end 41 | end 42 | -------------------------------------------------------------------------------- /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 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 12 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 13 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 14 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 15 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 16 | /* End PBXBuildFile section */ 17 | 18 | /* Begin PBXCopyFilesBuildPhase section */ 19 | 9705A1C41CF9048500538489 /* Embed Frameworks */ = { 20 | isa = PBXCopyFilesBuildPhase; 21 | buildActionMask = 2147483647; 22 | dstPath = ""; 23 | dstSubfolderSpec = 10; 24 | files = ( 25 | ); 26 | name = "Embed Frameworks"; 27 | runOnlyForDeploymentPostprocessing = 0; 28 | }; 29 | /* End PBXCopyFilesBuildPhase section */ 30 | 31 | /* Begin PBXFileReference section */ 32 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 33 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 34 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 35 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 36 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 37 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 38 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 39 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 40 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 41 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 42 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 43 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 44 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 45 | /* End PBXFileReference section */ 46 | 47 | /* Begin PBXFrameworksBuildPhase section */ 48 | 97C146EB1CF9000F007C117D /* Frameworks */ = { 49 | isa = PBXFrameworksBuildPhase; 50 | buildActionMask = 2147483647; 51 | files = ( 52 | ); 53 | runOnlyForDeploymentPostprocessing = 0; 54 | }; 55 | /* End PBXFrameworksBuildPhase section */ 56 | 57 | /* Begin PBXGroup section */ 58 | 9740EEB11CF90186004384FC /* Flutter */ = { 59 | isa = PBXGroup; 60 | children = ( 61 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, 62 | 9740EEB21CF90195004384FC /* Debug.xcconfig */, 63 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 64 | 9740EEB31CF90195004384FC /* Generated.xcconfig */, 65 | ); 66 | name = Flutter; 67 | sourceTree = ""; 68 | }; 69 | 97C146E51CF9000F007C117D = { 70 | isa = PBXGroup; 71 | children = ( 72 | 9740EEB11CF90186004384FC /* Flutter */, 73 | 97C146F01CF9000F007C117D /* Runner */, 74 | 97C146EF1CF9000F007C117D /* Products */, 75 | ); 76 | sourceTree = ""; 77 | }; 78 | 97C146EF1CF9000F007C117D /* Products */ = { 79 | isa = PBXGroup; 80 | children = ( 81 | 97C146EE1CF9000F007C117D /* Runner.app */, 82 | ); 83 | name = Products; 84 | sourceTree = ""; 85 | }; 86 | 97C146F01CF9000F007C117D /* Runner */ = { 87 | isa = PBXGroup; 88 | children = ( 89 | 97C146FA1CF9000F007C117D /* Main.storyboard */, 90 | 97C146FD1CF9000F007C117D /* Assets.xcassets */, 91 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 92 | 97C147021CF9000F007C117D /* Info.plist */, 93 | 97C146F11CF9000F007C117D /* Supporting Files */, 94 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 95 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 96 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, 97 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, 98 | ); 99 | path = Runner; 100 | sourceTree = ""; 101 | }; 102 | 97C146F11CF9000F007C117D /* Supporting Files */ = { 103 | isa = PBXGroup; 104 | children = ( 105 | ); 106 | name = "Supporting Files"; 107 | sourceTree = ""; 108 | }; 109 | /* End PBXGroup section */ 110 | 111 | /* Begin PBXNativeTarget section */ 112 | 97C146ED1CF9000F007C117D /* Runner */ = { 113 | isa = PBXNativeTarget; 114 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; 115 | buildPhases = ( 116 | 9740EEB61CF901F6004384FC /* Run Script */, 117 | 97C146EA1CF9000F007C117D /* Sources */, 118 | 97C146EB1CF9000F007C117D /* Frameworks */, 119 | 97C146EC1CF9000F007C117D /* Resources */, 120 | 9705A1C41CF9048500538489 /* Embed Frameworks */, 121 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */, 122 | ); 123 | buildRules = ( 124 | ); 125 | dependencies = ( 126 | ); 127 | name = Runner; 128 | productName = Runner; 129 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */; 130 | productType = "com.apple.product-type.application"; 131 | }; 132 | /* End PBXNativeTarget section */ 133 | 134 | /* Begin PBXProject section */ 135 | 97C146E61CF9000F007C117D /* Project object */ = { 136 | isa = PBXProject; 137 | attributes = { 138 | LastUpgradeCheck = 1020; 139 | ORGANIZATIONNAME = ""; 140 | TargetAttributes = { 141 | 97C146ED1CF9000F007C117D = { 142 | CreatedOnToolsVersion = 7.3.1; 143 | LastSwiftMigration = 1100; 144 | }; 145 | }; 146 | }; 147 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; 148 | compatibilityVersion = "Xcode 9.3"; 149 | developmentRegion = en; 150 | hasScannedForEncodings = 0; 151 | knownRegions = ( 152 | en, 153 | Base, 154 | ); 155 | mainGroup = 97C146E51CF9000F007C117D; 156 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */; 157 | projectDirPath = ""; 158 | projectRoot = ""; 159 | targets = ( 160 | 97C146ED1CF9000F007C117D /* Runner */, 161 | ); 162 | }; 163 | /* End PBXProject section */ 164 | 165 | /* Begin PBXResourcesBuildPhase section */ 166 | 97C146EC1CF9000F007C117D /* Resources */ = { 167 | isa = PBXResourcesBuildPhase; 168 | buildActionMask = 2147483647; 169 | files = ( 170 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 171 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, 172 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 173 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, 174 | ); 175 | runOnlyForDeploymentPostprocessing = 0; 176 | }; 177 | /* End PBXResourcesBuildPhase section */ 178 | 179 | /* Begin PBXShellScriptBuildPhase section */ 180 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { 181 | isa = PBXShellScriptBuildPhase; 182 | buildActionMask = 2147483647; 183 | files = ( 184 | ); 185 | inputPaths = ( 186 | ); 187 | name = "Thin Binary"; 188 | outputPaths = ( 189 | ); 190 | runOnlyForDeploymentPostprocessing = 0; 191 | shellPath = /bin/sh; 192 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; 193 | }; 194 | 9740EEB61CF901F6004384FC /* Run Script */ = { 195 | isa = PBXShellScriptBuildPhase; 196 | buildActionMask = 2147483647; 197 | files = ( 198 | ); 199 | inputPaths = ( 200 | ); 201 | name = "Run Script"; 202 | outputPaths = ( 203 | ); 204 | runOnlyForDeploymentPostprocessing = 0; 205 | shellPath = /bin/sh; 206 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; 207 | }; 208 | /* End PBXShellScriptBuildPhase section */ 209 | 210 | /* Begin PBXSourcesBuildPhase section */ 211 | 97C146EA1CF9000F007C117D /* Sources */ = { 212 | isa = PBXSourcesBuildPhase; 213 | buildActionMask = 2147483647; 214 | files = ( 215 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, 216 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, 217 | ); 218 | runOnlyForDeploymentPostprocessing = 0; 219 | }; 220 | /* End PBXSourcesBuildPhase section */ 221 | 222 | /* Begin PBXVariantGroup section */ 223 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = { 224 | isa = PBXVariantGroup; 225 | children = ( 226 | 97C146FB1CF9000F007C117D /* Base */, 227 | ); 228 | name = Main.storyboard; 229 | sourceTree = ""; 230 | }; 231 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { 232 | isa = PBXVariantGroup; 233 | children = ( 234 | 97C147001CF9000F007C117D /* Base */, 235 | ); 236 | name = LaunchScreen.storyboard; 237 | sourceTree = ""; 238 | }; 239 | /* End PBXVariantGroup section */ 240 | 241 | /* Begin XCBuildConfiguration section */ 242 | 249021D3217E4FDB00AE95B9 /* Profile */ = { 243 | isa = XCBuildConfiguration; 244 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 245 | buildSettings = { 246 | ALWAYS_SEARCH_USER_PATHS = NO; 247 | CLANG_ANALYZER_NONNULL = YES; 248 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 249 | CLANG_CXX_LIBRARY = "libc++"; 250 | CLANG_ENABLE_MODULES = YES; 251 | CLANG_ENABLE_OBJC_ARC = YES; 252 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 253 | CLANG_WARN_BOOL_CONVERSION = YES; 254 | CLANG_WARN_COMMA = YES; 255 | CLANG_WARN_CONSTANT_CONVERSION = YES; 256 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 257 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 258 | CLANG_WARN_EMPTY_BODY = YES; 259 | CLANG_WARN_ENUM_CONVERSION = YES; 260 | CLANG_WARN_INFINITE_RECURSION = YES; 261 | CLANG_WARN_INT_CONVERSION = YES; 262 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 263 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 264 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 265 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 266 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 267 | CLANG_WARN_STRICT_PROTOTYPES = YES; 268 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 269 | CLANG_WARN_UNREACHABLE_CODE = YES; 270 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 271 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 272 | COPY_PHASE_STRIP = NO; 273 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 274 | ENABLE_NS_ASSERTIONS = NO; 275 | ENABLE_STRICT_OBJC_MSGSEND = YES; 276 | GCC_C_LANGUAGE_STANDARD = gnu99; 277 | GCC_NO_COMMON_BLOCKS = YES; 278 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 279 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 280 | GCC_WARN_UNDECLARED_SELECTOR = YES; 281 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 282 | GCC_WARN_UNUSED_FUNCTION = YES; 283 | GCC_WARN_UNUSED_VARIABLE = YES; 284 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 285 | MTL_ENABLE_DEBUG_INFO = NO; 286 | SDKROOT = iphoneos; 287 | SUPPORTED_PLATFORMS = iphoneos; 288 | TARGETED_DEVICE_FAMILY = "1,2"; 289 | VALIDATE_PRODUCT = YES; 290 | }; 291 | name = Profile; 292 | }; 293 | 249021D4217E4FDB00AE95B9 /* Profile */ = { 294 | isa = XCBuildConfiguration; 295 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 296 | buildSettings = { 297 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 298 | CLANG_ENABLE_MODULES = YES; 299 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 300 | ENABLE_BITCODE = NO; 301 | FRAMEWORK_SEARCH_PATHS = ( 302 | "$(inherited)", 303 | "$(PROJECT_DIR)/Flutter", 304 | ); 305 | INFOPLIST_FILE = Runner/Info.plist; 306 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 307 | LIBRARY_SEARCH_PATHS = ( 308 | "$(inherited)", 309 | "$(PROJECT_DIR)/Flutter", 310 | ); 311 | PRODUCT_BUNDLE_IDENTIFIER = com.devsnik.profile; 312 | PRODUCT_NAME = "$(TARGET_NAME)"; 313 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 314 | SWIFT_VERSION = 5.0; 315 | VERSIONING_SYSTEM = "apple-generic"; 316 | }; 317 | name = Profile; 318 | }; 319 | 97C147031CF9000F007C117D /* Debug */ = { 320 | isa = XCBuildConfiguration; 321 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 322 | buildSettings = { 323 | ALWAYS_SEARCH_USER_PATHS = NO; 324 | CLANG_ANALYZER_NONNULL = YES; 325 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 326 | CLANG_CXX_LIBRARY = "libc++"; 327 | CLANG_ENABLE_MODULES = YES; 328 | CLANG_ENABLE_OBJC_ARC = YES; 329 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 330 | CLANG_WARN_BOOL_CONVERSION = YES; 331 | CLANG_WARN_COMMA = YES; 332 | CLANG_WARN_CONSTANT_CONVERSION = YES; 333 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 334 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 335 | CLANG_WARN_EMPTY_BODY = YES; 336 | CLANG_WARN_ENUM_CONVERSION = YES; 337 | CLANG_WARN_INFINITE_RECURSION = YES; 338 | CLANG_WARN_INT_CONVERSION = YES; 339 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 340 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 341 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 342 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 343 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 344 | CLANG_WARN_STRICT_PROTOTYPES = YES; 345 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 346 | CLANG_WARN_UNREACHABLE_CODE = YES; 347 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 348 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 349 | COPY_PHASE_STRIP = NO; 350 | DEBUG_INFORMATION_FORMAT = dwarf; 351 | ENABLE_STRICT_OBJC_MSGSEND = YES; 352 | ENABLE_TESTABILITY = YES; 353 | GCC_C_LANGUAGE_STANDARD = gnu99; 354 | GCC_DYNAMIC_NO_PIC = NO; 355 | GCC_NO_COMMON_BLOCKS = YES; 356 | GCC_OPTIMIZATION_LEVEL = 0; 357 | GCC_PREPROCESSOR_DEFINITIONS = ( 358 | "DEBUG=1", 359 | "$(inherited)", 360 | ); 361 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 362 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 363 | GCC_WARN_UNDECLARED_SELECTOR = YES; 364 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 365 | GCC_WARN_UNUSED_FUNCTION = YES; 366 | GCC_WARN_UNUSED_VARIABLE = YES; 367 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 368 | MTL_ENABLE_DEBUG_INFO = YES; 369 | ONLY_ACTIVE_ARCH = YES; 370 | SDKROOT = iphoneos; 371 | TARGETED_DEVICE_FAMILY = "1,2"; 372 | }; 373 | name = Debug; 374 | }; 375 | 97C147041CF9000F007C117D /* Release */ = { 376 | isa = XCBuildConfiguration; 377 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 378 | buildSettings = { 379 | ALWAYS_SEARCH_USER_PATHS = NO; 380 | CLANG_ANALYZER_NONNULL = YES; 381 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 382 | CLANG_CXX_LIBRARY = "libc++"; 383 | CLANG_ENABLE_MODULES = YES; 384 | CLANG_ENABLE_OBJC_ARC = YES; 385 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 386 | CLANG_WARN_BOOL_CONVERSION = YES; 387 | CLANG_WARN_COMMA = YES; 388 | CLANG_WARN_CONSTANT_CONVERSION = YES; 389 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 390 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 391 | CLANG_WARN_EMPTY_BODY = YES; 392 | CLANG_WARN_ENUM_CONVERSION = YES; 393 | CLANG_WARN_INFINITE_RECURSION = YES; 394 | CLANG_WARN_INT_CONVERSION = YES; 395 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 396 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 397 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 398 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 399 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 400 | CLANG_WARN_STRICT_PROTOTYPES = YES; 401 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 402 | CLANG_WARN_UNREACHABLE_CODE = YES; 403 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 404 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 405 | COPY_PHASE_STRIP = NO; 406 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 407 | ENABLE_NS_ASSERTIONS = NO; 408 | ENABLE_STRICT_OBJC_MSGSEND = YES; 409 | GCC_C_LANGUAGE_STANDARD = gnu99; 410 | GCC_NO_COMMON_BLOCKS = YES; 411 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 412 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 413 | GCC_WARN_UNDECLARED_SELECTOR = YES; 414 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 415 | GCC_WARN_UNUSED_FUNCTION = YES; 416 | GCC_WARN_UNUSED_VARIABLE = YES; 417 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 418 | MTL_ENABLE_DEBUG_INFO = NO; 419 | SDKROOT = iphoneos; 420 | SUPPORTED_PLATFORMS = iphoneos; 421 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 422 | TARGETED_DEVICE_FAMILY = "1,2"; 423 | VALIDATE_PRODUCT = YES; 424 | }; 425 | name = Release; 426 | }; 427 | 97C147061CF9000F007C117D /* Debug */ = { 428 | isa = XCBuildConfiguration; 429 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 430 | buildSettings = { 431 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 432 | CLANG_ENABLE_MODULES = YES; 433 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 434 | ENABLE_BITCODE = NO; 435 | FRAMEWORK_SEARCH_PATHS = ( 436 | "$(inherited)", 437 | "$(PROJECT_DIR)/Flutter", 438 | ); 439 | INFOPLIST_FILE = Runner/Info.plist; 440 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 441 | LIBRARY_SEARCH_PATHS = ( 442 | "$(inherited)", 443 | "$(PROJECT_DIR)/Flutter", 444 | ); 445 | PRODUCT_BUNDLE_IDENTIFIER = com.devsnik.profile; 446 | PRODUCT_NAME = "$(TARGET_NAME)"; 447 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 448 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 449 | SWIFT_VERSION = 5.0; 450 | VERSIONING_SYSTEM = "apple-generic"; 451 | }; 452 | name = Debug; 453 | }; 454 | 97C147071CF9000F007C117D /* Release */ = { 455 | isa = XCBuildConfiguration; 456 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 457 | buildSettings = { 458 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 459 | CLANG_ENABLE_MODULES = YES; 460 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 461 | ENABLE_BITCODE = NO; 462 | FRAMEWORK_SEARCH_PATHS = ( 463 | "$(inherited)", 464 | "$(PROJECT_DIR)/Flutter", 465 | ); 466 | INFOPLIST_FILE = Runner/Info.plist; 467 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 468 | LIBRARY_SEARCH_PATHS = ( 469 | "$(inherited)", 470 | "$(PROJECT_DIR)/Flutter", 471 | ); 472 | PRODUCT_BUNDLE_IDENTIFIER = com.devsnik.profile; 473 | PRODUCT_NAME = "$(TARGET_NAME)"; 474 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 475 | SWIFT_VERSION = 5.0; 476 | VERSIONING_SYSTEM = "apple-generic"; 477 | }; 478 | name = Release; 479 | }; 480 | /* End XCBuildConfiguration section */ 481 | 482 | /* Begin XCConfigurationList section */ 483 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { 484 | isa = XCConfigurationList; 485 | buildConfigurations = ( 486 | 97C147031CF9000F007C117D /* Debug */, 487 | 97C147041CF9000F007C117D /* Release */, 488 | 249021D3217E4FDB00AE95B9 /* Profile */, 489 | ); 490 | defaultConfigurationIsVisible = 0; 491 | defaultConfigurationName = Release; 492 | }; 493 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { 494 | isa = XCConfigurationList; 495 | buildConfigurations = ( 496 | 97C147061CF9000F007C117D /* Debug */, 497 | 97C147071CF9000F007C117D /* Release */, 498 | 249021D4217E4FDB00AE95B9 /* Profile */, 499 | ); 500 | defaultConfigurationIsVisible = 0; 501 | defaultConfigurationName = Release; 502 | }; 503 | /* End XCConfigurationList section */ 504 | }; 505 | rootObject = 97C146E61CF9000F007C117D /* Project object */; 506 | } 507 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/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 | 8 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Flutter 3 | 4 | @UIApplicationMain 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /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/ravi84184/Build-an-CV-Portfolio-Minimal-App-Flutter-Tutorial/d64acde1b8bfef6f6384c5230200f00253bf7d1e/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/ravi84184/Build-an-CV-Portfolio-Minimal-App-Flutter-Tutorial/d64acde1b8bfef6f6384c5230200f00253bf7d1e/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/ravi84184/Build-an-CV-Portfolio-Minimal-App-Flutter-Tutorial/d64acde1b8bfef6f6384c5230200f00253bf7d1e/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/ravi84184/Build-an-CV-Portfolio-Minimal-App-Flutter-Tutorial/d64acde1b8bfef6f6384c5230200f00253bf7d1e/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/ravi84184/Build-an-CV-Portfolio-Minimal-App-Flutter-Tutorial/d64acde1b8bfef6f6384c5230200f00253bf7d1e/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/ravi84184/Build-an-CV-Portfolio-Minimal-App-Flutter-Tutorial/d64acde1b8bfef6f6384c5230200f00253bf7d1e/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/ravi84184/Build-an-CV-Portfolio-Minimal-App-Flutter-Tutorial/d64acde1b8bfef6f6384c5230200f00253bf7d1e/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/ravi84184/Build-an-CV-Portfolio-Minimal-App-Flutter-Tutorial/d64acde1b8bfef6f6384c5230200f00253bf7d1e/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/ravi84184/Build-an-CV-Portfolio-Minimal-App-Flutter-Tutorial/d64acde1b8bfef6f6384c5230200f00253bf7d1e/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/ravi84184/Build-an-CV-Portfolio-Minimal-App-Flutter-Tutorial/d64acde1b8bfef6f6384c5230200f00253bf7d1e/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/ravi84184/Build-an-CV-Portfolio-Minimal-App-Flutter-Tutorial/d64acde1b8bfef6f6384c5230200f00253bf7d1e/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/ravi84184/Build-an-CV-Portfolio-Minimal-App-Flutter-Tutorial/d64acde1b8bfef6f6384c5230200f00253bf7d1e/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/ravi84184/Build-an-CV-Portfolio-Minimal-App-Flutter-Tutorial/d64acde1b8bfef6f6384c5230200f00253bf7d1e/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/ravi84184/Build-an-CV-Portfolio-Minimal-App-Flutter-Tutorial/d64acde1b8bfef6f6384c5230200f00253bf7d1e/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/ravi84184/Build-an-CV-Portfolio-Minimal-App-Flutter-Tutorial/d64acde1b8bfef6f6384c5230200f00253bf7d1e/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/ravi84184/Build-an-CV-Portfolio-Minimal-App-Flutter-Tutorial/d64acde1b8bfef6f6384c5230200f00253bf7d1e/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ravi84184/Build-an-CV-Portfolio-Minimal-App-Flutter-Tutorial/d64acde1b8bfef6f6384c5230200f00253bf7d1e/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ravi84184/Build-an-CV-Portfolio-Minimal-App-Flutter-Tutorial/d64acde1b8bfef6f6384c5230200f00253bf7d1e/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 | flutterprofile 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/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /lib/controller/firebase_controller.dart: -------------------------------------------------------------------------------- 1 | import 'package:firebase_database/firebase_database.dart'; 2 | 3 | class FirebaseController { 4 | final databaseRef = FirebaseDatabase.instance.reference().child("Portfolio"); 5 | var aboutRef = FirebaseDatabase.instance 6 | .reference() 7 | .child("Portfolio") 8 | .child("about_us"); 9 | var experienceRef = FirebaseDatabase.instance 10 | .reference() 11 | .child("Portfolio") 12 | .child("experience"); 13 | 14 | var portfolioRef = FirebaseDatabase.instance 15 | .reference() 16 | .child("Portfolio") 17 | .child("portfolio"); 18 | 19 | Future getFullName() async { 20 | var model = await aboutRef.once(); 21 | return model.value['name']; 22 | } 23 | 24 | Future getDesignation() async { 25 | var model = await aboutRef.once(); 26 | return model.value['designation']; 27 | } 28 | 29 | Future getDescription() async { 30 | var model = await aboutRef.once(); 31 | return model.value['description']; 32 | } 33 | 34 | Query getExperience() { 35 | return experienceRef; 36 | } 37 | 38 | Query getPortfolio() { 39 | return portfolioRef; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:firebase_core/firebase_core.dart'; 2 | import 'package:firebase_database/firebase_database.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutterprofile/pages/contact_page.dart'; 5 | import 'package:flutterprofile/pages/experience_page.dart'; 6 | import 'package:flutterprofile/pages/home_page.dart'; 7 | import 'package:flutterprofile/pages/portfolio_page.dart'; 8 | import 'package:flutterprofile/pages/team_page.dart'; 9 | import 'package:flutterprofile/utils/AppColors.dart'; 10 | import 'package:flutterprofile/utils/AppIcons.dart'; 11 | 12 | import 'widgets/navigation_menu_widget.dart'; 13 | 14 | void main() async { 15 | WidgetsFlutterBinding.ensureInitialized(); 16 | await Firebase.initializeApp(); 17 | runApp(MyApp()); 18 | } 19 | 20 | class MyApp extends StatelessWidget { 21 | // This widget is the root of your application. 22 | @override 23 | Widget build(BuildContext context) { 24 | return MaterialApp( 25 | title: 'Flutter Demo', 26 | debugShowCheckedModeBanner: false, 27 | theme: ThemeData( 28 | primarySwatch: Colors.blue, 29 | visualDensity: VisualDensity.adaptivePlatformDensity, 30 | ), 31 | home: MyHomePage(), 32 | ); 33 | } 34 | } 35 | 36 | final GlobalKey scaffoldkey = new GlobalKey(); 37 | 38 | class MyHomePage extends StatefulWidget { 39 | @override 40 | _MyHomePageState createState() => _MyHomePageState(); 41 | } 42 | 43 | class _MyHomePageState extends State with TickerProviderStateMixin { 44 | TabController _tabController; 45 | int selectedMenuIndex = 0; 46 | final databaseRef = FirebaseDatabase.instance.reference().child("Portfolio"); 47 | @override 48 | void initState() { 49 | // TODO: implement initState 50 | super.initState(); 51 | 52 | _tabController = new TabController(length: 5, vsync: this); 53 | 54 | _tabController.addListener(() { 55 | setState(() { 56 | selectedMenuIndex = _tabController.index; 57 | }); 58 | }); 59 | } 60 | 61 | @override 62 | Widget build(BuildContext context) { 63 | double iconSize = 20.0; 64 | return SafeArea( 65 | child: Scaffold( 66 | key: scaffoldkey, 67 | backgroundColor: backgroundLight, 68 | body: Container( 69 | margin: EdgeInsets.only(top: 10, left: 10), 70 | child: Row( 71 | children: [ 72 | Container( 73 | width: 50, 74 | child: Column( 75 | crossAxisAlignment: CrossAxisAlignment.center, 76 | children: [ 77 | Container( 78 | width: 45, 79 | height: 45, 80 | margin: EdgeInsets.only(bottom: 20), 81 | decoration: BoxDecoration( 82 | shape: BoxShape.circle, 83 | ), 84 | child: Image.asset("assets/avtar1.png"), 85 | ), 86 | NavigationMenu(navHome, 87 | height: iconSize, 88 | width: iconSize, 89 | isSelected: selectedMenuIndex == 0, onClick: () { 90 | _tabController.animateTo(0); 91 | }), 92 | NavigationMenu(navTime, 93 | height: iconSize, 94 | width: iconSize, 95 | isSelected: selectedMenuIndex == 1, onClick: () { 96 | _tabController.animateTo(1); 97 | }), 98 | NavigationMenu(navPortfolio, 99 | height: iconSize, 100 | width: iconSize, 101 | isSelected: selectedMenuIndex == 2, onClick: () { 102 | _tabController.animateTo(2); 103 | }), 104 | NavigationMenu(navGroup, 105 | height: iconSize, 106 | width: iconSize, 107 | isSelected: selectedMenuIndex == 3, onClick: () { 108 | _tabController.animateTo(3); 109 | }), 110 | NavigationMenu(navContact, 111 | height: iconSize, 112 | width: iconSize, 113 | isSelected: selectedMenuIndex == 4, onClick: () { 114 | _tabController.animateTo(4); 115 | }), 116 | ], 117 | ), 118 | ), 119 | Flexible( 120 | fit: FlexFit.tight, 121 | child: Container( 122 | child: TabBarView( 123 | controller: _tabController, 124 | children: [ 125 | HomePage(databaseRef), 126 | ExperiencePage(), 127 | PortfolioPage(), 128 | TeamPage(), 129 | ContactPage(), 130 | ], 131 | ), 132 | ), 133 | ), 134 | ], 135 | ), 136 | ), 137 | ), 138 | ); 139 | } 140 | } 141 | -------------------------------------------------------------------------------- /lib/pages/contact_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutterprofile/utils/text_style.dart'; 3 | 4 | class ContactPage extends StatelessWidget { 5 | @override 6 | Widget build(BuildContext context) { 7 | return SingleChildScrollView( 8 | padding: EdgeInsets.only(left: 20,right: 20), 9 | child: Container( 10 | child: Column( 11 | crossAxisAlignment: CrossAxisAlignment.start, 12 | children: [ 13 | Text("Contact us",style: headerTextStyle,), 14 | SizedBox(height: 10,), 15 | _itemWidget("Email","demo@gmail.com"), 16 | _itemWidget("Mobile","+91 98765 43210"), 17 | ], 18 | ), 19 | ), 20 | ); 21 | } 22 | Widget _itemWidget(title,value){ 23 | return Container( 24 | margin: EdgeInsets.only(top:10), 25 | child: Column( 26 | crossAxisAlignment: CrossAxisAlignment.start, 27 | children: [ 28 | Text(title,style: subHeaderTextStyle,), 29 | Text(value,style: bodyTextStyle,), 30 | ], 31 | ), 32 | ); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /lib/pages/experience_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:firebase_database/firebase_database.dart'; 2 | import 'package:firebase_database/ui/firebase_animated_list.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutterprofile/controller/firebase_controller.dart'; 5 | import 'package:flutterprofile/utils/AppColors.dart'; 6 | import 'package:flutterprofile/utils/text_style.dart'; 7 | 8 | class ExperiencePage extends StatelessWidget { 9 | @override 10 | Widget build(BuildContext context) { 11 | return SingleChildScrollView( 12 | padding: EdgeInsets.only(left: 20, right: 20), 13 | child: Container( 14 | child: Column( 15 | crossAxisAlignment: CrossAxisAlignment.start, 16 | children: [ 17 | Text( 18 | "Professional Experience", 19 | style: headerTextStyle, 20 | ), 21 | SizedBox( 22 | height: 10, 23 | ), 24 | FirebaseAnimatedList( 25 | shrinkWrap: true, 26 | query: FirebaseController().getExperience(), 27 | itemBuilder: (_, DataSnapshot snapshot, 28 | Animation animation, int x) { 29 | print(snapshot.value); 30 | if (snapshot != null) 31 | return _itemWidget( 32 | snapshot.value['date'], snapshot.value['description']); 33 | return SizedBox.shrink(); 34 | }, 35 | ), 36 | ], 37 | ), 38 | ), 39 | ); 40 | } 41 | 42 | Widget _itemWidget(title, description) { 43 | return Container( 44 | width: double.infinity, 45 | margin: EdgeInsets.only(top: 10), 46 | child: Column( 47 | children: [ 48 | Row( 49 | children: [ 50 | Container( 51 | height: 15, 52 | width: 15, 53 | margin: EdgeInsets.only(right: 10), 54 | decoration: 55 | BoxDecoration(shape: BoxShape.circle, color: Colors.grey), 56 | ), 57 | Text( 58 | title, 59 | style: subHeaderTextStyle, 60 | ) 61 | ], 62 | ), 63 | Container( 64 | margin: EdgeInsets.only(left: 6, top: 10), 65 | decoration: BoxDecoration( 66 | border: Border(left: BorderSide(width: 2, color: Colors.grey))), 67 | child: Container( 68 | width: double.infinity, 69 | margin: const EdgeInsets.only(left: 8.0), 70 | padding: const EdgeInsets.all(8.0), 71 | decoration: BoxDecoration( 72 | borderRadius: BorderRadius.all(Radius.circular(10)), 73 | color: cardBGColor), 74 | child: Text(description), 75 | ), 76 | ) 77 | ], 78 | ), 79 | ); 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /lib/pages/home_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:firebase_database/firebase_database.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:flutterprofile/controller/firebase_controller.dart'; 4 | import 'package:flutterprofile/utils/common_string.dart'; 5 | import 'package:flutterprofile/utils/text_style.dart'; 6 | import 'package:flutterprofile/widgets/app_shimmer_effect.dart'; 7 | 8 | class HomePage extends StatefulWidget { 9 | HomePage(this.databaseRef); 10 | 11 | final DatabaseReference databaseRef; 12 | 13 | @override 14 | _HomePageState createState() => _HomePageState(); 15 | } 16 | 17 | class _HomePageState extends State { 18 | @override 19 | void initState() { 20 | super.initState(); 21 | } 22 | 23 | @override 24 | Widget build(BuildContext context) { 25 | return SingleChildScrollView( 26 | padding: EdgeInsets.only(left: 20, right: 20), 27 | child: Column( 28 | crossAxisAlignment: CrossAxisAlignment.start, 29 | children: [ 30 | FutureBuilder( 31 | future: FirebaseController().getFullName(), 32 | builder: (context, snapshot) { 33 | if (snapshot.hasData) { 34 | return Text(snapshot.data, style: headerTextStyle); 35 | } 36 | return AppShimmer( 37 | child: Text("======= ======", style: headerTextStyle), 38 | ); 39 | }), 40 | Padding( 41 | padding: const EdgeInsets.only(top: 10.0, bottom: 20), 42 | child: FutureBuilder( 43 | future: FirebaseController().getDesignation(), 44 | builder: (context, snapshot) { 45 | if (snapshot.hasData) { 46 | return Text(snapshot.data, style: headerTextStyle); 47 | } 48 | return AppShimmer( 49 | child: Text("==============", style: headerTextStyle), 50 | ); 51 | }), 52 | ), 53 | FutureBuilder( 54 | future: FirebaseController().getDescription(), 55 | builder: (context, snapshot) { 56 | if (snapshot.hasData) { 57 | return Text(snapshot.data, style: bodyTextStyle); 58 | } 59 | return AppShimmer( 60 | child: Text("==============", style: headerTextStyle), 61 | ); 62 | }), 63 | Container( 64 | margin: const EdgeInsets.only(top: 30.0), 65 | child: Text(title2, style: headerTextStyle)), 66 | Padding( 67 | padding: const EdgeInsets.only( 68 | top: 10.0, 69 | ), 70 | child: Text( 71 | description, 72 | style: bodyTextStyle, 73 | ), 74 | ), 75 | Container( 76 | margin: const EdgeInsets.only(top: 30.0), 77 | child: Text(title3, style: headerTextStyle)), 78 | Padding( 79 | padding: const EdgeInsets.only(top: 10.0, bottom: 20), 80 | child: Text( 81 | description, 82 | style: bodyTextStyle, 83 | ), 84 | ), 85 | ], 86 | ), 87 | ); 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /lib/pages/portfolio_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:firebase_database/firebase_database.dart'; 2 | import 'package:firebase_database/ui/firebase_animated_list.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutterprofile/controller/firebase_controller.dart'; 5 | import 'package:flutterprofile/utils/AppColors.dart'; 6 | import 'package:flutterprofile/utils/common_string.dart'; 7 | import 'package:flutterprofile/utils/text_style.dart'; 8 | import 'package:flutterprofile/widgets/app_image_widget.dart'; 9 | import 'package:flutterprofile/widgets/app_shimmer_effect.dart'; 10 | 11 | import '../main.dart'; 12 | 13 | class PortfolioPage extends StatefulWidget { 14 | @override 15 | _PortfolioPageState createState() => _PortfolioPageState(); 16 | } 17 | 18 | class _PortfolioPageState extends State { 19 | @override 20 | Widget build(BuildContext context) { 21 | var width = MediaQuery.of(context).size.width; 22 | return SingleChildScrollView( 23 | padding: EdgeInsets.only(left: 20, right: 20), 24 | child: Container( 25 | child: Column( 26 | crossAxisAlignment: CrossAxisAlignment.start, 27 | children: [ 28 | Text("Portfolio", style: headerTextStyle), 29 | Container( 30 | child: Text(description, style: bodyTextStyle), 31 | margin: EdgeInsets.only(top: 20, bottom: 10), 32 | ), 33 | new FirebaseAnimatedList( 34 | query: FirebaseController().getPortfolio(), // line added 35 | reverse: false, 36 | shrinkWrap: true, 37 | defaultChild: AppShimmer( 38 | child: _itemWidget(width, 39 | image: "", name: "===========", description: "==========="), 40 | ), 41 | itemBuilder: (_, DataSnapshot snapshot, 42 | Animation animation, int x) { 43 | return _itemWidget(width, 44 | image: snapshot.value['image'], 45 | name: snapshot.value['name'], 46 | description: snapshot.value['description']); 47 | }, 48 | ), 49 | /*FutureBuilder( 50 | future: FirebaseController().getPortfolio().once(), 51 | builder: (context, snapshot) { 52 | if (snapshot.connectionState == ConnectionState.waiting) {} 53 | 54 | if (snapshot.hasData) { 55 | var list = snapshot.data; 56 | return Wrap( 57 | children: [ 58 | for (var model in list.value) 59 | _itemWidget( 60 | MediaQuery.of(context).size.width * 0.36, 61 | image: model['image'], 62 | name: model['name'], 63 | description: model['description'], 64 | ) 65 | ], 66 | ); 67 | } 68 | return SizedBox.shrink(); 69 | }, 70 | )*/ 71 | ], 72 | ), 73 | ), 74 | ); 75 | } 76 | 77 | Widget _itemWidget(double width, {name, image, description}) { 78 | return SizedBox( 79 | width: width, 80 | child: InkWell( 81 | onTap: () { 82 | scaffoldkey.currentState.showBottomSheet((context) { 83 | return Container( 84 | color: backgroundLight, 85 | width: width, 86 | child: Column( 87 | mainAxisSize: MainAxisSize.min, 88 | crossAxisAlignment: CrossAxisAlignment.start, 89 | children: [ 90 | Container( 91 | height: 200, 92 | alignment: Alignment.center, 93 | child: AppImageWidget( 94 | imageUrl: image, 95 | fit: BoxFit.fitWidth, 96 | ), 97 | color: cardBGColor, 98 | ), 99 | Padding( 100 | padding: const EdgeInsets.only(left: 10.0, top: 10), 101 | child: Text(name, style: subHeaderTextStyle), 102 | ), 103 | Padding( 104 | padding: const EdgeInsets.only(left: 10.0, top: 5), 105 | child: Text(description, style: bodyTextStyle), 106 | ), 107 | ], 108 | ), 109 | ); 110 | }); 111 | }, 112 | child: Card( 113 | elevation: 3, 114 | shape: RoundedRectangleBorder( 115 | borderRadius: BorderRadius.circular(10), 116 | ), 117 | child: ClipRRect( 118 | borderRadius: BorderRadius.circular(10), 119 | child: Container( 120 | alignment: Alignment.center, 121 | decoration: BoxDecoration( 122 | // color: cardBGColor, 123 | // image: DecorationImage(image: Image.network(image).image), 124 | ), 125 | child: Column( 126 | crossAxisAlignment: CrossAxisAlignment.start, 127 | children: [ 128 | Image.network( 129 | image, 130 | fit: BoxFit.fitWidth, 131 | ), 132 | Container( 133 | padding: const EdgeInsets.all(8.0), 134 | child: Text( 135 | name, 136 | style: Theme.of(context).textTheme.headline6, 137 | ), 138 | ), 139 | ], 140 | ), 141 | ), 142 | ), 143 | ), 144 | ), 145 | ); 146 | } 147 | } 148 | -------------------------------------------------------------------------------- /lib/pages/team_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutterprofile/utils/AppColors.dart'; 3 | import 'package:flutterprofile/utils/common_string.dart'; 4 | import 'package:flutterprofile/utils/text_style.dart'; 5 | 6 | class TeamPage extends StatelessWidget { 7 | var descriptions = 8 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."; 9 | 10 | @override 11 | Widget build(BuildContext context) { 12 | return SingleChildScrollView( 13 | padding: EdgeInsets.only(left: 20, right: 20), 14 | child: Container( 15 | child: Column( 16 | crossAxisAlignment: CrossAxisAlignment.start, 17 | children: [ 18 | Text( 19 | "Our Team", 20 | style: headerTextStyle, 21 | ), 22 | SizedBox( 23 | height: 20, 24 | ), 25 | Text( 26 | description, 27 | style: bodyTextStyle, 28 | ), 29 | SizedBox( 30 | height: 10, 31 | ), 32 | _itemWidget("Jhon Deo", "assets/avtar1.png", descriptions), 33 | _itemWidget("Jhon Deo", "assets/avtar2.png", descriptions), 34 | _itemWidget("Jhon Deo", "assets/avtar3.png", descriptions), 35 | _itemWidget("Jhon Deo", "assets/avtar4.png", descriptions), 36 | ], 37 | ), 38 | ), 39 | ); 40 | } 41 | 42 | Widget _itemWidget(name, image, description) { 43 | return Container( 44 | margin: EdgeInsets.only(top: 10), 45 | padding: EdgeInsets.all(10), 46 | decoration: BoxDecoration( 47 | borderRadius: BorderRadius.all(Radius.circular(10)), 48 | color: cardBGColor, 49 | ), 50 | child: Row( 51 | crossAxisAlignment: CrossAxisAlignment.start, 52 | children: [ 53 | Container( 54 | width: 40, 55 | height: 40, 56 | decoration: BoxDecoration( 57 | shape: BoxShape.circle, 58 | ), 59 | child: Image.asset(image), 60 | ), 61 | SizedBox( 62 | width: 5, 63 | ), 64 | Expanded( 65 | child: Container( 66 | child: Column( 67 | crossAxisAlignment: CrossAxisAlignment.start, 68 | children: [ 69 | Text( 70 | name, 71 | style: subHeaderTextStyle, 72 | ), 73 | SizedBox( 74 | height: 5, 75 | ), 76 | Text( 77 | description, 78 | style: bodyTextStyle, 79 | ), 80 | ], 81 | ), 82 | )) 83 | ], 84 | ), 85 | ); 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /lib/utils/AppColors.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | 4 | Color backgroundLight = Color(0xffffffff); 5 | Color iconTint = Color(0xff888787); 6 | Color navigationSelectionColor = Color(0xffffc107); 7 | Color cardBGColor = Color(0xfffbfbfb); 8 | 9 | -------------------------------------------------------------------------------- /lib/utils/AppIcons.dart: -------------------------------------------------------------------------------- 1 | String navHome = "assets/nav_home.svg"; 2 | String navContact = "assets/nav_contact.svg"; 3 | String navTime = "assets/nav_time.svg"; 4 | String navPortfolio = "assets/nav_portfolio.svg"; 5 | String navGroup = "assets/nav_group.svg"; 6 | -------------------------------------------------------------------------------- /lib/utils/common_string.dart: -------------------------------------------------------------------------------- 1 | String name = "Bennett\nSebastian"; 2 | String designation = "Graphic Designer & Programmer"; 3 | String description = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; 4 | 5 | 6 | String title2 = "Teach Lead At Google"; 7 | String title3 = "Computer Science Diploma"; 8 | 9 | 10 | -------------------------------------------------------------------------------- /lib/utils/text_style.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | TextStyle headerTextStyle = new TextStyle( 5 | fontSize: 20, fontWeight: FontWeight.bold, color: Colors.grey[700]); 6 | TextStyle subHeaderTextStyle = 7 | new TextStyle(fontSize: 16, color: Colors.grey[700]); 8 | TextStyle bodyTextStyle = new TextStyle(fontSize: 14, color: Colors.grey); 9 | -------------------------------------------------------------------------------- /lib/widgets/app_image_widget.dart: -------------------------------------------------------------------------------- 1 | import 'package:cached_network_image/cached_network_image.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class AppImageWidget extends StatelessWidget { 5 | final String imageUrl; 6 | final double height; 7 | final double width; 8 | final BoxFit fit; 9 | 10 | const AppImageWidget( 11 | {Key key, 12 | @required this.imageUrl, 13 | this.height, 14 | this.width, 15 | this.fit = BoxFit.contain}) 16 | : super(key: key); 17 | 18 | @override 19 | Widget build(BuildContext context) { 20 | return Container( 21 | child: (imageUrl.contains("assets")) 22 | ? Container() 23 | : (imageUrl.contains("assets")) 24 | ? Container( 25 | child: Image.asset( 26 | imageUrl, 27 | width: width, 28 | height: height, 29 | fit: fit, 30 | ), 31 | ) 32 | : CachedNetworkImage( 33 | imageUrl: imageUrl, 34 | width: width, 35 | height: height, 36 | fit: fit, 37 | placeholder: (context, url) => CircularProgressIndicator(), 38 | errorWidget: (context, url, error) => Icon(Icons.error), 39 | ), 40 | ); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /lib/widgets/app_shimmer_effect.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:shimmer/shimmer.dart'; 3 | 4 | /// common shimmer effect widget for display while loading data 5 | class AppShimmer extends StatelessWidget { 6 | final Widget child; 7 | 8 | //shimmer color 9 | static Color shimmerBaseColor = Colors.grey[300]; 10 | static Color shimmerHighlightColor = Colors.grey[050]; 11 | 12 | const AppShimmer({Key key, @required this.child}) : super(key: key); 13 | 14 | @override 15 | Widget build(BuildContext context) { 16 | return Shimmer.fromColors( 17 | baseColor: shimmerBaseColor, 18 | highlightColor: shimmerHighlightColor, 19 | enabled: true, 20 | child: child, 21 | ); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /lib/widgets/navigation_menu_widget.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutterprofile/utils/AppColors.dart'; 3 | import 'package:flutterprofile/widgets/svg_loader.dart'; 4 | 5 | Widget NavigationMenu(icon, {isSelected = false, height, width,onClick}) { 6 | return InkWell( 7 | onTap: onClick, 8 | child: Container( 9 | padding: EdgeInsets.all(5), 10 | child: Column( 11 | children: [ 12 | svgLoader(icon, height: height, width: width), 13 | Container( 14 | margin: EdgeInsets.all(8), 15 | height: 8, 16 | width: 8, 17 | decoration: BoxDecoration( 18 | borderRadius: BorderRadius.all(Radius.circular(50)), 19 | color: isSelected ? navigationSelectionColor : Colors.transparent, 20 | ), 21 | ) 22 | ], 23 | ), 24 | ), 25 | ); 26 | } 27 | -------------------------------------------------------------------------------- /lib/widgets/svg_loader.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter_svg/flutter_svg.dart'; 3 | import 'package:flutterprofile/utils/AppColors.dart'; 4 | 5 | Widget svgLoader(String image, {width = 20.0, height = 20.0}) { 6 | return SvgPicture.asset( 7 | image, 8 | height: height, 9 | width: width, 10 | color: iconTint, 11 | ); 12 | } 13 | -------------------------------------------------------------------------------- /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.6.1" 11 | boolean_selector: 12 | dependency: transitive 13 | description: 14 | name: boolean_selector 15 | url: "https://pub.dartlang.org" 16 | source: hosted 17 | version: "2.1.0" 18 | cached_network_image: 19 | dependency: "direct main" 20 | description: 21 | name: cached_network_image 22 | url: "https://pub.dartlang.org" 23 | source: hosted 24 | version: "3.0.0" 25 | characters: 26 | dependency: transitive 27 | description: 28 | name: characters 29 | url: "https://pub.dartlang.org" 30 | source: hosted 31 | version: "1.1.0" 32 | charcode: 33 | dependency: transitive 34 | description: 35 | name: charcode 36 | url: "https://pub.dartlang.org" 37 | source: hosted 38 | version: "1.2.0" 39 | clock: 40 | dependency: transitive 41 | description: 42 | name: clock 43 | url: "https://pub.dartlang.org" 44 | source: hosted 45 | version: "1.1.0" 46 | collection: 47 | dependency: transitive 48 | description: 49 | name: collection 50 | url: "https://pub.dartlang.org" 51 | source: hosted 52 | version: "1.15.0" 53 | crypto: 54 | dependency: transitive 55 | description: 56 | name: crypto 57 | url: "https://pub.dartlang.org" 58 | source: hosted 59 | version: "3.0.1" 60 | cupertino_icons: 61 | dependency: "direct main" 62 | description: 63 | name: cupertino_icons 64 | url: "https://pub.dartlang.org" 65 | source: hosted 66 | version: "1.0.3" 67 | fake_async: 68 | dependency: transitive 69 | description: 70 | name: fake_async 71 | url: "https://pub.dartlang.org" 72 | source: hosted 73 | version: "1.2.0" 74 | ffi: 75 | dependency: transitive 76 | description: 77 | name: ffi 78 | url: "https://pub.dartlang.org" 79 | source: hosted 80 | version: "1.1.2" 81 | file: 82 | dependency: transitive 83 | description: 84 | name: file 85 | url: "https://pub.dartlang.org" 86 | source: hosted 87 | version: "6.1.2" 88 | firebase_core: 89 | dependency: "direct main" 90 | description: 91 | name: firebase_core 92 | url: "https://pub.dartlang.org" 93 | source: hosted 94 | version: "1.3.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: "4.0.1" 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: "1.1.0" 109 | firebase_database: 110 | dependency: "direct main" 111 | description: 112 | name: firebase_database 113 | url: "https://pub.dartlang.org" 114 | source: hosted 115 | version: "7.1.1" 116 | flutter: 117 | dependency: "direct main" 118 | description: flutter 119 | source: sdk 120 | version: "0.0.0" 121 | flutter_blurhash: 122 | dependency: transitive 123 | description: 124 | name: flutter_blurhash 125 | url: "https://pub.dartlang.org" 126 | source: hosted 127 | version: "0.6.0" 128 | flutter_cache_manager: 129 | dependency: transitive 130 | description: 131 | name: flutter_cache_manager 132 | url: "https://pub.dartlang.org" 133 | source: hosted 134 | version: "3.1.2" 135 | flutter_svg: 136 | dependency: "direct main" 137 | description: 138 | name: flutter_svg 139 | url: "https://pub.dartlang.org" 140 | source: hosted 141 | version: "0.22.0" 142 | flutter_test: 143 | dependency: "direct dev" 144 | description: flutter 145 | source: sdk 146 | version: "0.0.0" 147 | flutter_web_plugins: 148 | dependency: transitive 149 | description: flutter 150 | source: sdk 151 | version: "0.0.0" 152 | http: 153 | dependency: transitive 154 | description: 155 | name: http 156 | url: "https://pub.dartlang.org" 157 | source: hosted 158 | version: "0.13.3" 159 | http_parser: 160 | dependency: transitive 161 | description: 162 | name: http_parser 163 | url: "https://pub.dartlang.org" 164 | source: hosted 165 | version: "4.0.0" 166 | js: 167 | dependency: transitive 168 | description: 169 | name: js 170 | url: "https://pub.dartlang.org" 171 | source: hosted 172 | version: "0.6.3" 173 | matcher: 174 | dependency: transitive 175 | description: 176 | name: matcher 177 | url: "https://pub.dartlang.org" 178 | source: hosted 179 | version: "0.12.10" 180 | meta: 181 | dependency: transitive 182 | description: 183 | name: meta 184 | url: "https://pub.dartlang.org" 185 | source: hosted 186 | version: "1.3.0" 187 | octo_image: 188 | dependency: transitive 189 | description: 190 | name: octo_image 191 | url: "https://pub.dartlang.org" 192 | source: hosted 193 | version: "1.0.0+1" 194 | path: 195 | dependency: transitive 196 | description: 197 | name: path 198 | url: "https://pub.dartlang.org" 199 | source: hosted 200 | version: "1.8.0" 201 | path_drawing: 202 | dependency: transitive 203 | description: 204 | name: path_drawing 205 | url: "https://pub.dartlang.org" 206 | source: hosted 207 | version: "0.5.1" 208 | path_parsing: 209 | dependency: transitive 210 | description: 211 | name: path_parsing 212 | url: "https://pub.dartlang.org" 213 | source: hosted 214 | version: "0.2.1" 215 | path_provider: 216 | dependency: transitive 217 | description: 218 | name: path_provider 219 | url: "https://pub.dartlang.org" 220 | source: hosted 221 | version: "2.0.2" 222 | path_provider_linux: 223 | dependency: transitive 224 | description: 225 | name: path_provider_linux 226 | url: "https://pub.dartlang.org" 227 | source: hosted 228 | version: "2.0.0" 229 | path_provider_macos: 230 | dependency: transitive 231 | description: 232 | name: path_provider_macos 233 | url: "https://pub.dartlang.org" 234 | source: hosted 235 | version: "2.0.0" 236 | path_provider_platform_interface: 237 | dependency: transitive 238 | description: 239 | name: path_provider_platform_interface 240 | url: "https://pub.dartlang.org" 241 | source: hosted 242 | version: "2.0.1" 243 | path_provider_windows: 244 | dependency: transitive 245 | description: 246 | name: path_provider_windows 247 | url: "https://pub.dartlang.org" 248 | source: hosted 249 | version: "2.0.1" 250 | pedantic: 251 | dependency: transitive 252 | description: 253 | name: pedantic 254 | url: "https://pub.dartlang.org" 255 | source: hosted 256 | version: "1.11.1" 257 | petitparser: 258 | dependency: transitive 259 | description: 260 | name: petitparser 261 | url: "https://pub.dartlang.org" 262 | source: hosted 263 | version: "4.1.0" 264 | platform: 265 | dependency: transitive 266 | description: 267 | name: platform 268 | url: "https://pub.dartlang.org" 269 | source: hosted 270 | version: "3.0.0" 271 | plugin_platform_interface: 272 | dependency: transitive 273 | description: 274 | name: plugin_platform_interface 275 | url: "https://pub.dartlang.org" 276 | source: hosted 277 | version: "2.0.0" 278 | process: 279 | dependency: transitive 280 | description: 281 | name: process 282 | url: "https://pub.dartlang.org" 283 | source: hosted 284 | version: "4.2.1" 285 | rxdart: 286 | dependency: transitive 287 | description: 288 | name: rxdart 289 | url: "https://pub.dartlang.org" 290 | source: hosted 291 | version: "0.27.1" 292 | shimmer: 293 | dependency: "direct main" 294 | description: 295 | name: shimmer 296 | url: "https://pub.dartlang.org" 297 | source: hosted 298 | version: "2.0.0" 299 | sky_engine: 300 | dependency: transitive 301 | description: flutter 302 | source: sdk 303 | version: "0.0.99" 304 | source_span: 305 | dependency: transitive 306 | description: 307 | name: source_span 308 | url: "https://pub.dartlang.org" 309 | source: hosted 310 | version: "1.8.1" 311 | sqflite: 312 | dependency: transitive 313 | description: 314 | name: sqflite 315 | url: "https://pub.dartlang.org" 316 | source: hosted 317 | version: "2.0.0+3" 318 | sqflite_common: 319 | dependency: transitive 320 | description: 321 | name: sqflite_common 322 | url: "https://pub.dartlang.org" 323 | source: hosted 324 | version: "2.0.0+2" 325 | stack_trace: 326 | dependency: transitive 327 | description: 328 | name: stack_trace 329 | url: "https://pub.dartlang.org" 330 | source: hosted 331 | version: "1.10.0" 332 | stream_channel: 333 | dependency: transitive 334 | description: 335 | name: stream_channel 336 | url: "https://pub.dartlang.org" 337 | source: hosted 338 | version: "2.1.0" 339 | string_scanner: 340 | dependency: transitive 341 | description: 342 | name: string_scanner 343 | url: "https://pub.dartlang.org" 344 | source: hosted 345 | version: "1.1.0" 346 | synchronized: 347 | dependency: transitive 348 | description: 349 | name: synchronized 350 | url: "https://pub.dartlang.org" 351 | source: hosted 352 | version: "3.0.0" 353 | term_glyph: 354 | dependency: transitive 355 | description: 356 | name: term_glyph 357 | url: "https://pub.dartlang.org" 358 | source: hosted 359 | version: "1.2.0" 360 | test_api: 361 | dependency: transitive 362 | description: 363 | name: test_api 364 | url: "https://pub.dartlang.org" 365 | source: hosted 366 | version: "0.3.0" 367 | typed_data: 368 | dependency: transitive 369 | description: 370 | name: typed_data 371 | url: "https://pub.dartlang.org" 372 | source: hosted 373 | version: "1.3.0" 374 | uuid: 375 | dependency: transitive 376 | description: 377 | name: uuid 378 | url: "https://pub.dartlang.org" 379 | source: hosted 380 | version: "3.0.4" 381 | vector_math: 382 | dependency: transitive 383 | description: 384 | name: vector_math 385 | url: "https://pub.dartlang.org" 386 | source: hosted 387 | version: "2.1.0" 388 | win32: 389 | dependency: transitive 390 | description: 391 | name: win32 392 | url: "https://pub.dartlang.org" 393 | source: hosted 394 | version: "2.2.5" 395 | xdg_directories: 396 | dependency: transitive 397 | description: 398 | name: xdg_directories 399 | url: "https://pub.dartlang.org" 400 | source: hosted 401 | version: "0.2.0" 402 | xml: 403 | dependency: transitive 404 | description: 405 | name: xml 406 | url: "https://pub.dartlang.org" 407 | source: hosted 408 | version: "5.1.2" 409 | sdks: 410 | dart: ">=2.13.0 <3.0.0" 411 | flutter: ">=1.24.0-10.2.pre" 412 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: flutterprofile 2 | description: A new Flutter application. 3 | 4 | # The following line prevents the package from being accidentally published to 5 | # pub.dev using `pub publish`. This is preferred for private packages. 6 | publish_to: 'none' # Remove this line if you wish to publish to pub.dev 7 | 8 | # The following defines the version and build number for your application. 9 | # A version number is three numbers separated by dots, like 1.2.43 10 | # followed by an optional build number separated by a +. 11 | # Both the version and the builder number may be overridden in flutter 12 | # build by specifying --build-name and --build-number, respectively. 13 | # In Android, build-name is used as versionName while build-number used as versionCode. 14 | # Read more about Android versioning at https://developer.android.com/studio/publish/versioning 15 | # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. 16 | # Read more about iOS versioning at 17 | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html 18 | version: 1.0.0+1 19 | 20 | environment: 21 | sdk: ">=2.7.0 <3.0.0" 22 | 23 | dependencies: 24 | flutter: 25 | sdk: flutter 26 | 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: ^1.0.3 31 | flutter_svg: ^0.22.0 32 | firebase_database: ^7.1.1 33 | firebase_core: ^1.3.0 34 | shimmer: any 35 | cached_network_image: ^3.0.0 36 | 37 | dev_dependencies: 38 | flutter_test: 39 | sdk: flutter 40 | 41 | # For information on the generic Dart part of this file, see the 42 | # following page: https://dart.dev/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 | - assets/ 55 | # - images/a_dot_ham.jpeg 56 | 57 | # An image asset can refer to one or more resolution-specific "variants", see 58 | # https://flutter.dev/assets-and-images/#resolution-aware. 59 | 60 | # For details regarding adding assets from package dependencies, see 61 | # https://flutter.dev/assets-and-images/#from-packages 62 | 63 | # To add custom fonts to your application, add a fonts section here, 64 | # in this "flutter" section. Each entry in this list should have a 65 | # "family" key with the font family name, and a "fonts" key with a 66 | # list giving the asset and other descriptors for the font. For 67 | # example: 68 | # fonts: 69 | # - family: Schyler 70 | # fonts: 71 | # - asset: fonts/Schyler-Regular.ttf 72 | # - asset: fonts/Schyler-Italic.ttf 73 | # style: italic 74 | # - family: Trajan Pro 75 | # fonts: 76 | # - asset: fonts/TrajanPro.ttf 77 | # - asset: fonts/TrajanPro_Bold.ttf 78 | # weight: 700 79 | # 80 | # For details regarding fonts from package dependencies, 81 | # see https://flutter.dev/custom-fonts/#from-packages 82 | -------------------------------------------------------------------------------- /test/widget_test.dart: -------------------------------------------------------------------------------- 1 | // This is a basic Flutter widget test. 2 | // 3 | // To perform an interaction with a widget in your test, use the WidgetTester 4 | // utility that Flutter provides. For example, you can send tap and scroll 5 | // gestures. You can also use WidgetTester to find child widgets in the widget 6 | // tree, read text, and verify that the values of widget properties are correct. 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter_test/flutter_test.dart'; 10 | 11 | import 'package:flutterprofile/main.dart'; 12 | 13 | void main() { 14 | testWidgets('Counter increments smoke test', (WidgetTester tester) async { 15 | // Build our app and trigger a frame. 16 | await tester.pumpWidget(MyApp()); 17 | 18 | // Verify that our counter starts at 0. 19 | expect(find.text('0'), findsOneWidget); 20 | expect(find.text('1'), findsNothing); 21 | 22 | // Tap the '+' icon and trigger a frame. 23 | await tester.tap(find.byIcon(Icons.add)); 24 | await tester.pump(); 25 | 26 | // Verify that our counter has incremented. 27 | expect(find.text('0'), findsNothing); 28 | expect(find.text('1'), findsOneWidget); 29 | }); 30 | } 31 | -------------------------------------------------------------------------------- /web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ravi84184/Build-an-CV-Portfolio-Minimal-App-Flutter-Tutorial/d64acde1b8bfef6f6384c5230200f00253bf7d1e/web/favicon.png -------------------------------------------------------------------------------- /web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ravi84184/Build-an-CV-Portfolio-Minimal-App-Flutter-Tutorial/d64acde1b8bfef6f6384c5230200f00253bf7d1e/web/icons/Icon-192.png -------------------------------------------------------------------------------- /web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ravi84184/Build-an-CV-Portfolio-Minimal-App-Flutter-Tutorial/d64acde1b8bfef6f6384c5230200f00253bf7d1e/web/icons/Icon-512.png -------------------------------------------------------------------------------- /web/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | flutterprofile 18 | 19 | 20 | 21 | 24 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /web/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "flutterprofile", 3 | "short_name": "flutterprofile", 4 | "start_url": ".", 5 | "display": "minimal-ui", 6 | "background_color": "#0175C2", 7 | "theme_color": "#0175C2", 8 | "description": "A new Flutter application.", 9 | "orientation": "portrait-primary", 10 | "prefer_related_applications": false, 11 | "icons": [ 12 | { 13 | "src": "icons/Icon-192.png", 14 | "sizes": "192x192", 15 | "type": "image/png" 16 | }, 17 | { 18 | "src": "icons/Icon-512.png", 19 | "sizes": "512x512", 20 | "type": "image/png" 21 | } 22 | ] 23 | } 24 | --------------------------------------------------------------------------------