├── .flutter-plugins-dependencies ├── .gitignore ├── .idea ├── libraries │ ├── Dart_Packages.xml │ ├── Dart_SDK.xml │ ├── Flutter_Plugins.xml │ └── Flutter_for_Android.xml ├── modules.xml ├── runConfigurations │ └── main_dart.xml ├── vcs.xml └── workspace.xml ├── .metadata ├── .vscode ├── launch.json └── settings.json ├── README.md ├── android ├── .gitignore ├── .project ├── .settings │ └── org.eclipse.buildship.core.prefs ├── app │ ├── .classpath │ ├── .project │ ├── .settings │ │ └── org.eclipse.buildship.core.prefs │ ├── build.gradle │ ├── google-services.json │ ├── keyEDM.jks │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── example │ │ │ └── earthquakedatamapper │ │ │ └── MainActivity.java │ │ └── res │ │ ├── drawable │ │ └── launch_background.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ └── values │ │ └── styles.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle ├── earthquake_data_mapper.iml ├── earthquake_data_mapper_android.iml ├── firebase.json ├── images └── icon.png ├── ios ├── .gitignore ├── Flutter │ ├── AppFrameworkInfo.plist │ ├── Debug.xcconfig │ ├── Flutter.podspec │ ├── Release.xcconfig │ └── flutter_export_environment.sh ├── Podfile ├── Podfile.lock ├── Runner.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ └── xcschemes │ │ └── Runner.xcscheme ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── Runner │ ├── AppDelegate.h │ ├── AppDelegate.m │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── Icon.png │ │ ├── icon_20pt.png │ │ ├── icon_20pt@2x-1.png │ │ ├── icon_20pt@2x.png │ │ ├── icon_20pt@3x.png │ │ ├── icon_29pt-1.png │ │ ├── icon_29pt.png │ │ ├── icon_29pt@2x-1.png │ │ ├── icon_29pt@2x.png │ │ ├── icon_29pt@3x.png │ │ ├── icon_40pt.png │ │ ├── icon_40pt@2x-1.png │ │ ├── icon_40pt@2x.png │ │ ├── icon_40pt@3x.png │ │ ├── icon_60pt@2x.png │ │ ├── icon_60pt@3x.png │ │ ├── icon_76pt.png │ │ ├── icon_76pt@2x.png │ │ └── icon_83.5@2x.png │ ├── Contents.json │ └── LaunchImage.imageset │ │ ├── Contents.json │ │ ├── LaunchImage.png │ │ ├── LaunchImage@2x.png │ │ ├── LaunchImage@3x.png │ │ └── README.md │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── GoogleService-Info.plist │ ├── Info.plist │ ├── Runner.entitlements │ └── main.m ├── lib ├── Model │ ├── data.dart │ ├── earthquake.dart │ └── static_maps.dart ├── UI │ ├── colors.dart │ ├── dots_indicator.dart │ ├── expansion_tile.dart │ ├── header_card.dart │ ├── maps.dart │ ├── most_sig_list.dart │ ├── near_me.dart │ └── settings_page.dart └── main.dart ├── pubspec.lock ├── pubspec.yaml └── screenshots ├── V1 iOS ├── screenshot1.png ├── screenshot2.png ├── screenshot3.png ├── screenshot4.png ├── screenshot5.png └── screenshot6.png ├── V1.1 Android ├── screenshot1.jpg ├── screenshot2.jpg ├── screenshot3.jpg ├── screenshot4.jpg └── screenshot5.jpg ├── V1 ├── screenshot1.jpg ├── screenshot2.jpg ├── screenshot3.jpg ├── screenshot4.jpg └── screenshot5.jpg ├── banner.jpg ├── earthquakedatamapper.sketch ├── iOS assets ├── Icon.png ├── iOS App Icon Template.png ├── icon_20pt.png ├── icon_20pt@2x.png ├── icon_20pt@3x.png ├── icon_29pt.png ├── icon_29pt@2x.png ├── icon_29pt@3x.png ├── icon_40pt.png ├── icon_40pt@2x.png ├── icon_40pt@3x.png ├── icon_60pt@2x.png ├── icon_60pt@3x.png ├── icon_76pt.png ├── icon_76pt@2x.png └── icon_83.5@2x.png └── ic_launcher512_512x512.png /.flutter-plugins-dependencies: -------------------------------------------------------------------------------- 1 | {"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"cloud_firestore","path":"/Users/nilsbacke/.pub-cache/hosted/pub.dartlang.org/cloud_firestore-0.7.4/","dependencies":["firebase_core"]},{"name":"firebase_admob","path":"/Users/nilsbacke/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.7.0/","dependencies":[]},{"name":"firebase_auth","path":"/Users/nilsbacke/.pub-cache/hosted/pub.dartlang.org/firebase_auth-0.6.2+1/","dependencies":[]},{"name":"firebase_core","path":"/Users/nilsbacke/.pub-cache/hosted/pub.dartlang.org/firebase_core-0.2.5+1/","dependencies":[]},{"name":"firebase_messaging","path":"/Users/nilsbacke/.pub-cache/hosted/pub.dartlang.org/firebase_messaging-2.1.0/","dependencies":[]},{"name":"google_maps_flutter","path":"/Users/nilsbacke/.pub-cache/hosted/pub.dartlang.org/google_maps_flutter-0.0.3+3/","dependencies":[]},{"name":"location","path":"/Users/nilsbacke/.pub-cache/hosted/pub.dartlang.org/location-1.4.1/","dependencies":[]}],"android":[{"name":"cloud_firestore","path":"/Users/nilsbacke/.pub-cache/hosted/pub.dartlang.org/cloud_firestore-0.7.4/","dependencies":["firebase_core"]},{"name":"firebase_admob","path":"/Users/nilsbacke/.pub-cache/hosted/pub.dartlang.org/firebase_admob-0.7.0/","dependencies":[]},{"name":"firebase_auth","path":"/Users/nilsbacke/.pub-cache/hosted/pub.dartlang.org/firebase_auth-0.6.2+1/","dependencies":[]},{"name":"firebase_core","path":"/Users/nilsbacke/.pub-cache/hosted/pub.dartlang.org/firebase_core-0.2.5+1/","dependencies":[]},{"name":"firebase_messaging","path":"/Users/nilsbacke/.pub-cache/hosted/pub.dartlang.org/firebase_messaging-2.1.0/","dependencies":[]},{"name":"google_maps_flutter","path":"/Users/nilsbacke/.pub-cache/hosted/pub.dartlang.org/google_maps_flutter-0.0.3+3/","dependencies":[]},{"name":"location","path":"/Users/nilsbacke/.pub-cache/hosted/pub.dartlang.org/location-1.4.1/","dependencies":[]}],"macos":[],"linux":[],"windows":[],"web":[]},"dependencyGraph":[{"name":"cloud_firestore","dependencies":["firebase_core"]},{"name":"firebase_admob","dependencies":[]},{"name":"firebase_auth","dependencies":[]},{"name":"firebase_core","dependencies":[]},{"name":"firebase_messaging","dependencies":[]},{"name":"google_maps_flutter","dependencies":[]},{"name":"location","dependencies":[]}],"date_created":"2020-03-18 20:25:00.886678","version":"1.15.21"} -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | lib/Model/api_info.dart 2 | 3 | .DS_Store 4 | .dart_tool/ 5 | 6 | android/key.properties 7 | android/app/key.jks 8 | android/app/key2.jks 9 | 10 | .packages 11 | .pub/ 12 | 13 | build/ 14 | 15 | .flutter-plugins 16 | -------------------------------------------------------------------------------- /.idea/libraries/Dart_Packages.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 448 | 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | 462 | 463 | 464 | 465 | 466 | 467 | 468 | 469 | 470 | 471 | 472 | 473 | 474 | 475 | 476 | 477 | 478 | 479 | 480 | 481 | 482 | 483 | 484 | -------------------------------------------------------------------------------- /.idea/libraries/Dart_SDK.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /.idea/libraries/Flutter_Plugins.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/libraries/Flutter_for_Android.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/runConfigurations/main_dart.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/workspace.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 37 | 38 | 41 | 42 | 43 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 87 | 88 | 89 | 90 | 91 | 104 | 105 | 106 | 107 | 108 | 115 | 116 | 117 | 118 | 136 | 143 | 144 | 145 | 146 | 147 | 155 | 156 | 161 | 162 | 164 | 165 | 166 | 168 | 169 | 170 | 171 | 1526955681864 172 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | -------------------------------------------------------------------------------- /.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: 12bbaba9ae044d0ea77da4dd5e4db15eed403f09 8 | channel: beta 9 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "Flutter", 9 | "request": "launch", 10 | "type": "dart" 11 | } 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "git.ignoreLimitWarning": true 3 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Earthquake Data Mapper 2 | 3 | Get it on Google Play 4 | 5 | 6 |
7 | 8 | 9 |
10 | 11 | 12 | # Description 13 | 14 | Earthquake Data Mapper allows you to keep track of current earthquakes. 15 | 16 | You can see a map of all of the earthquakes that happened today around the globe, and see earthquakes that occurred near you! 17 | 18 | Become aware of the significant earthquakes happening around the world. 19 | 20 | Get push notifications of earthquakes that happen near you! 21 | 22 | 23 | 24 | # Features 25 | 26 | A map view filled with markers of all of the earthquakes that occurred today. 27 | 28 | A scrolling list of the significant earthquakes of the past week. 29 | 30 | A list of the earthquakes that happened near your current location - with a customizable range setting. 31 | 32 | A list of all of the earthquakes around the world from the past hour, day, and week. 33 | 34 | Each earthquake listing is clickable to show its location on the map. 35 | 36 | 37 | Internet connection and location services are required for Earthquake Data Mapper to provide its full potential. 38 | 39 | Earthquake Data Mapper is 100% free with no ads or in-app purchases!!! 40 | 41 | Recent updates: 42 | 43 | Added page dots to Most Significant Earthquakes list 44 | Added a settings page 45 | Modified color scheme 46 | General UI/UX improvements 47 | Overhaul of maps functionality 48 | Further adaptability to different screen sizes 49 | Static map improvements 50 | Push notifications that alert users if an earthquake happens near them 51 | 52 | 53 | What's to come: 54 | 55 | A count of the number of earthquakes that happened in the past hour and week, not just day. 56 | 57 | An about page 58 | 59 | A search option 60 | 61 | 62 | # More Screenshots 63 | 64 |
65 | 66 | 67 |
68 |
69 | 70 | 71 |
72 |
73 | 74 | 75 |
76 |
77 | 78 | 79 |
80 | 81 | App icon made by Freepik from www.flaticon.com 82 | -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | *.class 3 | .gradle 4 | /local.properties 5 | /.idea/workspace.xml 6 | /.idea/libraries 7 | .DS_Store 8 | /build 9 | /captures 10 | GeneratedPluginRegistrant.java 11 | -------------------------------------------------------------------------------- /android/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | android 4 | Project android created by Buildship. 5 | 6 | 7 | 8 | 9 | org.eclipse.buildship.core.gradleprojectbuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.buildship.core.gradleprojectnature 16 | 17 | 18 | -------------------------------------------------------------------------------- /android/.settings/org.eclipse.buildship.core.prefs: -------------------------------------------------------------------------------- 1 | connection.project.dir= 2 | eclipse.preferences.version=1 3 | -------------------------------------------------------------------------------- /android/app/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /android/app/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | app 4 | Project app created by Buildship. 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.buildship.core.gradleprojectbuilder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.jdt.core.javanature 21 | org.eclipse.buildship.core.gradleprojectnature 22 | 23 | 24 | -------------------------------------------------------------------------------- /android/app/.settings/org.eclipse.buildship.core.prefs: -------------------------------------------------------------------------------- 1 | connection.project.dir=.. 2 | eclipse.preferences.version=1 3 | -------------------------------------------------------------------------------- /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 | apply plugin: 'com.android.application' 15 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 16 | 17 | def keystoreProperties = new Properties() 18 | def keystorePropertiesFile = rootProject.file('key.properties') 19 | if (keystorePropertiesFile.exists()) { 20 | keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) 21 | } 22 | 23 | android { 24 | compileSdkVersion 28 25 | 26 | lintOptions { 27 | disable 'InvalidPackage' 28 | } 29 | 30 | defaultConfig { 31 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 32 | applicationId "com.plushundred.earthquakedatamapper" 33 | minSdkVersion 16 34 | targetSdkVersion 28 35 | versionCode 2 36 | versionName "1.1" 37 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 38 | multiDexEnabled true 39 | } 40 | 41 | signingConfigs { 42 | release { 43 | keyAlias keystoreProperties['keyAlias'] 44 | keyPassword keystoreProperties['keyPassword'] 45 | storeFile file(keystoreProperties['storeFile']) 46 | storePassword keystoreProperties['storePassword'] 47 | } 48 | } 49 | buildTypes { 50 | release { 51 | signingConfig signingConfigs.release 52 | } 53 | } 54 | } 55 | 56 | flutter { 57 | source '../..' 58 | } 59 | 60 | dependencies { 61 | testImplementation 'junit:junit:4.12' 62 | androidTestImplementation 'com.android.support.test:runner:1.0.1' 63 | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' 64 | compile 'com.google.firebase:firebase-firestore:17.0.2' 65 | // implementation 'com.google.firebase:firebase-messaging:17.3.4' 66 | } 67 | apply plugin: 'com.google.gms.google-services' 68 | -------------------------------------------------------------------------------- /android/app/google-services.json: -------------------------------------------------------------------------------- 1 | { 2 | "project_info": { 3 | "project_number": "888955816619", 4 | "firebase_url": "https://earthquake-data-mapper-bfb66.firebaseio.com", 5 | "project_id": "earthquake-data-mapper-bfb66", 6 | "storage_bucket": "earthquake-data-mapper-bfb66.appspot.com" 7 | }, 8 | "client": [ 9 | { 10 | "client_info": { 11 | "mobilesdk_app_id": "1:888955816619:android:12f16116d995e6e7", 12 | "android_client_info": { 13 | "package_name": "com.plushundred.earthquakedatamapper" 14 | } 15 | }, 16 | "oauth_client": [ 17 | { 18 | "client_id": "888955816619-5brorbfpndhf6o9l7ctv75hia6qn32ic.apps.googleusercontent.com", 19 | "client_type": 3 20 | } 21 | ], 22 | "api_key": [ 23 | { 24 | "current_key": "AIzaSyCgf7_17qGMxO2l0uRYhCTW_F1jFyPNMIg" 25 | } 26 | ], 27 | "services": { 28 | "analytics_service": { 29 | "status": 1 30 | }, 31 | "appinvite_service": { 32 | "status": 1, 33 | "other_platform_oauth_client": [] 34 | }, 35 | "ads_service": { 36 | "status": 2 37 | } 38 | } 39 | } 40 | ], 41 | "configuration_version": "1" 42 | } -------------------------------------------------------------------------------- /android/app/keyEDM.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/android/app/keyEDM.jks -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | 10 | 11 | 16 | 17 | 18 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /android/app/src/main/java/com/example/earthquakedatamapper/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.earthquakedatamapper; 2 | 3 | import android.os.Bundle; 4 | 5 | import io.flutter.app.FlutterActivity; 6 | import io.flutter.plugins.GeneratedPluginRegistrant; 7 | 8 | public class MainActivity extends FlutterActivity { 9 | @Override 10 | protected void onCreate(Bundle savedInstanceState) { 11 | super.onCreate(savedInstanceState); 12 | GeneratedPluginRegistrant.registerWith(this); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /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/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | repositories { 3 | google() 4 | jcenter() 5 | } 6 | 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:3.0.1' 9 | classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.2-4' 10 | classpath 'com.google.gms:google-services:4.0.0' 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | jcenter() 18 | } 19 | } 20 | 21 | rootProject.buildDir = '../build' 22 | subprojects { 23 | project.buildDir = "${rootProject.buildDir}/${project.name}" 24 | 25 | project.configurations.all { 26 | resolutionStrategy.eachDependency { details -> 27 | if (details.requested.group == 'com.android.support' 28 | && !details.requested.name.contains('multidex') ) { 29 | details.useVersion "26.1.0" 30 | } 31 | } 32 | } 33 | } 34 | subprojects { 35 | project.evaluationDependsOn(':app') 36 | } 37 | 38 | task clean(type: Delete) { 39 | delete rootProject.buildDir 40 | } 41 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Jun 23 08:50:38 CEST 2017 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip 7 | -------------------------------------------------------------------------------- /android/gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ############################################################################## 4 | ## 5 | ## Gradle start up script for UN*X 6 | ## 7 | ############################################################################## 8 | 9 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 10 | DEFAULT_JVM_OPTS="" 11 | 12 | APP_NAME="Gradle" 13 | APP_BASE_NAME=`basename "$0"` 14 | 15 | # Use the maximum available, or set MAX_FD != -1 to use that value. 16 | MAX_FD="maximum" 17 | 18 | warn ( ) { 19 | echo "$*" 20 | } 21 | 22 | die ( ) { 23 | echo 24 | echo "$*" 25 | echo 26 | exit 1 27 | } 28 | 29 | # OS specific support (must be 'true' or 'false'). 30 | cygwin=false 31 | msys=false 32 | darwin=false 33 | case "`uname`" in 34 | CYGWIN* ) 35 | cygwin=true 36 | ;; 37 | Darwin* ) 38 | darwin=true 39 | ;; 40 | MINGW* ) 41 | msys=true 42 | ;; 43 | esac 44 | 45 | # Attempt to set APP_HOME 46 | # Resolve links: $0 may be a link 47 | PRG="$0" 48 | # Need this for relative symlinks. 49 | while [ -h "$PRG" ] ; do 50 | ls=`ls -ld "$PRG"` 51 | link=`expr "$ls" : '.*-> \(.*\)$'` 52 | if expr "$link" : '/.*' > /dev/null; then 53 | PRG="$link" 54 | else 55 | PRG=`dirname "$PRG"`"/$link" 56 | fi 57 | done 58 | SAVED="`pwd`" 59 | cd "`dirname \"$PRG\"`/" >/dev/null 60 | APP_HOME="`pwd -P`" 61 | cd "$SAVED" >/dev/null 62 | 63 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 64 | 65 | # Determine the Java command to use to start the JVM. 66 | if [ -n "$JAVA_HOME" ] ; then 67 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 68 | # IBM's JDK on AIX uses strange locations for the executables 69 | JAVACMD="$JAVA_HOME/jre/sh/java" 70 | else 71 | JAVACMD="$JAVA_HOME/bin/java" 72 | fi 73 | if [ ! -x "$JAVACMD" ] ; then 74 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 75 | 76 | Please set the JAVA_HOME variable in your environment to match the 77 | location of your Java installation." 78 | fi 79 | else 80 | JAVACMD="java" 81 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 82 | 83 | Please set the JAVA_HOME variable in your environment to match the 84 | location of your Java installation." 85 | fi 86 | 87 | # Increase the maximum file descriptors if we can. 88 | if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then 89 | MAX_FD_LIMIT=`ulimit -H -n` 90 | if [ $? -eq 0 ] ; then 91 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 92 | MAX_FD="$MAX_FD_LIMIT" 93 | fi 94 | ulimit -n $MAX_FD 95 | if [ $? -ne 0 ] ; then 96 | warn "Could not set maximum file descriptor limit: $MAX_FD" 97 | fi 98 | else 99 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 100 | fi 101 | fi 102 | 103 | # For Darwin, add options to specify how the application appears in the dock 104 | if $darwin; then 105 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 106 | fi 107 | 108 | # For Cygwin, switch paths to Windows format before running java 109 | if $cygwin ; then 110 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 111 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 112 | JAVACMD=`cygpath --unix "$JAVACMD"` 113 | 114 | # We build the pattern for arguments to be converted via cygpath 115 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 116 | SEP="" 117 | for dir in $ROOTDIRSRAW ; do 118 | ROOTDIRS="$ROOTDIRS$SEP$dir" 119 | SEP="|" 120 | done 121 | OURCYGPATTERN="(^($ROOTDIRS))" 122 | # Add a user-defined pattern to the cygpath arguments 123 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 124 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 125 | fi 126 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 127 | i=0 128 | for arg in "$@" ; do 129 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 130 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 131 | 132 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 133 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 134 | else 135 | eval `echo args$i`="\"$arg\"" 136 | fi 137 | i=$((i+1)) 138 | done 139 | case $i in 140 | (0) set -- ;; 141 | (1) set -- "$args0" ;; 142 | (2) set -- "$args0" "$args1" ;; 143 | (3) set -- "$args0" "$args1" "$args2" ;; 144 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;; 145 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 146 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 147 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 148 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 149 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 150 | esac 151 | fi 152 | 153 | # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules 154 | function splitJvmOpts() { 155 | JVM_OPTS=("$@") 156 | } 157 | eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS 158 | JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" 159 | 160 | exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" 161 | -------------------------------------------------------------------------------- /android/gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 12 | set DEFAULT_JVM_OPTS= 13 | 14 | set DIRNAME=%~dp0 15 | if "%DIRNAME%" == "" set DIRNAME=. 16 | set APP_BASE_NAME=%~n0 17 | set APP_HOME=%DIRNAME% 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windowz variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | if "%@eval[2+2]" == "4" goto 4NT_args 53 | 54 | :win9xME_args 55 | @rem Slurp the command line arguments. 56 | set CMD_LINE_ARGS= 57 | set _SKIP=2 58 | 59 | :win9xME_args_slurp 60 | if "x%~1" == "x" goto execute 61 | 62 | set CMD_LINE_ARGS=%* 63 | goto execute 64 | 65 | :4NT_args 66 | @rem Get arguments from the 4NT Shell from JP Software 67 | set CMD_LINE_ARGS=%$ 68 | 69 | :execute 70 | @rem Setup the command line 71 | 72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 73 | 74 | @rem Execute Gradle 75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 76 | 77 | :end 78 | @rem End local scope for the variables with windows NT shell 79 | if "%ERRORLEVEL%"=="0" goto mainEnd 80 | 81 | :fail 82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 83 | rem the _cmd.exe /c_ return code! 84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 85 | exit /b 1 86 | 87 | :mainEnd 88 | if "%OS%"=="Windows_NT" endlocal 89 | 90 | :omega 91 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /earthquake_data_mapper.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /earthquake_data_mapper_android.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /firebase.json: -------------------------------------------------------------------------------- 1 | { 2 | "functions": { 3 | "predeploy": [ 4 | "npm --prefix \"$RESOURCE_DIR\" run lint" 5 | ] 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/images/icon.png -------------------------------------------------------------------------------- /ios/.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | .vagrant/ 3 | .sconsign.dblite 4 | .svn/ 5 | 6 | .DS_Store 7 | *.swp 8 | profile 9 | 10 | DerivedData/ 11 | build/ 12 | GeneratedPluginRegistrant.h 13 | GeneratedPluginRegistrant.m 14 | 15 | .generated/ 16 | 17 | *.pbxuser 18 | *.mode1v3 19 | *.mode2v3 20 | *.perspectivev3 21 | 22 | !default.pbxuser 23 | !default.mode1v3 24 | !default.mode2v3 25 | !default.perspectivev3 26 | 27 | xcuserdata 28 | 29 | *.moved-aside 30 | 31 | *.pyc 32 | *sync/ 33 | Icon? 34 | .tags* 35 | 36 | /Flutter/app.flx 37 | /Flutter/app.zip 38 | /Flutter/flutter_assets/ 39 | /Flutter/App.framework 40 | /Flutter/Flutter.framework 41 | /Flutter/Generated.xcconfig 42 | /ServiceDefinitions.json 43 | 44 | Pods/ 45 | -------------------------------------------------------------------------------- /ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | UIRequiredDeviceCapabilities 24 | 25 | arm64 26 | 27 | MinimumOSVersion 28 | 8.0 29 | 30 | 31 | -------------------------------------------------------------------------------- /ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Flutter/Flutter.podspec: -------------------------------------------------------------------------------- 1 | # 2 | # NOTE: This podspec is NOT to be published. It is only used as a local source! 3 | # 4 | 5 | Pod::Spec.new do |s| 6 | s.name = 'Flutter' 7 | s.version = '1.0.0' 8 | s.summary = 'High-performance, high-fidelity mobile apps.' 9 | s.description = <<-DESC 10 | Flutter provides an easy and productive way to build and deploy high-performance mobile apps for Android and iOS. 11 | DESC 12 | s.homepage = 'https://flutter.io' 13 | s.license = { :type => 'MIT' } 14 | s.author = { 'Flutter Dev Team' => 'flutter-dev@googlegroups.com' } 15 | s.source = { :git => 'https://github.com/flutter/engine', :tag => s.version.to_s } 16 | s.ios.deployment_target = '8.0' 17 | s.vendored_frameworks = 'Flutter.framework' 18 | end 19 | -------------------------------------------------------------------------------- /ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Flutter/flutter_export_environment.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # This is a generated file; do not edit or check into version control. 3 | export "FLUTTER_ROOT=/Users/nilsbacke/flutter" 4 | export "FLUTTER_APPLICATION_PATH=/Users/nilsbacke/Desktop/EarthquakeDataMapper" 5 | export "FLUTTER_TARGET=/Users/nilsbacke/Desktop/EarthquakeDataMapper/lib/main.dart" 6 | export "FLUTTER_BUILD_DIR=build" 7 | export "SYMROOT=${SOURCE_ROOT}/../build/ios" 8 | export "OTHER_LDFLAGS=$(inherited) -framework Flutter" 9 | export "FLUTTER_FRAMEWORK_DIR=/Users/nilsbacke/flutter/bin/cache/artifacts/engine/ios" 10 | export "FLUTTER_BUILD_NAME=1.1.2" 11 | export "FLUTTER_BUILD_NUMBER=50" 12 | export "TRACK_WIDGET_CREATION=true" 13 | -------------------------------------------------------------------------------- /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 | def parse_KV_file(file, separator='=') 8 | file_abs_path = File.expand_path(file) 9 | if !File.exists? file_abs_path 10 | return []; 11 | end 12 | pods_ary = [] 13 | skip_line_start_symbols = ["#", "/"] 14 | File.foreach(file_abs_path) { |line| 15 | next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } 16 | plugin = line.split(pattern=separator) 17 | if plugin.length == 2 18 | podname = plugin[0].strip() 19 | path = plugin[1].strip() 20 | podpath = File.expand_path("#{path}", file_abs_path) 21 | pods_ary.push({:name => podname, :path => podpath}); 22 | else 23 | puts "Invalid plugin specification: #{line}" 24 | end 25 | } 26 | return pods_ary 27 | end 28 | 29 | target 'Runner' do 30 | # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock 31 | # referring to absolute paths on developers' machines. 32 | system('rm -rf Pods/.symlinks') 33 | system('mkdir -p Pods/.symlinks/plugins') 34 | 35 | # Flutter Pods 36 | generated_xcode_build_settings = parse_KV_file('./Flutter/Generated.xcconfig') 37 | if generated_xcode_build_settings.empty? 38 | puts "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter packages get is executed first." 39 | end 40 | generated_xcode_build_settings.map { |p| 41 | if p[:name] == 'FLUTTER_FRAMEWORK_DIR' 42 | symlink = File.join('Pods', '.symlinks', 'flutter') 43 | File.symlink(File.dirname(p[:path]), symlink) 44 | pod 'Flutter', :path => File.join(symlink, File.basename(p[:path])) 45 | end 46 | } 47 | 48 | # Plugin Pods 49 | plugin_pods = parse_KV_file('../.flutter-plugins') 50 | plugin_pods.map { |p| 51 | symlink = File.join('Pods', '.symlinks', 'plugins', p[:name]) 52 | File.symlink(p[:path], symlink) 53 | pod p[:name], :path => File.join(symlink, 'ios') 54 | } 55 | end 56 | 57 | post_install do |installer| 58 | installer.pods_project.targets.each do |target| 59 | target.build_configurations.each do |config| 60 | config.build_settings['ENABLE_BITCODE'] = 'NO' 61 | end 62 | end 63 | end 64 | -------------------------------------------------------------------------------- /ios/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - BoringSSL (10.0.6): 3 | - BoringSSL/Implementation (= 10.0.6) 4 | - BoringSSL/Interface (= 10.0.6) 5 | - BoringSSL/Implementation (10.0.6): 6 | - BoringSSL/Interface (= 10.0.6) 7 | - BoringSSL/Interface (10.0.6) 8 | - cloud_firestore (0.0.1): 9 | - Firebase/Auth 10 | - Firebase/Core 11 | - Firebase/Database 12 | - Firebase/Firestore 13 | - Flutter 14 | - Firebase/AdMob (5.11.0): 15 | - Firebase/Core 16 | - Google-Mobile-Ads-SDK (~> 7.35) 17 | - Firebase/Auth (5.11.0): 18 | - Firebase/CoreOnly 19 | - FirebaseAuth (= 5.0.4) 20 | - Firebase/Core (5.11.0): 21 | - Firebase/CoreOnly 22 | - FirebaseAnalytics (= 5.3.0) 23 | - Firebase/CoreOnly (5.11.0): 24 | - FirebaseCore (= 5.1.6) 25 | - Firebase/Database (5.11.0): 26 | - Firebase/CoreOnly 27 | - FirebaseDatabase (= 5.0.3) 28 | - Firebase/Firestore (5.11.0): 29 | - Firebase/CoreOnly 30 | - FirebaseFirestore (= 0.13.6) 31 | - Firebase/Messaging (5.11.0): 32 | - Firebase/CoreOnly 33 | - FirebaseMessaging (= 3.2.1) 34 | - firebase_admob (0.0.1): 35 | - Firebase/AdMob 36 | - Firebase/Core 37 | - Flutter 38 | - firebase_auth (0.0.1): 39 | - Firebase/Auth 40 | - Firebase/Core 41 | - Flutter 42 | - firebase_core (0.0.1): 43 | - Firebase/Core 44 | - Flutter 45 | - firebase_messaging (0.0.1): 46 | - Firebase/Core 47 | - Firebase/Messaging 48 | - Flutter 49 | - FirebaseAnalytics (5.3.0): 50 | - FirebaseCore (~> 5.1) 51 | - FirebaseInstanceID (~> 3.3) 52 | - GoogleAppMeasurement (~> 5.3) 53 | - GoogleUtilities/AppDelegateSwizzler (~> 5.2) 54 | - GoogleUtilities/MethodSwizzler (~> 5.2) 55 | - GoogleUtilities/Network (~> 5.2) 56 | - "GoogleUtilities/NSData+zlib (~> 5.2)" 57 | - nanopb (~> 0.3) 58 | - FirebaseAnalyticsInterop (1.1.0) 59 | - FirebaseAuth (5.0.4): 60 | - FirebaseAuthInterop (~> 1.0) 61 | - FirebaseCore (~> 5.0) 62 | - GoogleUtilities/Environment (~> 5.2) 63 | - GTMSessionFetcher/Core (~> 1.1) 64 | - FirebaseAuthInterop (1.0.0) 65 | - FirebaseCore (5.1.6): 66 | - GoogleUtilities/Logger (~> 5.2) 67 | - FirebaseDatabase (5.0.3): 68 | - FirebaseCore (~> 5.0) 69 | - leveldb-library (~> 1.18) 70 | - FirebaseFirestore (0.13.6): 71 | - FirebaseAuthInterop (~> 1.0) 72 | - FirebaseCore (~> 5.1) 73 | - FirebaseFirestore/abseil-cpp (= 0.13.6) 74 | - "gRPC-C++ (~> 0.0.3)" 75 | - gRPC-ProtoRPC (~> 1.0) 76 | - leveldb-library (~> 1.20) 77 | - nanopb (~> 0.3.8) 78 | - Protobuf (~> 3.1) 79 | - FirebaseFirestore/abseil-cpp (0.13.6): 80 | - FirebaseAuthInterop (~> 1.0) 81 | - FirebaseCore (~> 5.1) 82 | - "gRPC-C++ (~> 0.0.3)" 83 | - gRPC-ProtoRPC (~> 1.0) 84 | - leveldb-library (~> 1.20) 85 | - nanopb (~> 0.3.8) 86 | - Protobuf (~> 3.1) 87 | - FirebaseInstanceID (3.3.0): 88 | - FirebaseCore (~> 5.1) 89 | - GoogleUtilities/Environment (~> 5.3) 90 | - GoogleUtilities/UserDefaults (~> 5.3) 91 | - FirebaseMessaging (3.2.1): 92 | - FirebaseAnalyticsInterop (~> 1.1) 93 | - FirebaseCore (~> 5.1) 94 | - FirebaseInstanceID (~> 3.0) 95 | - GoogleUtilities/Environment (~> 5.2) 96 | - GoogleUtilities/Reachability (~> 5.2) 97 | - Protobuf (~> 3.1) 98 | - Flutter (1.0.0) 99 | - Google-Mobile-Ads-SDK (7.41.0) 100 | - google_maps_flutter (0.0.1): 101 | - Flutter 102 | - GoogleMaps 103 | - GoogleAppMeasurement (5.3.0): 104 | - GoogleUtilities/AppDelegateSwizzler (~> 5.2) 105 | - GoogleUtilities/MethodSwizzler (~> 5.2) 106 | - GoogleUtilities/Network (~> 5.2) 107 | - "GoogleUtilities/NSData+zlib (~> 5.2)" 108 | - nanopb (~> 0.3) 109 | - GoogleMaps (2.7.0): 110 | - GoogleMaps/Maps (= 2.7.0) 111 | - GoogleMaps/Base (2.7.0) 112 | - GoogleMaps/Maps (2.7.0): 113 | - GoogleMaps/Base 114 | - GoogleUtilities/AppDelegateSwizzler (5.3.4): 115 | - GoogleUtilities/Environment 116 | - GoogleUtilities/Logger 117 | - GoogleUtilities/Network 118 | - GoogleUtilities/Environment (5.3.4) 119 | - GoogleUtilities/Logger (5.3.4): 120 | - GoogleUtilities/Environment 121 | - GoogleUtilities/MethodSwizzler (5.3.4): 122 | - GoogleUtilities/Logger 123 | - GoogleUtilities/Network (5.3.4): 124 | - GoogleUtilities/Logger 125 | - "GoogleUtilities/NSData+zlib" 126 | - GoogleUtilities/Reachability 127 | - "GoogleUtilities/NSData+zlib (5.3.4)" 128 | - GoogleUtilities/Reachability (5.3.4): 129 | - GoogleUtilities/Logger 130 | - GoogleUtilities/UserDefaults (5.3.4): 131 | - GoogleUtilities/Logger 132 | - gRPC (1.14.0): 133 | - gRPC-RxLibrary (= 1.14.0) 134 | - gRPC/Main (= 1.14.0) 135 | - "gRPC-C++ (0.0.3)": 136 | - "gRPC-C++/Implementation (= 0.0.3)" 137 | - "gRPC-C++/Interface (= 0.0.3)" 138 | - "gRPC-C++/Implementation (0.0.3)": 139 | - "gRPC-C++/Interface (= 0.0.3)" 140 | - gRPC-Core (= 1.14.0) 141 | - nanopb (~> 0.3) 142 | - "gRPC-C++/Interface (0.0.3)" 143 | - gRPC-Core (1.14.0): 144 | - gRPC-Core/Implementation (= 1.14.0) 145 | - gRPC-Core/Interface (= 1.14.0) 146 | - gRPC-Core/Implementation (1.14.0): 147 | - BoringSSL (~> 10.0) 148 | - gRPC-Core/Interface (= 1.14.0) 149 | - nanopb (~> 0.3) 150 | - gRPC-Core/Interface (1.14.0) 151 | - gRPC-ProtoRPC (1.14.0): 152 | - gRPC-ProtoRPC/Main (= 1.14.0) 153 | - gRPC-ProtoRPC/Main (1.14.0): 154 | - gRPC (= 1.14.0) 155 | - gRPC-RxLibrary (= 1.14.0) 156 | - Protobuf (~> 3.0) 157 | - gRPC-RxLibrary (1.14.0) 158 | - gRPC/Main (1.14.0): 159 | - gRPC-Core (= 1.14.0) 160 | - gRPC-RxLibrary (= 1.14.0) 161 | - GTMSessionFetcher/Core (1.2.0) 162 | - leveldb-library (1.20) 163 | - location (0.0.1): 164 | - Flutter 165 | - nanopb (0.3.901): 166 | - nanopb/decode (= 0.3.901) 167 | - nanopb/encode (= 0.3.901) 168 | - nanopb/decode (0.3.901) 169 | - nanopb/encode (0.3.901) 170 | - Protobuf (3.6.1) 171 | 172 | DEPENDENCIES: 173 | - cloud_firestore (from `Pods/.symlinks/plugins/cloud_firestore/ios`) 174 | - firebase_admob (from `Pods/.symlinks/plugins/firebase_admob/ios`) 175 | - firebase_auth (from `Pods/.symlinks/plugins/firebase_auth/ios`) 176 | - firebase_core (from `Pods/.symlinks/plugins/firebase_core/ios`) 177 | - firebase_messaging (from `Pods/.symlinks/plugins/firebase_messaging/ios`) 178 | - Flutter (from `Pods/.symlinks/flutter/ios`) 179 | - google_maps_flutter (from `Pods/.symlinks/plugins/google_maps_flutter/ios`) 180 | - location (from `Pods/.symlinks/plugins/location/ios`) 181 | 182 | SPEC REPOS: 183 | https://github.com/CocoaPods/Specs.git: 184 | - BoringSSL 185 | - Firebase 186 | - FirebaseAnalytics 187 | - FirebaseAnalyticsInterop 188 | - FirebaseAuth 189 | - FirebaseAuthInterop 190 | - FirebaseCore 191 | - FirebaseDatabase 192 | - FirebaseFirestore 193 | - FirebaseInstanceID 194 | - FirebaseMessaging 195 | - GoogleAppMeasurement 196 | - GoogleMaps 197 | - GoogleUtilities 198 | - gRPC 199 | - "gRPC-C++" 200 | - gRPC-Core 201 | - gRPC-ProtoRPC 202 | - gRPC-RxLibrary 203 | - GTMSessionFetcher 204 | - leveldb-library 205 | - nanopb 206 | - Protobuf 207 | trunk: 208 | - Google-Mobile-Ads-SDK 209 | 210 | EXTERNAL SOURCES: 211 | cloud_firestore: 212 | :path: Pods/.symlinks/plugins/cloud_firestore/ios 213 | firebase_admob: 214 | :path: Pods/.symlinks/plugins/firebase_admob/ios 215 | firebase_auth: 216 | :path: Pods/.symlinks/plugins/firebase_auth/ios 217 | firebase_core: 218 | :path: Pods/.symlinks/plugins/firebase_core/ios 219 | firebase_messaging: 220 | :path: Pods/.symlinks/plugins/firebase_messaging/ios 221 | Flutter: 222 | :path: Pods/.symlinks/flutter/ios 223 | google_maps_flutter: 224 | :path: Pods/.symlinks/plugins/google_maps_flutter/ios 225 | location: 226 | :path: Pods/.symlinks/plugins/location/ios 227 | 228 | SPEC CHECKSUMS: 229 | BoringSSL: e10f92a27043805c01071fe815a5cd98ae8212e7 230 | cloud_firestore: c575f263eb7033afb7d407e6264b21d6e622a061 231 | Firebase: b48f9e653da971ecce5b8c749684bc8bb2d26bd3 232 | firebase_admob: ba3d9c8874c03ccc2b87ae30c50d1630b522a693 233 | firebase_auth: 6023fc2e28feabd6571d9a105b678cce7978be90 234 | firebase_core: ce5006bb48508ee4e71e0f429a3f519bb8ee2961 235 | firebase_messaging: b25b2fa94e685146bcf9d706ed87b4e95cd2a17d 236 | FirebaseAnalytics: 63202d2665de4e6adcbdce189135255d8b5962ba 237 | FirebaseAnalyticsInterop: e5f21be9af6548372e2f0815834ff909bff395a2 238 | FirebaseAuth: 504b198ceb3472dca5c65bb95544ea44cfc9439e 239 | FirebaseAuthInterop: 0ffa57668be100582bb7643d4fcb7615496c41fc 240 | FirebaseCore: d16552f06821489ce1affe2e5e3e5593402ddfe3 241 | FirebaseDatabase: e2bcbc106adc4b11a2da3ec2eb63c0c4a44f2f54 242 | FirebaseFirestore: 162502df850b584126c609f3449acfb7230d8c1a 243 | FirebaseInstanceID: e2fa4cb35ef5558c200f7f0ad8a53e212215f93e 244 | FirebaseMessaging: 0f14a264b0d7f867e8eff5d3556bc5d0d4e57888 245 | Flutter: 0e3d915762c693b495b44d77113d4970485de6ec 246 | Google-Mobile-Ads-SDK: 101ce89b94fdf60ec64ba7b6e9b9d812dc765936 247 | google_maps_flutter: 924970f41ec509a201b593548db005efb2a09ee9 248 | GoogleAppMeasurement: 5029d78f2b438bd30ffb44e6c558b57c21622727 249 | GoogleMaps: f79af95cb24d869457b1f961c93d3ce8b2f3b848 250 | GoogleUtilities: abb092d2c12e817fa3e0e7b274987dd72fb86ec3 251 | gRPC: 9d4c549f37c7cef22478634bac7a0405b6e3dbfb 252 | "gRPC-C++": ee0b01db3122f0b6c2be28b5b11039f62fa15fe6 253 | gRPC-Core: f4836515817c0eb479aeeb9cc27c91c4ba62a9f6 254 | gRPC-ProtoRPC: 76f6053639a842e1fb45fa82aa598bf3f4d9f66f 255 | gRPC-RxLibrary: 3c305f32155024b116b780f389323c73a28197e6 256 | GTMSessionFetcher: 0c4baf0a73acd0041bf9f71ea018deedab5ea84e 257 | leveldb-library: 08cba283675b7ed2d99629a4bc5fd052cd2bb6a5 258 | location: 3a2eed4dd2fab25e7b7baf2a9efefe82b512d740 259 | nanopb: 2901f78ea1b7b4015c860c2fdd1ea2fee1a18d48 260 | Protobuf: 1eb9700044745f00181c136ef21b8ff3ad5a0fd5 261 | 262 | PODFILE CHECKSUM: 13dcf421f4da2e937a57e8ba760ed880beae536f 263 | 264 | COCOAPODS: 1.8.4 265 | -------------------------------------------------------------------------------- /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 | 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; }; 13 | 97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; }; 14 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 15 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 16 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 17 | AD19447139FFE125F4BCF86F /* libPods-Runner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D8399B09D9709A6EE68A0141 /* libPods-Runner.a */; }; 18 | ED2C500B21B9C4C400BFAA41 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = ED2C500A21B9C4C400BFAA41 /* GoogleService-Info.plist */; }; 19 | /* End PBXBuildFile section */ 20 | 21 | /* Begin PBXCopyFilesBuildPhase section */ 22 | 9705A1C41CF9048500538489 /* Embed Frameworks */ = { 23 | isa = PBXCopyFilesBuildPhase; 24 | buildActionMask = 2147483647; 25 | dstPath = ""; 26 | dstSubfolderSpec = 10; 27 | files = ( 28 | ); 29 | name = "Embed Frameworks"; 30 | runOnlyForDeploymentPostprocessing = 0; 31 | }; 32 | /* End PBXCopyFilesBuildPhase section */ 33 | 34 | /* Begin PBXFileReference section */ 35 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 36 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 37 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 38 | 3BFFDE757951CEC008A32255 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 39 | 47B0CC058D18F89AE78E5611 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 40 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 41 | 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 42 | 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 43 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 44 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 45 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 46 | 97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 47 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 48 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 49 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 50 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 51 | D8399B09D9709A6EE68A0141 /* libPods-Runner.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Runner.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 52 | ED2C500A21B9C4C400BFAA41 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "../../../../Downloads/GoogleService-Info.plist"; sourceTree = ""; }; 53 | ED4C90F221B8B468001D3520 /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = ""; }; 54 | /* End PBXFileReference section */ 55 | 56 | /* Begin PBXFrameworksBuildPhase section */ 57 | 97C146EB1CF9000F007C117D /* Frameworks */ = { 58 | isa = PBXFrameworksBuildPhase; 59 | buildActionMask = 2147483647; 60 | files = ( 61 | AD19447139FFE125F4BCF86F /* libPods-Runner.a in Frameworks */, 62 | ); 63 | runOnlyForDeploymentPostprocessing = 0; 64 | }; 65 | /* End PBXFrameworksBuildPhase section */ 66 | 67 | /* Begin PBXGroup section */ 68 | 78661F472B31D27B5498258B /* Frameworks */ = { 69 | isa = PBXGroup; 70 | children = ( 71 | D8399B09D9709A6EE68A0141 /* libPods-Runner.a */, 72 | ); 73 | name = Frameworks; 74 | sourceTree = ""; 75 | }; 76 | 9740EEB11CF90186004384FC /* Flutter */ = { 77 | isa = PBXGroup; 78 | children = ( 79 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, 80 | 9740EEB21CF90195004384FC /* Debug.xcconfig */, 81 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 82 | 9740EEB31CF90195004384FC /* Generated.xcconfig */, 83 | ); 84 | name = Flutter; 85 | sourceTree = ""; 86 | }; 87 | 97C146E51CF9000F007C117D = { 88 | isa = PBXGroup; 89 | children = ( 90 | 9740EEB11CF90186004384FC /* Flutter */, 91 | 97C146F01CF9000F007C117D /* Runner */, 92 | 97C146EF1CF9000F007C117D /* Products */, 93 | F0F4D55B5695B9C4E03AFAAA /* Pods */, 94 | 78661F472B31D27B5498258B /* Frameworks */, 95 | ); 96 | sourceTree = ""; 97 | }; 98 | 97C146EF1CF9000F007C117D /* Products */ = { 99 | isa = PBXGroup; 100 | children = ( 101 | 97C146EE1CF9000F007C117D /* Runner.app */, 102 | ); 103 | name = Products; 104 | sourceTree = ""; 105 | }; 106 | 97C146F01CF9000F007C117D /* Runner */ = { 107 | isa = PBXGroup; 108 | children = ( 109 | ED2C500A21B9C4C400BFAA41 /* GoogleService-Info.plist */, 110 | ED4C90F221B8B468001D3520 /* Runner.entitlements */, 111 | 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */, 112 | 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */, 113 | 97C146FA1CF9000F007C117D /* Main.storyboard */, 114 | 97C146FD1CF9000F007C117D /* Assets.xcassets */, 115 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 116 | 97C147021CF9000F007C117D /* Info.plist */, 117 | 97C146F11CF9000F007C117D /* Supporting Files */, 118 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 119 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 120 | ); 121 | path = Runner; 122 | sourceTree = ""; 123 | }; 124 | 97C146F11CF9000F007C117D /* Supporting Files */ = { 125 | isa = PBXGroup; 126 | children = ( 127 | 97C146F21CF9000F007C117D /* main.m */, 128 | ); 129 | name = "Supporting Files"; 130 | sourceTree = ""; 131 | }; 132 | F0F4D55B5695B9C4E03AFAAA /* Pods */ = { 133 | isa = PBXGroup; 134 | children = ( 135 | 3BFFDE757951CEC008A32255 /* Pods-Runner.debug.xcconfig */, 136 | 47B0CC058D18F89AE78E5611 /* Pods-Runner.release.xcconfig */, 137 | ); 138 | name = Pods; 139 | sourceTree = ""; 140 | }; 141 | /* End PBXGroup section */ 142 | 143 | /* Begin PBXNativeTarget section */ 144 | 97C146ED1CF9000F007C117D /* Runner */ = { 145 | isa = PBXNativeTarget; 146 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; 147 | buildPhases = ( 148 | E61726A08B3202E19E010DCD /* [CP] Check Pods Manifest.lock */, 149 | 9740EEB61CF901F6004384FC /* Run Script */, 150 | 97C146EA1CF9000F007C117D /* Sources */, 151 | 97C146EB1CF9000F007C117D /* Frameworks */, 152 | 97C146EC1CF9000F007C117D /* Resources */, 153 | 9705A1C41CF9048500538489 /* Embed Frameworks */, 154 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */, 155 | 42155C23C0F679D4DE098F7C /* [CP] Embed Pods Frameworks */, 156 | 143228BDA2DF67EEC98310E4 /* [CP] Copy Pods Resources */, 157 | ); 158 | buildRules = ( 159 | ); 160 | dependencies = ( 161 | ); 162 | name = Runner; 163 | productName = Runner; 164 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */; 165 | productType = "com.apple.product-type.application"; 166 | }; 167 | /* End PBXNativeTarget section */ 168 | 169 | /* Begin PBXProject section */ 170 | 97C146E61CF9000F007C117D /* Project object */ = { 171 | isa = PBXProject; 172 | attributes = { 173 | LastUpgradeCheck = 1010; 174 | ORGANIZATIONNAME = "The Chromium Authors"; 175 | TargetAttributes = { 176 | 97C146ED1CF9000F007C117D = { 177 | CreatedOnToolsVersion = 7.3.1; 178 | DevelopmentTeam = AT5PJXB86V; 179 | SystemCapabilities = { 180 | com.apple.Push = { 181 | enabled = 1; 182 | }; 183 | }; 184 | }; 185 | }; 186 | }; 187 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; 188 | compatibilityVersion = "Xcode 3.2"; 189 | developmentRegion = English; 190 | hasScannedForEncodings = 0; 191 | knownRegions = ( 192 | English, 193 | en, 194 | Base, 195 | ); 196 | mainGroup = 97C146E51CF9000F007C117D; 197 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */; 198 | projectDirPath = ""; 199 | projectRoot = ""; 200 | targets = ( 201 | 97C146ED1CF9000F007C117D /* Runner */, 202 | ); 203 | }; 204 | /* End PBXProject section */ 205 | 206 | /* Begin PBXResourcesBuildPhase section */ 207 | 97C146EC1CF9000F007C117D /* Resources */ = { 208 | isa = PBXResourcesBuildPhase; 209 | buildActionMask = 2147483647; 210 | files = ( 211 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 212 | ED2C500B21B9C4C400BFAA41 /* GoogleService-Info.plist in Resources */, 213 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, 214 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 215 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, 216 | ); 217 | runOnlyForDeploymentPostprocessing = 0; 218 | }; 219 | /* End PBXResourcesBuildPhase section */ 220 | 221 | /* Begin PBXShellScriptBuildPhase section */ 222 | 143228BDA2DF67EEC98310E4 /* [CP] Copy Pods Resources */ = { 223 | isa = PBXShellScriptBuildPhase; 224 | buildActionMask = 2147483647; 225 | files = ( 226 | ); 227 | inputPaths = ( 228 | "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh", 229 | "${PODS_ROOT}/GoogleMaps/Maps/Frameworks/GoogleMaps.framework/Resources/GoogleMaps.bundle", 230 | "${PODS_CONFIGURATION_BUILD_DIR}/gRPC/gRPCCertificates.bundle", 231 | ); 232 | name = "[CP] Copy Pods Resources"; 233 | outputPaths = ( 234 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleMaps.bundle", 235 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/gRPCCertificates.bundle", 236 | ); 237 | runOnlyForDeploymentPostprocessing = 0; 238 | shellPath = /bin/sh; 239 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; 240 | showEnvVarsInLog = 0; 241 | }; 242 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { 243 | isa = PBXShellScriptBuildPhase; 244 | buildActionMask = 2147483647; 245 | files = ( 246 | ); 247 | inputPaths = ( 248 | ); 249 | name = "Thin Binary"; 250 | outputPaths = ( 251 | ); 252 | runOnlyForDeploymentPostprocessing = 0; 253 | shellPath = /bin/sh; 254 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; 255 | }; 256 | 42155C23C0F679D4DE098F7C /* [CP] Embed Pods Frameworks */ = { 257 | isa = PBXShellScriptBuildPhase; 258 | buildActionMask = 2147483647; 259 | files = ( 260 | ); 261 | inputPaths = ( 262 | "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh", 263 | "${PODS_ROOT}/.symlinks/flutter/ios/Flutter.framework", 264 | ); 265 | name = "[CP] Embed Pods Frameworks"; 266 | outputPaths = ( 267 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Flutter.framework", 268 | ); 269 | runOnlyForDeploymentPostprocessing = 0; 270 | shellPath = /bin/sh; 271 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; 272 | showEnvVarsInLog = 0; 273 | }; 274 | 9740EEB61CF901F6004384FC /* Run Script */ = { 275 | isa = PBXShellScriptBuildPhase; 276 | buildActionMask = 2147483647; 277 | files = ( 278 | ); 279 | inputPaths = ( 280 | ); 281 | name = "Run Script"; 282 | outputPaths = ( 283 | ); 284 | runOnlyForDeploymentPostprocessing = 0; 285 | shellPath = /bin/sh; 286 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; 287 | }; 288 | E61726A08B3202E19E010DCD /* [CP] Check Pods Manifest.lock */ = { 289 | isa = PBXShellScriptBuildPhase; 290 | buildActionMask = 2147483647; 291 | files = ( 292 | ); 293 | inputPaths = ( 294 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 295 | "${PODS_ROOT}/Manifest.lock", 296 | ); 297 | name = "[CP] Check Pods Manifest.lock"; 298 | outputPaths = ( 299 | "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", 300 | ); 301 | runOnlyForDeploymentPostprocessing = 0; 302 | shellPath = /bin/sh; 303 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 304 | showEnvVarsInLog = 0; 305 | }; 306 | /* End PBXShellScriptBuildPhase section */ 307 | 308 | /* Begin PBXSourcesBuildPhase section */ 309 | 97C146EA1CF9000F007C117D /* Sources */ = { 310 | isa = PBXSourcesBuildPhase; 311 | buildActionMask = 2147483647; 312 | files = ( 313 | 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */, 314 | 97C146F31CF9000F007C117D /* main.m in Sources */, 315 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, 316 | ); 317 | runOnlyForDeploymentPostprocessing = 0; 318 | }; 319 | /* End PBXSourcesBuildPhase section */ 320 | 321 | /* Begin PBXVariantGroup section */ 322 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = { 323 | isa = PBXVariantGroup; 324 | children = ( 325 | 97C146FB1CF9000F007C117D /* Base */, 326 | ); 327 | name = Main.storyboard; 328 | sourceTree = ""; 329 | }; 330 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { 331 | isa = PBXVariantGroup; 332 | children = ( 333 | 97C147001CF9000F007C117D /* Base */, 334 | ); 335 | name = LaunchScreen.storyboard; 336 | sourceTree = ""; 337 | }; 338 | /* End PBXVariantGroup section */ 339 | 340 | /* Begin XCBuildConfiguration section */ 341 | 97C147031CF9000F007C117D /* Debug */ = { 342 | isa = XCBuildConfiguration; 343 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 344 | buildSettings = { 345 | ALWAYS_SEARCH_USER_PATHS = NO; 346 | CLANG_ANALYZER_NONNULL = YES; 347 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 348 | CLANG_CXX_LIBRARY = "libc++"; 349 | CLANG_ENABLE_MODULES = YES; 350 | CLANG_ENABLE_OBJC_ARC = YES; 351 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 352 | CLANG_WARN_BOOL_CONVERSION = YES; 353 | CLANG_WARN_COMMA = YES; 354 | CLANG_WARN_CONSTANT_CONVERSION = YES; 355 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 356 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 357 | CLANG_WARN_EMPTY_BODY = YES; 358 | CLANG_WARN_ENUM_CONVERSION = YES; 359 | CLANG_WARN_INFINITE_RECURSION = YES; 360 | CLANG_WARN_INT_CONVERSION = YES; 361 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 362 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 363 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 364 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 365 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 366 | CLANG_WARN_STRICT_PROTOTYPES = YES; 367 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 368 | CLANG_WARN_UNREACHABLE_CODE = YES; 369 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 370 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 371 | COPY_PHASE_STRIP = NO; 372 | DEBUG_INFORMATION_FORMAT = dwarf; 373 | ENABLE_STRICT_OBJC_MSGSEND = YES; 374 | ENABLE_TESTABILITY = YES; 375 | GCC_C_LANGUAGE_STANDARD = gnu99; 376 | GCC_DYNAMIC_NO_PIC = NO; 377 | GCC_NO_COMMON_BLOCKS = YES; 378 | GCC_OPTIMIZATION_LEVEL = 0; 379 | GCC_PREPROCESSOR_DEFINITIONS = ( 380 | "DEBUG=1", 381 | "$(inherited)", 382 | ); 383 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 384 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 385 | GCC_WARN_UNDECLARED_SELECTOR = YES; 386 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 387 | GCC_WARN_UNUSED_FUNCTION = YES; 388 | GCC_WARN_UNUSED_VARIABLE = YES; 389 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 390 | MTL_ENABLE_DEBUG_INFO = YES; 391 | ONLY_ACTIVE_ARCH = YES; 392 | SDKROOT = iphoneos; 393 | TARGETED_DEVICE_FAMILY = "1,2"; 394 | }; 395 | name = Debug; 396 | }; 397 | 97C147041CF9000F007C117D /* Release */ = { 398 | isa = XCBuildConfiguration; 399 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 400 | buildSettings = { 401 | ALWAYS_SEARCH_USER_PATHS = NO; 402 | CLANG_ANALYZER_NONNULL = YES; 403 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 404 | CLANG_CXX_LIBRARY = "libc++"; 405 | CLANG_ENABLE_MODULES = YES; 406 | CLANG_ENABLE_OBJC_ARC = YES; 407 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 408 | CLANG_WARN_BOOL_CONVERSION = YES; 409 | CLANG_WARN_COMMA = YES; 410 | CLANG_WARN_CONSTANT_CONVERSION = YES; 411 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 412 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 413 | CLANG_WARN_EMPTY_BODY = YES; 414 | CLANG_WARN_ENUM_CONVERSION = YES; 415 | CLANG_WARN_INFINITE_RECURSION = YES; 416 | CLANG_WARN_INT_CONVERSION = YES; 417 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 418 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 419 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 420 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 421 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 422 | CLANG_WARN_STRICT_PROTOTYPES = YES; 423 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 424 | CLANG_WARN_UNREACHABLE_CODE = YES; 425 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 426 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 427 | COPY_PHASE_STRIP = NO; 428 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 429 | ENABLE_NS_ASSERTIONS = NO; 430 | ENABLE_STRICT_OBJC_MSGSEND = YES; 431 | GCC_C_LANGUAGE_STANDARD = gnu99; 432 | GCC_NO_COMMON_BLOCKS = YES; 433 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 434 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 435 | GCC_WARN_UNDECLARED_SELECTOR = YES; 436 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 437 | GCC_WARN_UNUSED_FUNCTION = YES; 438 | GCC_WARN_UNUSED_VARIABLE = YES; 439 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 440 | MTL_ENABLE_DEBUG_INFO = NO; 441 | SDKROOT = iphoneos; 442 | TARGETED_DEVICE_FAMILY = "1,2"; 443 | VALIDATE_PRODUCT = YES; 444 | }; 445 | name = Release; 446 | }; 447 | 97C147061CF9000F007C117D /* Debug */ = { 448 | isa = XCBuildConfiguration; 449 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 450 | buildSettings = { 451 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 452 | CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; 453 | CURRENT_PROJECT_VERSION = 8; 454 | DEVELOPMENT_TEAM = AT5PJXB86V; 455 | ENABLE_BITCODE = NO; 456 | FRAMEWORK_SEARCH_PATHS = ( 457 | "$(inherited)", 458 | "$(PROJECT_DIR)/Flutter", 459 | ); 460 | INFOPLIST_FILE = Runner/Info.plist; 461 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 462 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 463 | LIBRARY_SEARCH_PATHS = ( 464 | "$(inherited)", 465 | "$(PROJECT_DIR)/Flutter", 466 | ); 467 | MARKETING_VERSION = 1.1.2; 468 | PRODUCT_BUNDLE_IDENTIFIER = com.plushundred.earthquakeDataMapper; 469 | PRODUCT_NAME = "$(TARGET_NAME)"; 470 | VERSIONING_SYSTEM = "apple-generic"; 471 | }; 472 | name = Debug; 473 | }; 474 | 97C147071CF9000F007C117D /* Release */ = { 475 | isa = XCBuildConfiguration; 476 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 477 | buildSettings = { 478 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 479 | CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; 480 | CURRENT_PROJECT_VERSION = 8; 481 | DEVELOPMENT_TEAM = AT5PJXB86V; 482 | ENABLE_BITCODE = NO; 483 | FRAMEWORK_SEARCH_PATHS = ( 484 | "$(inherited)", 485 | "$(PROJECT_DIR)/Flutter", 486 | ); 487 | INFOPLIST_FILE = Runner/Info.plist; 488 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 489 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 490 | LIBRARY_SEARCH_PATHS = ( 491 | "$(inherited)", 492 | "$(PROJECT_DIR)/Flutter", 493 | ); 494 | MARKETING_VERSION = 1.1.2; 495 | PRODUCT_BUNDLE_IDENTIFIER = com.plushundred.earthquakeDataMapper; 496 | PRODUCT_NAME = "$(TARGET_NAME)"; 497 | VERSIONING_SYSTEM = "apple-generic"; 498 | }; 499 | name = Release; 500 | }; 501 | /* End XCBuildConfiguration section */ 502 | 503 | /* Begin XCConfigurationList section */ 504 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { 505 | isa = XCConfigurationList; 506 | buildConfigurations = ( 507 | 97C147031CF9000F007C117D /* Debug */, 508 | 97C147041CF9000F007C117D /* Release */, 509 | ); 510 | defaultConfigurationIsVisible = 0; 511 | defaultConfigurationName = Release; 512 | }; 513 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { 514 | isa = XCConfigurationList; 515 | buildConfigurations = ( 516 | 97C147061CF9000F007C117D /* Debug */, 517 | 97C147071CF9000F007C117D /* Release */, 518 | ); 519 | defaultConfigurationIsVisible = 0; 520 | defaultConfigurationName = Release; 521 | }; 522 | /* End XCConfigurationList section */ 523 | }; 524 | rootObject = 97C146E61CF9000F007C117D /* Project object */; 525 | } 526 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | @interface AppDelegate : FlutterAppDelegate 5 | 6 | @end 7 | -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.m: -------------------------------------------------------------------------------- 1 | #include "AppDelegate.h" 2 | #include "GeneratedPluginRegistrant.h" 3 | #import "GoogleMaps/GoogleMaps.h" 4 | 5 | @implementation AppDelegate 6 | 7 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 8 | [GMSServices provideAPIKey:@"AIzaSyDrejfJkhULoliAsVVzfoC0ddkkVC3XykI"]; 9 | [GeneratedPluginRegistrant registerWithRegistry:self]; 10 | // Override point for customization after application launch. 11 | return [super application:application didFinishLaunchingWithOptions:launchOptions]; 12 | } 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "icon_20pt@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "icon_20pt@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "icon_29pt.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "icon_29pt@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "icon_29pt@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "icon_40pt@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "icon_40pt@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "icon_60pt@2x.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "60x60", 53 | "idiom" : "iphone", 54 | "filename" : "icon_60pt@3x.png", 55 | "scale" : "3x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "icon_20pt.png", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "size" : "20x20", 65 | "idiom" : "ipad", 66 | "filename" : "icon_20pt@2x-1.png", 67 | "scale" : "2x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "icon_29pt-1.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "29x29", 77 | "idiom" : "ipad", 78 | "filename" : "icon_29pt@2x-1.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "icon_40pt.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "40x40", 89 | "idiom" : "ipad", 90 | "filename" : "icon_40pt@2x-1.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "icon_76pt.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "76x76", 101 | "idiom" : "ipad", 102 | "filename" : "icon_76pt@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "83.5x83.5", 107 | "idiom" : "ipad", 108 | "filename" : "icon_83.5@2x.png", 109 | "scale" : "2x" 110 | }, 111 | { 112 | "size" : "1024x1024", 113 | "idiom" : "ios-marketing", 114 | "filename" : "Icon.png", 115 | "scale" : "1x" 116 | } 117 | ], 118 | "info" : { 119 | "version" : 1, 120 | "author" : "xcode" 121 | } 122 | } -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_20pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_20pt.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_20pt@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_20pt@2x-1.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_20pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_20pt@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_20pt@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_20pt@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_29pt-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_29pt-1.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_29pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_29pt.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_29pt@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_29pt@2x-1.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_29pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_29pt@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_29pt@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_29pt@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_40pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_40pt.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_40pt@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_40pt@2x-1.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_40pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_40pt@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_40pt@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_40pt@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_60pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_60pt@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_60pt@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_60pt@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_76pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_76pt.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_76pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_76pt@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon_83.5@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /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/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/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/GoogleService-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | AD_UNIT_ID_FOR_BANNER_TEST 6 | ca-app-pub-3940256099942544/2934735716 7 | AD_UNIT_ID_FOR_INTERSTITIAL_TEST 8 | ca-app-pub-3940256099942544/4411468910 9 | CLIENT_ID 10 | 888955816619-c69l3g7b7i76ondtlve4m8gic3v58go4.apps.googleusercontent.com 11 | REVERSED_CLIENT_ID 12 | com.googleusercontent.apps.888955816619-c69l3g7b7i76ondtlve4m8gic3v58go4 13 | API_KEY 14 | AIzaSyCe6Bj7clXdCeGvkVpg_Y1d4ZrZXLB0wlY 15 | GCM_SENDER_ID 16 | 888955816619 17 | PLIST_VERSION 18 | 1 19 | BUNDLE_ID 20 | com.plushundred.earthquakeDataMapper 21 | PROJECT_ID 22 | earthquake-data-mapper-bfb66 23 | STORAGE_BUCKET 24 | earthquake-data-mapper-bfb66.appspot.com 25 | IS_ADS_ENABLED 26 | 27 | IS_ANALYTICS_ENABLED 28 | 29 | IS_APPINVITE_ENABLED 30 | 31 | IS_GCM_ENABLED 32 | 33 | IS_SIGNIN_ENABLED 34 | 35 | GOOGLE_APP_ID 36 | 1:888955816619:ios:abd354051a1e3de3 37 | DATABASE_URL 38 | https://earthquake-data-mapper-bfb66.firebaseio.com 39 | 40 | -------------------------------------------------------------------------------- /ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | Earthquake Data Mapper 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | earthquake_data_mapper 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | $(MARKETING_VERSION) 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | $(CURRENT_PROJECT_VERSION) 25 | FirebaseAppDelegateProxyEnabled 26 | 27 | GADApplicationIdentifier 28 | ca-app-pub-2682134172957549/3217764824 29 | LSApplicationCategoryType 30 | 31 | LSRequiresIPhoneOS 32 | 33 | NSLocationAlwaysUsageDescription 34 | Using location to display on a map 35 | NSLocationWhenInUseUsageDescription 36 | Using location to display on a map 37 | UILaunchStoryboardName 38 | LaunchScreen 39 | UIMainStoryboardFile 40 | Main 41 | UISupportedInterfaceOrientations 42 | 43 | UIInterfaceOrientationPortrait 44 | UIInterfaceOrientationLandscapeLeft 45 | UIInterfaceOrientationLandscapeRight 46 | UIInterfaceOrientationPortraitUpsideDown 47 | 48 | UISupportedInterfaceOrientations~ipad 49 | 50 | UIInterfaceOrientationPortrait 51 | UIInterfaceOrientationPortraitUpsideDown 52 | UIInterfaceOrientationLandscapeLeft 53 | UIInterfaceOrientationLandscapeRight 54 | 55 | UIViewControllerBasedStatusBarAppearance 56 | 57 | io.flutter.embedded_views_preview 58 | YES 59 | 60 | 61 | -------------------------------------------------------------------------------- /ios/Runner/Runner.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | aps-environment 6 | development 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner/main.m: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | #import "AppDelegate.h" 4 | 5 | int main(int argc, char * argv[]) { 6 | @autoreleasepool { 7 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /lib/Model/data.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | import 'dart:convert'; 3 | import 'package:http/http.dart' as http; 4 | import 'earthquake.dart'; 5 | 6 | class EarthquakeData { 7 | Map _data = new Map(); 8 | List _features = new List(); 9 | 10 | List initEarthquakeData(val) { 11 | List earthquakes = new List(); 12 | _data = val; 13 | _features = _data['features']; 14 | for (int i = 0; i < _features.length; i++) { 15 | var e = _features[i]['properties']; 16 | var g = _features[i]['geometry']['coordinates']; 17 | earthquakes.add( 18 | new Earthquake( 19 | mag: e['mag'], 20 | place: e['place'], 21 | time: e['time'], 22 | url: e['url'], 23 | lat: g[1], 24 | long: g[0], 25 | ), 26 | ); 27 | } 28 | return earthquakes; 29 | } 30 | } 31 | 32 | Future getQuakes(String apiType, String apiRange) async { 33 | String apiURLquake = 34 | "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/${apiType}_${apiRange}.geojson"; 35 | http.Response response = await http.get(apiURLquake); 36 | return json.decode(response.body); 37 | } 38 | -------------------------------------------------------------------------------- /lib/Model/earthquake.dart: -------------------------------------------------------------------------------- 1 | import 'package:intl/intl.dart'; 2 | 3 | class Earthquake { 4 | final num mag; 5 | String place; 6 | var time; 7 | final String url; 8 | final num lat; 9 | final num long; 10 | 11 | Earthquake({this.mag, this.place, this.time, this.url, this.lat, this.long}) { 12 | time = _getTime(this.time); 13 | place = this.place.toString(); 14 | place = this.place.contains("of ") 15 | ? this.place.substring(this.place.indexOf("of ") + 3) 16 | : place; 17 | } 18 | 19 | String _getTime(var time) { 20 | int milliseconds = int.parse(time.toString()); 21 | DateTime date = new DateTime.fromMillisecondsSinceEpoch(milliseconds); 22 | var format = new DateFormat.yMd().add_jm(); 23 | return format.format(date); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /lib/Model/static_maps.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:google_maps_flutter/google_maps_flutter.dart'; 3 | 4 | class StaticMapsProvider extends StatefulWidget { 5 | final String googleMapsApiKey; 6 | final Marker marker; 7 | 8 | StaticMapsProvider(this.googleMapsApiKey, {this.marker}); 9 | 10 | @override 11 | _StaticMapsProviderState createState() => new _StaticMapsProviderState(); 12 | } 13 | 14 | class _StaticMapsProviderState extends State { 15 | String renderURL; 16 | static const int defaultWidth = 800; 17 | static const int defaultHeight = 800; 18 | Map defaultLocation = { 19 | "latitude": '37.0902', 20 | "longitude": '-95.7192' 21 | }; 22 | 23 | _buildUrl() { 24 | String markerString = 25 | '${widget.marker.options.position.latitude},${widget.marker.options.position.longitude}'; 26 | var baseUri = new Uri( 27 | scheme: 'https', 28 | host: 'maps.googleapis.com', 29 | port: 443, 30 | path: '/maps/api/staticmap', 31 | queryParameters: { 32 | 'markers': markerString, 33 | 'size': '${defaultWidth}x$defaultHeight', 34 | 'center': 35 | '${widget.marker.options.position.latitude},${widget.marker.options.position.longitude}', 36 | 'zoom': '6', 37 | 'key': '${widget.googleMapsApiKey}' 38 | }); 39 | 40 | setState(() { 41 | renderURL = baseUri.toString(); 42 | }); 43 | } 44 | 45 | Widget build(BuildContext context) { 46 | _buildUrl(); 47 | return new Image.network(renderURL); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /lib/UI/colors.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | const color = Colors.white; 4 | -------------------------------------------------------------------------------- /lib/UI/dots_indicator.dart: -------------------------------------------------------------------------------- 1 | import 'dart:math'; 2 | import 'package:flutter/foundation.dart'; 3 | import 'package:flutter/material.dart'; 4 | 5 | /// An indicator showing the currently selected page of a PageController 6 | class DotsIndicator extends AnimatedWidget { 7 | DotsIndicator({ 8 | this.controller, 9 | this.itemCount, 10 | this.onPageSelected, 11 | this.color: Colors.white, 12 | }) : super(listenable: controller); 13 | 14 | /// The PageController that this DotsIndicator is representing. 15 | final PageController controller; 16 | 17 | /// The number of items managed by the PageController 18 | final int itemCount; 19 | 20 | /// Called when a dot is tapped 21 | final ValueChanged onPageSelected; 22 | 23 | /// The color of the dots. 24 | /// 25 | /// Defaults to `Colors.white`. 26 | final Color color; 27 | 28 | // The base size of the dots 29 | static const double _kDotSize = 4.0; 30 | 31 | // The increase in the size of the selected dot 32 | static const double _kMaxZoom = 2.0; 33 | 34 | // The distance between the center of each dot 35 | static const double _kDotSpacing = 10.0; 36 | 37 | Widget _buildDot(int index) { 38 | double selectedness = Curves.easeOut.transform( 39 | max( 40 | 0.0, 41 | 1.0 - ((controller.page ?? controller.initialPage) - index).abs(), 42 | ), 43 | ); 44 | double zoom = 1.0 + (_kMaxZoom - 1.0) * selectedness; 45 | return new Container( 46 | width: _kDotSpacing, 47 | child: new Center( 48 | child: new Material( 49 | color: color, 50 | type: MaterialType.circle, 51 | child: new Container( 52 | width: _kDotSize * zoom, 53 | height: _kDotSize * zoom, 54 | child: new InkWell( 55 | onTap: () => onPageSelected(index), 56 | ), 57 | ), 58 | ), 59 | ), 60 | ); 61 | } 62 | 63 | Widget build(BuildContext context) { 64 | return new Row( 65 | mainAxisAlignment: MainAxisAlignment.center, 66 | children: new List.generate(itemCount, _buildDot), 67 | ); 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /lib/UI/expansion_tile.dart: -------------------------------------------------------------------------------- 1 | import 'package:earthquake_data_mapper/Model/data.dart'; 2 | import 'package:earthquake_data_mapper/Model/earthquake.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:earthquake_data_mapper/UI/colors.dart' as colors; 5 | import 'package:google_maps_flutter/google_maps_flutter.dart'; 6 | import 'maps.dart'; 7 | 8 | class ExpansionList extends StatefulWidget { 9 | @override 10 | _ExpansionListState createState() => _ExpansionListState(); 11 | } 12 | 13 | class _ExpansionListState extends State { 14 | EarthquakeData earthquakeData = new EarthquakeData(); 15 | List expansionData = new List(); 16 | List allHourEarthquakes = new List(); 17 | List allDayEarthquakes = new List(); 18 | List allWeekEarthquakes = new List(); 19 | 20 | _ExpansionListState() { 21 | if (expansionData.isEmpty && 22 | allHourEarthquakes.isEmpty && 23 | allDayEarthquakes.isEmpty && 24 | allWeekEarthquakes.isEmpty) { 25 | getQuakes("all", "hour").then((val1) { 26 | getQuakes("all", "day").then((val2) { 27 | getQuakes("all", "week").then((val3) { 28 | setState(() { 29 | allHourEarthquakes = earthquakeData.initEarthquakeData(val1); 30 | allDayEarthquakes = earthquakeData.initEarthquakeData(val2); 31 | allWeekEarthquakes = earthquakeData.initEarthquakeData(val3); 32 | expansionData = getExpansionData( 33 | allHourEarthquakes, allDayEarthquakes, allWeekEarthquakes); 34 | }); 35 | }); 36 | }); 37 | }); 38 | } 39 | } 40 | 41 | @override 42 | Widget build(BuildContext context) { 43 | return new Container( 44 | // height: 300.0, 45 | // margin: new EdgeInsets.all(20.0), 46 | child: new Card( 47 | color: colors.color, 48 | // color: Colors.lightBlue[200], 49 | child: new Column( 50 | crossAxisAlignment: CrossAxisAlignment.center, 51 | children: [ 52 | new Container( 53 | padding: const EdgeInsets.all(8.0), 54 | child: new Text( 55 | "All Earthquakes", 56 | style: new TextStyle(fontSize: 18.0), 57 | textAlign: TextAlign.left, 58 | ), 59 | ), 60 | new Divider(), 61 | new ListView.builder( 62 | shrinkWrap: true, 63 | itemBuilder: (BuildContext context, int i) { 64 | return new EntryItem( 65 | context, 66 | expansionData[i], 67 | allHourEarthquakes, 68 | allDayEarthquakes, 69 | allWeekEarthquakes, 70 | new EarthquakeData()); 71 | }, 72 | itemCount: expansionData.length, 73 | physics: ClampingScrollPhysics(), 74 | ), 75 | ], 76 | ), 77 | ), 78 | ); 79 | } 80 | } 81 | 82 | class EntryItem extends StatelessWidget { 83 | EntryItem(this.context, this.entry, this.allHour, this.allDay, this.allWeek, 84 | this.earthquakeData); 85 | 86 | final BuildContext context; 87 | final Entry entry; 88 | final List allHour; 89 | final List allDay; 90 | final List allWeek; 91 | final EarthquakeData earthquakeData; 92 | 93 | Widget _buildTiles(Entry root) { 94 | if (root.children.isEmpty) { 95 | if (root.index != null) { 96 | var e; 97 | if (root.category == "hour") { 98 | e = allHour[root.index]; 99 | } else if (root.category == "day") { 100 | e = allDay[root.index]; 101 | } else { 102 | e = allWeek[root.index]; 103 | } 104 | return new ListTile( 105 | title: new Text(root.title), 106 | subtitle: new Text(e.time), 107 | leading: new CircleAvatar( 108 | child: new Text( 109 | '${e.mag}', 110 | style: new TextStyle(color: Colors.white), 111 | ), 112 | backgroundColor: Colors.red, 113 | ), 114 | onTap: () { 115 | List markers = new List(); 116 | for (Earthquake e in allDay) { 117 | markers.add( 118 | new MarkerOptions( 119 | visible: true, 120 | position: new LatLng(e.lat, e.long), 121 | infoWindowText: 122 | new InfoWindowText('Mag: ${e.mag} | ${e.place}', null), 123 | ), 124 | ); 125 | } 126 | markers.add( 127 | new MarkerOptions( 128 | visible: true, 129 | position: new LatLng(e.lat, e.long), 130 | icon: BitmapDescriptor.defaultMarkerWithHue( 131 | BitmapDescriptor.hueAzure), 132 | ), 133 | ); 134 | Navigator.of(context).push(new MaterialPageRoute( 135 | builder: (BuildContext context) => 136 | Maps(markers, zoomTo: new LatLng(e.lat, e.long)))); 137 | }, 138 | ); 139 | } else { 140 | return new ListTile( 141 | title: new Text(root.title), 142 | ); 143 | } 144 | } 145 | return new ExpansionTile( 146 | key: new PageStorageKey(root), 147 | title: new Text( 148 | root.title, 149 | style: new TextStyle(color: Colors.black), 150 | ), 151 | children: root.children.map(_buildTiles).toList(), 152 | ); 153 | } 154 | 155 | @override 156 | Widget build(BuildContext context) { 157 | return _buildTiles(entry); 158 | } 159 | } 160 | 161 | class Entry { 162 | Entry(this.title, 163 | {this.index, this.category, this.children = const []}); 164 | 165 | final String title; 166 | final List children; 167 | final int index; 168 | final String category; 169 | } 170 | 171 | // The entire multilevel list displayed by this app. 172 | List getExpansionData(List allHour, List allDay, 173 | List allWeek) { 174 | List hour = new List(); 175 | List day = new List(); 176 | List week = new List(); 177 | 178 | int i; 179 | for (i = 0; i < allHour.length; i++) { 180 | if (i == 50) { 181 | break; 182 | } 183 | hour.add(new Entry('${allHour[i].place}', index: i, category: "hour")); 184 | } 185 | int afterHour = i; 186 | for (; i < allDay.length; i++) { 187 | if (i == 50 + afterHour) { 188 | day.add(new Entry("Only showing the last 50 earthquakes")); 189 | break; 190 | } 191 | day.add(new Entry('${allDay[i].place}', index: i, category: "day")); 192 | } 193 | int afterDay = i; 194 | for (; i < allWeek.length; i++) { 195 | if (i == 50 + afterDay + afterHour) { 196 | week.add(new Entry("Only showing the last 50 earthquakes")); 197 | debugPrint("Index: ${i.toString()}"); 198 | break; 199 | } 200 | week.add(new Entry('${allWeek[i].place}', index: i, category: "week")); 201 | } 202 | 203 | return [ 204 | new Entry('Past Hour', children: hour), 205 | new Entry('Past Day', children: day), 206 | new Entry('Past Week', children: week), 207 | ]; 208 | } 209 | -------------------------------------------------------------------------------- /lib/UI/header_card.dart: -------------------------------------------------------------------------------- 1 | import 'package:earthquake_data_mapper/Model/earthquake.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:earthquake_data_mapper/Model/data.dart'; 4 | import 'package:earthquake_data_mapper/UI/colors.dart' as colors; 5 | import 'package:auto_size_text/auto_size_text.dart'; 6 | import 'maps.dart'; 7 | import 'package:google_maps_flutter/google_maps_flutter.dart'; 8 | 9 | class HeaderCard extends StatefulWidget { 10 | @override 11 | _HeaderCardState createState() => _HeaderCardState(); 12 | } 13 | 14 | class _HeaderCardState extends State { 15 | EarthquakeData earthquakeData = new EarthquakeData(); 16 | List allDayEarthquakes = new List(); 17 | 18 | _HeaderCardState() { 19 | getQuakes("all", "day").then((val) { 20 | setState(() { 21 | allDayEarthquakes = earthquakeData.initEarthquakeData(val); 22 | }); 23 | }); 24 | } 25 | 26 | @override 27 | Widget build(BuildContext context) { 28 | return new Card( 29 | color: colors.color, 30 | child: new Row( 31 | mainAxisAlignment: MainAxisAlignment.spaceAround, 32 | children: [ 33 | new Container( 34 | width: MediaQuery.of(context).size.width / 10 * 3.75, 35 | child: new AutoSizeText( 36 | allDayEarthquakes.length.toString(), 37 | textDirection: TextDirection.ltr, 38 | textAlign: TextAlign.center, 39 | style: new TextStyle( 40 | fontSize: 75.0, 41 | fontWeight: FontWeight.w100, 42 | color: Colors.red[600], 43 | ), 44 | maxLines: 1, 45 | ), 46 | ), 47 | new Container( 48 | child: new Column( 49 | mainAxisSize: MainAxisSize.min, 50 | crossAxisAlignment: CrossAxisAlignment.end, 51 | children: [ 52 | new Container( 53 | padding: const EdgeInsets.only(top: 12.0), 54 | child: new AutoSizeText( 55 | "Earthquakes today", 56 | style: new TextStyle( 57 | fontSize: 18.0, fontWeight: FontWeight.w400), 58 | maxLines: 1, 59 | ), 60 | ), 61 | new ButtonTheme.bar( 62 | child: ButtonBar( 63 | alignment: MainAxisAlignment.end, 64 | children: [ 65 | new FlatButton( 66 | child: new Text( 67 | "View all", 68 | ), 69 | textColor: Colors.red, 70 | onPressed: () { 71 | print("pressed"); 72 | // setState(() { 73 | // earthquakeData.showMap(allDayEarthquakes); 74 | // }); 75 | List markers = new List(); 76 | for (Earthquake e in allDayEarthquakes) { 77 | markers.add( 78 | new MarkerOptions( 79 | visible: true, 80 | position: new LatLng(e.lat, e.long), 81 | infoWindowText: new InfoWindowText( 82 | 'Mag: ${e.mag} | ${e.place}', null), 83 | ), 84 | ); 85 | } 86 | Navigator.of(context).push(new MaterialPageRoute( 87 | builder: (BuildContext context) => 88 | Maps(markers))); 89 | }, 90 | ), 91 | ], 92 | ), 93 | ) 94 | ], 95 | ), 96 | ), 97 | ], 98 | ), 99 | ); 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /lib/UI/maps.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:google_maps_flutter/google_maps_flutter.dart'; 3 | import 'package:location/location.dart'; 4 | 5 | class Maps extends StatefulWidget { 6 | final List markers; 7 | final LatLng zoomTo; 8 | 9 | Maps(this.markers, {this.zoomTo}); 10 | 11 | @override 12 | _MapsState createState() => _MapsState(markers, zoomTo: this.zoomTo); 13 | } 14 | 15 | class _MapsState extends State { 16 | GoogleMapController mapController; 17 | List markers; 18 | LatLng pos; 19 | LatLng zoomTo; 20 | 21 | _MapsState(this.markers, {this.zoomTo}); 22 | 23 | @override 24 | Widget build(BuildContext context) { 25 | return new Scaffold( 26 | appBar: new AppBar( 27 | title: new Text("Earthquake Data Mapper"), 28 | centerTitle: true, 29 | backgroundColor: Colors.red, 30 | ), 31 | body: Center( 32 | child: GoogleMap( 33 | onMapCreated: _onMapCreated, 34 | options: GoogleMapOptions( 35 | myLocationEnabled: true, 36 | tiltGesturesEnabled: true, 37 | ), 38 | ), 39 | ), 40 | ); 41 | } 42 | 43 | void _onMapCreated(GoogleMapController controller) async { 44 | for (MarkerOptions m in markers) { 45 | controller.addMarker(m); 46 | } 47 | var currentLocation = {}; 48 | var location = new Location(); 49 | currentLocation = await location.getLocation(); 50 | var homeLat = currentLocation['latitude']; 51 | var homeLon = currentLocation['longitude']; 52 | LatLng pos = new LatLng(homeLat, homeLon); 53 | double zoom = 0; 54 | 55 | if (currentLocation == null) { 56 | pos = new LatLng(34, -71); 57 | } 58 | 59 | if (zoomTo != null) { 60 | pos = zoomTo; 61 | zoom = 10; 62 | } 63 | 64 | controller.animateCamera(CameraUpdate.newLatLngZoom(pos, zoom)); 65 | setState(() { 66 | mapController = controller; 67 | }); 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /lib/UI/most_sig_list.dart: -------------------------------------------------------------------------------- 1 | import 'package:earthquake_data_mapper/Model/data.dart'; 2 | import 'package:earthquake_data_mapper/Model/earthquake.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:earthquake_data_mapper/Model/api_info.dart' as apiInfo; 5 | import 'package:earthquake_data_mapper/UI/colors.dart' as colors; 6 | import 'package:auto_size_text/auto_size_text.dart'; 7 | import 'dots_indicator.dart'; 8 | import 'package:google_maps_flutter/google_maps_flutter.dart'; 9 | import 'maps.dart'; 10 | import 'package:earthquake_data_mapper/Model/static_maps.dart'; 11 | 12 | const static_maps_api_key = apiInfo.apiKey; 13 | 14 | class MostSigList extends StatefulWidget { 15 | @override 16 | _MostSigListState createState() => _MostSigListState(); 17 | } 18 | 19 | class _MostSigListState extends State { 20 | EarthquakeData earthquakeData = new EarthquakeData(); 21 | List sigWeekEarthquakes = new List(); 22 | List allDayEarthquakes = new List(); 23 | 24 | final _controller = new PageController(); 25 | 26 | static const _kDuration = const Duration(milliseconds: 300); 27 | 28 | static const _kCurve = Curves.ease; 29 | 30 | @override 31 | void initState() { 32 | super.initState(); 33 | getQuakes("significant", "week").then((val) { 34 | var temp = earthquakeData.initEarthquakeData(val); 35 | temp.sort((e1, e2) => e2.mag.compareTo(e1.mag)); 36 | setState(() { 37 | sigWeekEarthquakes = temp; 38 | }); 39 | }); 40 | getQuakes("all", "day").then((val) { 41 | setState(() { 42 | allDayEarthquakes = earthquakeData.initEarthquakeData(val); 43 | }); 44 | }); 45 | } 46 | 47 | @override 48 | Widget build(BuildContext context) { 49 | if (sigWeekEarthquakes.length == 0) { 50 | return noSigCard(); 51 | } 52 | return new Container( 53 | child: new Card( 54 | color: colors.color, 55 | child: new Column( 56 | mainAxisSize: MainAxisSize.min, 57 | crossAxisAlignment: CrossAxisAlignment.start, 58 | children: [ 59 | new Container( 60 | padding: const EdgeInsets.all(8.0), 61 | child: new Center( 62 | child: new AutoSizeText( 63 | "Most Significant Earthquakes This Week", 64 | style: new TextStyle(fontSize: 18.0), 65 | textAlign: TextAlign.center, 66 | maxLines: 1, 67 | ), 68 | ), 69 | ), 70 | new Divider( 71 | height: 4.0, 72 | ), 73 | new ConstrainedBox( 74 | constraints: new BoxConstraints.tightFor( 75 | height: 300, 76 | ), 77 | child: new PageView.builder( 78 | physics: AlwaysScrollableScrollPhysics(), 79 | controller: _controller, 80 | itemCount: sigWeekEarthquakes.length, 81 | itemBuilder: (_, i) { 82 | return mostSigCard(i); 83 | }, 84 | ), 85 | ), 86 | new Divider( 87 | height: 4.0, 88 | ), 89 | new Container( 90 | padding: const EdgeInsets.all(8.0), 91 | child: new Center( 92 | child: new DotsIndicator( 93 | color: Colors.grey, 94 | controller: _controller, 95 | itemCount: sigWeekEarthquakes.length, 96 | onPageSelected: (int page) { 97 | _controller.animateToPage( 98 | page, 99 | duration: _kDuration, 100 | curve: _kCurve, 101 | ); 102 | }, 103 | ), 104 | ), 105 | ), 106 | ], 107 | ), 108 | ), 109 | ); 110 | } 111 | 112 | Widget mostSigCard(int i) { 113 | // for significant earthquakes 114 | // id = 1000 + i 115 | // 1000, 1001 116 | Earthquake earth = sigWeekEarthquakes[i]; 117 | Marker marker = new Marker( 118 | (1000 + i).toString(), 119 | new MarkerOptions( 120 | infoWindowText: 121 | new InfoWindowText('Mag: ${earth.mag} | ${earth.place}', null), 122 | position: new LatLng(earth.lat, earth.long))); 123 | 124 | return new Container( 125 | // width: 336.0, 126 | child: new Column( 127 | mainAxisSize: MainAxisSize.min, 128 | children: [ 129 | new Row( 130 | mainAxisSize: MainAxisSize.max, 131 | mainAxisAlignment: MainAxisAlignment.center, 132 | children: [ 133 | new Container( 134 | width: MediaQuery.of(context).size.width / 2 - 24.0, 135 | child: new Column( 136 | crossAxisAlignment: CrossAxisAlignment.start, 137 | mainAxisAlignment: MainAxisAlignment.start, 138 | mainAxisSize: MainAxisSize.min, 139 | children: [ 140 | new Padding( 141 | padding: const EdgeInsets.all(10.0), 142 | child: new Text( 143 | "Magnitude: ${earth.mag}", 144 | style: new TextStyle( 145 | fontSize: 14.0, 146 | fontWeight: FontWeight.bold, 147 | ), 148 | ), 149 | ), 150 | new Padding( 151 | padding: const EdgeInsets.all(10.0), 152 | child: new Text( 153 | earth.time.toString(), 154 | style: new TextStyle( 155 | fontSize: 14.0, 156 | ), 157 | ), 158 | ), 159 | new Padding( 160 | padding: const EdgeInsets.all(10.0), 161 | child: new Text( 162 | earth.place, 163 | style: new TextStyle( 164 | fontSize: 14.0, 165 | ), 166 | ), 167 | ), 168 | ], 169 | ), 170 | ), 171 | new Expanded( 172 | child: new Padding( 173 | padding: const EdgeInsets.only( 174 | top: 8.0, bottom: 4.0, left: 4.0, right: 8.0), 175 | child: new Container( 176 | child: new StaticMapsProvider( 177 | static_maps_api_key, 178 | marker: marker, 179 | ), 180 | ), 181 | ), 182 | ), 183 | ], 184 | ), 185 | new ButtonTheme.bar( 186 | child: ButtonBar( 187 | alignment: MainAxisAlignment.end, 188 | children: [ 189 | new FlatButton( 190 | child: new Text( 191 | "View on map", 192 | ), 193 | textColor: Colors.red, 194 | onPressed: () { 195 | List markers = new List(); 196 | for (Earthquake e in allDayEarthquakes) { 197 | markers.add( 198 | new MarkerOptions( 199 | visible: true, 200 | position: new LatLng(e.lat, e.long), 201 | infoWindowText: new InfoWindowText( 202 | 'Mag: ${e.mag} | ${e.place}', null), 203 | ), 204 | ); 205 | } 206 | markers.add( 207 | new MarkerOptions( 208 | visible: true, 209 | position: new LatLng(earth.lat, earth.long), 210 | icon: BitmapDescriptor.defaultMarkerWithHue( 211 | BitmapDescriptor.hueAzure), 212 | ), 213 | ); 214 | Navigator.of(context).push(new MaterialPageRoute( 215 | builder: (BuildContext context) => Maps(markers, 216 | zoomTo: new LatLng(earth.lat, earth.long)))); 217 | }, 218 | ), 219 | ], 220 | ), 221 | ) 222 | ], 223 | ), 224 | ); 225 | } 226 | 227 | Widget noSigCard() { 228 | return new Container( 229 | color: Colors.grey[300], 230 | height: 220.0, 231 | width: 400.0, 232 | child: new Card( 233 | child: new Center( 234 | child: new Text( 235 | "No Significant Earthquakes in the past week", 236 | style: new TextStyle( 237 | fontSize: 20.0, 238 | fontWeight: FontWeight.w300, 239 | ), 240 | textAlign: TextAlign.center, 241 | ), 242 | ), 243 | ), 244 | ); 245 | } 246 | } 247 | -------------------------------------------------------------------------------- /lib/UI/near_me.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:cloud_firestore/cloud_firestore.dart'; 4 | import 'package:earthquake_data_mapper/Model/data.dart'; 5 | import 'package:earthquake_data_mapper/Model/earthquake.dart'; 6 | import 'package:firebase_messaging/firebase_messaging.dart'; 7 | import 'package:flutter/material.dart'; 8 | import 'dart:math'; 9 | import 'package:location/location.dart'; 10 | import 'package:earthquake_data_mapper/UI/colors.dart' as colors; 11 | import 'package:google_maps_flutter/google_maps_flutter.dart'; 12 | import 'maps.dart'; 13 | 14 | final Firestore db = Firestore.instance; 15 | final FirebaseMessaging _firebaseMessaging = FirebaseMessaging(); 16 | 17 | class NearMe extends StatefulWidget { 18 | @override 19 | _NearMeState createState() => _NearMeState(); 20 | } 21 | 22 | class _NearMeState extends State { 23 | List earthquakeWidgets = new List(); 24 | List allDayEarthquakes = new List(); 25 | EarthquakeData earthquakeData = new EarthquakeData(); 26 | final _controller = TextEditingController(); 27 | 28 | int range = 250; // miles 29 | 30 | @override 31 | void initState() { 32 | super.initState(); 33 | _getData(); 34 | } 35 | 36 | void _getData() async { 37 | _firebaseMessaging.getToken().then((getToken) { 38 | var token = getToken; 39 | db.collection('locations').document(token).get().then((snapshot) { 40 | setState(() { 41 | if (snapshot.data['range'] != null) { 42 | range = snapshot.data['range']; 43 | } else { 44 | range = 250; 45 | } 46 | }); 47 | getQuakes("all", "day").then((val) { 48 | allDayEarthquakes = earthquakeData.initEarthquakeData(val); 49 | _getEarthquakesNearMe(allDayEarthquakes).then((val2) { 50 | setState(() { 51 | earthquakeWidgets = val2; 52 | }); 53 | }); 54 | }); 55 | }); 56 | }); 57 | } 58 | 59 | @override 60 | Widget build(BuildContext context) { 61 | var width = MediaQuery.of(context).size.width; 62 | return new Card( 63 | color: colors.color, 64 | child: new GestureDetector( 65 | onLongPress: _showDialog, 66 | child: new ExpansionTile( 67 | title: new Row( 68 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 69 | children: [ 70 | new Column( 71 | mainAxisSize: MainAxisSize.min, 72 | crossAxisAlignment: CrossAxisAlignment.start, 73 | children: [ 74 | new Text( 75 | "Earthquakes Near Me", 76 | style: new TextStyle( 77 | fontSize: width <= 320 ? 12.0 : 14.0, 78 | color: Colors.black, 79 | ), 80 | ), 81 | new Text( 82 | "Range: $range mi.", 83 | style: new TextStyle( 84 | fontSize: 12.0, 85 | color: Colors.black, 86 | ), 87 | ), 88 | ], 89 | ), 90 | new PopupMenuButton( 91 | itemBuilder: (_) { 92 | return [ 93 | new PopupMenuItem( 94 | child: new InkWell( 95 | onTap: _showDialog, 96 | child: new Text('Change Range'), 97 | ), 98 | ), 99 | ]; 100 | }, 101 | ), 102 | ], 103 | ), 104 | leading: new CircleAvatar( 105 | backgroundColor: Colors.red, 106 | child: new Text( 107 | '${earthquakeWidgets.length}', 108 | style: new TextStyle(color: Colors.white), 109 | ), 110 | ), 111 | children: earthquakeWidgets, 112 | ), 113 | ), 114 | ); 115 | } 116 | 117 | _showDialog() { 118 | showDialog( 119 | context: context, 120 | builder: (BuildContext context) { 121 | return _getAlertDialog(); 122 | }).then((value) { 123 | if (value != null) { 124 | print("value: $value"); 125 | setState(() { 126 | range = int.parse(value); 127 | _saveRange(); 128 | _getData(); 129 | }); 130 | print("range: $range"); 131 | } 132 | }); 133 | } 134 | 135 | _getAlertDialog() { 136 | print("get alert dialog"); 137 | _controller.clear(); 138 | return new AlertDialog( 139 | contentPadding: const EdgeInsets.all(16.0), 140 | content: new Row( 141 | children: [ 142 | new Expanded( 143 | child: new TextField( 144 | autofocus: true, 145 | controller: _controller, 146 | decoration: 147 | new InputDecoration(labelText: 'Range', hintText: '100'), 148 | ), 149 | ), 150 | new Padding( 151 | padding: const EdgeInsets.only(top: 12.0), 152 | child: new Text("mi."), 153 | ), 154 | ], 155 | ), 156 | actions: [ 157 | new FlatButton( 158 | child: const Text('CANCEL'), 159 | onPressed: () { 160 | Navigator.of(context).pop(); 161 | }), 162 | new FlatButton( 163 | child: const Text('CHANGE'), 164 | onPressed: () { 165 | print("Text: ${_controller.text}"); 166 | Navigator.of(context).pop(_controller.text); 167 | }) 168 | ], 169 | ); 170 | } 171 | 172 | Future> _getEarthquakesNearMe(List allDay) async { 173 | // a map of distances and earthquakes for sorting purposes 174 | List earthquakesNearMe = new List(); 175 | List distances = new List(); 176 | List widgets = new List(); 177 | 178 | var currentLocation = {}; 179 | var location = new Location(); 180 | currentLocation = await location.getLocation(); 181 | var homeLat = currentLocation['latitude']; 182 | var homeLon = currentLocation['longitude']; 183 | 184 | if (currentLocation == null) { 185 | return new List(); 186 | } 187 | 188 | for (int i = 0; i < allDay.length; i++) { 189 | double d = _getDistance(homeLat, homeLon, allDay[i].lat, allDay[i].long); 190 | if (d <= range) { 191 | earthquakesNearMe.add(allDay[i]); 192 | distances.add(d); 193 | } 194 | } 195 | 196 | // sort by distance 197 | earthquakesNearMe.sort((e1, e2) => 198 | _getDistance(homeLat, homeLon, e1.lat, e1.long) 199 | .compareTo(_getDistance(homeLat, homeLon, e2.lat, e2.long))); 200 | 201 | distances.sort((d1, d2) => d1.compareTo(d2)); 202 | 203 | for (var i = 0; i < earthquakesNearMe.length; i++) { 204 | widgets.add(_getEarthquakeWidget(earthquakesNearMe[i], distances[i])); 205 | } 206 | 207 | return widgets; 208 | } 209 | 210 | Widget _getEarthquakeWidget(Earthquake earthquake, double dist) { 211 | int roundedDist = dist.round(); 212 | return new ListTile( 213 | leading: new CircleAvatar( 214 | child: new Text( 215 | '${earthquake.mag}', 216 | style: new TextStyle(color: Colors.white), 217 | ), 218 | backgroundColor: Colors.red, 219 | ), 220 | title: new Text('${earthquake.place}'), 221 | subtitle: new Text('${earthquake.time}'), 222 | trailing: new Text('$roundedDist mi.'), 223 | onTap: () { 224 | List markers = new List(); 225 | for (Earthquake e in allDayEarthquakes) { 226 | markers.add( 227 | new MarkerOptions( 228 | visible: true, 229 | position: new LatLng(e.lat, e.long), 230 | infoWindowText: 231 | new InfoWindowText('Mag: ${e.mag} | ${e.place}', null), 232 | ), 233 | ); 234 | } 235 | markers.add( 236 | new MarkerOptions( 237 | visible: true, 238 | position: new LatLng(earthquake.lat, earthquake.long), 239 | icon: BitmapDescriptor.defaultMarkerWithHue( 240 | BitmapDescriptor.hueAzure), 241 | ), 242 | ); 243 | Navigator.of(context).push(new MaterialPageRoute( 244 | builder: (BuildContext context) => Maps(markers, 245 | zoomTo: new LatLng(earthquake.lat, earthquake.long)))); 246 | }, 247 | ); 248 | } 249 | 250 | double _getDistance( 251 | double homeLat, double homeLon, double earthLat, double earthLon) { 252 | const r = 6371; 253 | var dLat = _degToRad(earthLat - homeLat); 254 | var dLon = _degToRad(earthLon - homeLon); 255 | var a = sin(dLat / 2) * sin(dLat / 2) + 256 | cos(_degToRad(homeLat)) * 257 | cos(_degToRad(earthLat)) * 258 | sin(dLon / 2) * 259 | sin(dLon / 2); 260 | var c = 2 * atan2(sqrt(a), sqrt(1 - a)); 261 | var d = r * c; 262 | d = d * 0.621371; // for miles 263 | return d; 264 | } 265 | 266 | double _degToRad(double degrees) => degrees * (pi / 180); 267 | 268 | void _saveRange() { 269 | _firebaseMessaging.getToken().then((getToken) { 270 | var token = getToken; 271 | db 272 | .collection('locations') 273 | .document(token) 274 | .setData({'range': range}, merge: true); 275 | }); 276 | } 277 | } 278 | -------------------------------------------------------------------------------- /lib/UI/settings_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:firebase_messaging/firebase_messaging.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:cloud_firestore/cloud_firestore.dart'; 4 | 5 | final Firestore db = Firestore.instance; 6 | final FirebaseMessaging _firebaseMessaging = FirebaseMessaging(); 7 | 8 | class SettingsPage extends StatefulWidget { 9 | @override 10 | _SettingsPageState createState() => _SettingsPageState(); 11 | } 12 | 13 | class _SettingsPageState extends State { 14 | var token; 15 | var _dist; 16 | var _minMag; 17 | Widget hint1, hint2; 18 | 19 | _SettingsPageState() { 20 | _firebaseMessaging.getToken().then((getToken) async { 21 | token = getToken; 22 | var dist = await getDistance(); 23 | setState(() { 24 | _dist = dist; 25 | }); 26 | hint1 = new Text(_dist.toString()); 27 | 28 | var minMag = await getMinMag(); 29 | setState(() { 30 | _minMag = minMag; 31 | }); 32 | hint2 = new Text(_minMag.toString()); 33 | }); 34 | } 35 | 36 | void saveDistance(int dist) async { 37 | setState(() { 38 | _dist = dist; 39 | }); 40 | db 41 | .collection('locations') 42 | .document(token) 43 | .setData({'maxDist': dist}, merge: true); 44 | } 45 | 46 | Future getDistance() async { 47 | var doc = await db.collection('locations').document(token).get(); 48 | return doc.data['maxDist']; 49 | } 50 | 51 | void saveMinMag(int minMag) async { 52 | setState(() { 53 | _minMag = minMag; 54 | }); 55 | db 56 | .collection('locations') 57 | .document(token) 58 | .setData({'minMag': minMag}, merge: true); 59 | } 60 | 61 | Future getMinMag() async { 62 | var doc = await db.collection('locations').document(token).get(); 63 | return doc.data['minMag']; 64 | } 65 | 66 | @override 67 | Widget build(BuildContext context) { 68 | return Scaffold( 69 | appBar: new AppBar( 70 | title: new Text("Settings"), 71 | centerTitle: true, 72 | backgroundColor: Colors.red, 73 | ), 74 | body: new Container( 75 | padding: const EdgeInsets.only(top: 8.0), 76 | child: new ListView( 77 | children: [ 78 | maxRadius(), 79 | minMagnitude(), 80 | ], 81 | ), 82 | ), 83 | ); 84 | } 85 | 86 | Widget maxRadius() { 87 | return new ListTile( 88 | title: new Text("Notifications"), 89 | subtitle: 90 | new Text("Maximum radius for earthquake notifications in miles"), 91 | trailing: new DropdownButton( 92 | key: new Key("1"), 93 | onChanged: saveDistance, 94 | hint: hint1, 95 | value: _dist, 96 | items: >[ 97 | menuItem(10), 98 | menuItem(50), 99 | menuItem(100), 100 | menuItem(250), 101 | menuItem(500), 102 | menuItem(1000), 103 | menuItem(2000), 104 | menuItem(5000), 105 | ], 106 | ), 107 | ); 108 | } 109 | 110 | Widget minMagnitude() { 111 | return new ListTile( 112 | title: new Text("Notifications"), 113 | subtitle: new Text("Minimum magnitude for earthquake notifications"), 114 | trailing: new DropdownButton( 115 | key: new Key("2"), 116 | onChanged: saveMinMag, 117 | value: _minMag, 118 | hint: hint2, 119 | items: >[ 120 | menuItem(0), 121 | menuItem(1), 122 | menuItem(2), 123 | menuItem(3), 124 | menuItem(4), 125 | menuItem(5), 126 | menuItem(6), 127 | menuItem(7), 128 | menuItem(8), 129 | menuItem(9), 130 | ], 131 | ), 132 | ); 133 | } 134 | 135 | DropdownMenuItem menuItem(int value) { 136 | return new DropdownMenuItem( 137 | value: value, 138 | child: Text(value.toString()), 139 | ); 140 | } 141 | } 142 | -------------------------------------------------------------------------------- /lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:earthquake_data_mapper/UI/expansion_tile.dart'; 2 | import 'package:earthquake_data_mapper/UI/header_card.dart'; 3 | import 'package:earthquake_data_mapper/UI/most_sig_list.dart'; 4 | import 'package:earthquake_data_mapper/UI/near_me.dart'; 5 | import 'package:firebase_admob/firebase_admob.dart'; 6 | import 'package:flutter/material.dart'; 7 | import 'dart:async'; 8 | import 'package:earthquake_data_mapper/UI/settings_page.dart'; 9 | import 'package:firebase_messaging/firebase_messaging.dart'; 10 | import 'package:location/location.dart'; 11 | import 'package:cloud_firestore/cloud_firestore.dart'; 12 | 13 | final Firestore db = Firestore.instance; 14 | final FirebaseMessaging _firebaseMessaging = FirebaseMessaging(); 15 | final ENV = 'prod'; 16 | 17 | // Icon made by Freepik from www.flaticon.com 18 | 19 | void main() { 20 | // MapView.setApiKey(apiInfo.apiKey); 21 | runApp(new MaterialApp( 22 | debugShowCheckedModeBanner: false, 23 | title: "Earthquake Data Mapper", 24 | home: new Home(), 25 | )); 26 | } 27 | 28 | class Home extends StatefulWidget { 29 | @override 30 | _HomeState createState() => new _HomeState(); 31 | } 32 | 33 | class _HomeState extends State { 34 | var refreshKey = GlobalKey(); 35 | var scaffoldKey = new GlobalKey(); 36 | List homePageWidgets = new List(); 37 | BannerAd _bannerAd; 38 | 39 | @override 40 | void initState() { 41 | super.initState(); 42 | setUpFirebaseMessaging(); 43 | refreshHomePage(); 44 | setState(() { 45 | homePageWidgets = new List(); 46 | homePageWidgets.add(new Padding( 47 | padding: const EdgeInsets.only(top: 16.0), 48 | )); 49 | homePageWidgets.add(new HeaderCard()); 50 | homePageWidgets.add(new MostSigList()); 51 | homePageWidgets.add(new NearMe()); 52 | homePageWidgets.add(new ExpansionList()); 53 | }); 54 | 55 | FirebaseAdMob.instance.initialize( 56 | appId: ENV == 'staging' 57 | ? FirebaseAdMob.testAppId 58 | : 'ca-app-pub-2682134172957549/3217764824'); 59 | 60 | MobileAdTargetingInfo targetingInfo = MobileAdTargetingInfo( 61 | keywords: ['earthquake', 'earthquake map'], 62 | contentUrl: 'https://flutter.io', 63 | childDirected: false, 64 | testDevices: [], 65 | ); 66 | 67 | _bannerAd = BannerAd( 68 | // Replace the testAdUnitId with an ad unit id from the AdMob dash. 69 | // https://developers.google.com/admob/android/test-ads 70 | // https://developers.google.com/admob/ios/test-ads 71 | adUnitId: ENV == 'staging' 72 | ? BannerAd.testAdUnitId 73 | : 'ca-app-pub-2682134172957549/3217764824', 74 | size: AdSize.smartBanner, 75 | targetingInfo: targetingInfo, 76 | listener: (MobileAdEvent event) { 77 | print("BannerAd event is $event"); 78 | }, 79 | ); 80 | 81 | _bannerAd 82 | // typically this happens well before the ad is shown 83 | ..load() 84 | ..show( 85 | anchorOffset: AppBar().preferredSize.height + 50, 86 | // Banner Position 87 | anchorType: AnchorType.top, 88 | ); 89 | } 90 | 91 | @override 92 | void dispose() { 93 | _bannerAd?.dispose(); 94 | super.dispose(); 95 | } 96 | 97 | setUpFirebaseMessaging() async { 98 | _firebaseMessaging.requestNotificationPermissions( 99 | new IosNotificationSettings(sound: true, badge: true, alert: true)); 100 | _firebaseMessaging.onIosSettingsRegistered 101 | .listen((IosNotificationSettings settings) { 102 | print("Settings registered: $settings"); 103 | }); 104 | var token = await _firebaseMessaging.getToken(); 105 | assert(token != null); 106 | print("Token: " + token); 107 | await saveCurrentLocation(token); 108 | } 109 | 110 | saveCurrentLocation(String token) async { 111 | var currentLocation = {}; 112 | 113 | var location = new Location(); 114 | 115 | currentLocation = await location.getLocation(); 116 | 117 | if (currentLocation == null) { 118 | return; 119 | } 120 | 121 | db.collection('locations').document(token).setData({ 122 | 'token': token, 123 | 'latitude': currentLocation["latitude"], 124 | 'longitude': currentLocation['longitude'], 125 | }, merge: true); 126 | 127 | var data = await db.collection('locations').document(token).get(); 128 | if (data.data['maxDist'] == null) { 129 | db 130 | .collection('locations') 131 | .document(token) 132 | .setData({'maxDist': 250}, merge: true); 133 | } 134 | 135 | if (data.data['minMag'] == null) { 136 | db 137 | .collection('locations') 138 | .document(token) 139 | .setData({'minMag': 0}, merge: true); 140 | } 141 | } 142 | 143 | Future refreshHomePage() async { 144 | final Completer completer = new Completer(); 145 | new Timer(const Duration(seconds: 2), () { 146 | completer.complete(null); 147 | }); 148 | return completer.future.then((_) { 149 | setState(() { 150 | homePageWidgets = new List(); 151 | homePageWidgets.add(new Padding( 152 | padding: const EdgeInsets.only(top: 16.0), 153 | )); 154 | homePageWidgets.add(new HeaderCard()); 155 | homePageWidgets.add(new MostSigList()); 156 | homePageWidgets.add(new NearMe()); 157 | homePageWidgets.add(new ExpansionList()); 158 | }); 159 | scaffoldKey.currentState?.showSnackBar( 160 | new SnackBar( 161 | content: const Text('Refresh complete'), 162 | action: new SnackBarAction( 163 | label: 'RETRY', 164 | onPressed: () { 165 | refreshKey.currentState.show(); 166 | }, 167 | ), 168 | ), 169 | ); 170 | }); 171 | } 172 | 173 | void goToSettings() { 174 | Navigator.of(context) 175 | .push(new MaterialPageRoute(builder: (context) => SettingsPage())); 176 | } 177 | 178 | @override 179 | Widget build(BuildContext context) { 180 | return new Scaffold( 181 | key: scaffoldKey, 182 | appBar: new AppBar( 183 | title: new Text("Earthquake Data Mapper"), 184 | centerTitle: true, 185 | backgroundColor: Colors.red, 186 | actions: [ 187 | new IconButton( 188 | icon: Icon(Icons.settings), 189 | onPressed: goToSettings, 190 | ) 191 | ], 192 | ), 193 | body: new Container( 194 | // color: const Color(0xFF404040), 195 | padding: EdgeInsets.only(left: 4.0, right: 4.0, top: 40.0), 196 | color: Colors.grey[350], 197 | child: new RefreshIndicator( 198 | key: refreshKey, 199 | child: new ListView( 200 | physics: const AlwaysScrollableScrollPhysics(), 201 | children: homePageWidgets, 202 | ), 203 | onRefresh: refreshHomePage, 204 | ), 205 | ), 206 | ); 207 | } 208 | } 209 | -------------------------------------------------------------------------------- /pubspec.lock: -------------------------------------------------------------------------------- 1 | # Generated by pub 2 | # See https://dart.dev/tools/pub/glossary#lockfile 3 | packages: 4 | archive: 5 | dependency: transitive 6 | description: 7 | name: archive 8 | url: "https://pub.dartlang.org" 9 | source: hosted 10 | version: "2.0.11" 11 | args: 12 | dependency: transitive 13 | description: 14 | name: args 15 | url: "https://pub.dartlang.org" 16 | source: hosted 17 | version: "1.5.2" 18 | async: 19 | dependency: transitive 20 | description: 21 | name: async 22 | url: "https://pub.dartlang.org" 23 | source: hosted 24 | version: "2.4.0" 25 | auto_size_text: 26 | dependency: "direct main" 27 | description: 28 | name: auto_size_text 29 | url: "https://pub.dartlang.org" 30 | source: hosted 31 | version: "0.3.0" 32 | boolean_selector: 33 | dependency: transitive 34 | description: 35 | name: boolean_selector 36 | url: "https://pub.dartlang.org" 37 | source: hosted 38 | version: "1.0.5" 39 | charcode: 40 | dependency: transitive 41 | description: 42 | name: charcode 43 | url: "https://pub.dartlang.org" 44 | source: hosted 45 | version: "1.1.2" 46 | cloud_firestore: 47 | dependency: "direct main" 48 | description: 49 | name: cloud_firestore 50 | url: "https://pub.dartlang.org" 51 | source: hosted 52 | version: "0.7.4" 53 | collection: 54 | dependency: transitive 55 | description: 56 | name: collection 57 | url: "https://pub.dartlang.org" 58 | source: hosted 59 | version: "1.14.11" 60 | convert: 61 | dependency: transitive 62 | description: 63 | name: convert 64 | url: "https://pub.dartlang.org" 65 | source: hosted 66 | version: "2.1.1" 67 | crypto: 68 | dependency: transitive 69 | description: 70 | name: crypto 71 | url: "https://pub.dartlang.org" 72 | source: hosted 73 | version: "2.1.3" 74 | cupertino_icons: 75 | dependency: "direct main" 76 | description: 77 | name: cupertino_icons 78 | url: "https://pub.dartlang.org" 79 | source: hosted 80 | version: "0.1.2" 81 | firebase_admob: 82 | dependency: "direct main" 83 | description: 84 | name: firebase_admob 85 | url: "https://pub.dartlang.org" 86 | source: hosted 87 | version: "0.7.0" 88 | firebase_auth: 89 | dependency: "direct main" 90 | description: 91 | name: firebase_auth 92 | url: "https://pub.dartlang.org" 93 | source: hosted 94 | version: "0.6.2+1" 95 | firebase_core: 96 | dependency: "direct main" 97 | description: 98 | name: firebase_core 99 | url: "https://pub.dartlang.org" 100 | source: hosted 101 | version: "0.2.5+1" 102 | firebase_messaging: 103 | dependency: "direct main" 104 | description: 105 | name: firebase_messaging 106 | url: "https://pub.dartlang.org" 107 | source: hosted 108 | version: "2.1.0" 109 | flutter: 110 | dependency: "direct main" 111 | description: flutter 112 | source: sdk 113 | version: "0.0.0" 114 | flutter_test: 115 | dependency: "direct dev" 116 | description: flutter 117 | source: sdk 118 | version: "0.0.0" 119 | google_maps_flutter: 120 | dependency: "direct main" 121 | description: 122 | name: google_maps_flutter 123 | url: "https://pub.dartlang.org" 124 | source: hosted 125 | version: "0.0.3+3" 126 | http: 127 | dependency: "direct main" 128 | description: 129 | name: http 130 | url: "https://pub.dartlang.org" 131 | source: hosted 132 | version: "0.12.0" 133 | http_parser: 134 | dependency: transitive 135 | description: 136 | name: http_parser 137 | url: "https://pub.dartlang.org" 138 | source: hosted 139 | version: "3.1.3" 140 | image: 141 | dependency: transitive 142 | description: 143 | name: image 144 | url: "https://pub.dartlang.org" 145 | source: hosted 146 | version: "2.1.4" 147 | intl: 148 | dependency: "direct main" 149 | description: 150 | name: intl 151 | url: "https://pub.dartlang.org" 152 | source: hosted 153 | version: "0.15.7" 154 | location: 155 | dependency: "direct main" 156 | description: 157 | name: location 158 | url: "https://pub.dartlang.org" 159 | source: hosted 160 | version: "1.4.1" 161 | matcher: 162 | dependency: transitive 163 | description: 164 | name: matcher 165 | url: "https://pub.dartlang.org" 166 | source: hosted 167 | version: "0.12.6" 168 | meta: 169 | dependency: transitive 170 | description: 171 | name: meta 172 | url: "https://pub.dartlang.org" 173 | source: hosted 174 | version: "1.1.8" 175 | path: 176 | dependency: transitive 177 | description: 178 | name: path 179 | url: "https://pub.dartlang.org" 180 | source: hosted 181 | version: "1.6.4" 182 | petitparser: 183 | dependency: transitive 184 | description: 185 | name: petitparser 186 | url: "https://pub.dartlang.org" 187 | source: hosted 188 | version: "2.4.0" 189 | platform: 190 | dependency: transitive 191 | description: 192 | name: platform 193 | url: "https://pub.dartlang.org" 194 | source: hosted 195 | version: "2.2.0" 196 | quiver: 197 | dependency: transitive 198 | description: 199 | name: quiver 200 | url: "https://pub.dartlang.org" 201 | source: hosted 202 | version: "2.0.5" 203 | sky_engine: 204 | dependency: transitive 205 | description: flutter 206 | source: sdk 207 | version: "0.0.99" 208 | source_span: 209 | dependency: transitive 210 | description: 211 | name: source_span 212 | url: "https://pub.dartlang.org" 213 | source: hosted 214 | version: "1.5.5" 215 | stack_trace: 216 | dependency: transitive 217 | description: 218 | name: stack_trace 219 | url: "https://pub.dartlang.org" 220 | source: hosted 221 | version: "1.9.3" 222 | stream_channel: 223 | dependency: transitive 224 | description: 225 | name: stream_channel 226 | url: "https://pub.dartlang.org" 227 | source: hosted 228 | version: "2.0.0" 229 | string_scanner: 230 | dependency: transitive 231 | description: 232 | name: string_scanner 233 | url: "https://pub.dartlang.org" 234 | source: hosted 235 | version: "1.0.5" 236 | term_glyph: 237 | dependency: transitive 238 | description: 239 | name: term_glyph 240 | url: "https://pub.dartlang.org" 241 | source: hosted 242 | version: "1.1.0" 243 | test_api: 244 | dependency: transitive 245 | description: 246 | name: test_api 247 | url: "https://pub.dartlang.org" 248 | source: hosted 249 | version: "0.2.15" 250 | typed_data: 251 | dependency: transitive 252 | description: 253 | name: typed_data 254 | url: "https://pub.dartlang.org" 255 | source: hosted 256 | version: "1.1.6" 257 | vector_math: 258 | dependency: transitive 259 | description: 260 | name: vector_math 261 | url: "https://pub.dartlang.org" 262 | source: hosted 263 | version: "2.0.8" 264 | xml: 265 | dependency: transitive 266 | description: 267 | name: xml 268 | url: "https://pub.dartlang.org" 269 | source: hosted 270 | version: "3.5.0" 271 | sdks: 272 | dart: ">=2.4.0 <3.0.0" 273 | flutter: ">=0.11.9 <2.0.0" 274 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: earthquake_data_mapper 2 | description: A new Flutter project. 3 | version: 1.1.2+50 4 | 5 | dependencies: 6 | flutter: 7 | sdk: flutter 8 | 9 | # The following adds the Cupertino Icons font to your application. 10 | # Use with the CupertinoIcons class for iOS style icons. 11 | cupertino_icons: ^0.1.0 12 | intl: '^0.15.4' 13 | # geolocation: "^0.2.1" 14 | # flutter_launcher_icons: "^0.5.2" 15 | cloud_firestore: '^0.7.3' 16 | firebase_core: any 17 | firebase_auth: any 18 | firebase_messaging: any 19 | location: '^1.4.1' 20 | auto_size_text: ^0.3.0 21 | google_maps_flutter: any 22 | http: ^0.12.0 23 | firebase_admob: ^0.7.0 24 | # map_view: any 25 | 26 | dev_dependencies: 27 | flutter_test: 28 | sdk: flutter 29 | 30 | flutter_icons: 31 | android: true 32 | ios: false 33 | image_path: 'images/icon.png' 34 | 35 | # For information on the generic Dart part of this file, see the 36 | # following page: https://www.dartlang.org/tools/pub/pubspec 37 | 38 | # The following section is specific to Flutter. 39 | flutter: 40 | # The following line ensures that the Material Icons font is 41 | # included with your application, so that you can use the icons in 42 | # the material Icons class. 43 | uses-material-design: true 44 | # To add assets to your application, add an assets section, like this: 45 | # assets: 46 | # - images/a_dot_burr.jpeg 47 | # - images/a_dot_ham.jpeg 48 | # An image asset can refer to one or more resolution-specific "variants", see 49 | # https://flutter.io/assets-and-images/#resolution-aware. 50 | # For details regarding adding assets from package dependencies, see 51 | # https://flutter.io/assets-and-images/#from-packages 52 | # To add custom fonts to your application, add a fonts section here, 53 | # in this "flutter" section. Each entry in this list should have a 54 | # "family" key with the font family name, and a "fonts" key with a 55 | # list giving the asset and other descriptors for the font. For 56 | # example: 57 | # fonts: 58 | # - family: Schyler 59 | # fonts: 60 | # - asset: fonts/Schyler-Regular.ttf 61 | # - asset: fonts/Schyler-Italic.ttf 62 | # style: italic 63 | # - family: Trajan Pro 64 | # fonts: 65 | # - asset: fonts/TrajanPro.ttf 66 | # - asset: fonts/TrajanPro_Bold.ttf 67 | # weight: 700 68 | # 69 | # For details regarding fonts from package dependencies, 70 | # see https://flutter.io/custom-fonts/#from-packages 71 | -------------------------------------------------------------------------------- /screenshots/V1 iOS/screenshot1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/V1 iOS/screenshot1.png -------------------------------------------------------------------------------- /screenshots/V1 iOS/screenshot2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/V1 iOS/screenshot2.png -------------------------------------------------------------------------------- /screenshots/V1 iOS/screenshot3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/V1 iOS/screenshot3.png -------------------------------------------------------------------------------- /screenshots/V1 iOS/screenshot4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/V1 iOS/screenshot4.png -------------------------------------------------------------------------------- /screenshots/V1 iOS/screenshot5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/V1 iOS/screenshot5.png -------------------------------------------------------------------------------- /screenshots/V1 iOS/screenshot6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/V1 iOS/screenshot6.png -------------------------------------------------------------------------------- /screenshots/V1.1 Android/screenshot1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/V1.1 Android/screenshot1.jpg -------------------------------------------------------------------------------- /screenshots/V1.1 Android/screenshot2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/V1.1 Android/screenshot2.jpg -------------------------------------------------------------------------------- /screenshots/V1.1 Android/screenshot3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/V1.1 Android/screenshot3.jpg -------------------------------------------------------------------------------- /screenshots/V1.1 Android/screenshot4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/V1.1 Android/screenshot4.jpg -------------------------------------------------------------------------------- /screenshots/V1.1 Android/screenshot5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/V1.1 Android/screenshot5.jpg -------------------------------------------------------------------------------- /screenshots/V1/screenshot1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/V1/screenshot1.jpg -------------------------------------------------------------------------------- /screenshots/V1/screenshot2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/V1/screenshot2.jpg -------------------------------------------------------------------------------- /screenshots/V1/screenshot3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/V1/screenshot3.jpg -------------------------------------------------------------------------------- /screenshots/V1/screenshot4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/V1/screenshot4.jpg -------------------------------------------------------------------------------- /screenshots/V1/screenshot5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/V1/screenshot5.jpg -------------------------------------------------------------------------------- /screenshots/banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/banner.jpg -------------------------------------------------------------------------------- /screenshots/earthquakedatamapper.sketch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/earthquakedatamapper.sketch -------------------------------------------------------------------------------- /screenshots/iOS assets/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/iOS assets/Icon.png -------------------------------------------------------------------------------- /screenshots/iOS assets/iOS App Icon Template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/iOS assets/iOS App Icon Template.png -------------------------------------------------------------------------------- /screenshots/iOS assets/icon_20pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/iOS assets/icon_20pt.png -------------------------------------------------------------------------------- /screenshots/iOS assets/icon_20pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/iOS assets/icon_20pt@2x.png -------------------------------------------------------------------------------- /screenshots/iOS assets/icon_20pt@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/iOS assets/icon_20pt@3x.png -------------------------------------------------------------------------------- /screenshots/iOS assets/icon_29pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/iOS assets/icon_29pt.png -------------------------------------------------------------------------------- /screenshots/iOS assets/icon_29pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/iOS assets/icon_29pt@2x.png -------------------------------------------------------------------------------- /screenshots/iOS assets/icon_29pt@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/iOS assets/icon_29pt@3x.png -------------------------------------------------------------------------------- /screenshots/iOS assets/icon_40pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/iOS assets/icon_40pt.png -------------------------------------------------------------------------------- /screenshots/iOS assets/icon_40pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/iOS assets/icon_40pt@2x.png -------------------------------------------------------------------------------- /screenshots/iOS assets/icon_40pt@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/iOS assets/icon_40pt@3x.png -------------------------------------------------------------------------------- /screenshots/iOS assets/icon_60pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/iOS assets/icon_60pt@2x.png -------------------------------------------------------------------------------- /screenshots/iOS assets/icon_60pt@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/iOS assets/icon_60pt@3x.png -------------------------------------------------------------------------------- /screenshots/iOS assets/icon_76pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/iOS assets/icon_76pt.png -------------------------------------------------------------------------------- /screenshots/iOS assets/icon_76pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/iOS assets/icon_76pt@2x.png -------------------------------------------------------------------------------- /screenshots/iOS assets/icon_83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/iOS assets/icon_83.5@2x.png -------------------------------------------------------------------------------- /screenshots/ic_launcher512_512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NilsBacke/Earthquake-Data-Mapper/6e2fe407ddd463c52bf0a66b2a6effc2fdde6304/screenshots/ic_launcher512_512x512.png --------------------------------------------------------------------------------