From bd5ff7781fff51eff09689ccc0c046937dc23c5e Mon Sep 17 00:00:00 2001 From: gamer-12748 Date: Mon, 21 Jun 2021 16:50:33 +0530 Subject: [PATCH] new commit --- .gitignore | 41 + .metadata | 10 + .vscode/launch.json | 13 + README.md | 16 + android/.gitignore | 11 + android/app/build.gradle | 65 ++ android/app/google-services.json | 39 + android/app/src/debug/AndroidManifest.xml | 7 + android/app/src/main/AndroidManifest.xml | 50 ++ .../example/bharat_mystery/MainActivity.kt | 6 + .../main/res/drawable/launch_background.xml | 12 + android/app/src/main/res/drawable/logo_bm.png | Bin 0 -> 41157 bytes .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4406 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2880 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6021 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 9297 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 13224 bytes android/app/src/main/res/values/colors.xml | 4 + android/app/src/main/res/values/styles.xml | 18 + android/app/src/profile/AndroidManifest.xml | 7 + android/build.gradle | 32 + android/gradle.properties | 4 + .../gradle/wrapper/gradle-wrapper.properties | 6 + android/settings.gradle | 11 + fonts/LexendDeca-Regular.ttf | Bin 0 -> 67740 bytes ios/.gitignore | 32 + ios/Flutter/AppFrameworkInfo.plist | 26 + ios/Flutter/Debug.xcconfig | 1 + ios/Flutter/Release.xcconfig | 1 + ios/Runner.xcodeproj/project.pbxproj | 495 ++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 91 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 +++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 564 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 1588 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 1025 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 1716 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 1920 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 1895 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 3831 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 1888 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 3294 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 3612 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + ios/Runner/Base.lproj/LaunchScreen.storyboard | 37 + ios/Runner/Base.lproj/Main.storyboard | 26 + ios/Runner/Info.plist | 45 ++ ios/Runner/Runner-Bridging-Header.h | 1 + lib/main.dart | 63 ++ lib/screens/auth_screen.dart | 154 ++++ lib/screens/directions.dart | 55 ++ lib/screens/forgot.dart | 196 +++++ lib/screens/homepage.dart | 64 ++ lib/screens/login.dart | 281 +++++++ lib/screens/monument.dart | 486 ++++++++++++ lib/screens/profile.dart | 233 ++++++ lib/screens/quiz.dart | 288 +++++++ lib/screens/register.dart | 330 ++++++++ lib/screens/selectMonument.dart | 135 ++++ lib/screens/streetview.dart | 40 + lib/screens/theme_provider.dart | 50 ++ pubspec.lock | 726 ++++++++++++++++++ pubspec.yaml | 88 +++ test/widget_test.dart | 30 + 79 files changed, 4535 insertions(+) create mode 100644 .gitignore create mode 100644 .metadata create mode 100644 .vscode/launch.json create mode 100644 README.md create mode 100644 android/.gitignore create mode 100644 android/app/build.gradle create mode 100644 android/app/google-services.json create mode 100644 android/app/src/debug/AndroidManifest.xml create mode 100644 android/app/src/main/AndroidManifest.xml create mode 100644 android/app/src/main/kotlin/com/example/bharat_mystery/MainActivity.kt create mode 100644 android/app/src/main/res/drawable/launch_background.xml create mode 100644 android/app/src/main/res/drawable/logo_bm.png create mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/values/colors.xml create mode 100644 android/app/src/main/res/values/styles.xml create mode 100644 android/app/src/profile/AndroidManifest.xml create mode 100644 android/build.gradle create mode 100644 android/gradle.properties create mode 100644 android/gradle/wrapper/gradle-wrapper.properties create mode 100644 android/settings.gradle create mode 100644 fonts/LexendDeca-Regular.ttf create mode 100644 ios/.gitignore create mode 100644 ios/Flutter/AppFrameworkInfo.plist create mode 100644 ios/Flutter/Debug.xcconfig create mode 100644 ios/Flutter/Release.xcconfig create mode 100644 ios/Runner.xcodeproj/project.pbxproj create mode 100644 ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 ios/Runner/AppDelegate.swift create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 ios/Runner/Base.lproj/Main.storyboard create mode 100644 ios/Runner/Info.plist create mode 100644 ios/Runner/Runner-Bridging-Header.h create mode 100644 lib/main.dart create mode 100644 lib/screens/auth_screen.dart create mode 100644 lib/screens/directions.dart create mode 100644 lib/screens/forgot.dart create mode 100644 lib/screens/homepage.dart create mode 100644 lib/screens/login.dart create mode 100644 lib/screens/monument.dart create mode 100644 lib/screens/profile.dart create mode 100644 lib/screens/quiz.dart create mode 100644 lib/screens/register.dart create mode 100644 lib/screens/selectMonument.dart create mode 100644 lib/screens/streetview.dart create mode 100644 lib/screens/theme_provider.dart create mode 100644 pubspec.lock create mode 100644 pubspec.yaml create mode 100644 test/widget_test.dart diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9d532b1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,41 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Web related +lib/generated_plugin_registrant.dart + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json diff --git a/.metadata b/.metadata new file mode 100644 index 0000000..24544cb --- /dev/null +++ b/.metadata @@ -0,0 +1,10 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: 84f3d28555368a70270e9ac8390a9441df95e752 + channel: stable + +project_type: app diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..59714c3 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,13 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "bharat_mystery", + "request": "launch", + "type": "dart" + } + ] +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..ea02467 --- /dev/null +++ b/README.md @@ -0,0 +1,16 @@ +# bharat_mystery + +A new Flutter project. + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook) + +For help getting started with Flutter, view our +[online documentation](https://flutter.dev/docs), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/android/.gitignore b/android/.gitignore new file mode 100644 index 0000000..0a741cb --- /dev/null +++ b/android/.gitignore @@ -0,0 +1,11 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties diff --git a/android/app/build.gradle b/android/app/build.gradle new file mode 100644 index 0000000..46607b3 --- /dev/null +++ b/android/app/build.gradle @@ -0,0 +1,65 @@ +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterRoot = localProperties.getProperty('flutter.sdk') +if (flutterRoot == null) { + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +android { + compileSdkVersion 29 + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + lintOptions { + disable 'InvalidPackage' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.example.bharat_mystery" + minSdkVersion 21 + targetSdkVersion 29 + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug + } + } +} + +flutter { + source '../..' +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + +} +apply plugin: 'com.google.gms.google-services' diff --git a/android/app/google-services.json b/android/app/google-services.json new file mode 100644 index 0000000..a309f86 --- /dev/null +++ b/android/app/google-services.json @@ -0,0 +1,39 @@ +{ + "project_info": { + "project_number": "539587749552", + "project_id": "toycathon-talking-toy", + "storage_bucket": "toycathon-talking-toy.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:539587749552:android:df783f7d79e359be66bd75", + "android_client_info": { + "package_name": "com.example.bharat_mystery" + } + }, + "oauth_client": [ + { + "client_id": "539587749552-tgjtnfsabtneb7a4g2gsc78826pvmii3.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyC5F2yia0PyFeTS75Ers5F5GyzVDNE9hNk" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "539587749552-tgjtnfsabtneb7a4g2gsc78826pvmii3.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..3f1a0cd --- /dev/null +++ b/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..5f80a91 --- /dev/null +++ b/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/android/app/src/main/kotlin/com/example/bharat_mystery/MainActivity.kt b/android/app/src/main/kotlin/com/example/bharat_mystery/MainActivity.kt new file mode 100644 index 0000000..ed37347 --- /dev/null +++ b/android/app/src/main/kotlin/com/example/bharat_mystery/MainActivity.kt @@ -0,0 +1,6 @@ +package com.example.bharat_mystery + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() { +} diff --git a/android/app/src/main/res/drawable/launch_background.xml b/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..448ff1e --- /dev/null +++ b/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + + + diff --git a/android/app/src/main/res/drawable/logo_bm.png b/android/app/src/main/res/drawable/logo_bm.png new file mode 100644 index 0000000000000000000000000000000000000000..23c8a66f75752fc23770312dc6026edba5b170e1 GIT binary patch literal 41157 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d015318fee2fb48e43839e664c3d518cecf18a85 GIT binary patch literal 4406 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..403213c74bb259add9fbe2bd4811e1b380018769 GIT binary patch literal 2880 zcmV-G3%~Sncdm-uB~)rYrVU(v;X_Q z_kHhsZ!A>atdD{ZdJv>Pb3T$j8DdJnjYJTQ zEtWn_;nQr$IVNZV6<9M)VD7JUa#hQC@?|j{KlmTAdA?efXQxypwoc@Q5}MS zzt5SAGyC^LZ#1H`d=?&@@;m}~v!2=qC`3(Bh=@5_BTGP0bkm=%W}g>S45d zy`4(44pJ!1Zcy3?0_xA7$I&%^#pUBCkVp9*LxR%6WVZwKToe!uN8oR5jcuC1yB%r| zV8rv2@r&`#prCheghQbYQb~I)oj?G*+nl?ih}9D&q2cmn7)&N20R1o-BB3zF$efV! zoPK4F=-_Q`!N`|hz|#xfhv(KU=8c*Q@`5v`RHp(k7!44OMzq~&!nM<1L1#3m$gItv z#6koJh(yBB=jEaQuwfuB5CY-$c1AXrLlJ;hr0Umb=M5GMj;*W2f2*rucGzLaGjU!^ zXA1mR$B!}Ljz*clL9Y)ZrcB0tBS&Vz1vN4`AwW59wpy|4g_lr$`~)m^8^Xb$V#9J% z5ZZ0M!GN~rW<2%YJUlXe8d{s0Sc0=Xgvy(B#K;a85!dTz6yDleG`D#n>O@&ovi-g| zk>ejEzJ$YY_Us8;VWGsMr23NS;u-;{V~Iv1tmSuaHek=Z`3MGl(3{QB30jpkM+D+x zE|K2vcB9wOp&0k>Y)O^k@2BTQ+5lJ)1d_loTY~xv7qDjX6iF#qZ6qmW+3E752vHQc zs1*+$jA@%Ufi^CF$ls>{MOqRQj0CMLgQO5mb#>B$<9m}VbzONbNi4~6ey?7M)D#6) zsZ_fWlZ|9AL<=|Btl0mjg}C_7f5DQUA1^WnQy!vGDnx{U{Mc0hl-H5uHQXNLU~~op zT5sRRn77Mt|G2U6dps%CI!T43LZmn5q2ZfL*!bG(oR_@tNGxsCrYCL<5-+o*%aPQ{ zR!Z9Sw!1C3cla+cVZ|~S@@Nf_lscg)qg49M`A&R$@)WkbF$2LsK#`BK?fju0qihgE zem{EsWC*6L{tJ68wIx>+MQuAxst|&;pa3=d_v7;on_zZ1Q(b45_F4Ji1Zq;1jvyKd zW8B<#QAk$2t&I`U>RB=tGJ-76YK7<4ZG8XjRfsw&FapF_b3*wV?}IwSU$&)`E+VHc zEt;-Jge@5|n2Q{tPv4g=DN{J0ENY}e)K2#mDP z?Pgz;XS4BhquGqiTtX7WYJ`y*=jdw2N8Ben1((u8P^b$kAnG z=-$5{r&7a}E2vtw9A>8jk+8ZelL{f{h!mWn^;8zVi7S?~o$h{be;i-CjyKCuRD@U7 zuZOd^M=XGhl~``-Q?o%8K>2K5(6lX^P_^P?hV}88Z(#ML$&3=6D??4biFS_CfeuO! zBBAVY`29eD{m+YQR%7`Sr5HDN4%eH#^B167pC9ApwQFMmPzt5b)T~ozSH&C%qJV*; zM&Yp;uk((6wsI9N9X-lKC*|NyD-dAfIeYYgqel-8qPe~v-n(}>$7RA&+EE+%t5>Jv z{;{QSH-3*#=FdlS-3{K5S5zs~MFhS+bQoLz@D`^^ptTjQ;$lvVmc~XHO=hVFAVP-2 zaFvwcp_gC8eIp)(+2!B@=x%I8&4EvGYR66lsezX{69s|+KZ^SGh3D2CwEMhlrO8fA z-?|yjk`jd4b3!0>zC+Eo&+S2TT^$5b$EJ(YgHyw3jPE=xzTNBNT&5nE0;SjF^C*pO zT(|(w?c2z++Txlnq2`CEH}F7!iYNtG*sl-t24l?B$p|F7-6%S)12!8jA3KIa%U8f; zwZ#|Af=xeUNW&52+3a|B$wJt=b>qcTHI+F*Xi+NJi;8gR=rJ5#x{P_jogC>tHU5zV ziX@}YEcy`k!fpr!GdKGgRfxWrcKOb=T3q?!3oa~@%~j+iYk8Q{Yslk|N$!m;Uuq3s7$PJX$ zir??v2^SYKnZ!92GUGtXj+2!M~~s)lBHa6lU0Erb6k5xTNP~pPRn>E^Y&qLkNj05ft?P5fhaCPt3%nIGEVI zgXa1hXluH|{e^^N(r`l*P;}2dib9qu2yxzbs6q}0*h;)v#=Su*0s`;)#1+f%(xtD zcfki82JpKLl^Ox0+UhJ2aN=B56(|77_e&cg*hSc<+kly6XY8k$~r(6 z;{SvI-Mr9gAV3p@)I*KHPFP${4Gx63KBy7kGOc;dED(@-VhI6zyz}Z9fmCIa10W7$ zM!<}zm7Pi<^_O;z18!;T9zWD|fJmI+K)$9IqB_tq2hz+&l{h5_pp5_!Xl?5v2WYAx zH8MO_(d2-3t;#8dGSvaK3T4BA%re?B0x<)d=}x^0fms!7uDE%R-wUImkbr>4gYk=H z8BI>11g0tuY~KN^%O$y6x&4Xt)zpz`t56Oy%8fUT+U<6nJ6wfrW$$FH0~3}l!O+su ztP0sD^WVppREhJ612Hc|ot{8FafojuPTRDRCv$8LWB^+=R+@On)Rj(qen z3?>VF?iOz9dA6f5fusC&mGpwe>5%NNs5Cc;`v1C0-b0`2kl9o@TY_99#z(s6(a6#0K?)mk?<)DDsE#Akbxno#6Aq9L}*`Xav{ e3I@|Q_x}SzC_$*X-q(Zx0000xAJD*Gd(liy}xtrz17t<)!kJy)$`a;|G@34>8d*C z-t(RFopWxxmVR?Oga$e2Hm(M_Q**kBEAa|QjNn7TAVMKAcU*2aT(0J+TulM=`1++_ zHl~+V*QnR6|5zx<>h}dhAr^LWdODJll0f6?%1Q*Ps^E6J!f+r<~Xa2F>yK(XO38Z9Zp!03FA?KQQs4Okx)zF*{3kpcw>yR0-dXUgb_@x&v z;JxQ(u>t~t0I!D3RxL4L$`sr(@Bvhol-N^(%avgB6?+0VngU30p5$aHe-}d1c$k?Y z&CI!6$R9TWUvA%y7Oh)rx~uW~5vZxbsJzAK+WU6+%gQu!q(=t5DER*_7lMHRn=dpH zhBOKW(2EDEt5Nv%*B~4X1_MzrKq!V*N=kYP4IP}qWe70#5lDu9V{__qNMqB_TB}svssyp6!skEA^Ds=kZ zt;lZM7MZPD;Rm@R`8kv_txY9ou4)tvpcnO~q#!Lj8z=Yg$KnyWLa-JDSl`#C6;xhW zh(4ooF?i-oR1_7W+V5wR))+^lU;w>nu(}%QIXU>~bOQ|HX9ln>c}2gdSTOawRmJ z2?~XHrm<%d400rUY|mcoT(ycl9CfZCUY=H0wZ9TqckPBgqjT9KQ*J1&q_|jAr-wA3 z+zq3EP>5Z{=&Fi} z2J?mzjse8gBzZh2zkC_{fB$>b_$lZC`{|?v^1o^JDfdtBR`P1mxtSzd`ab1qsyM)O zEJ-@GvKS#G2B-<_PI7A&j`53V)CswZUWd!$i5+t|^a2T2KqwGEQce#1v*+M93m2le zbt@#*G))CmRr=BPTiq~z^-8!X;*J&c)ky)hf!I+DQ1+6Sy?l5E+mvKf|7|}Ge(?pW zQ&Qjx5~nZTK)s{WV}T3Sy;McarDkQ}`o2G86Umq(^LU)}vFRRIx!(B|puC&3G|kko zLef%^nw$cc?OD|@v57!-AQ%Xus;o?#-wfP=0IDl0WJcB5%$uVM5J8Ry6~)Eawm1*P z=gx+GYKlOEPN$!ZbF5BwLH?2aF6p5OXUD}c%lH0uFur|fA6A0XF@mECpxKj_)dB}L zZ^5#0)^T8Gd#N$aw0jXIn@cAD%W8G6v zvjUXIWA1i_q`Rk&1BBHLUmtBOGReV^I&T=W-!Hf#m2=jQNj7fXc`+7Tkvcpc56TLQ zaMO?aW5_S(qN=o%E()6`2QVQaE8w$@o3MP+WTa$das|c?uwjGrDEq{TTl0eE3UC9W_B59NH~Qp%;#ow4h~McIgt1@7pIH)@ieE zVOcwMiOSqj(xyX??#$puOI^m6OLRxVmI4%y&$KZGQ_@uvGg%%wFG%C~6X|b8^Iz$S zMB-OHm~JeeRy%J#7AXoBXUc>ZWGJ7JlTpcq=!^JCok(R^#sJRCW@O;YkG5mWf4|0b zGTkghHkcliZKJg5bPwrnD(*(59BYpy6(9u_w&~Ij*KE9TER*WW#>jb>C6Wp-Z8j&KN1bOj~%TeN9|k*_b{ z1bomPNSM6iZDqb&S=X951Ya-}G4A}_#M!q5a=ta3fh0+WgfuI|}9;EqvSTl7xcCKCx$^ko<_iY?=V>BnKplke^Rk*5aSH=M+ z3VG|P0P&ctfb49%H**&DzWW~1v$G==z{O535N41#$zx#3fTvgE3z&R*rd0v~S)nJr zA-!KCE9!Fd7NJd-E=^Mb?>_fD_N;%G6`(J6WiqR>5~(d(@aL7KrOYdFkC)`%oi0;R zZe~1cfv&48D+6)=^i1Sl(%+;~4+3*t!iI4is3NR{w zOFgQpkeZpv)yUoM_&)#Xm)kyKDuWnC4(fCiw^MOTPa6DKjBq(#v-1Ze+K zolhukVF1+uQ5Q_h9Q^dnH_-aJE;zJpJK%QVJAL}#?2#kcAqEMmNZ zEtl+Y2?V%uIZ$20!4N5dz?6i@T$D5y@k|t%pNirl^qVvZ_f4IKZw?*A=}$jH=bpEr z)wS1R-80YPuPfeW_nIbHBnCt?LGh^v<8viW0aO7^702b}xaPYz;NI!e(4l*G_7tey zbi=%PIP>KpZq$g^pG5-Zy8ZGBB&VmLWrq&%wQrAEtPtoIl4ko#ef6 zrY??B+06_Fao6~9=sDye&TW*OKaan>wH!P0-_rFl3pcdMW5D|}XJL;F#MEXQtb~dR zPF%F=)QQc^g=5EgRwbvUArPox;?@`ks029KURou-wrz3q1NYeE@U+y zyP+NrMlSws3=>ojDxxk#QUnJ0d{{kgI(DuSRD_z<#NTsMG$*h9oWmv0f@XEZjwiYt zu-;~q*VJ>!5cK`oPeGtb!shSMmAI2&$@~y0SW{h%FScyOrdQ^3ojWRGv`e>V%AqG_&DHrbFvnG+H+fjVK#!4J0yMUxGWaX)cm z#pa3Jui5qVtljUuhriz`uFC-h2;d>1Qj$I;H61~%s5_h*h$nz>h)#3Ljq0jORsac) zs0)1?Q#^nr;m|5$dl>anC*QSCq4tWbY7L+mPv_(!wnZ z7BCUWJz-?i<+2kgNNZyTVUHJgjUS7wHf`9{#Z!V6v+i6R;PYX{jHafVl&Pwljirk;VOT3t zg1Yn48zSOx=!|(x}fvm8ndK)auHf4&FZNGzi zH|T>k{rrrKTf@(wt}#wW8dKp_y!gV3;MFzGC_onEo;z{`#pf>|iMJh)U}vKaC={eU z95T`FhU@LTL+oqivlX8^2ddy;uZZby;iHAQC)HmdrUs=m$r(^4ls+R&p`em>d$BS> zqMOWc{=gOnM4P#)7kKs5Y1l0jG8#9d5-!qpR1dCPN#1NjX2}SAzw^U8nTz3eAYG%h zaU}`y#ot^bAiH)x-}FbUcw!0%XR7wcSXV^2qy=t7aj3EEQ}8CI;IZZTl8*LU!~i2E zM2_pY0wNcuO318#`WcQyMM{#&6^->NW{X-}!|gysUk@CJhvv+dWq$SFfR8=2j0_y# zyBGQ6CklF5Q50&69L?s0i-MI|m1r&KXpaY@-^k-$;wG6BrnaPgzx$wePS}D$Q3{}j zxQAXK1r*l{fHj#)1)SKo56i}mj|dViJeCA15$8~}J?70N%|iiUe&5*RrEF{@M(}&+w^oFo*)oAs^01>iNO+1;Mb;<-$v969o z5ug?ult}>12XVe)0+4nlOpIG`2k4pkdaKA?o`h z&eK5dS(>}}x7rFYuM3K8^AnnsClDq!G$T7(G;dfq6p*T|#Ci=Kf`?yviMjg77@%%3 ziiQDu_8>2JG`z{l5uS~CQHu}SJmfcVb z^UoPBNO=sj{iMon#WOjz&x?gmK^QTgj&7t%6C^1~2u_Pj#Qp4!DJjH#aSk0O7!VE; zjP@$pJZ3kPsEGNm;=rFiW7-MFFUX7YZN&h?k))4v6)n8XYSA*6)6+Y_k6T zb})bhf9Bvpyg%y&5r|1vl;Z$-f0Yz6AB$Z-C{OU>9HKxQV66%=6Mu%E!2BDygyUQz6(BM{Mw@RH z1DN)ul;p=BiCGQMA+ln_#&$TW zE@;#n;r;-7IA#70_2hztL!oLzsXAKa17a83il~zPdWjXx1r-abm{2dwz18V07nl=WA5*1If z7rA+{`U4!pfatkfGd=!)Spl)u*%b_^qZP7af?_Lx7+ZJq=@AncVBLTJhX-LRyaxO2 zIvz!h&Ef#np`!eJ(IcR0K?Mfr{qUxZ0kZP1;V{77dcT4JYAV{LS?gV%E=){f6hQm0 zIa8R$T+p7q+zHtP1F=(eAjl(ENMaP=Twzvp1z5+ZgnL2F4+CQ5Fv2-ksta7_7s55h}7hjIKV=F zQ`U#E#6s%rTkN$u{^rEEv%fE_|l(+YaT2j7X7Z#5g zS?@SNOUhHzxY}XY?dEdID&1#RpVF2B=w-BD!``@2_ZtEst{gtKe?KmsJjtm$yVYl6 zy8u6OI&?(Gn|nlQhPIDSqQBRJ(o2_cv|yL5oy{W?3nBj7>w4dgRQb~^N&!?zOpPU- zd-gQ^(vtpp9momuuO#`hu+m`ZWBT62cg-( zi|ulFQ$PL@X)z|TQg7SclPBSxpZ`0TSE_OvE0|zw1@LpY-K^zHr%vmt*MxR8Y=~a| z6L)2XZK)aUXM}&bzk}{uc`JelQykvWRTK)yliEL#V+~FtJ`R5&(<53hv3ODXW!S8? zSIa^JdtSY51t=v@yH4{uq+sI6$Da741Zc|~>cF>I4al;rQ*o|^&5)Xxa;!eBerfA= zSJ8gc-s<;+uX7|PY%~lFF|MoM9j{iiq0j#xTVu$fA`Nh$00000NkvXXu0mjfWgv5u literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3ba3fa85e834f287866fd662b1a1557be53634 GIT binary patch literal 9297 zcmV-XB(B?uP)zrpqvBIhyCm` zwn-)$KM+Ae5^zWsN~;w{VYS*k>E8EO*G$Km?wRVDS?!J=&#Ri6>gukq{~Q8K8|o9( zZ9ei=10L=ezwt6Z-O?)8@^A~}-*p2^8@4CZJs>YP)iby7Pat<-1-cgnD*Tao-$Cw& z?ERYVe_;U-h_xM0>rUhGc$|U>qC|iwkq}QK7z`2x0?f=*Js+%VUQ04d@8d?GrC%pO z2@_j(nvXrEyJri4fD~8e^M@Z&M{^5>%gboU(39zy zZ-1LAdiA3A=4L^S96!a)a@;c~cQbnc1o*_`R900*+dlr7{`~MGRR75*6puzJ0O|uG z6bw-RBaWa8Z@rn0KkqyjAaeKc4}@9W9zXyOSXTY|^|WH@P1L@BKb6O@?3II!_ zy^U%H44}HDOR2oNiej;tnms@`*Ig^86V3CF6=`8szOPbSF=!--1O>xkDlIFcSS)HW z@_D&#JQkzMUcKm}-~WN0x#LcjaWE#eE(uh5Cc#h%weM@9i|@LV&YL)aTKDZsQXz3& z@6Q3?jYT39?d)U_6`K&9g%%dD)iQ!q1mgftC`8S>chj5m7Etrvy%Z=3Lf2+lg%3Uu z5ZaUJgK-9gZXEv#hr{&c#(z*_Lj#qBLSjxrjDx~RH9iTVK!AZZ@VMhB5eL}Bk@Nca zpXt)J;{l?QV2~2=1O>t&I=8Nl`X6}&MLQ!D)DYxdjaQ+~iF?q0SktmOdpWL!C;aSIPJo5JdvPKSs8`GVFOsqEKL7Uu@7i#dbZ=_ zB(WQh$Kn)^#~859yLQt#OruS1AOL7v`HC*dWA)D=Mgd-8%Z?0}oQ9 zt)0OW>FA*Lrl#b9dN%ZFRLAWdFmOyViyPL-TAe1eL+g{&?ZR82-JMIFt*v}NUFlOG z0A>G(n7x#hF$I841{CSdMT_b6x$_J%O!ims@0Sq7+nSo_)XOfV%kKUU{u?g@z!Yt7 zw}8^Wov2&6%K-?tF4+qX1aI_`x{1{A*=KwhU@vwWjT1{!HSXp}urCPARsH(Wgk?*p zvTt9Cb#_`bJ~wL>%N#{onDuttkaV-K=0%H1#9~xdQ$wG;`YJtp$6ZubUCm&El^DJ( zix8b=+^lV}Pz)j0hPCB74$!yk-AkAL zekXnU*Vm}LwuT^_hC?BWMxoxPK9GrcT+^!bhlFuxThQE+<2o(O?Kp&RP(Sm09*;w4 z79KaqI50{MKK^(bvv9rz?1cqTLA9`a5LF?3voKv*K|9ueLW{>w5C;#TRvH*>jB@E% zmGrWkLC4FQZp(|d#q3u5y?z~lsH3%&ZkX|FI`RDTS(Z~PJZGn*WOIUDQU=1C4qMDy zix$&cOO{Y&t!4leNKzPZ;aQ)vIRoo{0>Kh?nVjvco%iFv?vBpHc-g!H$@L1 zR&{L*gTM*YcnGCN(BuO^dfFl%yw~dz+kD`Mv;A}t_eN0z2;hOS4Te7R2jAfU%o>-Y z0Z@zWv02DoefE34X0--8HVSMa21)PU$c{GT=T}9hh3N!eSct=6YTdh+T@AuzA-_*h z5P@CsxYgCbE&_ANmzbYOV7^h(aUPdin0bDtalQP3>*}?+l!(kRMIf#Q|CyK%p}x=H z!PNVZLzMf-R5N*-h{WRYdA04^M^8<^h3Y^3j7my%u7(7$uPPdi7(F+R3_kf9vYiY$PnLsv^>p zdd)Fv3FmM#u4!w$+vI$>CKw^&CNhqvv_9i}HRE8-puAT-^dMWU@gfy#>`_t5KoUUP z)_hFMCQl`VQP>L7>M(1wQvOt7^TpX#)Y3x3A9{dJx%gssdGr9t!(k_*1V3I&E2d1N zL^wn+9Cnuv+liW+Y4`*8)6k1A>H(0~gAc@F)X}>)9kX&Jy?gsz^yt9@sWuw5%@*;x zc2}6s0NUS7*Uy|mr~Uh7U5kZzwPyG-AJnF-jN%(M(we8AriRi|DzQ)?U#_gfSK-!& zX(H0mPTw4UB@G!mlp<|ySs5DhaR)`Ag~76Hi6n$u0->wO(SrJIaw@3IQv-7}Gf1p& z92YW?bzET1k8uEp4W$8GSBrSmAg)hz^s1dXYhhLmyh~_dh=;L+U}#!VA{M8FZNRzb z*h7aR3F+36RuiKwNK@5J+)#y=OhQ5U^^zKb>ELcb{&v=Zg`u0tx)R-BD#bBt(Ctk)6 z1n{t|r3Iw@+xT(x-P>+0J^8&M8=`X)}gkzgw!nYXJG^_A|IL;D} zNxPJ?pwl>57@`=@n>>jwym@*-0mK5fxjvBJk%V%6381$ZFQFG7ok6|&_oog7mYY8C zRYf>t!}#$s4#1YOFHB^d%8%nXd|suc$qd!x{B+}5(BBmPPx#Y(`;=lcIbGUQmD3F2NUC2y9_-!jK zrGIYRNT0m=SN@wl;uc<&Ccuz+fawRRhza8txsFTTZeGXlad{WobwQO7Q+?zaXV4L+ ze@i4d7BH7g0f18H#1zC!kpKjYm6lRzMMVLer7FZ~`SN7<5@oXkzEU7S(T)xVkJsmI zmlT=JK9aarRU;8^0TTXXaRRqyK2DvnNyACqRQFcfoeq}^F?gUnI1jMDXh)|(zRCqW z_^mPu1R%UNXD)5~crCLdsbP4D*|Cp(7FJpPN4|yGj2q(x#oNr;96CF-SYNP5cjH5OtcgC)_x+o6gQo!*-m;F{#vMz8sGrtJ8F2 zm>=mxq@wW~XkihP7RKvn+L@uEhfdp)>)8u?a7;1T8{Ko1c8?gqP zF7y$MT9F4iuDyvI-V5|_&YL`VE#eV#5S?ip5AnaFnlBBp<@Isf{@)3b_n-7SlwxT$70+0lV5UW7uo)vYY=sI zat{8;*-udaBackRT4%eaQW;1FfPJ}PBQ2jYl@sNJR^`Suk?SpV<=^`cURe<&7LCxg zk32#r3_Fin5#i`TeoFU*bEZIYaarx_^SA#-Pv3ewdy-{FLRUWGuD*8^2t~Eo%YXhe zI{m8Q%I!wV0E7n(wuNj0l#KiBf8N7ob6FDUM&YQ%1UMO-fBsF==z^Q3Qp;ZT1+0_; zNP-BC(bwnAr0GP9@IW0e6rhB~x{=Pj?pnI+r+2dlU$qU$R*hHT z3xn)a)vFi%?}HD~JIhxvRg(6hbXt{JJIkbnd6_Tr!i>H!tZz3CfMcH)-&uxnuJWOi z`(z%Otj;09B**dpxQ5>6h5dLP$GY$r%5^|_5R?yj2dP0^H3U97P1{rB3xk;# zu+wNIa*>k!+z)?5>tA|VfT$;6%y)t$I(pfpau$|+%TVkI z*_W{xt(<-{ZT{dx4%v{D$jc^s=DK?VG99Sbpg}Zd{#>dZFo6AL{y1C3o_qrk%R?wA zSyoQXdvuaC<7}PxjQtZcX21pyWjvKqXv_efBliQR9vsJpy$uxY7L<)P3Ue zWdzk-eYN}afKvn@7pT?&XwkSjYTCKe(w{=n^XzuZ06?SW%%;I7pX398(mzf`0CI6= zIsh#kGmiE(G`ONbQaHpF4s-!rA7$v}UNLvfytzF9(!-D~r-=l0w#!PaL?tM;pv6yj zJzJ79m6kp#sNvlDKuaJ*a9$uFYCfhu)^&;sKq|ExgT|myplDkg%^yA1LV@%?GVZ_w zts)+$!%sbxdJP`T`p~Y;n`!&H^(=f>*3{VMkvaL=3grvKe$x8L5(zc{;(iAleKZ|< z(n)Om+g-n%wyj>n5sT;nf-cf#9~nT!wHD)X8Zqk$ZVoJEpxm^u6i72gDi#q76PxDp zZmq4{7jV=d zA~^x7?d#Uj%a1+I&49T*ltX}CQBfcl(oA+!T*yF@^7Q-K*J$+I*;IS*!Q2K()``Z$ z4p)@Zo~_$y`P8Y@xTAr;>yjWsSW7I%`yVlL1|4zw=^S!_iW~Sy2Pi7EK7H$L^pAJn z6AfjwmYn)S=mC(lrfTN+>u3C$jyv~UE;PA!#|~Qa#}{}8%Dur+h_`X=UtVNSf4Vm_ zJEZ&lD?w>F*lXWDy6CoB>AXo3xhiXWOA80%;qQ~adm$Zi;)y)(t4&|f;<4koN34_$ zyC8sEsOssSeFh4|)TgbD1{`%1ja|Hu!lhx_yQ6`YO`J@7>g!pcKIrhnnKA)H=q~|n zuCcz}l{V)$EIh5RbuNT^r*7F2uJ;4BjWRcz-hEFf3zd~L;_;bu*lDM-i{k0q?x4@# zdMnx1stW?h(<8D@&Hy09Poo$6iQoASUGwlm{16e<`0`^jsb)Zberub){3l&}$8B`( zggOpWc;=3~Xv5oY+dkABckAoVrOyg4#JEKZI96)?%P({5D%1$T%hbGU7k&NGOX;cy z?qiwgrAKGbTZ@tu2EVR#sk4O}lr~3B!ibwU0c^07B`P zS00@~6@B{ffdW96-u)9gYt%@Jx3|;ETW_O{@BG~Wpst{W;a*U-xc893G3{8gjBK zEiCo^c+|pjWK%h^FbK&Y=XFb$a6hotJ$vcNTW+EHb?bTMA*Y-|BOZH{-$E4MUNCA5 zC(D^TF8fM86fO=*G;YZv8h|{ljt+YMr}xmh7hhz#r*_~#8Zq-R8gTSc%)(Yqn@*cn zt+JK*ii!d$d_KmdTxwy6<-PL0d+8fLxSTugX%j4zC9mA(7WyH7tuzyHO( zR9;h~P7BjoEIIXDl@0AwJR>PYpEGVO_Y7;O3OL}tpEnI}u z$?jD|04f{{lW#RYy!Lh$EYF`dg^oS@Yz7nrN%V&Q^tIRMwb^q;_G^wdAiU8KNTJc; zQ+?1ubkJdk5$sS^{ra*Th68SG+(&!1ZKK^=x3C-rkR#`fzs~_k+{GC&JQSdF#*d}1 zUvddm_v_05g_5xOgAeGH$7j*5En7s6U5_DAgmYwargAQKB*Nx>$V7d=b|@e4o^9J{ z@3!r1Ow5JyNLvahSXosy9sTXI=!El!(V;_!QtiM26e=%cmML@9@P@-j)x2j9$8~@9 z+UqRz?*Hm57T`-XAZAnTLZ%+W284KKXl9^7`*!Z6ufF(#f+ZmemzN0xqC+)}BBDSZ zv?`5cWTS;G7&~5sbLax>4K)wJ8nh72AZh|?6awr+=G@!WNR;_p=9-FzalGBFt-Sl8 z7hgZ7D3pfdEs54}beRTJ`+%)ZVn8YWnu& z950!Fh4uA$Vdh$h$=ZopjYP1~NJl3HP{~7MjnXO&D#_J3xC)20b|S8G!{ak)h%THX zH(yxRT9^v)&|wXo5IqY4W%c!3>Ln?^==*r-mJs<&g0=EoT~9B!^@MmietY3#iqODg zj-l_}btfHr&e=@qz%H=1K6J$HF68wY7-eN#g`|GnI(p&3U(y$=R@qau4D#03hmJBgztTkqY73%d3pNoLg7NtRB8IJ1x@7dS2${ z4?wzINlhbf4;q2|nx-XPCfr8SQ_hqZ!?#o(jA^?>snwOKvaW3vBS8X(#E#w_Q zcssb&wSw|$nQs_}7+{$OTAP$hGO?=6>zZaDrYDZ_bVBZdsR5M8bJ0=H7f$^Ea$O;! z5^?}gW-_mT9(b_uccCmDJkF8URztovzp*x;%5|I*8>_158&~{*Q?31^de|#~v-VGa zrajxYi=v~lB(*T#bGGB?ty9Lm{>vFCIUEns@J_l28gj zs_O$K!$XcfipDQq!~%3aSPHHIU)?iz-o>4Wr1#t`pXf`v=$~k|<0EI!qJxh+HjAv( z?9NmEDhC$k?ZOg3@NXe6tl30?oET!Z;{XuAipI4lvV;aD-h^gv_a|p_8>^}+R_hm! zpUA>{?w`!!!o(HJ*`Aecd(3S2m^T1ngKWBwM(K<9R#CLGLu4FeyYq~{gG?3Vm}+El z6hgq<^xi5qT5_$(jQh=P!r|ZihHxw^s{ibEH+cn+1W{>KB_FQQ2IOStaWk%eL*;y7 zc!V>y5b7=N75*z^SgO+2~~fyt0OO_5fj|=)h|rSK#`Ufdiu^Ea^QGUtqugZRv}b;^9Sw@^Eg1r z73ooh-Q5368^_^Yaqll^(DBEyT)+-b8_=rM!jf7WOctRKm(=~;fBcl|GNW-Yq7ZS& z+(#@F=KTn7yl}N(JftZW$#Jbh2*yFlqET(WM%O|iP`ChH{$D?*0Y@E~?A}u_Uzi() zVbB`V5NJK$PYTid_tU)VM_AN&OWSYlBA&>L$Jw4r;m z*ZXx#r6BLYF}rZo82W0{Cid{_+gZ8SwlpJ~L}LneNT@dju4ON@(fCNgR^P z#kG8_+&^aiJUUpTwtf}Vw7buO00?iTJ%GF%mHolXHy^PzbxRksW|AI2UaskWE?yY; z{1A$YkW_f?{RGh11@n6VugvR68K@INv<(aM(uEo8JI#l7*52AmH6|8T5)3NR z!h{%ZHVlf|i76kMWMNNEo6fP#q4M&i=|cLvoVqsS{_G+T&Exntv`c(OqO|YvDIxlR z)xzLjSZE_egY4SL2wunGu0Zw%C=i5bDFdanFylM!RSR=FUjk^wlxegDGLT7#mT}pt zd}O2N&2=pUxxEMZq|(jznT4fzZ6-B7TheX*os@x)Q#I+y6$KZf7mussG$en7=w!q; zCu8PYjc2_%-)cMpyPjo3;vNdZIHuSl%>arcRWzAY{1axea*U0HmiBFzku$u?XSQzEMe6wY6pQUscpCn{^PhFIclFz%@IUmsR-E z)`3mUJ{DS?##K-|Q1aq|fN(OJBlI{6)EY%BvP0dBYndC`e6Y+8r0*!Ea9%-#Y*GY$ znWb+1d!t`7+i?zQ&9f)omWBDHh4IDUPKZWn(+3|?EQ0KTl)VBz9r$_7AN%nH*9NrC z7vqsgltQIpI_$L5lGbiVmq;2d(rZMbWqu$)4eQoXOJgIE?p|5I=9KI>cXXC7h!_{O z5MwdX-wPj>A2n^ukY7d#DhUd2|KOoRsiLMP+0Hv1fx~z973>v6Br4@3IyC4b5@%n1 z9qr#`3~5EojJ{c${HfP*Jm}7j4(c^vAWeDZNh+_cWf=&?+wJls{JdYV(8c4%)8nyz$P;r>L{F#f8ttEo}7j zPGuYJ<+a-MnZwN!iXKn~W+XJA?0SeX7n zbG3ONqvzN<5KmBNTf2wUX}LpnFAP=$fB_^wBQS9tS(rVWS1y;|0Aw$@YbnAuP<1WoYt=7MXXn*9^F(n4WQuAVcD;_a2j}^sXcK&3!zNGSl6VMj z_1_nktY?-|y+a{-bKxS|y=5zvlo?xndcEItR06<3!HB+xriv>#0SN1Oy>R4gNfK;gp$G+Huc$OsG^rp;|nE3&mS?0wygfhQeiAxgQ3}^%8>zy z1Wj78+^2qF=^0%9WFWhKVLo(lmReX%|Nb;?(L$=IEqp}c_O)w$4QT~{M$Mkp)9xu3 zVNU*5ACZVa^Fjk?>4Zt#EXB{5XaJ}P`h}_0K8#>MWid*&ytJ#4=to3iF#u>u-9)mZ zK&tK+>)_t0HdhcKx`&0SkoHn* z6p0L^_NFYWxoCBuVh24!w6XG=if5W`jiRAIs%|trfc#VxOlpIcSeQR8Y@Sx3teXNT zH?71744D^JyjmD!9}!@uV?@bX*j{Tz`mcpKzusL`3q#~y*j8)vTMJ94WazaXy%x4* z^=g9dASv$~xxj5xizM+?gVGlrk01yBycxoLmh*B92!)p(;}Ed?mA21ekiu!cmf zN{Hr6^@oKS-|jJJzAI{ zN8c-JPUkx-Di&5K0I9m}fg6#SzVb;Cr1hveLWgy_ofJ78MKg-<9EST95mHGWA-RUa-zStw&VyuuJ#Bj?<_07`ry>wL%G4 zujxMcov7JiEp%!tMEh1`QzjO+wbA_1UJ?tPif`H{A|j;KRtrcH62Kpu=;tAnnW zSg4@9i%Qb!-V*H`q34yg72c5Oj)i%>uXOW^DyTkJ03prROn!Myoe+(_@%tJYSVpj& zo5LpbTG-fy3kqIb0hy`WiljORN(`zFtW)Yt1sK9*WfZO`w_4zI^?_zxbqzJ{*x@UH zxIWNto}-p{Jfgoh{CJVTeaZ?Ie{T@(7^xwg`Y{=jWf( z#&`a1Eug7YC_|frRsZumwKp|UiB?D;2ZCe!QwW;n)z$Q^tA;b6lSMY|>N3if3+9!w z8W$p`q`0V!`2KHyNBef}wfdfE4Zi@S}TYa5}HV_{f)gGKkPi}eaIo) zLsk`t()hwmaUW@#>!S7`BI(*&T4=$@QMBue&0JhErmsA&sdtzcuB;FM(;bqhg5v0k zj4sUP9;CW)fTp9lS$mFRzF@C#u$PGc>KAOzCNni|eV(N~Ja zFVVlulGdZ;dEq*Erh1JD>pPAUQCm|Jm-3Uq5dV*gwQ&lT1er1&apvhXe$hhPg6mk)CL@t7&CNWe`&tAlLWiL`s5neNWdH&6h*1#D~w#`Zi$ zYT!KIYJ)Jh?@p~`WwYX8XE&bWdVy5HIRB~bNuVW}=VjoMNmio$)^NxY9|1$f<79+& z@|MN-DUOs{OaJr?EJ@b|3FnZA#i^t;OaqQOiYdRIQe}JI@^>C(p!ApHH!c(sa!0N^ z>$1Ps-MNv=DZL|k6(_@B@?sjL0o#pqXl=F>?nEhourDV0X6@>u8?4V1-UQz4d|Td2+4-u4#cd>>Y_vIF*Flj@ z8`hd`pE)<2)7qbVTgSewxL2U0n~(2QHJtl@@q`=Jv%&*>00000NkvXXu0mjf>)jr5 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..6de19032b20010b6aa43a4a9a6105892a1633edf GIT binary patch literal 13224 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 aWB(83FOAg3+&3@)0000 + + #FFFFFF + \ No newline at end of file diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..1f83a33 --- /dev/null +++ b/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/android/app/src/profile/AndroidManifest.xml b/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..3f1a0cd --- /dev/null +++ b/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/android/build.gradle b/android/build.gradle new file mode 100644 index 0000000..f716ae7 --- /dev/null +++ b/android/build.gradle @@ -0,0 +1,32 @@ +buildscript { + ext.kotlin_version = '1.3.50' + repositories { + google() + jcenter() + } + + dependencies { + classpath 'com.android.tools.build:gradle:3.5.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath 'com.google.gms:google-services:4.3.3' // new + } +} + +allprojects { + repositories { + google() + jcenter() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/android/gradle.properties b/android/gradle.properties new file mode 100644 index 0000000..a673820 --- /dev/null +++ b/android/gradle.properties @@ -0,0 +1,4 @@ +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true +android.enableJetifier=true +android.enableR8=true diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..296b146 --- /dev/null +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Fri Jun 23 08:50:38 CEST 2017 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip diff --git a/android/settings.gradle b/android/settings.gradle new file mode 100644 index 0000000..44e62bc --- /dev/null +++ b/android/settings.gradle @@ -0,0 +1,11 @@ +include ':app' + +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() + +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/fonts/LexendDeca-Regular.ttf b/fonts/LexendDeca-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6b42154c37b4d1c34966502d609335b6be543566 GIT binary patch literal 67740 zcmcG%2Yj2w{XhQPJ+|Z}+p?xDFG-fAg)-kHvHmYqFWNg#{@Wm71tWfmy3 zWw#{+0u2EIl+^;I6bK{`0))`AX#q?B_vao-b_o6cU*F&B_X~LF{oH--?sK1YpS$NQ zF-elrq%$R1+Su9F-ZA5@?yn^2_j7@M*f}^bQdn`-C6e@qCQ0gfv2$cr%bkY3*Gf`2 zU6K+n92oKX&c5SynPl6ekP2sJ#FQ+ zub+24e*a#Qw*6va#n^JgFRy+?lFoVySmgwOgv0TVqy9{ME|^%i_0+Z7FF7JfXX_;? zrD^SkWnTt%Cn2kiDxzdfjqV>k1-_)vE|yFncn8sl;NI=g-HLc5)BS55v# zW^sIW{N%auDn19lOI*rCOShsWHSxphva0RO&zRcpaynfq6)$TEz1gy!rLAY0&^dwE zf|@K%s^y-0_@2o&_N$98w+|H+&kTnZD)NooDbc*C`P)nRc=~8xb z^tpUqM!3D z!v+6i<$o2!!Efo0G5ilP9DJ7c#PIuL_=nQf(9)>9jKuKwr3%aIRh1yl|e-=b?Q`Z&>Q`}%HWiQ-jvx`;Onpj^8=y3H?3odr+%l(Z!EOv(`@OX zJNyR%so81ix%X==wPo3rrP|9#beHFA@(XlYOIk8FUwpZ9zT2}1Iwv$iUL@(Ie5oj+ z3p%H0-|sUT4SJPY$9$E63a8zsLO0|eC`rheWeeuzS6Z_S--q_-b8>Zt?CgSRI&*ot z*J7>6%d4|^ETJPm(4@E^I0JhjB*?&qV;s9B#xY2$^f5RV4~udJ zIF=@5pw9t2^w(;L{^#&(*Vo37;iAyXEaTS?6g9Ty@7hz{Rb0>ajL!D<7?M35zWTvZ9p5wYFe`KWN(K@O_v8$$>U(#Qp|O>^G^M#CKx65CDF%p?55}=$d(zOLnwZFY7gQIYt9@ zYg$@2G}Vq;W}DsF^M19i@9ZT3doZup>8sn&H*;gqn~l+mHpFOiBOG=KTczNn^9p_l zGE6#O7EYo*#qdwa7De$G9Tyk4n6c^fNaq!L2c1>OcJ;EfZNHE zk$6pPh5}f%kU3(q({9(YtwY;~i+iqE8~P{H3@j}zT{>_J-xD0$*}3GV#SrYfS~s?~ zY-|hZsehmsUoD>}IZ2mb-#_68M8Dy)s2#LVxQf51tw%QhA1J3r zxvBay<+o0#e}Ju${uS+Q+(nUgi9YI~{t@X~c4h2&;tBN+OIz6pp3fsr%4GAEet#gf z3!ATSfo#5lzbTz0Y`%h%Tq^im(yP*MqvH_rqTpg2(e`EX1qyxuww-)|LWg{Tf}_8} z7brOS0>V}N!z~dhMK8${D5c+*#--b$RN{IgxQh#%v`hMwt&BY%IN>>Z!IqL7!IO|2 zkv>D=g(?4B0R0R`we^3YS!MZfWT_sogg>_%y5JvejO=vv0;vmIs5&e!}}KI=8mD+T8JMOcp8BUU=q2$W4UUtF3*C{W_DQZS<*6@Zw+6y-_>GuMuNb z@PpD5iuS_}PA`9yrJ){^y7294WeiqyMvEClcl_+?&;y$`vHne)ma{LHFAoX7+ZFyg zt`udR(lE6tEn{zsHU$k~)dUWizeQLz1*fQ(a9A}PSv3Wv*;3F$furat{no2Ca0d^YZ^7QJJ#BrjvTu90?noWL?>0z%Gsot$fgddWi zrS+9vR=)^ooO3B+q>A(Zvj(F58#X8OW@r`b6MikM;i!Z0tq`=1Nqg~Ap=AWEc*I8r z(hzP8%~(4zLB5~(vJ?_^hmfdoswXYubHwX=$(Qelm0V}4r!l)zs2%n zK6`rkqrk;z!nH()BFuQb%I<=!2c{1x;ODz0hFtZ*(B|m4)|v+w4m1UmdD8T;9RaoQ z+n`3$W{@OPgc>XzI74=i$UY`$3HB(gQfTo<1b>c17$*2sD}N;9M2v$CNBIOfnLdtB zVSUAHK~i=JeOAVOSlT64L*!ZB=KJ9h?C2mZQzBl|k9b;5LG;uTqLRPuTX=eJ?->hx zz6EFW_MX1bx4v#wTl=co+EwjstLoUI8Rskw3U?X#*}bK;bxSvW--pYKZ#vgYXXI9u%bTNuZ0#q+z^7V#Y8 zVTwTa24vm?8r9cZ&@{TjJ<5l4eihAE{3M*SCpRALds?~_IU@(e>ymgV{9j)`HC10$O?1c`-Fk*GsMcflz#!mie%@sZFxo5YXyJ_ZXpJ!=g zg|YaiC7nCRf|GZ#V{IE++cvgDG6Q{RAw|gy5bLoXpddGr8?f6AY-iP?D*S){T4u4h zEj5Mr@;%jK^>xc?LSMq~J(TCq^EMrX*%a$DqLxY-CLJ<2QF@3|DW#*N8(zGBir&5V z5=Fjer$X=&zUPC3f*y@Ne1)*MMp^^Kt6i~m3Rzr{Gds@e23=(hyxde-$sd`$sIG0g z@olL|jhWxPoNt*09|)-2~6MqMT*L>~O+)8K#U&?JHF0dn4<|L{GP%YE;+l>{3x z?}DO`vtKK6CjDFS(bST#;|dq)ab= z6!~~15+VAe|5P3k?{)=Uc3kOCk&(tgMbudhkB8VPsHh%tMM&OL+7we8Nt+>SW)jn3 zw>e!qisp6N8VYCiE#2C>zG>uC+YHNaFxWfLT)VpUr>6{^>wBfP*;t(8t4h-^TU0l< ztf{uwQ|0&gy{Rd_fvV*vH&I5JqTOo2oqHnO`BHF4;Bf);o^Tf;P2kYBw^)L(MoK+e zttj;lA*<08r5Cp?R!`tmPkNpGPCQTI7-y{BC&;D|Ule-e1r>TC3nOsNapjLm_fIQN z5tC9L^hLzv!)#2ae-yYvAGjPXPgxw`O26Qx5RroqPw>~I0IeXLE@ciVUFV|ZdS%dQ zcdArs*{&05Op{3@9!$A1sW3ZQxh}ue)L{$Mx$3RfI_E%TPG;jGKjUi|>$z}o)7J9% zuG!AILQ8d7Zr!pZchO*Wp~qz_%1uizYAo*<*2=v7ocW>OvW4q^yToMZPA)7n+x*(( zYaAz{;RCm$UPlPFYeL$6FKH$LnfV zxZA4Fp4oZ&;>y6{?VUBtT9ZSrr1lj_rL#`y9_(IPZZGbrDyv#{c5m<5%c{nF3tQ?I z1;G(SUOWeysHW_PvXJ`VN%rlZ`OJw4Wt9>sfjPh)8zlUN4U~ZtsL(3~Jv2^oVMlHb z)FNfo$j#j-=EV+en~onN?<&eSABP`BWT@cFrr}s|jFR@u4S&lo=8sYY%d})v$!25a zp(L5H5abtk?;IXFvwLm%pr>rOoIe^G95}tR^Yj6BUua&%aB1mq1-paj3ra#C_9^2c+jj)TGd%s7b+(Ac~|N9KyqLX$=2}OCqXK@Ed_Y z9~rMDGT!D$c?CZzg<|c7MYN{i2e3kYMEFzfk~dfI!^kd@H&^;eQIpco zcTk?9CIu&}so)<WT>hV>WVDBd~?mBRy)&>%minb zm(LEeJ3@mU)IXfl(N%_+YWOV~Z3 zIkpy?t<}nYLmGm*^7E*RpA4&N{2!|x`$c~Ko!&p()BVnt^VP|5@u^8?jBQI!jhB-X z;oh*?{!M5OB9I=lTd#L#vbxZdmXeGNcQ*SyjY-fKdh=#Pj&2ijq~N3n3VskPWXfMD zILW($zsZV(yel}#wSpgDJ<=Z|W4{XhPlh$pq3=4stiv$O-+g_-u6uWW{{01yJj_QK}c~V3&$@M*)|1#Q#wbCLMcz)M#0~b-WA>{DcnT;iQ(9F z3FBXcK8;!_e*iK}TBXn-ty1tKusWnw3QlVX1%Ds8f6ALFI7ya*AC^uN`LR0iVFCC6 z+rbPJ+Xk35z=uL-vWq4Uva>_i@;&{N-%bqhc*hccxeS_Z8LBD^2;zl zsAToFj2NZF7^Q?wF;xCb3{C8wLeruse{^S3l!BZbLDiVOv%=p;@NxP2XlXg=7e64c%$ylxAtxB!0`CNHz3{5$8sy}zfP|dt(*>brjit;DQ@?yP|W9Y7p3Ln8S zZjPX8g=4YObY4W6jos39QgRG0jN$vR*F<}7%Ir~YgUYM;ljEu=%Abj$k1t|~ket{l zYKBxfA~9SnbVe3y`Zf{lJOy+RItrJ>j%;*Um)E(exn)Cp)%>i9X*)+ame5;n8ZDV7 zc1eoBdGeYkzlfeez+O^qS#i6iJg;K$bRi_WqKv~E8{eO#tFSJQ;!h)|K;v`qKS@_c zH10j=-RN^Z85`-|2`yIipeE19Nd3^%ZfFpe2SRg<1~q~|;m+(rrCiay_ezsLGElXv zfyX0iv<6B!tvZ8F7lKHvD_BBcBFjEn-m;cDJI!(G;1P^9b4E2}Cu zmfLI{!TyEJk?Y7P$!#^4<}D7it8EoIp{w#sba^(v-Dy`wE6w3U^n$oxf?yiPW+V?$HZ`Zmnt__%37k+-|3sN3u9Dk|#Y z=JxG_gF8CP^IG|#&;e`ZqS7H)in22LUJ8#<82*}tz+2=1bde(pi1n4&Krv5|0}K~> z``o@BQ?;&TW@*<}q!PQjH)mIyW)*s8xS6_Q$Xk)!Ve#g4?da>@-c{@Eu$6m=Es)(HNz_3VWpBumJ*B@kdV~8&DWdqTa+xKPz1%A_#%UsJOVmPoM^C5TUl`G_o8@ z8>$$!hY)}0z+d3l0f_SV1beJK!5&wPn?|cUH@CEG>;R7=_E_QX;mPctygb-Lx_Hc3wG_F!J*G~OzaFC^Y<;fKL9 zf%6wwK%7h~3|on3F?_%DdiYW|yp3lf8nR+1 zNKx9T-6CyP&dA6SedWodj>D&S^la-AYPvpg*$imuZMAb#nG=fGo>$g>THoB$TS@;q zM~ZaFkF=7WMMlVNLS`%x$$Ks;dBEY_7~$}0^T>kJxNYD<6n%7)kjD_A(Xu3WcZHAr zpbkl$LTS&Ih}7|Uq%Ac^2w^GW&TSd@aOQ*(4dZBRUAqiQ)XdiiI3>STjQGpkW zl-~`lBrm2=hZl?B`;bv5FQ(w|Vv$y#oJU?vpyb6O=;MPdipq~iP$vf}^!hpJ+St=4 ze(;pqzgb!!txQE9MszNm9}lQwtt)gsP}`u^$mFzq75#VobHByTtK4Yo;2 zwZZm6S#L>6Z<(*RxVU$YDSKd`$y{Pl>|G$QJEU8*C1B6yV~7C!2t$Yb6@y+y`_LQN z0S+LYLmIQ)COAN-K7y*TPQ6l6q?hpY7`_Mbf+8J+7ew$hevBcK-aAE~^oi)J`9sp% zk~!J}e<6aa_~V;Z;4=0^c^Yi6IH88TF&K?hmztP>U&*Jk`JMfF;(Qf>`+wgW7XUYG4L3i}ROQTA2z#Vl)M=#%%6%yflo z*|97nQz4xa8Jru5$&{v=%f(H*-^^ki)_h5Pv6=Hu{+3wc*_jrf>*x?>G2l|V# zvCSj(S&5tytH0;<$%wRw{>uY)^%7QQ|6BA}osr6_2ZMDnlLr<|lO;>kCXg>>9b=iWp(34y< zv!EJd><9;_J#cVLaBx4)S;`8>VL#0O&8AVy|Nk~kGvc5&FdMK@I<&D&wDGX?xA0Nm zg~0!amAI4NBSSXu6ni_-^8C9FZV8=j6}+f=w%wcM}vLANV-;GfVxsS5n@s)TW7qn^R(XHZJnLldV5dn zT*XRyN=ti77%S;5E$t~`YOGBLw^Ch6J`nfbqmKZ)TK z4-*dmy#n?|DJ`tOfOzF^4CY07elRu?l3t=o{u?8Swk1~e3cg#q zCj4y-H^s{DLr&EY#rf$m{3+Hrg$tcLGcq$TD>^ASNaYoLKWyPtyM`FPTe>0)Pp*tz z#9T`GeaK=)*Ab1J&+wZ22|azt?yXWeV)~d57Mqfa@?(!Y=8jLuXuYDT zE-Gx%B(<)t?>Mce=hTkDR%b<)Mw^v*GV&De8D8%Uk7vfYCQmS!S)^5Wo!p~n#jLY) zbncwYETiU5??`2E*y|k*R*raK>cPJQkXS1sbn$+Ta-M|raB9_Vx8XF2%A|9W-H)$y z$wo@e6xC&0p^<}4#jW0)d}!!kbCr{2zFFWVJ8v& ztkq~NYc(TQ9y@NhK(ihRTq8XfN8L~(;|9{w) zyca35A2f#63Nf-$$YeBsk8p5$g6zcned)MqUa(_hOY?^I;JoAWMX8fU=FG297EqqN zmQbfxr0$jV6NMra8C`(ZwD=i0_!r?IM2@Xb%1O^}D4Lis&MSB5*^TjPYke`eq*+$h zKp6{BTUZUeu?DSvcqjRB#4Mmm{#rpFb716FvYe8UU|@E+cYOgnC%YiYl2wqKl5B0P zF7I#@`RelQnw(6tMXOG+H&=OE9ffZ6SoA_@5%%MSM*KXgMeL~r(s66>r;7X6MfZw!4jsXV(R)ef5p(=L>nu>c*08 zx2IE^*0iLtcC6Z!9n@vot8!B;-mRST{s=_NGo^ zuzQe@pVu(Fay&CwQrZ7kRyX;@Oh@&`WvngqdSP2p8z>7JLSrAGv4{*g>8yg&+KzBU zV2cx@sL*5uee@J1@}_=#6Dzytv=33Xk$NXISt#3p`Rv zA+wW;vzAiiyh9LY26Q?(>Hg01PVe~r#K~tgoPH8*AG7k%OI*W3SL3zBf3g*5A1%m9 zaw^(?PMI5I{NIn_B5GFfJ<^Ba_hR_bSovLu?Bb%h$l@vGcQYycIr@eSAGb#`2{_AO z3es5ympc8=&z*hgsoNfY{*22nW@@I|y*o4+`udSQs1YB|;!UWLh73qBIPK_$tiE}+ z{N<^)$*QNsF(0}I5 zo6Q!@n;E*9ESo4TM*n7H^f!vpD^$o|5e_fbMzX4)G)|@TL(*kpoIZGbv>C(qOXrJm zB4Z8v^B!!kpQz)tpp(Sv))W3reu;k${Gh;__+<(g^b`>`vk(D{t_3HnOAO>Db@qd!%Gj)Ko6`iR=n*!gUL{}pi*@(4Py z?=E8-k{`kC-LVK1YkDc%BFLig7RFsDHS6N)G z{?gJwrLzPHEiUQVPgy@~WE##Vp13-XlEor`^%r${JRLO(24 zSb4M$@v-qKr=qbiij9tWXKtyf*)nt1=GxlLv$}?cy6}~>@K>u={c54|ed$lnIOC`E zMV17_*+ZZU|0v!BL`n>4682E&fekBi9;w(o!TuUpw0!bcR2CfPaVVQ5-QcI{n2hPDi8D->$DNV%tJ*nM`##^(z`$H>o=+S_^%S21ik2L4HynD_Z``Bu&+L zCl*N5N0N#p{tR|a@tZX=)4`zMq*hI9<%G4crFDHvK`?v%s<`#3DH$c^+Oe9NH9Z9l z4qI)ZyU}KCY}nZCS-ZaM7fHKKro_aiiTciyJD1yAO6|?Xg-s4uYcWPzhw1nZBZc?z zli4w`jZ7EX&F)VPeZ=Q3Z=Zy+$ygms@>G<{Mh~$c|GE$8GXAhHh;s^)@$_mp5*#>X}g)n9=i0)q-GfK~>9$ zDWlC_F{c9mI|2pCmIafA6%~c9U@+9w;PE#$`aKQAJ(}S-aL*9A3xbmSYPH>^B>2Vd zGnR{y`x(R>vW%AXEp@Ju)p2K-gSpj9YMM9H`FiuJ3QFp%`E~r6hSe=iH;mkq#FEo9 z>Xz4bZ)#fJ)tq1Na@5%z4KA|45#5CCJW93@`Rb>oV&J*qD%LOkhO1c^wyp(;H(ZJL zsjlE^Y(+@nDj>xuQz+d6ghh~QAVt#6Kxn^$YI(wyY^HQQ5Ts>AEnnEneA3T=&}n?4 zQ;2s;z0#dP;v=;Jg7W1+Fq@)`8)X8b3{E`@%63pL7Dxgi#6Rd_KO0wUo#}tDGrK(P zE=Ri;D=oaaZ7skqiNldpK2lLJv%Gv}Ma4*YPeYlvsmWW`0J-vFb@eP8CAl)$17u^K z?RDFiR`Kt%TWavU7;;yLOgAixf6A^XhrbmQr&jw7&53=Peq%;@fvF;+qqL~PoLi)= zxvH}-%a^G$WMw*XtE@hY*;}ZsY6Z<|jHHMyB7cB!M6^~BL}6E;PzveWb87Wgqczp+ z%Fj&8))*E~Jggpu@vl$Pr3E!fS=k12LR|H5TT2_ObGs_D!6i>P#AdSPiXAZp>=+Qe z&~0$}1J7Toy|bmh{M|Uf0#mLd zH`|h{v74T|SY@)7G|fpgrPd^;=Vt2j(-R7BZ4ab0`Rd!rT7g*l6EKbF(b7)A)&a~ z*ihoEu{P$LjQRNnla=f>-Xg$k%@t?o13D}%P4dib*S&7JAdw}v`9g1yjc}u1c(V)l z)i`Jc8j&Q$J}5(taDRHoOw&4fe?fhL%VfywtnhbPb=lT}x&mEJw%%aL)|;$0qtRwf z&hh2s6{RFOEbiJ`ceXt#)sqG2ph=ryGG%B@x8xcPSy=`nnFO5B|B@9?<5NT)f|T2t zwlY4BPgiGFCRvj$n!Mb&9J{~HUS}_^%PVNf&&Xr zp2|0v^YhHce6kCtN856aBM%>_dL8LfPMY%cThhk-!<*%**QHivm}-a_cVcw;WWmV@#hAkaFt9A(^W z77O6*6g7wb3(9s#aj`(4{{qQn*Ry_E!&N*Hdr{QmyQOF4M0`#XpNrYASRpbRDxNGp zSEGE99EZ;-;_+C3C45d5p9|Ry%!}2Bil>Rs0rp$a8 z@%NOv2q5qj9vj?bcuNPA^?3T}^t!{!(?`TpSNJPA3q5!8)UQO{oyybqW0WbzaPoAe z&)Cc)%1^^lP%h^yydi>fI6{+@BO|aDnczww}Yem1H`lf=D{n znmq0I^CB(N?l^t1v!Y!HZH@j0S|#YqYl0S(a5^pB2|YVILaF??9!{fs&JQ~aj)O0} z4195N2l(W|cO_5YV5i|T*=g_%Toq#pf(f{IgIZQk8_FD2vU)APtdS0U7Ch&|=8lf$ z3(pCD9~+8jYc^=*NNK!SI?OZn5`81A+~4_A;FKNXi^jvp`zh+ISmygtIN8g^_17mmyty$3nH~WMe_ma$c zaC&_gyAnDL4zL8wzXR{0Rk9ChH68qc|GpbRr}*FLXm}l=p{t>wpuy#6z)M#Q*6LKY z0=&{nh|O#M5}Xz2dRZ=4I^iHL~mbe-NKo3HbCl>`E!(HR9Wwtbu)ub+I>rGJYQH!|h^! z!}AJ}yNR}?;#e``d6c?}V-+OIr=t9Af}R$w7lu37D0ClYL5EW$c;klNX2faQ!W}z< zYgepTTeWjLUu}e5V=*cuj0m?_e(Tm6dqP%Gj*s8D(YZywc;X;OS*$&!kn(C|g|9 z%x3WB>cxZejqPcUa>wGjp49Z7n#Bb^yB0k#qqPlaEsfW~@_s3LFc@xOL%?8&Ot=|{ zHgpCVyY05eV1sCEr($gMxmJ93hgV}< z{{+YC#Ah=;ZxEmB#pgkM9>RGI6>k7Hsg2cWgFZK6ok3B@$M9c6H2Xm$L;@`T zE`p<6heUD^kUn8Au)(Qv*M72WnS#sSY4!QHpDZV@7%7kXU1DbOnabgFcjU8ZcZz;^ z2|qo2kB~y@2k*MMzn|zZBl@>Plq(UR&FIH=L09=~0o|Q~E=iytw()J)Y0CJMMA^c9 z@FOR|mN`Eq+wYW+69Qhy_OrYA8^C8t-vOT`y%eTh3O)NhyOuwVnHyny<1P_1SBRY6 z0saozen??N45P2q78bP>I9)zNmH`Qm243fEDN8QRDAlIw_2vv1e?jv}#3!$V<}B&6 zxLd`%#v|I;!~PEII*;D)LVxFlghl{AD)3S1puk5FL}1SxIi`<*$J2XBWJt(t%Vd=P!Tr+|J_S#MnS131!pxJf`J|7z39a>|u5mWD9#47=<4%rQ)mZeUfRL-a4R@HN9w`nGJHNNKF<}O)zUfAN4yZv z=Sf3&UMQWzlEmjxX$U9WpnR}5uVTGqCPK3~#VI>R$GBX!Z$W20A$rT29ubQJYky{b@p zoI7i7US$GXvEo!cdq>kehIR`fzH~=SHtD|ge`r^xcJXHJ;8@M5-#=P2Ry*HZt#7v% zH5jTh7gXy84hU%^gWG zY|1@9DXB6v#Jt&aaV=upxdo@D8E&$7c;RK0UUxN1 zsSdbXUMZ>8yk=T55*+cz_w*Z<^yYdre@*jsdKYX-9GRWiRKw0ME=_$>RUZ0jVMY4W z@re4wUA*jN$PTTykm{Q9{8*ieJICO8#g5hV^_Cj;>rc*(l9JA%2IqnWV?8}%>6M8N zuh-!yF20bRdqwF0ZNdBI49=cC7&^~qE*PpQa8*~k3Toc#?}rYiAuBn6yWu=!ll@== zHAZLTh!4oNs!ax$-k>+(2c2CarJ=oaS6V;oTVPmtcK^Jta&vWF-&V_C4)b@P%iY}B z;PcsLy1UL?Yd#HLXB4>;QqR7;BsKQ?j|Jr_rkI3$*P1;#XWO5K*{f@`LCt# zaeEo!D3pE`GXWcnv%BC2wh9rCfd6=d$ef7He9}a>TV-?=8jw z_*)7!6=6RmXanw3HKeUGuqQP+|Xf9NTgzegUB)06X>YAppdx{ACxUSoA#Kvy(iF3fBwNYp$x zD^Z&`OYhRREU)(2t4x{wfs8`E0JA(g*`zn6G-v0gWuzLDI@66Rtv8z%tgt9w^D>Md z5g;O87iD|Im)}6KB)$v{9JWOMB)d@4?piy~b>`B|?i<;;?)zP{JGBeqY8Grric`Jj zY^xvgwRIi*O;hXK!QR$o5Ay74PnN5@+J-ik;w_u2Wh>>2Ot?u)*k&jllIL`%0e;Yd z%%xS!o5#8~G_FM!cFfP=ZQp3rkrPiTKz-@g}sCG(Ap^EvP zC800b?{8_#bsn^5H{w!L(aPg!B^zg~ipgS8J7f{imJlGAN+Chf7X3~W^4USG8C}$} z9WBpA+jYw`s~wCvf|)DoMeCpERMP9nvK+Ta@6de3F6b%hI<=*;D>)@Gv8SpX{kY({ z+}y!hrb$gtyIhwJm&QeJ=$=)x$n`5d(bA}CRfhXv&=Xiqhw|nkK94S3uz=-6?s#c! zjolh^(rD8{HmF?mQa^gqN#V%FF-*c9yYQhFF;W;Iv9A)<5?r_93Xp~Pyf3x6=p6Ro zsn(Q%KFv_|ljl5cUu*X!v-?Nw&WVZqqS4@7EjCP9nz!7UJxwQ(AqNNlt2SaB|5X*? z0o*^LhY2Yen*XYUnk3eGq6%jDjn<&)$22g%9_h|F@K?g_9Nie0g;)aC8GXjSDpp}8 ze3!vy>@3rN4!;X)3A|tln;9SZ#bq}yn!jbiRh?t)KcByKzPo$8_tKsVyT{o~L-Je7 zyYo5Y>{jLFc|+V%*0K;L>~9Y|z)C{zEet)z21EC;mI3pv%DeR4-O8Kv9hBfA9TV@Y zV;4FYFa=xztmKf#k>Mc>^kolRaq-1J4Sk9i*ms0}g%#l1(b-te&SvZ^dW}7_6Ti~O zdC*weDScnshaE}eMd0ybtL*K$B_+8z#l`Oz=jN1@}%9e z_7$h~KOTO0dWwQMEH0NN%jLrLub+h?zq75*tZb(Av6n-o>}A$FI{K*Su}{i|=gfrt!L3=a2>7xFgOOFbRlTfk-SvULGFCsk zVaHvS?}q+apS^kB^3g49>*(@%n=#^gDUQ9yzM!1GBi`k31moFjp=-+M^4K!A>Xnyz z@4l<|C6p^exo0Eg)Q*6|6wjV53thujm4#jz=zVGErQW;H=O%Q#oaciYBt#c)Ac``& zy$IJ)4CXLr=uiUtjOX9jd&A6it3$P`SI6q8lsXO~t>LHw77eodazZaKcc_|ucHxc9 zH}q`Y@a8BPTv}=3JqM%UIwX)Rp)%LRqfZ}uY+}!z&>QUC%Pt+g>88<3FJG`g@N)&5 z#JNWk-7v-!|7udxdt1Wm29Rb`|0v2XGB>x?W@rtpr?%1D*ixO5mDm%g|1pqd8*`0j zeSDx3KMOK=aK^450^nt#bO=1(gq|So6@K1ekM+Za!~k2audc61OE;iFL$J0yO{?cU zfkPSQjGUat0sP1^$~B#!&bTPI_!Cbcp0Uhi$|;l)uyL zLOtmKN6stDU)gfS&#@yo9=h(^Zy{Z_@E5q3)C~V+quYU}&dM4^5UvI^Guyx|%Feb#+lm@$A-?ImN{VEiI0sv&(`twUyb1hAm|+jfU*X z+8VlhND7|?S^r2xFJKSW5ag1OKAei1WtD0}R&ACy)tQ=Kpu$qEZAMW}rZ=s?sv6WT z*lE!XB_~zd**g=9?2FSiwf2y8d@(3zLc}jbz7vL`>HeleUh!#IdUoAKXBn_?S`e!u`17uzWFuvi-N&L z^)1W$+w4_i&ZQgb=3O`dR}=nc_zlFo$FSm0#*J-Kyvxe4=4XC~Rc3xQe<@>fh|Nkf zC$dq~aNGn!SqYQ4V#Q!*f4Xno#8-dX8v5#N9IttSKRh;RhrZK0+)iXsGKr7M zSqt&r4@G=Ix)dvwV--c>6Jezi+s_Y^cINf{ikUdzY5ME^Ek#)9oR& z=*H3!H`+|Q?*e2k(MGE|(&co9CfMaX`TIi9|1eB9gaaCCU_-POKc*?mFo9J>Go z4)&I(!xeqzvD*u5c7Waf*%g5~e*c_6#cY3QS9Gg}{k*x{*W6NG-W*ysy+luo0=HmQ zMZJ&PI<5E3QlA9Z|GytW^dv>p5+KNojn+Et_vxcsp^UEh$419|7^<_~Th<0PgtkV< zdX}C3{qG0;qYQ{KA`b7AT+L@9Gna@Ab2|C#czciuC1bKF=!!R~9cmXFT~HeOH;d0H z)8V4P?{B^3=9@!*DbDAEarvv8*#@@8m0}596S|CT{P2TAzpizUEynR|lJ`aO4X_%W z5;mP2h(n?$-W93G0X`KL@i0;iNQA|#2$^vuCq$-16orXR)hI2`P*!cnQ-IaMnzomV_^<-U!ZuOBFA zT@-rB(NG+hSZ=jeICQRHMR7%O$xuzvqM4N?j?U1lI1`v@F6o}{U4Pb+M=q>dHC&dS zo!*M$IE|~%X*=oRpR~`qYgj34W3#Kv~0KTeWG?#+P1z$fPG-O|$CpRV;SZ0eZM_3Nq%D@qE3rjt{3 z@e9;eOL4pIy!5=(!tqyaJ+-dJtecYbiNWHerWMs4o9vnXEaZQBt9;%fuRX7$CG#iQ zb-CqZ#hyN$Hb2c)_=&xxDARC%iZM9@sQ`+kB)$?BEFIZFVHqixLa8S|{{F_d*RD;f znC+`s+016~nYfwLRI#w3b%}qH-WK7!XG+NE&Hcwyqz({JL(`<0oby(}? znV3 zR1_%#M^>67mf|Fm#9Tg=6^o`(XdL8xk(j~?_N=8P1y% zLvNbdR&B3oH)v-V4YX3rVKVzr*ta}LBX+KT#PW*iq3{WvH3o4{DBQR5S8hxZyNnZT za^tFohE#lRq-tmz9sQfh>GE+k?Y!$EURh_tAwituvC|zjXN)o3 z%C}EBrFUeYrF#em3UYgTLhrJPXP*sS`}&1vJkKVG&U$tk`?VM+R^~r4#+WT;NuJKa zLL8RtC@kzKwU?IK3p^fnS#f7kNoR3!M@eyKaciZ`UQtnCqc?~ny9G#Q%|{lFNv+{V z={B4XrBxm_u5KF}dt9d5BRX;N>P~^vng~yzK>j<&@DH0dmwi9XE~nb1*gL%dr$`Zj zV8yJg3{bH2^s&=VA7h`6Tzct9=tE`(z0B~xu;+SA%BMAfL&pL3GU$3cf7y^3+SNXFI_F7MV`kK1z zg7zAdzB)6nwb`_g;*n1Uu+6c{?J5(wHSg913%1RN1Xa-3s*} z1c@S*O2&EQ3dI7bRjhI5j<&WPGY3xXif1Xwp)uaHxN)gNm7I{ODqZy%Ym==b9?x(d zPaZgbc;vi+_H9FnX^-%@ri$9+q$G7hYb`r`)m3rKnxCH^2VGbSg*cf%iAW_6>j_$G zQC28w+CwyKI*`X7=ZumS) z$Y3pB%VG^@qHGcwEa@fuV^MwSkNK9d?y?{|@UN(2*(E^`|6mTVm|hPip=IeZ`! zcPTcYW_FplD@V%%(jnAS;q4%z(;8kU-G(jpDV@0zr@Mf&jnE}}V^?SlbP0<;y5&ML z^5txT9|46|J~N=CgKxrp6?Ct{ai=_1M@}|O-Isv6D!yKNP0q#7ze(lz?Bb_M-^fMy z{35G^L~40GyAwC4D%lI9QcU>r+b(O)#22skpFX?@U(^c|Kb?)>Z6FnY8S7alS@{;$ zEyvTEmBBV43B$Tq&0ghPzn&l7w8`4kBwAa@*2we@@=M6sAQIpexUoPD-c!af%KZo% zr$@avW&85-eAzklJ;#uftJmk`@QR$W?A)^K?6O?2wl?~g(uk*pd?i~2`+z83EbN4z zb%`xBW!+xLYs*dfCVfh>j(0P&J3q^A&PYtx@h#qOw(iRviNm- zsb@XxHt9<~LF*u00Ak~ZlJyjq4m*0;ZNrsyLAsF_G8y*amcu`Ywb-=G)QZTAz8Jj# zgKWDGJN2XCzo9Jh67jZx$io?6|LpWTnGXEU>=oIWm0538RODo3U0s@%X(&z0(wC-{ z8Zz+{eQge>;vRxmF~(zG(>uu4a1#D%ml>b24~`z?hJ(1<+DC0*UqOjgOor)q-(7@D zOv}4$ZcBN7M!IsZ>9e?`thm;hsCKKe?D}-QxW$xYr!d^l*5Vy7EKVghiF-J3+H5IX z9KK6v0kjs2{Tq9FfcvEHa8hIz;dJi6$5OsSDv54vsh7SMaw;JB`l%xX``4+Qd4+GnAbmG`o4{Qa{Zk>5Q+eyL1^ zE3orO_o!SDQ3?;d90zQS#v_F@Thzu1XQ?}db=4L->o3w**m)o=QAt@ zCpaCo4S2g!%%ci?du@tuf4HalGG4!E_;i|;sP1EHN|f#3{gC_Xgas0FlFj>jd;jlC zL(~eWa7Q8a!w2o%0`0|{Wk^TjR5Wj3C-c3Eg#R~gEQ@gAcTsLMM7a?C3En$+A1vid z|J73VO)F~wr#_zI)Uz>8flkzhlWmUJM;?gSMKiBu_u?h_1%$bhDtfE{U?uv@pn*TQz*cCpLt$`I)L$)O3-7tUQWo%9OZkj)n zu(Z`T^w9a8sH}^4g+>agJXvmse7~Da+>OeviXRf%8sulL|b9fC4*rU8+hXrT@3jt9}B!>~8Ri7M$J?j9sgK)bIT z>l=G!>F`q0Kz0>7pU+lgj^P;{uwpeR@Fl+3uTX07|EeTfckz>;iGma3)TVUjmap#7ry#s;8}>% zK9es2z6S#$`rnE;n($lXKgRIgxaIvCl+Oj7gYqch>W@)=pY#!K8^?{y(C_o)8wq!O zAn4~v4*>VEkEH$3d#uO8AMm$?=fGb8!)~)0xk9=TZu-AC+VjAvzq!(KX`^%|-ekTR ze}iQ&Zg78H`cV2eOJHWa-B7`r*bJPqUyhJ>2Tr6-@VMJQDs$m zRMo0>)hyMRYMtsd)w!z6RoAQTRQ*BqhU$n~Qm3f1)rIN`b(4CAdaio8dZT)~`fBxV z^;7D@>QB|*CnO~36Y>+>2_p%oCj2Df@`URXUQT#B;b_9wi99hQ(U#~-Y)I@+98FxA zcyi)-iB}}vnE2bo2NU-tzL@w%;*rG96GKT!Nya2+Qe{$0(xpkiNcwfsgGu|7UQ1Rd zmnP3jzAkxR@{7rDBp*rsJUNt-m|{p7N?Dk)F6Fe83sSC1xh3W9l-(&$rTk6f&@9qy z&}`G3tNEGc2F-6Yf6)9x^SPf9mZBHFaU6{Hm^`z9ZQZGrpF7@`* z`%@oJ4W}iinbKTo?P({aot1V;+I4BSr|nI9J?(JXr)l4(C#37s^V8kwRq1W%^V7%E zx1{e(zbO6j^cT`!Pk%4{^Ylq=f>x)^)fQ_5+IH=rcD{C{c9V98_NUsPYj4*6PWxa+ zTt<3Eenv^gH5s>N{6m+hGwAYlZe5+OQ#Yc!Q1>_8A>Ajs|LEfoK6dDb^$YbA`cw30 z>o3t?ufIe8fc{baGx}Hb@900)e`AmhsfJ8Lp&@AaiQzKCb%w``@y2vxwz1F{Fg6=! z7`GUA8ZR_nZTyw-ZsTs_lg5{fZy4V^4`KTg?OJQS)Z=Z_N*y-!gw_{?Z)IOwKfA+B1hU&&j+j^B0-7 zXZ|De{mf4@zspi(X|wXPO0p`mnzLqP&B;f%JQn^|7-3|;G?R}#{YBfolHo=o)ETV7y=1l5t0cc0Robc zL_`EdKt)9Ygf%2I1VxHyky>18aVc(yii&F$5v?myODQ5nYh6ZE3P>4>l)4oWl=*+p zbMM?t5NqG}|GvN9Z|3uy``qX3&w0*s&OPfVoxkXOBBOuCoQyRYzsuO3@qWhMjDKVt z&9pOHW}cgQNoGyv<(b!J-kiBA^Wn^AGGEPnGte&3GtfUUEO1s}LSRZ@ZeU^HuE5&B z(}9-*e+;}G_&D(Qz`wfaE-kur?2_Fjzsry=Bf6Z|Wm1<}T^4p()@4PPySqHr<&`cU zc8PTPvP(3W66_u<51tdeC^$V>A6yc=KDaV?fAERm?}Kj!cLw(dzX+b_n#`W9tgd~# z4(eLjwV~^MU7zc^x9icY?pYURHDo=W_4llAyN&F&tlNricXnIT?eT6Ky1mkEOSd<> zg}d$PcCdT9?%CbPbicCuue-n2{oCx8*%Pu?WZ#*+Cj0U14cV_`Z^?c$JDj~I`(XAL z*~eIpo1D`&r&CT=POqF$&Y+x8ITz*3&bcCIdCu)QYjd8>c_Zi39&LJ*_Bgl4N&jUSv}A1Iko4Up7VSDwC68+{;KEgJ@4)LaL;FYzS{Hko`3K8WzT4@lwMtX z_3m|guTj0m^}4v%v|cse`#;iaZ|{=ci+XSAqx+QgY3OrRpBwr-aazi0Lr$A{+P$Z} z-M3@kk$o@g`=@@L`jz%Ozu)wJi~3#L@7{jf`~9_FG%qzTCvRBZ#Jq;Q7xH%H9nM$z zmHDgkUk@dOazjHy=Z9)SkB9zJ5Gr`CU|;`B`aj?Q-2tTo)(rTfFuky>aAe_x!dZn& z3bz#QEy^uwC|X>!tmwv~JBuDH+EnyW(Y~V3ioPpODDGU`t+;pbu;LNL6N{%5-&Fi; z@hioDDE@QthsB2n`UdtG*l%Fbz)1sV44gmks)4^8_{hK)2Yxj0@SxN|od@+Cls{EtGpkCLuyLGJlq_j&k7#*oZ@>^30Tvip9%)M^rp`X zPwDnl{tay+aDw#x5PYMi*cYmS7S9;yU224HvKnEYCqXjrz#Lp9i1*Q#eML%?Wdu>h^=M zPhG%x`~Mt-)z~KCy`ehT`@Rp>Z&U~CHkJGz!L9TuPlhY#U;b}EjT`O^=V@P~atv6P zsS)gu%l$!EgdIC#>@#^9+y&nx@R9$!ps!P>S=SNA55ak){k-UL%Xxlmo;saV$-ayM zXA^(PNyJ}r?(mnKGW;cH2MefT+?9bJz-=neci5APzvw@7SEYDU{Ga--xcLvkx`X|0SE~$xpSw@z zJvm0VE+O9U!|A7>oyy&h(}t*YJNSKIzg;WlqZ0lT(EIrII|*oGPV=P#$JA-|QQ#-Y z@Xf$AU^uaDzMr>tKqw|nDRIcy8wD&xEf&ffM(obr#m8J z6WOml0p4FrSksC7e0W|-8C0>i`fSzh|CT#zl1gI_Pa*A7A-6oF*&S4goy~KM>S5<| zs>eRkn?ibIRP;$|XqTi1~1wWCeGYC3!wNz(C(fJj zYRUT?)s}tJ?AcZwki&C;GF=V5`V{o*;S*q4YJfeh@hP}*y-wpHErag}Lz zBD^%_-VL83>?iprtCXKteXY)_BWpkVS_@Qf-<{+O|Avo-&(w**;GNk+9t4J}Z`l!S z{2EZ^^f26+{x18ifi?g$1j=Y_^UiKr!cwv)#^A=TJ1`Om0)|!!829XyX>_a2`F^*k z9(uOwimY~J?y`9|UjQJ>rE#qjDL(t4OUGnv6P>39nK95qwR(PZO5; z#h%VvqiMo6yfDBjJTn?CVDeA`D4E~VET}vXg}(`R^L^1OVb)3GS7v0(XN_dRLIM(U zy>$Wp&T^idb`sKqB_!9lj{(n3DtJ+hHhRqH3bje8;~Skge2?jCgNk~~kJG;x`=^v_ z^8%P>8YU^?>1)QyPPIc_P1%nIYrzctK($0KVP(fHoa%7DUZ>yD5&fzD!s=|DW)(16 zcA-_zzNuHO?bgS(&u(tFvfJ35?e2CiV`lmG0DDs)DbOm=K9Cvc%84hv1N{O;fx&?@ z1Lp-U3d{=B1%4X%dEi%pTLZTTRtLUeRG@XRU9eLy5X=hZ1oMIg!9k1?%nM!-ye@cu z@WJ52!AFC?39b)58+ZU{aQq<v$q|$ zj=ykxBO{3B*MgkqsX^*KH$V63r}SpMpFOT$=wntd_B1*9d5N<*wpd|X*?u=a-RvAM zKg|No18ISbKrqlf&@0e4P#72#C<}~YWBa5)4Pzo#2W|@7BKf&5m`Hxw20H{Zf&URd?7egL*6$7O`C!ij{1@!mrqrH4?|H|#+Ot8-m3vn1`PrVid#>EQW%o*@c3%t3 z0p{aj7f)grN4*=Ex5T%0Y%k*k~1dq`>iI48dW`w;0oqDz!tEQ@IHADSG&F2R32h>AqEq4UJ z#QB{&xl?jCcMyKcnQ{f3Vf`!4&wE#Wrkm>)I*oIi3mDTL%&7KQ7Cc>`tMpVBgx<<* z!b(nPc}%a@+w>dyE&XTxp;cn7wT4)~w5qM%)@;VRYdGQaVe3BYFV_7!Vx4c@WSwEH zvEH{Hv~FNbJl)!1-D%xx^<_6(8f)1uu)1*KevrO{xqT}c4cCTQh0bW$A!v*OYS<-e zoI0P8`5tPCx(R)94Y%c9PycL{+NOTbtpHoOPx3+isJ3X2zG2#$)g0^+Z_W8V89JzY z=(BX0uFz-bcDferGf&UgH|a&zGJPZC^v~$$^z&?UxlO-Aza|0g^#wZIue#`#^v_JY zn5u%h742NQ>Z#kSVVXV;dVR3YWxY!ted&NYQy0-r4p3+5fy~nt)2|t-Mzc0$3a1B5 z)??IoJzQ0x|1aYHlk@awHI37`xSf;U;4FQinxijLtcOrF+|W8tPgV;!C+c!NLtVxV zp4Dm*?b{uCx%!#@iCRfNat&?X!}@mhsJ>G@qVG^o>3h`%<_4e952&a0{c0oU@4TX) zP%rDpS(~<1y`wj)&3c1+U;k0PtzT2`=`HGG{U`N_{tLabL;53in30ix=#SM3eYM)I zIZ=kbS|?60t)+EnU?+SHYlx4k3A$V@)%EHR?3oy$3)S8F2HH9HywmpHqkqX7)2M2v zee`v6)akm9x`2M}rSx&H(^sh5^)I-8_Ad1VZQ&pFZ`EJ)@71%k$FFjJ!43MS>VAE* zx{-GC@A?DlDP~KavDPzN@|N|Swa(gLJ50 zZ#n1aRqG}03d*9F*NdK8Z+hNkx*t8)zO-&#)F?ejovTk*WAqR;QIAk_^(CrKU#jZq z*)P;H)fJp0b|pRid-bo-(uYq;qw7!1ii~`w13ras*m(`wM*|%f79SFGH z{iVKA{Yqb@mgxp{t-ehCLSL?y>xG;vy+GZpf2MAwM}C`Lrhct|u5RIc-PbkqWb{1# zq+d~Q>Q~iUdXxII{+-&PH>!w!A1(QwI-tYqpx$X!SyQd)))Z?7XC{rX&a}?5###aM1RUI)W&5CuTX5?|7q`&>W=)xK@1xIW zxp;!=L>+YKe(GtNi#Jov`POpiNw}$Z@fPTU8(qAm>QCQzxT;h0)D_HL&O$@ZMB0P& z#i-NtQ-bK6nP|?S8ilzKsAc{ysLsK4otn-2RB>O*2^P&bLgdg+7 zZIJfRq~C-*s!0fapqwg?CZCQRoGRW}YO2&_q;Hm##S|&MASrgrJSg0(*957 zv8vps6SSX}vl%)%iS{!^dIBwJ#af{UTkAHuEp6dc?reOLwxS(puE4-B^DEksfVWDF@P4Pw=UAfdLY`n58o);bqV_WPqeH%(B;SUFmzcd?fP(Ct}AGUB>XJTEU7wMm}2H;9G_!9K=KHAme`e%BnzD6(8KiAjN8WwRv@OAoneFJ@vU#enS z>6>VM-lg@KNn7|H-$%F7BQbrg+w~p#PR_Kun{)H-q33lkt*@%)xP&kOW^UZU6W zGQE#i^hW(E?LsZ>!dzOx*QED&LMvLz-}6=T2XzMR!xpXeAN5w+yb<(NO#g2?t>~Zh z4*jO|1m9Nk^JRB-oJn2(Mt`h#>A&jTjJ}+u_v%mdKK(Z& z`+e2GS5t)k&H?&8f9Lz@Q~E%M^gr}r{ZIWF<2PsXMfD{;s;~6FXvL4{uk}&=jXtK2 z>u>qmKSzH@`+h=4EoE_mmu0haC4m)aiD>Py>I$owm85>k3Arg&bG}$xTCLP#t2H~j z+p0xYDtmiPkF-5EF?6&#@g16BWzrk%!U?NEbtPv2Wm(N>^<3#|Uu0IQHMz+!74D@T@?Uc0)QldOKm8ojIN zai4At<37eR)`yf^74+oKkoI;YE$%3Kx)bS(kG95G^clHt=#X`;dXe_mw8Ex6K3`qJ zSA2x8<%xV5Tx?xpO=8q>llq;yho14>^rO>Q8JEtOhS_V|iN17(HJP@33a$Gzdg;?? z-)CC0=&R46uRd2=^Le!E^|a{?(w<*#Eu?i{MC-noyN8z0s$b0)$5QJWYZ+e}*Yd5g zT)j-6ZucRmW5rK|^9YW+^VMxXTe)@HL~jMF@~ zTCZE%tT!0b_!D0~Z_=;*Grilt(4&2q-t7DIYCoV~`=Rxb^|7_f`m42@{WE(xHF6)f z0({8#*)G-@-K0LExAIrM*>*F=_JQ>`Yrhq-4sch%LGCX�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 + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 9.0 + + diff --git a/ios/Flutter/Debug.xcconfig b/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/ios/Flutter/Release.xcconfig b/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..de68c68 --- /dev/null +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,495 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1020; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.bharatMystery; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.bharatMystery; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.bharatMystery; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..a28140c --- /dev/null +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000..70693e4 --- /dev/null +++ b/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import UIKit +import Flutter + +@UIApplicationMain +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d36b1fa --- /dev/null +++ b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f091b6b0bca859a3f474b03065bef75ba58a9e4c GIT binary patch literal 1588 zcmV-42Fv-0P)C1SqPt}wig>|5Crh^=oyX$BK<}M8eLU3e2hGT;=G|!_SP)7zNI6fqUMB=)y zRAZ>eDe#*r`yDAVgB_R*LB*MAc)8(b{g{9McCXW!lq7r(btRoB9!8B-#AI6JMb~YFBEvdsV)`mEQO^&#eRKx@b&x- z5lZm*!WfD8oCLzfHGz#u7sT0^VLMI1MqGxF^v+`4YYnVYgk*=kU?HsSz{v({E3lb9 z>+xILjBN)t6`=g~IBOelGQ(O990@BfXf(DRI5I$qN$0Gkz-FSc$3a+2fX$AedL4u{ z4V+5Ong(9LiGcIKW?_352sR;LtDPmPJXI{YtT=O8=76o9;*n%_m|xo!i>7$IrZ-{l z-x3`7M}qzHsPV@$v#>H-TpjDh2UE$9g6sysUREDy_R(a)>=eHw-WAyfIN z*qb!_hW>G)Tu8nSw9yn#3wFMiLcfc4pY0ek1}8(NqkBR@t4{~oC>ryc-h_ByH(Cg5 z>ao-}771+xE3um9lWAY1FeQFxowa1(!J(;Jg*wrg!=6FdRX+t_<%z&d&?|Bn){>zm zZQj(aA_HeBY&OC^jj*)N`8fa^ePOU72VpInJoI1?`ty#lvlNzs(&MZX+R%2xS~5Kh zX*|AU4QE#~SgPzOXe9>tRj>hjU@c1k5Y_mW*Jp3fI;)1&g3j|zDgC+}2Q_v%YfDax z!?umcN^n}KYQ|a$Lr+51Nf9dkkYFSjZZjkma$0KOj+;aQ&721~t7QUKx61J3(P4P1 zstI~7-wOACnWP4=8oGOwz%vNDqD8w&Q`qcNGGrbbf&0s9L0De{4{mRS?o0MU+nR_! zrvshUau0G^DeMhM_v{5BuLjb#Hh@r23lDAk8oF(C+P0rsBpv85EP>4CVMx#04MOfG z;P%vktHcXwTj~+IE(~px)3*MY77e}p#|c>TD?sMatC0Tu4iKKJ0(X8jxQY*gYtxsC z(zYC$g|@+I+kY;dg_dE>scBf&bP1Nc@Hz<3R)V`=AGkc;8CXqdi=B4l2k|g;2%#m& z*jfX^%b!A8#bI!j9-0Fi0bOXl(-c^AB9|nQaE`*)Hw+o&jS9@7&Gov#HbD~#d{twV zXd^Tr^mWLfFh$@Dr$e;PBEz4(-2q1FF0}c;~B5sA}+Q>TOoP+t>wf)V9Iy=5ruQa;z)y zI9C9*oUga6=hxw6QasLPnee@3^Rr*M{CdaL5=R41nLs(AHk_=Y+A9$2&H(B7!_pURs&8aNw7?`&Z&xY_Ye z)~D5Bog^td-^QbUtkTirdyK^mTHAOuptDflut!#^lnKqU md>ggs(5nOWAqO?umG&QVYK#ibz}*4>0000U6E9hRK9^#O7(mu>ETqrXGsduA8$)?`v2seloOCza43C{NQ$$gAOH**MCn0Q?+L7dl7qnbRdqZ8LSVp1ItDxhxD?t@5_yHg6A8yI zC*%Wgg22K|8E#!~cTNYR~@Y9KepMPrrB8cABapAFa=`H+UGhkXUZV1GnwR1*lPyZ;*K(i~2gp|@bzp8}og7e*#% zEnr|^CWdVV!-4*Y_7rFvlww2Ze+>j*!Z!pQ?2l->4q#nqRu9`ELo6RMS5=br47g_X zRw}P9a7RRYQ%2Vsd0Me{_(EggTnuN6j=-?uFS6j^u69elMypu?t>op*wBx<=Wx8?( ztpe^(fwM6jJX7M-l*k3kEpWOl_Vk3@(_w4oc}4YF4|Rt=2V^XU?#Yz`8(e?aZ@#li0n*=g^qOcVpd-Wbok=@b#Yw zqn8u9a)z>l(1kEaPYZ6hwubN6i<8QHgsu0oE) ziJ(p;Wxm>sf!K+cw>R-(^Y2_bahB+&KI9y^);#0qt}t-$C|Bo71lHi{_+lg#f%RFy z0um=e3$K3i6K{U_4K!EX?F&rExl^W|G8Z8;`5z-k}OGNZ0#WVb$WCpQu-_YsiqKP?BB# vzVHS-CTUF4Ozn5G+mq_~Qqto~ahA+K`|lyv3(-e}00000NkvXXu0mjfd`9t{ literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d0ef06e7edb86cdfe0d15b4b0d98334a86163658 GIT binary patch literal 1716 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c8f9ed8f5cee1c98386d13b17e89f719e83555b2 GIT binary patch literal 1895 zcmV-t2blPYP)FQtfgmafE#=YDCq`qUBt#QpG%*H6QHY765~R=q zZ6iudfM}q!Pz#~9JgOi8QJ|DSu?1-*(kSi1K4#~5?#|rh?sS)(-JQqX*}ciXJ56_H zdw=^s_srbAdqxlvGyrgGet#6T7_|j;95sL%MtM;q86vOxKM$f#puR)Bjv9Zvz9-di zXOTSsZkM83)E9PYBXC<$6(|>lNLVBb&&6y{NByFCp%6+^ALR@NCTse_wqvNmSWI-m z!$%KlHFH2omF!>#%1l3LTZg(s7eof$7*xB)ZQ0h?ejh?Ta9fDv59+u#MokW+1t8Zb zgHv%K(u9G^Lv`lh#f3<6!JVTL3(dCpxHbnbA;kKqQyd1~^Xe0VIaYBSWm6nsr;dFj z4;G-RyL?cYgsN1{L4ZFFNa;8)Rv0fM0C(~Tkit94 zz#~A)59?QjD&pAPSEQ)p8gP|DS{ng)j=2ux)_EzzJ773GmQ_Cic%3JJhC0t2cx>|v zJcVusIB!%F90{+}8hG3QU4KNeKmK%T>mN57NnCZ^56=0?&3@!j>a>B43pi{!u z7JyDj7`6d)qVp^R=%j>UIY6f+3`+qzIc!Y_=+uN^3BYV|o+$vGo-j-Wm<10%A=(Yk^beI{t%ld@yhKjq0iNjqN4XMGgQtbKubPM$JWBz}YA65k%dm*awtC^+f;a-x4+ddbH^7iDWGg&N0n#MW{kA|=8iMUiFYvMoDY@sPC#t$55gn6ykUTPAr`a@!(;np824>2xJthS z*ZdmT`g5-`BuJs`0LVhz+D9NNa3<=6m;cQLaF?tCv8)zcRSh66*Z|vXhG@$I%U~2l z?`Q zykI#*+rQ=z6Jm=Bui-SfpDYLA=|vzGE(dYm=OC8XM&MDo7ux4UF1~0J1+i%aCUpRe zt3L_uNyQ*cE(38Uy03H%I*)*Bh=Lb^Xj3?I^Hnbeq72(EOK^Y93CNp*uAA{5Lc=ky zx=~RKa4{iTm{_>_vSCm?$Ej=i6@=m%@VvAITnigVg{&@!7CDgs908761meDK5azA} z4?=NOH|PdvabgJ&fW2{Mo$Q0CcD8Qc84%{JPYt5EiG{MdLIAeX%T=D7NIP4%Hw}p9 zg)==!2Lbp#j{u_}hMiao9=!VSyx0gHbeCS`;q&vzeq|fs`y&^X-lso(Ls@-706qmA z7u*T5PMo_w3{se1t2`zWeO^hOvTsohG_;>J0wVqVe+n)AbQCx)yh9;w+J6?NF5Lmo zecS@ieAKL8%bVd@+-KT{yI|S}O>pYckUFs;ry9Ow$CD@ztz5K-*D$^{i(_1llhSh^ zEkL$}tsQt5>QA^;QgjgIfBDmcOgi5YDyu?t6vSnbp=1+@6D& z5MJ}B8q;bRlVoxasyhcUF1+)o`&3r0colr}QJ3hcSdLu;9;td>kf@Tcn<@9sIx&=m z;AD;SCh95=&p;$r{Xz3iWCO^MX83AGJ(yH&eTXgv|0=34#-&WAmw{)U7OU9!Wz^!7 zZ%jZFi@JR;>Mhi7S>V7wQ176|FdW2m?&`qa(ScO^CFPR80HucLHOTy%5s*HR0^8)i h0WYBP*#0Ks^FNSabJA*5${_#%002ovPDHLkV1oKhTl@e3 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d6b8609df07bf62e5100a53a01510388bd2b22 GIT binary patch literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d6b8609df07bf62e5100a53a01510388bd2b22 GIT binary patch literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..75b2d164a5a98e212cca15ea7bf2ab5de5108680 GIT binary patch literal 3831 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..c4df70d39da7941ef3f6dcb7f06a192d8dcb308d GIT binary patch literal 1888 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 iW8Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000..89c2725 --- /dev/null +++ b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +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. \ No newline at end of file diff --git a/ios/Runner/Base.lproj/LaunchScreen.storyboard b/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..f2e259c --- /dev/null +++ b/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner/Base.lproj/Main.storyboard b/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f3c2851 --- /dev/null +++ b/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist new file mode 100644 index 0000000..e7dc162 --- /dev/null +++ b/ios/Runner/Info.plist @@ -0,0 +1,45 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + bharat_mystery + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + + diff --git a/ios/Runner/Runner-Bridging-Header.h b/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000..308a2a5 --- /dev/null +++ b/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/lib/main.dart b/lib/main.dart new file mode 100644 index 0000000..5edb603 --- /dev/null +++ b/lib/main.dart @@ -0,0 +1,63 @@ +import 'package:bharat_mystery/screens/homepage.dart'; +import 'package:bharat_mystery/screens/selectMonument.dart'; +import 'package:bharat_mystery/screens/theme_provider.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'screens/login.dart'; +import 'screens/forgot.dart'; +import 'screens/register.dart'; +import 'screens/auth_screen.dart'; +import 'package:firebase_core/firebase_core.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:provider/provider.dart'; + +// ignore: avoid_init_to_null +String uid = null; +void main() async { + WidgetsFlutterBinding.ensureInitialized(); + await Firebase.initializeApp(); + final prefs = await SharedPreferences.getInstance(); + uid = prefs.getString('GLOBAL_USER_DATA'); + runApp(MyApp()); +} + +class MyApp extends StatelessWidget { + @override + Widget build(BuildContext context) { + SystemChrome.setPreferredOrientations([ + DeviceOrientation.portraitDown, + DeviceOrientation.portraitUp, + ]); + return ChangeNotifierProvider( + create: (_) => ThemeNotifier(), + child: Consumer( + builder: (context, ThemeNotifier notifier, child) { + return MaterialApp( + title: "Bharat Mystery", + theme: notifier.darkTheme ? dark : light, + initialRoute: '/', + routes: { + '/': (_) => Wrapper(), + '/login-page': (_) => LoginPage(), + '/auth-screen': (_) => AuthScreen(), + '/register-page': (_) => RegisterPage(), + '/home-page': (_) => HomePage(), + '/forgot-password-page': (_) => ForgotPage(), + '/select-monument': (_) => SelectMonument() + }); + }, + ), + ); + } +} + +class Wrapper extends StatelessWidget { + @override + Widget build(BuildContext context) { + //On App start, if user logged in, show HomePage page, else show AuthScreen + if (uid != null) { + return HomePage(); + } + return AuthScreen(); + } +} diff --git a/lib/screens/auth_screen.dart b/lib/screens/auth_screen.dart new file mode 100644 index 0000000..d7e0815 --- /dev/null +++ b/lib/screens/auth_screen.dart @@ -0,0 +1,154 @@ +import 'package:bharat_mystery/screens/login.dart'; +import 'package:bharat_mystery/screens/register.dart'; +import 'package:flutter/material.dart'; +import 'package:cached_network_image/cached_network_image.dart'; +import 'package:flutter/services.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +import 'homepage.dart'; + +class AuthScreen extends StatefulWidget { + @override + _AuthScreenState createState() => _AuthScreenState(); +} + +class _AuthScreenState extends State { + String uid; + @override + void initState() { + super.initState(); + _asyncMethodInnitState(); + } + + //god this was hell, wasted like 3 hours, trying to update the name of the user, after welcome. + void _asyncMethodInnitState() async { + final prefs = await SharedPreferences.getInstance(); + uid = prefs.getString('GLOBAL_USER_DATA'); + if (uid != null) { + Navigator.push(context, + MaterialPageRoute(builder: (BuildContext context) => HomePage())); + } + } + + @override + Widget build(BuildContext context) { + SystemChrome.setPreferredOrientations([ + DeviceOrientation.portraitDown, + DeviceOrientation.portraitUp, + ]); + + return MaterialApp( + home: Scaffold( + backgroundColor: Colors.white, + body: SingleChildScrollView( + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Container( + height: MediaQuery.of(context).size.height * 0.80, + width: MediaQuery.of(context).size.width, + decoration: BoxDecoration( + color: Theme.of(context).accentColor, + borderRadius: BorderRadius.only( + bottomLeft: Radius.circular(50.0), + bottomRight: Radius.circular(50.0)), + ), + child: Padding( + padding: const EdgeInsets.fromLTRB(0, 100.0, 0, 40.0), + child: SingleChildScrollView( + child: Column( + children: [ + Container( + child: CachedNetworkImage( + imageUrl: "https://i.imgur.com/9JCxapv.png", + height: MediaQuery.of(context).size.height * 0.27, + placeholder: (context, url) => + CircularProgressIndicator(), + ), + ), + SizedBox( + height: 30.0, + ), + Text( + "Bharat Mystery", + style: TextStyle( + color: Theme.of(context).highlightColor, + fontSize: 30.0, + fontFamily: 'LexendDeca', + fontWeight: FontWeight.w600, + ), + ), + SizedBox( + height: 40.0, + ), + MaterialButton( + splashColor: Colors.white, + height: 50.0, + padding: EdgeInsets.symmetric(horizontal: 43.0), + elevation: 10.0, + shape: StadiumBorder(), + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (BuildContext context) => + RegisterPage(), + )); + }, + color: Theme.of(context).highlightColor, + child: Text( + "Register", + style: TextStyle( + fontSize: 16.0, + color: Theme.of(context).cardColor, + ), + ), + ), + SizedBox( + height: 20.0, + ), + MaterialButton( + splashColor: Colors.white, + padding: EdgeInsets.symmetric(horizontal: 53.0), + height: 50.0, + elevation: 10.0, + shape: StadiumBorder(), + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (BuildContext context) => + LoginPage(), + )); + }, + color: Theme.of(context).highlightColor, + child: Text( + "Login", + style: TextStyle( + fontSize: 16.0, + color: Theme.of(context).cardColor, + ), + ), + ), + ], + ), + ), + ), + ), + Padding( + padding: const EdgeInsets.fromLTRB(0, 60.0, 0, 40.0), + child: Text( + "*Amity International School, Sector-46", + style: TextStyle( + fontFamily: 'LexendDeca', + fontSize: 15.0, + ), + ), + ), + ], + ), + ), + ), + ); + } +} diff --git a/lib/screens/directions.dart b/lib/screens/directions.dart new file mode 100644 index 0000000..8ccd1b9 --- /dev/null +++ b/lib/screens/directions.dart @@ -0,0 +1,55 @@ +import 'package:flutter/material.dart'; +import 'package:geolocator/geolocator.dart'; +import 'package:webview_flutter/webview_flutter.dart'; + +class Directions extends StatefulWidget { + final double elong; + final double elat; + Directions({this.elat, this.elong}); + + @override + _DirectionsState createState() => _DirectionsState(); +} + +class _DirectionsState extends State { + Future getCurrentPos() async { + Position position = await Geolocator.getCurrentPosition( + desiredAccuracy: LocationAccuracy.high); + slong = position.longitude; + slat = position.latitude; + return [slong, slat]; + } + + var slong; + var slat; + + @override + Widget build(BuildContext context) { + return MaterialApp( + home: FutureBuilder( + future: getCurrentPos(), + builder: (context, snapshot) { + if (!snapshot.hasData) { + return Scaffold( + backgroundColor: Theme.of(context).focusColor, + body: Center( + child: CircularProgressIndicator( + valueColor: + new AlwaysStoppedAnimation(Colors.black)), + ), + ); + } + + final result = snapshot.data; + + return Scaffold( + body: WebView( + initialUrl: + "https://bharat-mystery-api.herokuapp.com/map?elong=${widget.elong}&elat=${widget.elat}&slong=${result[0]}&slat=${result[1]}", + javascriptMode: JavascriptMode.unrestricted, + ), + ); + }), + ); + } +} diff --git a/lib/screens/forgot.dart b/lib/screens/forgot.dart new file mode 100644 index 0000000..62185d2 --- /dev/null +++ b/lib/screens/forgot.dart @@ -0,0 +1,196 @@ +import 'package:bharat_mystery/screens/login.dart'; +import 'package:flutter/material.dart'; +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:flutter/services.dart'; +import 'package:fluttertoast/fluttertoast.dart'; +import 'package:bharat_mystery/screens/register.dart'; + +class ForgotPage extends StatefulWidget { + @override + _ForgotPageState createState() => _ForgotPageState(); +} + +class _ForgotPageState extends State { + String _forgotEmail; + final GlobalKey _formKey = GlobalKey(); + final FirebaseAuth auth = FirebaseAuth.instance; + + @override + Widget build(BuildContext context) { + SystemChrome.setPreferredOrientations([ + DeviceOrientation.portraitDown, + DeviceOrientation.portraitUp, + ]); + return MaterialApp( + home: Scaffold( + body: SingleChildScrollView( + child: Column( + children: [ + //bharat mystery logo and image + Padding( + padding: const EdgeInsets.fromLTRB(0, 30.0, 0, 70.0), + child: Container( + width: MediaQuery.of(context).size.width, + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Container( + child: Image.network('https://i.imgur.com/W0fE4FL.png'), + ), + Text( + "Bharat Mystery", + style: TextStyle( + fontFamily: 'LexendDeca', + fontSize: 30.0, + fontWeight: FontWeight.bold, + ), + textAlign: TextAlign.center, + ), + ], + ), + ), + ), + Container( + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.height * 0.6, + decoration: BoxDecoration( + color: Theme.of(context).accentColor, + borderRadius: BorderRadius.only( + topLeft: Radius.circular(50.0), + topRight: Radius.circular(50.0), + ), + ), + child: Padding( + padding: const EdgeInsets.fromLTRB(20.0, 30.0, 20.0, 10.0), + child: Column( + children: [ + //login text + Text( + "Forgot Page", + style: TextStyle( + fontFamily: 'LexendDeca', + fontSize: 25.0, + fontWeight: FontWeight.bold, + color: Theme.of(context).highlightColor), + ), + SizedBox( + height: 25.0, + ), + Form( + key: _formKey, + child: Column( + children: [ + //textfield email + TextFormField( + autocorrect: false, + autofocus: false, + validator: (input) { + if (input.isEmpty) { + return 'Please provide an email'; + } + return null; + }, + decoration: InputDecoration( + hintText: "Email", + border: OutlineInputBorder( + borderSide: + BorderSide(color: Colors.grey[50]), + borderRadius: BorderRadius.circular(30.0), + ), + fillColor: Colors.grey[200], + filled: true, + contentPadding: EdgeInsets.all(20.0)), + onSaved: (input) => this._forgotEmail = input, + keyboardType: TextInputType.emailAddress, + ), + SizedBox( + height: 20.0, + ), + + //don't have an account register.--useless + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + //change page to register.--useless + TextButton( + onPressed: () { + Navigator.pushReplacement( + context, + MaterialPageRoute( + builder: (BuildContext context) => + RegisterPage(), + ), + ); + }, + child: Text( + "Don't have an account? Register", + style: TextStyle( + fontFamily: "LexendDeca", + fontSize: 14.0, + color: + Theme.of(context).highlightColor), + ), + ) + ], + ), + SizedBox( + height: 15.0, + ), + MaterialButton( + onPressed: forgotPassword, + height: 50.0, + padding: EdgeInsets.symmetric(horizontal: 40.0), + shape: StadiumBorder(), + child: Text( + "Submit", + style: TextStyle( + fontFamily: 'LexendDeca', + fontSize: 16.0, + color: Theme.of(context).cardColor), + ), + color: Theme.of(context).highlightColor, + ), + ], + ), + ), + ], + ), + ), + ), + ], + ), + ), + ), + ); + } + + Future forgotPassword() async { + final formState = _formKey.currentState; + if (formState.validate()) { + formState.save(); + //Forgot Password + try { + auth.sendPasswordResetEmail(email: this._forgotEmail); + Fluttertoast.showToast( + msg: + 'a forgot password email has been sent, please reset your password through it.', + toastLength: Toast.LENGTH_SHORT, + gravity: ToastGravity.BOTTOM, + timeInSecForIosWeb: 1); + //navigate to a new screen --change the screen below + Navigator.pushReplacement( + context, + MaterialPageRoute( + builder: (context) => LoginPage(), + )); + _forgotEmail = null; + } catch (e) { + Fluttertoast.showToast( + msg: 'Incorrect Email or Email does not have an account', + toastLength: Toast.LENGTH_SHORT, + gravity: ToastGravity.BOTTOM, + timeInSecForIosWeb: 1); + } + } + } +} diff --git a/lib/screens/homepage.dart b/lib/screens/homepage.dart new file mode 100644 index 0000000..36e801d --- /dev/null +++ b/lib/screens/homepage.dart @@ -0,0 +1,64 @@ +import 'package:bharat_mystery/screens/profile.dart'; +import 'package:bharat_mystery/screens/selectMonument.dart'; +import 'package:bharat_mystery/screens/theme_provider.dart'; +import 'package:flutter/material.dart'; +import 'package:curved_navigation_bar/curved_navigation_bar.dart'; +import 'package:provider/provider.dart'; + +class HomePage extends StatefulWidget { + @override + _HomePageState createState() => _HomePageState(); +} + +class _HomePageState extends State { + PageController _pageController = PageController(); + List _screens = [ + SelectMonument(), + Profile(), + ]; + + void _itemTapped(int selectedIndex) { + _pageController.jumpToPage(selectedIndex); + } + + @override + Widget build(BuildContext context) { + return ChangeNotifierProvider( + create: (_) => ThemeNotifier(), + child: Consumer( + builder: (context, ThemeNotifier notifier, child) { + return MaterialApp( + theme: notifier.darkTheme ? dark : light, + home: Scaffold( + body: PageView( + controller: _pageController, + children: _screens, + physics: NeverScrollableScrollPhysics(), + ), + bottomNavigationBar: CurvedNavigationBar( + color: Theme.of(context).cardColor, + onTap: _itemTapped, + backgroundColor: Theme.of(context).focusColor, + animationDuration: Duration(milliseconds: 1000), + animationCurve: Curves.fastLinearToSlowEaseIn, + height: 52.0, + items: [ + Icon( + Icons.info, + size: 20.0, + color: Theme.of(context).highlightColor, + ), + Icon( + Icons.settings, + size: 20.0, + color: Theme.of(context).highlightColor, + ), + ], + ), + ), + ); + }, + ), + ); + } +} diff --git a/lib/screens/login.dart b/lib/screens/login.dart new file mode 100644 index 0000000..770d487 --- /dev/null +++ b/lib/screens/login.dart @@ -0,0 +1,281 @@ +import 'package:bharat_mystery/screens/forgot.dart'; +import 'package:flutter/material.dart'; +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:flutter/services.dart'; +import 'package:fluttertoast/fluttertoast.dart'; +import 'package:bharat_mystery/screens/register.dart'; +import 'package:bharat_mystery/screens/homepage.dart' as HomePage; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:cached_network_image/cached_network_image.dart'; + +class LoginPage extends StatefulWidget { + @override + _LoginPageState createState() => _LoginPageState(); +} + +class _LoginPageState extends State { + String _loginEmail, _loginPassword; + final GlobalKey _formKey = GlobalKey(); + final FirebaseAuth auth = FirebaseAuth.instance; + bool _passwordVisible = true; + + @override + Widget build(BuildContext context) { + SystemChrome.setPreferredOrientations([ + DeviceOrientation.portraitDown, + DeviceOrientation.portraitUp, + ]); + + return MaterialApp( + home: Scaffold( + body: SingleChildScrollView( + child: Column( + children: [ + //bharat mystery logo and image + Container( + child: Padding( + padding: const EdgeInsets.fromLTRB(0, 40.0, 0, 60.0), + child: Container( + width: MediaQuery.of(context).size.width, + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Container( + child: CachedNetworkImage( + imageUrl: "https://i.imgur.com/9JCxapv.png", + height: MediaQuery.of(context).size.height * 0.27, + placeholder: (context, url) => + CircularProgressIndicator(), + ), + ), + Text( + "Bharat Mystery", + style: TextStyle( + color: Colors.black, + fontFamily: 'LexendDeca', + fontSize: 30.0, + fontWeight: FontWeight.bold, + ), + textAlign: TextAlign.center, + ), + ], + ), + ), + ), + ), + Container( + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.height * 0.62, + decoration: BoxDecoration( + color: Theme.of(context).accentColor, + borderRadius: BorderRadius.only( + topLeft: Radius.circular(50.0), + topRight: Radius.circular(50.0), + ), + ), + child: Padding( + padding: const EdgeInsets.fromLTRB(20.0, 30.0, 20.0, 10.0), + child: Column( + children: [ + //login text + Text( + "Login", + style: TextStyle( + color: Theme.of(context).highlightColor, + fontFamily: 'LexendDeca', + fontSize: 25.0, + fontWeight: FontWeight.bold, + ), + ), + SizedBox( + height: 25.0, + ), + Form( + key: _formKey, + child: Column( + children: [ + //textfield email + TextFormField( + autocorrect: false, + autofocus: false, + validator: (input) { + if (input.isEmpty) { + return 'Please provide an email'; + } + return null; + }, + decoration: InputDecoration( + hintText: "Email", + border: OutlineInputBorder( + borderSide: + BorderSide(color: Colors.grey[50]), + borderRadius: BorderRadius.circular(30.0), + ), + fillColor: Colors.grey[200], + filled: true, + contentPadding: EdgeInsets.all(20.0)), + onSaved: (input) => _loginEmail = input, + keyboardType: TextInputType.emailAddress, + ), + SizedBox( + height: 20.0, + ), + + //textfield password + TextFormField( + autocorrect: false, + autofocus: false, + validator: (input) { + if (input.isEmpty) { + return 'Please provide a password'; + } else if (input.length < 6) { + return 'Password needs to be atleast 6 digits'; + } + return null; + }, + obscureText: this._passwordVisible, + decoration: InputDecoration( + suffixIcon: IconButton( + icon: Icon( + Icons.remove_red_eye, + color: this._passwordVisible + ? Colors.black + : Colors.grey, + ), + onPressed: () { + setState(() => this._passwordVisible = + !this._passwordVisible); + }, + ), + hintText: "Password", + border: OutlineInputBorder( + borderSide: + BorderSide(color: Colors.grey[50]), + borderRadius: BorderRadius.circular(30.0), + ), + fillColor: Colors.grey[200], + filled: true, + contentPadding: EdgeInsets.all(20.0)), + onSaved: (input) => _loginPassword = input, + keyboardType: TextInputType.visiblePassword, + ), + SizedBox( + height: 5.0, + ), + + //forgot password--useless + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Padding( + padding: const EdgeInsets.only(right: 10.0), + child: TextButton( + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (BuildContext context) => + ForgotPage(), + ), + ); + }, + child: Text( + "Forgot Password?", + style: TextStyle( + fontFamily: 'LexendDeca', + fontSize: 13.0, + color: + Theme.of(context).highlightColor), + ), + ), + ), + ], + ), + + //don't have an account register.--useless + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + //change page to register.--useless + TextButton( + onPressed: () { + Navigator.pushReplacement( + context, + MaterialPageRoute( + builder: (BuildContext context) => + RegisterPage(), + ), + ); + }, + child: Text( + "Don't have an account? Register", + style: TextStyle( + fontFamily: "LexendDeca", + fontSize: 14.0, + color: + Theme.of(context).highlightColor), + ), + ) + ], + ), + SizedBox( + height: 15.0, + ), + MaterialButton( + onPressed: signIn, + height: 50.0, + padding: EdgeInsets.symmetric(horizontal: 40.0), + shape: StadiumBorder(), + child: Text( + "Login", + style: TextStyle( + fontFamily: 'LexendDeca', + fontSize: 16.0, + color: Theme.of(context).cardColor), + ), + color: Theme.of(context).highlightColor, + ), + ], + ), + ), + ], + ), + ), + ), + ], + ), + ), + ), + ); + } + + Future signIn() async { + final formState = _formKey.currentState; + if (formState.validate()) { + formState.save(); + //LOGIN FIREBASE AUTH + try { + User user = (await auth.signInWithEmailAndPassword( + email: _loginEmail, password: _loginPassword)) + .user; + final prefs = await SharedPreferences.getInstance(); + await prefs.setString('GLOBAL_USER_DATA', user.uid); + //navigate to a new screen --change the screen below + Navigator.pushAndRemoveUntil( + context, + MaterialPageRoute( + builder: (BuildContext context) => HomePage.HomePage()), + (Route route) => false); + _loginEmail = null; + _loginPassword = null; + } catch (e) { + print("some shit happened in login screen heres a report " + e.message); + Fluttertoast.showToast( + msg: 'Incorrect Email or Password', + toastLength: Toast.LENGTH_SHORT, + gravity: ToastGravity.BOTTOM, + timeInSecForIosWeb: 1); + } + } + } +} diff --git a/lib/screens/monument.dart b/lib/screens/monument.dart new file mode 100644 index 0000000..4cb89c1 --- /dev/null +++ b/lib/screens/monument.dart @@ -0,0 +1,486 @@ +import 'dart:convert'; +import 'package:bharat_mystery/screens/directions.dart'; +import 'package:bharat_mystery/screens/quiz.dart'; +import 'package:bharat_mystery/screens/streetview.dart'; +import 'package:cloud_firestore/cloud_firestore.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_map/flutter_map.dart'; +import 'package:fluttertoast/fluttertoast.dart'; +import 'package:latlong/latlong.dart'; +import "package:flutter_tts/flutter_tts.dart"; +import 'package:http/http.dart' as http; +import 'package:cached_network_image/cached_network_image.dart'; +//import 'package:shared_preferences/shared_preferences.dart'; +import 'package:url_launcher/url_launcher.dart'; + +class MapUtils { + MapUtils._(); + + static Future openMap(double latitude, double longitude) async { + String googleUrl = + 'https://www.google.com/maps/search/?api=1&query=$latitude,$longitude'; + if (await canLaunch(googleUrl)) { + await launch(googleUrl); + } else { + throw 'Could not open the map.'; + } + } +} + +class Monument extends StatefulWidget { + final int snumber; + Monument({Key key, this.snumber}) : super(key: key); + + @override + _MonumentState createState() => _MonumentState(); +} + +class _MonumentState extends State { + Future _onWillPop() { + return showDialog( + context: context, + builder: (context) { + Navigator.of(context).pop(true); + }); + } + + @override + Widget build(BuildContext context) { + //exit app on back pressed + return WillPopScope( + onWillPop: _onWillPop, + child: MonumentContent( + snumber: widget.snumber, + )); + } +} + +class MonumentContent extends StatefulWidget { + final int snumber; + MonumentContent({Key key, this.snumber}) : super(key: key); + + @override + _MonumentContentState createState() => _MonumentContentState(); +} + +class _MonumentContentState extends State { + FirebaseFirestore firestore = FirebaseFirestore.instance; + CollectionReference users = FirebaseFirestore.instance.collection('users'); + String uid; + Future getMonument(int snumber) async { + final getMonumentEndpoint = + 'https://bharat-mystery-api.herokuapp.com/monuments?sno=$snumber'; + final response = await http.get(getMonumentEndpoint); + print(snumber); + if (response.statusCode == 200) { + print(json.decode(response.body)); + return response.body; + } + return null; + } + + final FlutterTts flutterTts = FlutterTts(); + Icon icon = Icon(Icons.volume_up, color: Colors.black); + bool isSpeaking = false, allowRead = true, showNotAllowed = false; + + var text = ''; + + speak(text) async { + await flutterTts.setLanguage('hi-IN'); + await flutterTts.setPitch(1); + await flutterTts.setSpeechRate(0.9); + await flutterTts.speak(text); + setState(() { + if (isSpeaking == true) { + flutterTts.stop(); + icon = Icon(Icons.volume_up, color: Colors.black); + isSpeaking = false; + } else { + icon = Icon(Icons.volume_off, color: Colors.black); + isSpeaking = true; + } + }); + } + + /*Future getAllowRead() async { + final prefs = await SharedPreferences.getInstance(); + uid = prefs.getString('GLOBAL_USER_DATA'); + + await users + .doc(uid.toString()) + .collection(widget.snumber.toString()) + .doc(widget.snumber.toString()) + .get() + .then((documentSnapshot) { + if (widget.snumber == 1) { + setState(() { + allowRead = true; + showNotAllowed = false; + }); + } else if (documentSnapshot.exists) { + if (documentSnapshot.data()[widget.snumber.toString()] == true) { + setState(() { + allowRead = true; + showNotAllowed = false; + }); + } else { + setState(() { + allowRead = false; + showNotAllowed = true; + }); + } + } else { + setState(() { + allowRead = false; + showNotAllowed = true; + }); + } + }); + }*/ + + /*@override + void initState() { + super.initState(); + _asyncMethodInnitState(); + }*/ + + /*god this was hell, wasted like 3 hours, trying to update the name of the user, after welcome. + void _asyncMethodInnitState() async { + await getAllowRead(); + }*/ + + @override + Widget build(BuildContext context) { + return FutureBuilder( + future: getMonument(widget.snumber), + builder: (context, snapshot) { + if (!snapshot.hasData) { + return Scaffold( + backgroundColor: Theme.of(context).focusColor, + body: Center( + child: CircularProgressIndicator(), + ), + ); + } + + final result = json.decode(snapshot.data); + + return Scaffold( + body: Container( + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.height, + decoration: BoxDecoration( + color: Theme.of(context).accentColor, + ), + child: Padding( + padding: const EdgeInsets.fromLTRB(20.0, 30.0, 20.0, 0.0), + child: SingleChildScrollView( + child: Column( + children: [ + Container( + margin: EdgeInsets.only(top: 10.0), + height: MediaQuery.of(context).size.height * 0.83, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(25.0), + color: Colors.white, + ), + child: SingleChildScrollView( + child: Column( + children: [ + //image + ClipRRect( + borderRadius: BorderRadius.vertical( + top: Radius.circular(25.0)), + child: CachedNetworkImage( + imageUrl: result["image"].toString(), + placeholder: (context, url) => + CircularProgressIndicator(), + ), + ), + SizedBox( + height: 10.0, + ), + + //text + Text( + result["name"].toString(), + style: TextStyle( + color: Colors.black, + fontFamily: 'LexendDeca', + fontSize: 24.0, + fontWeight: FontWeight.w900), + ), + SizedBox( + height: 5.0, + ), + Text( + result["place"].toString(), + style: TextStyle( + color: Colors.black, + fontFamily: 'LexendDeca', + fontSize: 18.0, + fontWeight: FontWeight.w500), + ), + SizedBox( + height: 10.0, + ), + //get street views + MaterialButton( + splashColor: Colors.white, + padding: EdgeInsets.symmetric(horizontal: 35.0), + height: 30.0, + elevation: 5.0, + shape: StadiumBorder(), + onPressed: () { + if (result["streetview"] == "") { + Fluttertoast.showToast( + msg: + 'Street View not available for this monument', + toastLength: Toast.LENGTH_SHORT, + gravity: ToastGravity.BOTTOM, + timeInSecForIosWeb: 1); + } else { + Navigator.push( + context, + MaterialPageRoute( + builder: (BuildContext context) => + StreetView( + url: result["streetview"], + ), + )); + } + }, + color: Colors.black, + child: Text( + "Open Street View", + style: TextStyle( + fontSize: 13.0, + color: Colors.white, + ), + ), + ), + SizedBox( + height: 10.0, + ), + ClipRRect( + borderRadius: BorderRadius.circular(25.0), + child: FractionallySizedBox( + widthFactor: 0.95, + child: Container( + height: 180.0, + child: FlutterMap( + options: MapOptions( + center: LatLng(result["latitude"], + result["longitude"]), + zoom: 13.0, + ), + layers: [ + TileLayerOptions( + urlTemplate: + "https://api.mapbox.com/styles/v1/chim2/ckleuvk5n65ak17pnwxgoyo7l/tiles/256/{z}/{x}/{y}@2x?access_token=pk.eyJ1IjoiY2hpbTIiLCJhIjoiY2tsZXBjOWI1MTJvczJ2bWpiZWE5azNlNyJ9.-LB_CjjYIksqNZTdiSmFNg", + additionalOptions: { + // to be hidden later + 'accessToken': + 'pk.eyJ1IjoiY2hpbTIiLCJhIjoiY2tsZXBjOWI1MTJvczJ2bWpiZWE5azNlNyJ9.-LB_CjjYIksqNZTdiSmFNg', + 'id': '' + }, + ), + MarkerLayerOptions( + markers: [ + Marker( + width: 80.0, + height: 80.0, + point: LatLng(result["latitude"], + result["longitude"]), + builder: (ctx) => Container( + child: Icon( + Icons.location_on, + color: Colors.red, + )), + ), + ], + ), + ], + ), + ), + ), + ), + SizedBox( + height: 10.0, + ), + + //get directions button + MaterialButton( + splashColor: Colors.white, + padding: EdgeInsets.symmetric(horizontal: 35.0), + height: 30.0, + elevation: 5.0, + shape: StadiumBorder(), + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (BuildContext context) => + Directions( + elong: result["longitude"], + elat: result["latitude"]), + )); + }, + color: Colors.black, + child: Text( + "Get Directions", + style: TextStyle( + fontSize: 13.0, + color: Colors.white, + ), + ), + ), + + //drive using google maps + MaterialButton( + splashColor: Colors.white, + padding: EdgeInsets.symmetric(horizontal: 35.0), + height: 30.0, + elevation: 5.0, + shape: StadiumBorder(), + onPressed: () { + MapUtils.openMap( + result["latitude"], result["longitude"]); + }, + color: Colors.black, + child: Text( + "Drive there using Google-Maps", + style: TextStyle( + fontSize: 13.0, + color: Colors.white, + ), + ), + ), + SizedBox( + height: 5.0, + ), + + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + "Information", + style: TextStyle( + color: Colors.black, + fontFamily: 'LexendDeca', + fontSize: 20.0, + ), + ), + IconButton( + icon: icon, + onPressed: () { + text = result['info']; + speak(text); + }, + ) + ], + ), + Divider( + height: 20.0, + endIndent: 40.0, + indent: 40.0, + color: Colors.black, + ), + // play quiz button + MaterialButton( + splashColor: Colors.white, + padding: EdgeInsets.symmetric(horizontal: 35.0), + height: 30.0, + elevation: 5.0, + shape: StadiumBorder(), + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (BuildContext context) => + Quiz(snumber: widget.snumber), + )); + }, + color: Colors.black, + child: Text( + "Play Quiz", + style: TextStyle( + fontSize: 13.0, + color: Colors.white, + ), + ), + ), + FractionallySizedBox( + widthFactor: 0.9, + child: Container( + child: Text( + result["info"].toString(), + style: TextStyle( + color: Colors.black, + fontFamily: 'LexendDeca', + fontSize: 15.0, + ), + ), + ), + ), + SizedBox( + height: 15.0, + ), + ], + ), + ), + ), + + /*Visibility( + visible: showNotAllowed, + child: Container( + height: MediaQuery.of(context).size.height * 0.5, + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Text( + "Please complete the previous quiz to read about this monument", + style: TextStyle( + color: Theme.of(context).highlightColor, + fontFamily: 'LexendDeca', + fontSize: 24.0, + fontWeight: FontWeight.w900, + ), + textAlign: TextAlign.center, + ), + SizedBox( + height: 5.0, + ), + ], + ), + ), + ),*/ + SizedBox( + height: 15.0, + ), + MaterialButton( + onPressed: () { + Navigator.pop(context); + }, + height: 50.0, + padding: EdgeInsets.symmetric(horizontal: 40.0), + shape: StadiumBorder(), + child: Text( + "Back", + style: TextStyle( + fontFamily: 'LexendDeca', + fontSize: 16.0, + color: Theme.of(context).cardColor), + ), + color: Theme.of(context).highlightColor, + ), + ], + ), + ), + ), + ), + ); + }, + ); + } +} diff --git a/lib/screens/profile.dart b/lib/screens/profile.dart new file mode 100644 index 0000000..f85a693 --- /dev/null +++ b/lib/screens/profile.dart @@ -0,0 +1,233 @@ +import 'package:bharat_mystery/main.dart'; +import 'package:bharat_mystery/screens/login.dart'; +import 'package:bharat_mystery/screens/theme_provider.dart'; +import 'package:cloud_firestore/cloud_firestore.dart'; +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:fluttertoast/fluttertoast.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:provider/provider.dart'; +import 'package:flutter_phoenix/flutter_phoenix.dart'; + +class Profile extends StatefulWidget { + @override + _ProfileState createState() => _ProfileState(); +} + +class _ProfileState extends State with AutomaticKeepAliveClientMixin { + FirebaseFirestore firestore = FirebaseFirestore.instance; + CollectionReference users = FirebaseFirestore.instance.collection('users'); + String uid, userName = "user", verified = "not verified"; + bool senvermail = true; + + @override + void initState() { + super.initState(); + _asyncMethodInnitState(); + } + + //god this was hell, wasted like 3 hours, trying to update the name of the user, after welcome. + void _asyncMethodInnitState() async { + await getUserName().then((value) { + setState(() { + userName = value; + }); + }); + await getUserVerified().then((value) { + setState(() { + verified = value; + }); + }); + } + + @override + Widget build(BuildContext context) { + SystemChrome.setPreferredOrientations([ + DeviceOrientation.portraitDown, + DeviceOrientation.portraitUp, + ]); + + super.build(context); + return Scaffold( + body: Container( + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.height, + decoration: BoxDecoration( + color: Theme.of(context).cardColor, + ), + child: Stack( + children: [ + Padding( + padding: const EdgeInsets.fromLTRB( + 20.0, 300.0, 20.0, 0), //text username + child: Column( + children: [ + new Text( + "Welcome $userName", + style: TextStyle( + color: Theme.of(context).highlightColor, + fontFamily: 'LexendDeca', + fontSize: 25.0, + fontWeight: FontWeight.bold, + ), + ), + SizedBox( + height: 20.0, + ), + + //text of verification status + new Text( + "Verification Status: $verified", + style: TextStyle( + color: Theme.of(context).highlightColor, + fontFamily: 'LexendDeca', + fontSize: 16.0, + fontWeight: FontWeight.bold, + ), + ), + + //visibilty so that if user is verified, the verification mail is not seen again and again + Visibility( + visible: senvermail, + child: TextButton( + onPressed: sendUserVerificationMail, + child: Text( + "Send verification mail again?", + style: TextStyle( + fontFamily: 'LexendDeca', + fontSize: 14.0, + color: Theme.of(context).highlightColor), + ))), + + //switchlisttile switch + Padding( + padding: EdgeInsets.only(top: 20), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Consumer( + builder: (context, notifier, child) => SwitchListTile( + title: Text("Dark Mode"), + onChanged: (value) { + showDialog( + context: context, + builder: (context) => AlertDialog( + title: Text('Are you sure?'), + content: Text('This will restart the app?'), + actions: [ + TextButton( + onPressed: () => + Navigator.of(context).pop(false), + child: Text('No'), + ), + TextButton( + onPressed: () => { + notifier.toggleTheme(), + Navigator.pushAndRemoveUntil( + context, + MaterialPageRoute( + builder: + (BuildContext context) => + MyApp()), + (route) => false) + }, + child: Text('Yes'), + ), + ], + ), + ); + }, + value: notifier.darkTheme, + ), + ), + ], + ), + ), + SizedBox( + height: 20.0, + ), + //logout button + MaterialButton( + onPressed: logoutUser, + height: 50.0, + padding: EdgeInsets.symmetric(horizontal: 40.0), + shape: StadiumBorder(), + child: Text( + "Logout", + style: TextStyle( + fontFamily: 'LexendDeca', + fontSize: 16.0, + color: Theme.of(context).cardColor), + ), + color: Theme.of(context).highlightColor, + ), + ], + ), + ), + Positioned( + bottom: 0, + child: Container( + width: MediaQuery.of(context).size.width, + height: 20.0, + color: Theme.of(context).focusColor, + ), + ), + ], + ), + ), + ); + } + + //get user's verification status + Future getUserVerified() async { + String _verfy; + User user = FirebaseAuth.instance.currentUser; + if (user.emailVerified == true) { + _verfy = "Verified"; + senvermail = false; + } else { + _verfy = "Not Verified"; + senvermail = true; + } + return _verfy; + } + + // get's user's name. + Future getUserName() async { + String _username; + final prefs = await SharedPreferences.getInstance(); + uid = prefs.getString('GLOBAL_USER_DATA'); + await users.doc(uid.toString()).get().then((documentSnapshot) { + _username = documentSnapshot.data()['name'].toString(); + }); + return _username; + } + + //logs user's out + Future logoutUser() async { + //logout user + final prefs = await SharedPreferences.getInstance(); + await prefs.setString('GLOBAL_USER_DATA', null); + Navigator.pushReplacement( + context, + MaterialPageRoute( + builder: (BuildContext context) => LoginPage(), + ), + ); + } + + //send user verification mail + Future sendUserVerificationMail() async { + User user = FirebaseAuth.instance.currentUser; + user.sendEmailVerification().catchError((e) { + Fluttertoast.showToast( + msg: "verification mail failed to be sent" + e.toString()); + }); + Fluttertoast.showToast(msg: "verification mail sent"); + } + + @override + // wantKeepAlive + bool get wantKeepAlive => true; +} diff --git a/lib/screens/quiz.dart b/lib/screens/quiz.dart new file mode 100644 index 0000000..7597a56 --- /dev/null +++ b/lib/screens/quiz.dart @@ -0,0 +1,288 @@ +import 'dart:convert'; +import 'dart:ffi'; + +import 'package:cloud_firestore/cloud_firestore.dart'; +import 'package:flutter/material.dart'; +import 'package:fluttertoast/fluttertoast.dart'; +import 'package:http/http.dart' as http; +import 'package:shared_preferences/shared_preferences.dart'; + +class Quiz extends StatefulWidget { + final int snumber; + Quiz({this.snumber}); + + @override + _QuizState createState() => _QuizState(); +} + +class _QuizState extends State { + final GlobalKey _formKey = GlobalKey(); + + FirebaseFirestore firestore = FirebaseFirestore.instance; + CollectionReference users = FirebaseFirestore.instance.collection('users'); + + getAllQuestions() async { + final getAllMonumentsEndpoint = + 'https://bharat-mystery-api.herokuapp.com/quiz?sno=${widget.snumber}'; + final response = await http.get(getAllMonumentsEndpoint); + if (response.statusCode == 200) { + return response.body; + } + return null; + } + + String ans1; + String ans2; + String ans3; + String uid; + + @override + Widget build(BuildContext context) { + return FutureBuilder( + future: getAllQuestions(), + builder: (context, snapshot) { + if (!snapshot.hasData) { + return Scaffold( + backgroundColor: Theme.of(context).focusColor, + body: Center( + child: CircularProgressIndicator(), + ), + ); + } + + final allQues = json.decode(snapshot.data); + + bool checkAns() { + var totalScore = 0; + if (ans1.toLowerCase() == allQues[0]["ans"].toLowerCase()) { + totalScore++; + } + if (ans2.toLowerCase() == allQues[1]["ans"].toLowerCase()) { + totalScore++; + } + if (ans3.toLowerCase() == allQues[2]["ans"].toLowerCase()) { + totalScore++; + } + + if (totalScore >= 2) { + return true; + } else { + return false; + } + } + + Future testPassed() async { + final prefs = await SharedPreferences.getInstance(); + uid = prefs.getString('GLOBAL_USER_DATA'); + + Map mapTrue = { + (widget.snumber + 1).toString(): true + }; + + await users + .doc(uid.toString()) + .collection((widget.snumber + 1).toString()) + .doc((widget.snumber + 1).toString()) + .set(mapTrue); + } + + return Scaffold( + backgroundColor: Theme.of(context).accentColor, + body: Container( + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.height * 1.3, + child: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.fromLTRB(10.0, 60.0, 10.0, 10.0), + child: Column( + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + "Quiz Time", + style: TextStyle( + fontFamily: 'LexendDeca', + fontSize: 27.0, + fontWeight: FontWeight.w700, + color: Theme.of(context).highlightColor), + ), + ], + ), + SizedBox( + height: 30.0, + ), + Form( + key: _formKey, + child: Column( + children: [ + //ques 1 + Text( + (allQues[0])["ques"], + style: TextStyle( + fontFamily: 'LexendDeca', + fontSize: 20.0, + fontWeight: FontWeight.w200, + color: Theme.of(context).highlightColor), + ), + SizedBox( + height: 10.0, + ), + //answer field + TextFormField( + style: TextStyle( + color: Colors.black, + ), + onChanged: (val) { + setState(() { + ans1 = val; + }); + }, + validator: (val) => + val.isEmpty ? 'Please enter the answer' : null, + decoration: InputDecoration( + hintText: "Answer", + filled: true, + fillColor: Colors.white, + hintStyle: TextStyle(color: Colors.black), + border: OutlineInputBorder( + borderSide: BorderSide( + color: Colors.black, width: 1.5), + borderRadius: BorderRadius.circular(10.0), + ), + contentPadding: EdgeInsets.all(17.0)), + ), + SizedBox( + height: 20.0, + ), + + //ques 2 + Text( + (allQues[1])["ques"], + style: TextStyle( + fontFamily: 'LexendDeca', + fontSize: 20.0, + fontWeight: FontWeight.w200, + color: Theme.of(context).highlightColor), + ), + SizedBox( + height: 10.0, + ), + //answer field + TextFormField( + style: TextStyle( + color: Colors.black, + ), + onChanged: (val) { + setState(() { + ans2 = val; + }); + }, + validator: (val) => + val.isEmpty ? 'Please enter the answer' : null, + decoration: InputDecoration( + hintText: "Answer", + filled: true, + fillColor: Colors.white, + hintStyle: TextStyle(color: Colors.black), + border: OutlineInputBorder( + borderSide: BorderSide( + color: Colors.black, width: 1.5), + borderRadius: BorderRadius.circular(10.0), + ), + contentPadding: EdgeInsets.all(17.0)), + ), + SizedBox( + height: 20.0, + ), + + //ques3 + Text( + (allQues[2])["ques"], + style: TextStyle( + fontFamily: 'LexendDeca', + fontSize: 20.0, + fontWeight: FontWeight.w200, + color: Theme.of(context).highlightColor), + ), + SizedBox( + height: 10.0, + ), + //answer field + TextFormField( + style: TextStyle( + color: Colors.black, + ), + onChanged: (val) { + setState(() { + ans3 = val; + }); + }, + validator: (val) => + val.isEmpty ? 'Please enter the answer' : null, + decoration: InputDecoration( + hintText: "Answer", + filled: true, + fillColor: Colors.white, + hintStyle: TextStyle(color: Colors.black), + border: OutlineInputBorder( + borderSide: BorderSide( + color: Colors.black, width: 1.5), + borderRadius: BorderRadius.circular(10.0), + ), + contentPadding: EdgeInsets.all(17.0)), + ), + SizedBox( + height: 25.0, + ), + //submit button + MaterialButton( + onPressed: () { + final formState = _formKey.currentState; + if (formState.validate()) { + formState.save(); + + if (checkAns()) { + // Remove this and add Unlocking code and then add the toast that next monument has been unlocked then pop the screen + Fluttertoast.showToast( + msg: 'Test Passed', + toastLength: Toast.LENGTH_SHORT, + gravity: ToastGravity.BOTTOM, + timeInSecForIosWeb: 1); + testPassed(); + Navigator.of(context).pop(); + } else { + Fluttertoast.showToast( + msg: + "You need atleast 2 correct answers to unlock the next monument, please check spelling's too", + toastLength: Toast.LENGTH_SHORT, + gravity: ToastGravity.BOTTOM, + timeInSecForIosWeb: 1); + } + } + }, + height: 50.0, + padding: EdgeInsets.symmetric(horizontal: 40.0), + shape: StadiumBorder(), + child: Text( + "Submit", + style: TextStyle( + fontFamily: 'LexendDeca', + fontSize: 16.0, + color: Theme.of(context).cardColor), + ), + color: Theme.of(context).highlightColor, + ), + ], + ), + ) + ], + ), + ), + ), + ), + ); + }, + ); + } +} diff --git a/lib/screens/register.dart b/lib/screens/register.dart new file mode 100644 index 0000000..b91cb10 --- /dev/null +++ b/lib/screens/register.dart @@ -0,0 +1,330 @@ +import 'package:bharat_mystery/screens/login.dart'; +import 'package:flutter/material.dart'; +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:flutter/services.dart'; +import 'package:fluttertoast/fluttertoast.dart'; +import 'package:cloud_firestore/cloud_firestore.dart'; +import 'package:intl/intl.dart'; +import 'package:cached_network_image/cached_network_image.dart'; + +class RegisterPage extends StatefulWidget { + @override + _RegisterPageState createState() => _RegisterPageState(); +} + +class _RegisterPageState extends State { + String _registerName, _registerEmail, _registerPassword; + final GlobalKey _formKey = GlobalKey(); + final FirebaseAuth auth = FirebaseAuth.instance; + bool _passwordVisible = true; + FirebaseFirestore firestore = FirebaseFirestore.instance; + CollectionReference users = FirebaseFirestore.instance.collection('users'); + + // @override + // void initState() { + // // TODO: implement initState + // super.initState(); + // WidgetsBinding.instance.addPostFrameCallback((_) => getAllMonuments()); + // } + + @override + Widget build(BuildContext context) { + SystemChrome.setPreferredOrientations([ + DeviceOrientation.portraitDown, + DeviceOrientation.portraitUp, + ]); + + return MaterialApp( + home: Scaffold( + body: SingleChildScrollView( + child: Column( + children: [ + //bharat mystery logo and image + Padding( + padding: const EdgeInsets.fromLTRB(0, 40.0, 0, 30.0), + child: Container( + width: MediaQuery.of(context).size.width, + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Container( + child: CachedNetworkImage( + imageUrl: "https://i.imgur.com/9JCxapv.png", + height: MediaQuery.of(context).size.height * 0.27, + placeholder: (context, url) => + CircularProgressIndicator(), + ), + ), + Text( + "Bharat Mystery", + style: TextStyle( + fontFamily: 'LexendDeca', + fontSize: 30.0, + fontWeight: FontWeight.bold, + ), + textAlign: TextAlign.center, + ), + ], + ), + ), + ), + Container( + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.height * 0.7, + decoration: BoxDecoration( + color: Theme.of(context).accentColor, + borderRadius: BorderRadius.only( + topLeft: Radius.circular(50.0), + topRight: Radius.circular(50.0), + ), + ), + child: Padding( + padding: const EdgeInsets.fromLTRB(20.0, 30.0, 20.0, 10.0), + child: Column( + children: [ + //register text + Text( + "Register", + style: TextStyle( + color: Theme.of(context).highlightColor, + fontFamily: 'LexendDeca', + fontSize: 25.0, + fontWeight: FontWeight.bold, + ), + ), + SizedBox( + height: 25.0, + ), + Form( + key: _formKey, + child: Column( + children: [ + //name + TextFormField( + autocorrect: false, + autofocus: false, + onSaved: (input) => _registerName = input, + validator: (input) { + if (input.isEmpty) { + return 'Please provide a name'; + } + return null; + }, + decoration: InputDecoration( + hintText: "Name", + border: OutlineInputBorder( + borderSide: + BorderSide(color: Colors.grey[50]), + borderRadius: BorderRadius.circular(30.0), + ), + fillColor: Colors.grey[200], + filled: true, + contentPadding: EdgeInsets.all(20.0)), + keyboardType: TextInputType.emailAddress, + ), + SizedBox( + height: 20.0, + ), + + //email + TextFormField( + autocorrect: false, + autofocus: false, + validator: (input) { + if (input.isEmpty) { + return 'Please provide an email'; + } + return null; + }, + onSaved: (input) => _registerEmail = input, + decoration: InputDecoration( + hintText: "Email", + border: OutlineInputBorder( + borderSide: + BorderSide(color: Colors.grey[50]), + borderRadius: BorderRadius.circular(30.0), + ), + fillColor: Colors.grey[200], + filled: true, + contentPadding: EdgeInsets.all(20.0)), + keyboardType: TextInputType.emailAddress, + ), + SizedBox( + height: 20.0, + ), + + //password + TextFormField( + autocorrect: false, + autofocus: false, + validator: (input) { + if (input.isEmpty) { + return 'Please provide a password'; + } else if (input.length < 6) { + return 'Password needs to be atleast 6 digits'; + } + return null; + }, + onSaved: (input) => _registerPassword = input, + obscureText: this._passwordVisible, + decoration: InputDecoration( + suffixIcon: IconButton( + icon: Icon( + Icons.remove_red_eye, + color: this._passwordVisible + ? Colors.black + : Colors.grey, + ), + onPressed: () { + setState(() => this._passwordVisible = + !this._passwordVisible); + }, + ), + hintText: "Password", + border: OutlineInputBorder( + borderSide: + BorderSide(color: Colors.grey[50]), + borderRadius: BorderRadius.circular(30.0), + ), + fillColor: Colors.grey[200], + filled: true, + contentPadding: EdgeInsets.all(20.0)), + keyboardType: TextInputType.visiblePassword, + ), + SizedBox( + height: 10.0, + ), + + //already have an account login --useless + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + //change page to register.--useless + TextButton( + onPressed: () { + Navigator.pushReplacement( + context, + MaterialPageRoute( + builder: (BuildContext context) => + LoginPage(), + ), + ); + }, + child: Text( + "Already have an account? Login", + style: TextStyle( + fontFamily: "LexendDeca", + fontSize: 14.0, + color: + Theme.of(context).highlightColor), + ), + ), + ], + ), + SizedBox( + height: 15.0, + ), + MaterialButton( + onPressed: registerUser, + height: 50.0, + padding: EdgeInsets.symmetric(horizontal: 40.0), + shape: StadiumBorder(), + child: Text( + "Register", + style: TextStyle( + fontFamily: 'LexendDeca', + fontSize: 16.0, + color: Theme.of(context).cardColor), + ), + color: Theme.of(context).highlightColor, + ), + ], + ), + ), + ], + ), + ), + ), + ], + ), + ), + ), + ); + } + + // var allMonuments; + + // getAllMonuments() async { + // final getAllMonumentsEndpoint = + // 'https://bharat-mystery-api.herokuapp.com/allmonuments'; + // final response = await http.get(getAllMonumentsEndpoint); + // if (response.statusCode == 200) { + // allMonuments = json.decode(response.body); + // print(allMonuments); + // } + // allMonuments = null; + // } + + Future registerUser() async { + final formState = _formKey.currentState; + if (formState.validate()) { + formState.save(); + //Register FIREBASE AUTH and send email verification + try { + //create a user. + User user = (await auth.createUserWithEmailAndPassword( + email: _registerEmail, password: _registerPassword)) + .user; + + //user verification by email + user.sendEmailVerification(); + + //get current date and time + DateTime now = DateTime.now(); + String _formattedDate = DateFormat('yyyy-MM-dd – kk:mm').format(now); + + // Map _levels = {}; + // for (var i = 1; i < allMonuments.length + 1; i++) { + // if (i == 1) { + // _levels[i] = true; + // } else { + // _levels[i] = false; + // } + // } + + //create a map with name email and registration date + Map userData = { + "name": this._registerName, + "email": this._registerEmail, + "registered_On": _formattedDate, + // "levels": _levels, + }; + //upload the map + users.doc(user.uid).set(userData); + Fluttertoast.showToast( + msg: "email verification sent, please verify " + _registerName); + _registerEmail = null; + _registerPassword = null; + _registerName = null; + Fluttertoast.showToast( + msg: 'Registered successfully, please login', + toastLength: Toast.LENGTH_SHORT, + gravity: ToastGravity.BOTTOM, + timeInSecForIosWeb: 1); + //change user screen so that he can login + Navigator.pushReplacement( + context, + MaterialPageRoute( + builder: (context) => LoginPage(), + )); + } catch (e) { + print("some shit happened in login screen heres a report " + e.message); + Fluttertoast.showToast( + msg: 'Registeration Failed, please try again', + toastLength: Toast.LENGTH_SHORT, + gravity: ToastGravity.BOTTOM, + timeInSecForIosWeb: 1); + } + } + } +} diff --git a/lib/screens/selectMonument.dart b/lib/screens/selectMonument.dart new file mode 100644 index 0000000..1e1e2d2 --- /dev/null +++ b/lib/screens/selectMonument.dart @@ -0,0 +1,135 @@ +import 'dart:convert'; +import 'package:bharat_mystery/screens/monument.dart'; +import 'package:flutter/services.dart'; +import 'package:http/http.dart' as http; +import 'package:flutter/material.dart'; + +class SelectMonument extends StatefulWidget { + SelectMonument({Key pagekey, this.title}) : super(key: pagekey); + final String title; + + @override + _SelectMonumentState createState() => _SelectMonumentState(); +} + +class _SelectMonumentState extends State + with AutomaticKeepAliveClientMixin { + Future _onWillPop() { + return showDialog( + context: context, + builder: (context) => AlertDialog( + title: Text('Are you sure?'), + content: Text('Do you want to exit the app?'), + actions: [ + TextButton( + onPressed: () => Navigator.of(context).pop(false), + child: Text('No'), + ), + TextButton( + onPressed: () => SystemNavigator.pop(), + child: Text('Yes'), + ), + ], + ), + ) ?? + false; + } + + @override + Widget build(BuildContext context) { + super.build(context); + //exit app on back pressed + return WillPopScope(onWillPop: _onWillPop, child: SelectMonumentContent()); + } + + @override + // TODO: implement wantKeepAlive + bool get wantKeepAlive => true; +} + +class SelectMonumentContent extends StatefulWidget { + @override + _SelectMonumentContentState createState() => _SelectMonumentContentState(); +} + +class _SelectMonumentContentState extends State { + getAllMonuments() async { + final getAllMonumentsEndpoint = + 'https://bharat-mystery-api.herokuapp.com/allmonuments'; + final response = await http.get(getAllMonumentsEndpoint); + if (response.statusCode == 200) { + return response.body; + } + return null; + } + + @override + Widget build(BuildContext context) { + return FutureBuilder( + future: getAllMonuments(), + builder: (context, snapshot) { + if (!snapshot.hasData) { + return Scaffold( + backgroundColor: Theme.of(context).focusColor, + body: Center( + child: CircularProgressIndicator( + valueColor: new AlwaysStoppedAnimation(Colors.black), + )), + ); + } + final allmonuments = json.decode(snapshot.data); + + return Scaffold( + body: Container( + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.height, + decoration: BoxDecoration( + color: Theme.of(context).focusColor, + ), + child: Stack( + children: [ + Padding( + padding: const EdgeInsets.fromLTRB(10.0, 20.0, 10.0, 20.0), + child: ListView.builder( + itemCount: allmonuments + .length, // response from db (json decoded) + itemBuilder: (context, index) { + return Card( + child: ListTile( + leading: Icon(Icons.place, + color: Theme.of(context).highlightColor), + title: Text((allmonuments[index])["name"], + style: TextStyle( + color: Theme.of(context).highlightColor)), + tileColor: Theme.of(context).cardColor, + + // name property of indexed monument + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => Monument( + snumber: (allmonuments[index])["Snumber"], + ), + )); + }, + ), + ); + }, + ), + ), + Positioned( + bottom: 0, + child: Container( + width: MediaQuery.of(context).size.width, + height: 20.0, + color: Theme.of(context).focusColor, + ), + ), + ], + ), + ), + ); + }); + } +} diff --git a/lib/screens/streetview.dart b/lib/screens/streetview.dart new file mode 100644 index 0000000..db3a5c9 --- /dev/null +++ b/lib/screens/streetview.dart @@ -0,0 +1,40 @@ +import 'package:flutter/material.dart'; +import 'package:webview_flutter/webview_flutter.dart'; + +class StreetView extends StatefulWidget { + final String url; + StreetView({this.url}); + + @override + _StreetViewState createState() => _StreetViewState(); +} + +class _StreetViewState extends State { + @override + Widget build(BuildContext context) { + return MaterialApp( + home: Scaffold( + appBar: AppBar( + backgroundColor: Theme.of(context).accentColor, + leading: IconButton( + icon: Icon( + Icons.arrow_back, + color: Theme.of(context).highlightColor, + ), + onPressed: () => Navigator.of(context).pop(), + ), + title: Text( + "Street View", + style: TextStyle( + fontFamily: 'LexendDeca', + color: Theme.of(context).highlightColor), + ), + ), + body: WebView( + initialUrl: widget.url, + javascriptMode: JavascriptMode.unrestricted, + ), + ), + ); + } +} diff --git a/lib/screens/theme_provider.dart b/lib/screens/theme_provider.dart new file mode 100644 index 0000000..c35ed13 --- /dev/null +++ b/lib/screens/theme_provider.dart @@ -0,0 +1,50 @@ +import 'package:flutter/material.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +ThemeData light = ThemeData( + brightness: Brightness.light, + accentColor: Color(0xffA0E7E5), + highlightColor: Colors.black, + cardColor: Colors.white, + focusColor: Color(0xffA0E7E5)); + +ThemeData dark = ThemeData( + brightness: Brightness.dark, + accentColor: Colors.black, + highlightColor: Colors.white, + cardColor: Colors.black, + focusColor: Colors.white); + +class ThemeNotifier extends ChangeNotifier { + final String key = "theme"; + SharedPreferences _pref; + bool _darkTheme; + + bool get darkTheme => _darkTheme; + + ThemeNotifier() { + _darkTheme = true; + _loadFromPrefs(); + } + + toggleTheme() { + _darkTheme = !_darkTheme; + _saveToPrefs(); + notifyListeners(); + } + + _initPrefs() async { + if (_pref == null) _pref = await SharedPreferences.getInstance(); + } + + _loadFromPrefs() async { + await _initPrefs(); + _darkTheme = _pref.getBool(key) ?? true; + notifyListeners(); + } + + _saveToPrefs() async { + await _initPrefs(); + _pref.setBool(key, _darkTheme); + } +} diff --git a/pubspec.lock b/pubspec.lock new file mode 100644 index 0000000..9aa42bf --- /dev/null +++ b/pubspec.lock @@ -0,0 +1,726 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + ansicolor: + dependency: transitive + description: + name: ansicolor + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.1" + archive: + dependency: transitive + description: + name: archive + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.13" + args: + dependency: transitive + description: + name: args + url: "https://pub.dartlang.org" + source: hosted + version: "1.6.0" + async: + dependency: transitive + description: + name: async + url: "https://pub.dartlang.org" + source: hosted + version: "2.5.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + cached_network_image: + dependency: "direct main" + description: + name: cached_network_image + url: "https://pub.dartlang.org" + source: hosted + version: "2.5.0" + characters: + dependency: transitive + description: + name: characters + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + charcode: + dependency: transitive + description: + name: charcode + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + clock: + dependency: transitive + description: + name: clock + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + cloud_firestore: + dependency: "direct main" + description: + name: cloud_firestore + url: "https://pub.dartlang.org" + source: hosted + version: "0.16.0+1" + cloud_firestore_platform_interface: + dependency: transitive + description: + name: cloud_firestore_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.2" + cloud_firestore_web: + dependency: transitive + description: + name: cloud_firestore_web + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.0+2" + collection: + dependency: transitive + description: + name: collection + url: "https://pub.dartlang.org" + source: hosted + version: "1.15.0" + console_log_handler: + dependency: transitive + description: + name: console_log_handler + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.6" + convert: + dependency: transitive + description: + name: convert + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.1" + crypto: + dependency: transitive + description: + name: crypto + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.5" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" + curved_navigation_bar: + dependency: "direct main" + description: + name: curved_navigation_bar + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.7" + fake_async: + dependency: transitive + description: + name: fake_async + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + ffi: + dependency: transitive + description: + name: ffi + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.3" + file: + dependency: transitive + description: + name: file + url: "https://pub.dartlang.org" + source: hosted + version: "5.2.1" + firebase_auth: + dependency: "direct main" + description: + name: firebase_auth + url: "https://pub.dartlang.org" + source: hosted + version: "0.20.1" + firebase_auth_platform_interface: + dependency: transitive + description: + name: firebase_auth_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.0" + firebase_auth_web: + dependency: transitive + description: + name: firebase_auth_web + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.3" + firebase_core: + dependency: "direct main" + description: + name: firebase_core + url: "https://pub.dartlang.org" + source: hosted + version: "0.7.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.1" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.1+3" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_blurhash: + dependency: transitive + description: + name: flutter_blurhash + url: "https://pub.dartlang.org" + source: hosted + version: "0.5.0" + flutter_cache_manager: + dependency: transitive + description: + name: flutter_cache_manager + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.1" + flutter_image: + dependency: transitive + description: + name: flutter_image + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.0" + flutter_map: + dependency: "direct main" + description: + name: flutter_map + url: "https://pub.dartlang.org" + source: hosted + version: "0.11.0" + flutter_phoenix: + dependency: "direct main" + description: + name: flutter_phoenix + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.0" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_tts: + dependency: "direct main" + description: + name: flutter_tts + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + fluttertoast: + dependency: "direct main" + description: + name: fluttertoast + url: "https://pub.dartlang.org" + source: hosted + version: "7.1.8" + geolocator: + dependency: "direct main" + description: + name: geolocator + url: "https://pub.dartlang.org" + source: hosted + version: "6.2.1" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.9" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + http: + dependency: "direct main" + description: + name: http + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.2" + http_parser: + dependency: transitive + description: + name: http_parser + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.4" + image: + dependency: transitive + description: + name: image + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.19" + intl: + dependency: transitive + description: + name: intl + url: "https://pub.dartlang.org" + source: hosted + version: "0.16.1" + js: + dependency: transitive + description: + name: js + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.3" + latlong: + dependency: transitive + description: + name: latlong + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.1" + lists: + dependency: transitive + description: + name: lists + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.6" + lite_rolling_switch: + dependency: "direct main" + description: + name: lite_rolling_switch + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.1" + logging: + dependency: transitive + description: + name: logging + url: "https://pub.dartlang.org" + source: hosted + version: "0.11.4" + matcher: + dependency: transitive + description: + name: matcher + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.10" + meta: + dependency: transitive + description: + name: meta + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.0" + mgrs_dart: + dependency: transitive + description: + name: mgrs_dart + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + nested: + dependency: transitive + description: + name: nested + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.4" + octo_image: + dependency: transitive + description: + name: octo_image + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.0" + path: + dependency: transitive + description: + name: path + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.0" + path_provider: + dependency: transitive + description: + name: path_provider + url: "https://pub.dartlang.org" + source: hosted + version: "1.6.27" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.1+2" + path_provider_macos: + dependency: transitive + description: + name: path_provider_macos + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.4+8" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.4" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.4+3" + pedantic: + dependency: transitive + description: + name: pedantic + url: "https://pub.dartlang.org" + source: hosted + version: "1.9.2" + petitparser: + dependency: transitive + description: + name: petitparser + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.0" + platform: + dependency: transitive + description: + name: platform + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.1" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.3" + positioned_tap_detector: + dependency: transitive + description: + name: positioned_tap_detector + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.3" + process: + dependency: transitive + description: + name: process + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.13" + proj4dart: + dependency: transitive + description: + name: proj4dart + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.5" + provider: + dependency: "direct main" + description: + name: provider + url: "https://pub.dartlang.org" + source: hosted + version: "4.3.3" + quiver: + dependency: transitive + description: + name: quiver + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.5" + rxdart: + dependency: transitive + description: + name: rxdart + url: "https://pub.dartlang.org" + source: hosted + version: "0.25.0" + shared_preferences: + dependency: "direct main" + description: + name: shared_preferences + url: "https://pub.dartlang.org" + source: hosted + version: "0.5.12+4" + shared_preferences_linux: + dependency: transitive + description: + name: shared_preferences_linux + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.2+4" + shared_preferences_macos: + dependency: transitive + description: + name: shared_preferences_macos + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.1+11" + shared_preferences_platform_interface: + dependency: transitive + description: + name: shared_preferences_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.4" + shared_preferences_web: + dependency: transitive + description: + name: shared_preferences_web + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.2+7" + shared_preferences_windows: + dependency: transitive + description: + name: shared_preferences_windows + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.2+3" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.0" + sqflite: + dependency: transitive + description: + name: sqflite + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.2+3" + sqflite_common: + dependency: transitive + description: + name: sqflite_common + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.3+1" + stack_trace: + dependency: transitive + description: + name: stack_trace + url: "https://pub.dartlang.org" + source: hosted + version: "1.10.0" + stream_channel: + dependency: transitive + description: + name: stream_channel + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + synchronized: + dependency: transitive + description: + name: synchronized + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.0+2" + term_glyph: + dependency: transitive + description: + name: term_glyph + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + test_api: + dependency: transitive + description: + name: test_api + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.19" + transparent_image: + dependency: transitive + description: + name: transparent_image + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" + tuple: + dependency: transitive + description: + name: tuple + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.3" + typed_data: + dependency: transitive + description: + name: typed_data + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.0" + unicode: + dependency: transitive + description: + name: unicode + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.4" + url_launcher: + dependency: "direct main" + description: + name: url_launcher + url: "https://pub.dartlang.org" + source: hosted + version: "5.7.10" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.1+4" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.1+9" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.9" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.5+3" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.1+3" + uuid: + dependency: transitive + description: + name: uuid + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.2" + validate: + dependency: transitive + description: + name: validate + url: "https://pub.dartlang.org" + source: hosted + version: "1.7.0" + vector_math: + dependency: transitive + description: + name: vector_math + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + webview_flutter: + dependency: "direct main" + description: + name: webview_flutter + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.7" + win32: + dependency: transitive + description: + name: win32 + url: "https://pub.dartlang.org" + source: hosted + version: "1.7.4+1" + wkt_parser: + dependency: transitive + description: + name: wkt_parser + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.7" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.2" + xml: + dependency: transitive + description: + name: xml + url: "https://pub.dartlang.org" + source: hosted + version: "4.5.1" +sdks: + dart: ">=2.12.0-0.0 <3.0.0" + flutter: ">=1.22.2" diff --git a/pubspec.yaml b/pubspec.yaml new file mode 100644 index 0000000..6a7766f --- /dev/null +++ b/pubspec.yaml @@ -0,0 +1,88 @@ +name: bharat_mystery +description: A new Flutter project. + +# The following line prevents the package from being accidentally published to +# pub.dev using `pub publish`. This is preferred for private packages. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +version: 1.0.0+1 + +environment: + sdk: ">=2.7.0 <3.0.0" + +dependencies: + flutter: + sdk: flutter + flutter_map: ^0.11.0 + curved_navigation_bar: ^0.3.4 + firebase_auth: ^0.20.1 + firebase_core : ^0.7.0 + flutter_tts: ^2.1.0 + fluttertoast: ^7.1.8 + cloud_firestore: ^0.16.0+1 + shared_preferences: ^0.5.12+4 + http: ^0.12.2 + cached_network_image: ^2.5.0 + webview_flutter: ^1.0.7 + geolocator: ^6.2.1 + url_launcher: ^5.7.10 + lite_rolling_switch: ^0.1.1 + provider: ^4.3.3 + flutter_phoenix: "^0.1.0" + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^1.0.0 + +dev_dependencies: + flutter_test: + sdk: flutter + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter. +flutter: + + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + + # To add assets to your application, add an assets section, like this: + # assets: + # - assets/images/logo.png + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/assets-and-images/#resolution-aware. + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/assets-and-images/#from-packages + + # To add custom fonts to your application, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + fonts: + - family: LexendDeca + fonts: + - asset: fonts/LexendDeca-Regular.ttf + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts from package dependencies, + # see https://flutter.dev/custom-fonts/#from-packages diff --git a/test/widget_test.dart b/test/widget_test.dart new file mode 100644 index 0000000..95ae1a1 --- /dev/null +++ b/test/widget_test.dart @@ -0,0 +1,30 @@ +// This is a basic Flutter widget test. +// +// To perform an interaction with a widget in your test, use the WidgetTester +// utility that Flutter provides. For example, you can send tap and scroll +// gestures. You can also use WidgetTester to find child widgets in the widget +// tree, read text, and verify that the values of widget properties are correct. + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import 'package:bharat_mystery/main.dart'; + +void main() { + testWidgets('Counter increments smoke test', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(MyApp()); + + // Verify that our counter starts at 0. + expect(find.text('0'), findsOneWidget); + expect(find.text('1'), findsNothing); + + // Tap the '+' icon and trigger a frame. + await tester.tap(find.byIcon(Icons.add)); + await tester.pump(); + + // Verify that our counter has incremented. + expect(find.text('0'), findsNothing); + expect(find.text('1'), findsOneWidget); + }); +}