diff --git a/.gitignore b/.gitignore index 10be197..2aaf1f0 100644 --- a/.gitignore +++ b/.gitignore @@ -51,3 +51,4 @@ buck-out/ fastlane/report.xml fastlane/Preview.html fastlane/screenshots +Flutter-App/android/app/google-services.json diff --git a/Flutter-App/.gitignore b/Flutter-App/.gitignore new file mode 100644 index 0000000..ac246c1 --- /dev/null +++ b/Flutter-App/.gitignore @@ -0,0 +1,37 @@ +# 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/ +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Web related +lib/generated_plugin_registrant.dart + +# Exceptions to above rules. +!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages diff --git a/Flutter-App/.metadata b/Flutter-App/.metadata new file mode 100644 index 0000000..d05b6c3 --- /dev/null +++ b/Flutter-App/.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: 0b8abb4724aa590dd0f429683339b1e045a1594d + channel: stable + +project_type: app diff --git a/Flutter-App/.packages b/Flutter-App/.packages new file mode 100644 index 0000000..d0ed6f1 --- /dev/null +++ b/Flutter-App/.packages @@ -0,0 +1,70 @@ +# Generated by pub on 2020-03-29 15:32:38.713681. +ansicolor:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/ansicolor-1.0.2/lib/ +archive:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/archive-2.0.11/lib/ +args:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/args-1.5.2/lib/ +async:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/async-2.4.0/lib/ +boolean_selector:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/boolean_selector-1.0.5/lib/ +cached_network_image:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/cached_network_image-2.0.0/lib/ +charcode:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/charcode-1.1.2/lib/ +cloud_firestore:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/cloud_firestore-0.12.11/lib/ +collection:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/collection-1.14.11/lib/ +console_log_handler:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/console_log_handler-1.1.6/lib/ +convert:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/convert-2.1.1/lib/ +crypto:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/crypto-2.1.3/lib/ +cupertino_icons:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/cupertino_icons-0.1.3/lib/ +curved_navigation_bar:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/curved_navigation_bar-0.3.2/lib/ +firebase:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/firebase-7.2.1/lib/ +firebase_auth:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_auth-0.14.0+9/lib/ +firebase_core:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core-0.4.4+3/lib/ +firebase_core_platform_interface:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core_platform_interface-1.0.4/lib/ +firebase_core_web:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core_web-0.1.1+2/lib/ +flutter:file:///C:/src/flutter/flutter/packages/flutter/lib/ +flutter_cache_manager:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_cache_manager-1.1.3/lib/ +flutter_image:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_image-3.0.0/lib/ +flutter_map:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_map-0.8.2/lib/ +flutter_plugin_android_lifecycle:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_plugin_android_lifecycle-1.0.6/lib/ +flutter_speed_dial:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_speed_dial-1.2.5/lib/ +flutter_test:file:///C:/src/flutter/flutter/packages/flutter_test/lib/ +flutter_web_plugins:file:///C:/src/flutter/flutter/packages/flutter_web_plugins/lib/ +geoflutterfire:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/geoflutterfire-2.0.3+5/lib/ +google_maps_flutter:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/google_maps_flutter-0.5.25/lib/ +http:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/http-0.12.0+4/lib/ +http_parser:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/http_parser-3.1.3/lib/ +image:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/image-2.1.4/lib/ +intl:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/intl-0.16.1/lib/ +js:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/js-0.6.1+1/lib/ +latlong:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/latlong-0.6.1/lib/ +location:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/location-2.5.4/lib/ +logging:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/logging-0.11.4/lib/ +matcher:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/matcher-0.12.6/lib/ +meta:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/meta-1.1.8/lib/ +modal_progress_hud:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/modal_progress_hud-0.1.3/lib/ +path:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/path-1.6.4/lib/ +path_provider:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider-1.6.5/lib/ +path_provider_macos:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider_macos-0.0.4/lib/ +path_provider_platform_interface:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider_platform_interface-1.0.1/lib/ +pedantic:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/pedantic-1.8.0+1/lib/ +petitparser:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/petitparser-2.4.0/lib/ +platform:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/platform-2.2.1/lib/ +plugin_platform_interface:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/plugin_platform_interface-1.0.2/lib/ +positioned_tap_detector:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/positioned_tap_detector-1.0.3/lib/ +quiver:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/quiver-2.0.5/lib/ +rxdart:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/rxdart-0.22.6/lib/ +sky_engine:file:///C:/src/flutter/flutter/bin/cache/pkg/sky_engine/lib/ +source_span:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/source_span-1.5.5/lib/ +sqflite:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/sqflite-1.3.0/lib/ +sqflite_common:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/sqflite_common-1.0.0+1/lib/ +stack_trace:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/stack_trace-1.9.3/lib/ +stream_channel:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/stream_channel-2.0.0/lib/ +string_scanner:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/string_scanner-1.0.5/lib/ +synchronized:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/synchronized-2.2.0/lib/ +term_glyph:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/term_glyph-1.1.0/lib/ +test_api:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/test_api-0.2.11/lib/ +transparent_image:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/transparent_image-1.0.0/lib/ +tuple:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/tuple-1.0.3/lib/ +typed_data:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/typed_data-1.1.6/lib/ +uuid:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/uuid-2.0.4/lib/ +validate:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/validate-1.7.0/lib/ +vector_math:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/vector_math-2.0.8/lib/ +xml:file:///C:/src/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/xml-3.5.0/lib/ +dengue_stop:lib/ diff --git a/Flutter-App/README.md b/Flutter-App/README.md new file mode 100644 index 0000000..8ea2ae9 --- /dev/null +++ b/Flutter-App/README.md @@ -0,0 +1,18 @@ +# Diseases-Stop + +This project will be used to stop dengue spread in the society. After the complete and successful implementation for that issue, the project will be extended to prevent othe diseases as well. Therefore the project name will be used as **Diseases-Stop**. + +Access the complete project use the bellow link. + +- [Diseases-Stop Project](https://github.com/viradhanus/Diseases-Stop) + + +## Getting Started + +This is a simple login and registration screens for the flutter app, dengue-stop. Previous logo of the react native app is used as the main logo of the flutter app. **Hero animation** is used to enhance UX. + +Firebase authentication is used to authenticate users to the app. Users trying to log in with badly-formated email address will be rejected and they should enter atleast 6 characters as a password to log in to the app. Logout button (**X**) is created in Main-Screen. A flutter widget **modal_progress_hud** is used to improve user experience. + +For more information use the bellow link. + +- [ScoreLab - Dengue-Stop Project](https://github.com/scorelab/dengue-stop) diff --git a/Flutter-App/android/.gitignore b/Flutter-App/android/.gitignore new file mode 100644 index 0000000..bc2100d --- /dev/null +++ b/Flutter-App/android/.gitignore @@ -0,0 +1,7 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java diff --git a/Flutter-App/android/app/build.gradle b/Flutter-App/android/app/build.gradle new file mode 100644 index 0000000..ef2fd6e --- /dev/null +++ b/Flutter-App/android/app/build.gradle @@ -0,0 +1,64 @@ +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 from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" +apply plugin: 'com.google.gms.google-services' + +android { + compileSdkVersion 29 + + lintOptions { + disable 'InvalidPackage' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.scorelab.denguestop" + minSdkVersion 28 + targetSdkVersion 29 + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + 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 'com.google.firebase:firebase-auth:19.3.0' + implementation 'com.google.firebase:firebase-firestore:21.4.1' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'androidx.test:runner:1.1.1' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' +} diff --git a/Flutter-App/android/app/google-services.json b/Flutter-App/android/app/google-services.json new file mode 100644 index 0000000..3f3235e --- /dev/null +++ b/Flutter-App/android/app/google-services.json @@ -0,0 +1,48 @@ +{ + "project_info": { + "project_number": "402013291968", + "firebase_url": "https://dengue-stop-e74b4.firebaseio.com", + "project_id": "dengue-stop-e74b4", + "storage_bucket": "dengue-stop-e74b4.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:402013291968:android:abc78cf566c04f9a183425", + "android_client_info": { + "package_name": "com.scorelab.denguestop" + } + }, + "oauth_client": [ + { + "client_id": "402013291968-t0hpq04d14mnudppg3mjem4aam0112ik.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.scorelab.denguestop", + "certificate_hash": "97f69b3bb7064bbaa64b849b2727a7fa9b5c8c82" + } + }, + { + "client_id": "402013291968-cfh6oosnpsfqrua776mu4ae1b6prlrtf.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCocAiWrtbqRYR8_J1-VJZjXFBZHQlrg1c" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "402013291968-cfh6oosnpsfqrua776mu4ae1b6prlrtf.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/Flutter-App/android/app/src/debug/AndroidManifest.xml b/Flutter-App/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..c5d65b8 --- /dev/null +++ b/Flutter-App/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/Flutter-App/android/app/src/main/AndroidManifest.xml b/Flutter-App/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..698a194 --- /dev/null +++ b/Flutter-App/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + diff --git a/Flutter-App/android/app/src/main/java/com/scorelab/denguestop/MainActivity.java b/Flutter-App/android/app/src/main/java/com/scorelab/denguestop/MainActivity.java new file mode 100644 index 0000000..770396e --- /dev/null +++ b/Flutter-App/android/app/src/main/java/com/scorelab/denguestop/MainActivity.java @@ -0,0 +1,13 @@ +package com.scorelab.denguestop; + +import androidx.annotation.NonNull; +import io.flutter.embedding.android.FlutterActivity; +import io.flutter.embedding.engine.FlutterEngine; +import io.flutter.plugins.GeneratedPluginRegistrant; + +public class MainActivity extends FlutterActivity { + @Override + public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) { + GeneratedPluginRegistrant.registerWith(flutterEngine); + } +} diff --git a/Flutter-App/android/app/src/main/res/drawable/launch_background.xml b/Flutter-App/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..304732f --- /dev/null +++ b/Flutter-App/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/Flutter-App/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/Flutter-App/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000..db77bb4 Binary files /dev/null and b/Flutter-App/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/Flutter-App/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/Flutter-App/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000..17987b7 Binary files /dev/null and b/Flutter-App/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/Flutter-App/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/Flutter-App/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000..09d4391 Binary files /dev/null and b/Flutter-App/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/Flutter-App/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/Flutter-App/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000..d5f1c8d Binary files /dev/null and b/Flutter-App/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/Flutter-App/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/Flutter-App/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000..4d6372e Binary files /dev/null and b/Flutter-App/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/Flutter-App/android/app/src/main/res/values/styles.xml b/Flutter-App/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..00fa441 --- /dev/null +++ b/Flutter-App/android/app/src/main/res/values/styles.xml @@ -0,0 +1,8 @@ + + + + diff --git a/Flutter-App/android/app/src/profile/AndroidManifest.xml b/Flutter-App/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..c5d65b8 --- /dev/null +++ b/Flutter-App/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/Flutter-App/android/build.gradle b/Flutter-App/android/build.gradle new file mode 100644 index 0000000..462ab77 --- /dev/null +++ b/Flutter-App/android/build.gradle @@ -0,0 +1,30 @@ +buildscript { + repositories { + google() + jcenter() + } + + dependencies { + classpath 'com.android.tools.build:gradle:3.6.1' + classpath 'com.google.gms:google-services:4.3.3' + } +} + +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/Flutter-App/android/gradle.properties b/Flutter-App/android/gradle.properties new file mode 100644 index 0000000..38c8d45 --- /dev/null +++ b/Flutter-App/android/gradle.properties @@ -0,0 +1,4 @@ +org.gradle.jvmargs=-Xmx1536M +android.enableR8=true +android.useAndroidX=true +android.enableJetifier=true diff --git a/Flutter-App/android/gradle/wrapper/gradle-wrapper.properties b/Flutter-App/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..7d3bc58 --- /dev/null +++ b/Flutter-App/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Sat Mar 21 11:27:00 IST 2020 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip diff --git a/Flutter-App/android/settings.gradle b/Flutter-App/android/settings.gradle new file mode 100644 index 0000000..5a2f14f --- /dev/null +++ b/Flutter-App/android/settings.gradle @@ -0,0 +1,15 @@ +include ':app' + +def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() + +def plugins = new Properties() +def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') +if (pluginsFile.exists()) { + pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } +} + +plugins.each { name, path -> + def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() + include ":$name" + project(":$name").projectDir = pluginDirectory +} diff --git a/Flutter-App/denguestop.iml b/Flutter-App/denguestop.iml new file mode 100644 index 0000000..066e058 --- /dev/null +++ b/Flutter-App/denguestop.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Flutter-App/images/logo.png b/Flutter-App/images/logo.png new file mode 100644 index 0000000..6f3aa46 Binary files /dev/null and b/Flutter-App/images/logo.png differ diff --git a/Flutter-App/images/mosquito_icon.png b/Flutter-App/images/mosquito_icon.png new file mode 100644 index 0000000..f71d393 Binary files /dev/null and b/Flutter-App/images/mosquito_icon.png differ diff --git a/Flutter-App/ios/.gitignore b/Flutter-App/ios/.gitignore new file mode 100644 index 0000000..e96ef60 --- /dev/null +++ b/Flutter-App/ios/.gitignore @@ -0,0 +1,32 @@ +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/Flutter-App/ios/Flutter/AppFrameworkInfo.plist b/Flutter-App/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 0000000..6b4c0f7 --- /dev/null +++ b/Flutter-App/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + 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 + 8.0 + + diff --git a/Flutter-App/ios/Flutter/Debug.xcconfig b/Flutter-App/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/Flutter-App/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/Flutter-App/ios/Flutter/Release.xcconfig b/Flutter-App/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/Flutter-App/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/Flutter-App/ios/Runner.xcodeproj/project.pbxproj b/Flutter-App/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..9db75b3 --- /dev/null +++ b/Flutter-App/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,518 @@ +// !$*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 */; }; + 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; + 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; + 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 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 = ( + 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, + 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, + ); + 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 = ""; }; + 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; 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 = ""; }; + 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; 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 = ( + 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, + 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B80C3931E831B6300D905FE /* App.framework */, + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEBA1CF902C7004384FC /* Flutter.framework */, + 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 */, + 97C146F11CF9000F007C117D /* Supporting Files */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; + 97C146F11CF9000F007C117D /* Supporting Files */ = { + isa = PBXGroup; + children = ( + ); + name = "Supporting Files"; + 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 = "The Chromium Authors"; + TargetAttributes = { + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 3.2"; + 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\" 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; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + 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 = 8.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.scorelab.denguestop; + 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; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + 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 = 8.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + 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 = 8.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.scorelab.denguestop; + 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.scorelab.denguestop; + 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/Flutter-App/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/Flutter-App/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..a28140c --- /dev/null +++ b/Flutter-App/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Flutter-App/ios/Runner.xcworkspace/contents.xcworkspacedata b/Flutter-App/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/Flutter-App/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Flutter-App/ios/Runner/AppDelegate.swift b/Flutter-App/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000..70693e4 --- /dev/null +++ b/Flutter-App/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/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d36b1fa --- /dev/null +++ b/Flutter-App/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/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000..dc9ada4 Binary files /dev/null and b/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ diff --git a/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png new file mode 100644 index 0000000..28c6bf0 Binary files /dev/null and b/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 0000000..2ccbfd9 Binary files /dev/null and b/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000..f091b6b Binary files /dev/null and b/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 0000000..4cde121 Binary files /dev/null and b/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000..d0ef06e Binary files /dev/null and b/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png new file mode 100644 index 0000000..dcdc230 Binary files /dev/null and b/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png new file mode 100644 index 0000000..2ccbfd9 Binary files /dev/null and b/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000..c8f9ed8 Binary files /dev/null and b/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 0000000..a6d6b86 Binary files /dev/null and b/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000..a6d6b86 Binary files /dev/null and b/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000..75b2d16 Binary files /dev/null and b/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 0000000..c4df70d Binary files /dev/null and b/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png new file mode 100644 index 0000000..6a84f41 Binary files /dev/null and b/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 0000000..d0e1f58 Binary files /dev/null and b/Flutter-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/Flutter-App/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/Flutter-App/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 0000000..0bedcf2 --- /dev/null +++ b/Flutter-App/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/Flutter-App/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/Flutter-App/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 0000000..9da19ea Binary files /dev/null and b/Flutter-App/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png differ diff --git a/Flutter-App/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/Flutter-App/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000..9da19ea Binary files /dev/null and b/Flutter-App/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png differ diff --git a/Flutter-App/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/Flutter-App/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000..9da19ea Binary files /dev/null and b/Flutter-App/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png differ diff --git a/Flutter-App/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/Flutter-App/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000..89c2725 --- /dev/null +++ b/Flutter-App/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/Flutter-App/ios/Runner/Base.lproj/LaunchScreen.storyboard b/Flutter-App/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..f2e259c --- /dev/null +++ b/Flutter-App/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Flutter-App/ios/Runner/Base.lproj/Main.storyboard b/Flutter-App/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f3c2851 --- /dev/null +++ b/Flutter-App/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Flutter-App/ios/Runner/Info.plist b/Flutter-App/ios/Runner/Info.plist new file mode 100644 index 0000000..de3adcd --- /dev/null +++ b/Flutter-App/ios/Runner/Info.plist @@ -0,0 +1,45 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + denguestop + 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/Flutter-App/ios/Runner/Runner-Bridging-Header.h b/Flutter-App/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000..7335fdf --- /dev/null +++ b/Flutter-App/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" \ No newline at end of file diff --git a/Flutter-App/lib/components/dialog_box.dart b/Flutter-App/lib/components/dialog_box.dart new file mode 100644 index 0000000..2e88d29 --- /dev/null +++ b/Flutter-App/lib/components/dialog_box.dart @@ -0,0 +1,33 @@ +import 'package:flutter/material.dart'; + +class DialogBox{ + information(BuildContext context, String title, String description){ + return showDialog( + context: context, + barrierDismissible: true, + + builder: (BuildContext context){ + return AlertDialog( + title: Text(title), + content: SingleChildScrollView( + child: ListBody( + children: [ + Text(description) + ], + ), + ) , + + actions: [ + FlatButton( + child: Text('Got it'), + onPressed: (){ + return Navigator.pop(context); + }, + ) + ], + + ); + } + ); + } +} \ No newline at end of file diff --git a/Flutter-App/lib/components/rounded_button.dart b/Flutter-App/lib/components/rounded_button.dart new file mode 100644 index 0000000..3c5f165 --- /dev/null +++ b/Flutter-App/lib/components/rounded_button.dart @@ -0,0 +1,36 @@ +import 'package:flutter/material.dart'; + +class RoundedButton extends StatelessWidget { + RoundedButton({ + this.title, + this.color, + @required this.onPressed, + }); + + final Color color; + final String title; + final Function onPressed; + + @override + Widget build(BuildContext context) { + return Padding( + padding: EdgeInsets.symmetric(vertical: 16.0), + child: Material( + color: color, + borderRadius: BorderRadius.circular(30.0), + elevation: 5.0, + child: MaterialButton( + onPressed: onPressed, + minWidth: 200.0, + height: 42.0, + child: Text( + title, + style: TextStyle( + color: Colors.white, + ), + ), + ), + ), + ); + } +} \ No newline at end of file diff --git a/Flutter-App/lib/constants.dart b/Flutter-App/lib/constants.dart new file mode 100644 index 0000000..fa68d07 --- /dev/null +++ b/Flutter-App/lib/constants.dart @@ -0,0 +1,35 @@ +import 'package:flutter/material.dart'; + +const kSendButtonTextStyle = TextStyle( + color: Colors.lightBlueAccent, + fontWeight: FontWeight.bold, + fontSize: 18.0, +); + +const kMessageTextFieldDecoration = InputDecoration( + contentPadding: EdgeInsets.symmetric(vertical: 10.0, horizontal: 20.0), + hintText: 'Type your message here...', + border: InputBorder.none, +); + +const kMessageContainerDecoration = BoxDecoration( + border: Border( + top: BorderSide(color: Colors.lightBlueAccent, width: 2.0), + ), +); + +const kTextFieldDecoration = InputDecoration( + hintText: '', + contentPadding: EdgeInsets.symmetric(vertical: 10.0, horizontal: 20.0), + border: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(32.0)), + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: Colors.blueAccent, width: 1.0), + borderRadius: BorderRadius.all(Radius.circular(32.0)), + ), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: Colors.blueAccent, width: 2.0), + borderRadius: BorderRadius.all(Radius.circular(32.0)), + ), +); diff --git a/Flutter-App/lib/main.dart b/Flutter-App/lib/main.dart new file mode 100644 index 0000000..757641d --- /dev/null +++ b/Flutter-App/lib/main.dart @@ -0,0 +1,35 @@ +import 'package:dengue_stop/screens/user_location_screen.dart'; +import 'package:dengue_stop/screens/post_screen.dart'; +import 'package:dengue_stop/screens/report_screen.dart'; +import 'package:flutter/material.dart'; +import 'package:dengue_stop/screens/chat_screen.dart'; +import 'package:dengue_stop/screens/home_screen.dart'; +import 'package:dengue_stop/screens/welcome_screen.dart'; +import 'package:dengue_stop/screens/login_screen.dart'; +import 'package:dengue_stop/screens/registration_screen.dart'; +import 'package:dengue_stop/screens/main_screen.dart'; + + +void main() => runApp(DengueStop()); + +class DengueStop extends StatelessWidget { + @override + Widget build(BuildContext context) { + return MaterialApp( + + initialRoute: WelcomeScreen.id, + routes: { + MainScreen.id:(context) => MainScreen(), + WelcomeScreen.id:(context) => WelcomeScreen(), + LoginScreen.id:(context) => LoginScreen(), + RegistrationScreen.id:(context) => RegistrationScreen(), + HomeScreen.id:(context) => HomeScreen(), + ReportScreen.id:(context) => ReportScreen(), + PostScreen.id:(context) => PostScreen(), + ChatScreen.id:(context) => ChatScreen(), + UserLocationScreen.id:(context) => UserLocationScreen(), + }, + + ); + } +} diff --git a/Flutter-App/lib/screens/chat_screen.dart b/Flutter-App/lib/screens/chat_screen.dart new file mode 100644 index 0000000..b4cb4d3 --- /dev/null +++ b/Flutter-App/lib/screens/chat_screen.dart @@ -0,0 +1,185 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:dengue_stop/constants.dart'; +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:cloud_firestore/cloud_firestore.dart'; + +final _firestore = Firestore.instance; +FirebaseUser loggedInUser; + +class ChatScreen extends StatefulWidget { + static const String id = "chats"; + + @override + _ChatScreenState createState() => _ChatScreenState(); +} + +class _ChatScreenState extends State { + final messageTextController = TextEditingController(); + final _auth = FirebaseAuth.instance; + + String messageText; + + @override + void initState() { + super.initState(); + getCurrentUser(); + } + + void getCurrentUser() async { + try { + final user = await _auth.currentUser(); + loggedInUser = user; + } catch (e) { + print(e); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + leading: null, + actions: [ + IconButton( + icon: Icon(Icons.close), + onPressed: () { + _auth.signOut(); + Navigator.pop(context); + }), + ], + title: Text('Chat'), + backgroundColor: Colors.blueAccent, + ), + body: SafeArea( + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + MessageStream(), + Container( + decoration: kMessageContainerDecoration, + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Expanded( + child: TextField( + controller: messageTextController, + onChanged: (value) { + messageText = value; + }, + decoration: kMessageTextFieldDecoration, + ), + ), + FlatButton( + onPressed: () { + //Implement send functionality. + messageTextController.clear(); + _firestore.collection('messages').add({ + 'text': messageText, + 'sender': loggedInUser.email, + 'date': DateTime.now().millisecondsSinceEpoch + }); + }, + child: Text( + 'Send', + style: kSendButtonTextStyle, + ), + ), + ], + ), + ), + ], + ), + ), + ); + } +} + +class MessageBubble extends StatelessWidget { + MessageBubble({this.text, this.sender, this.isMe}); + + final String sender; + final String text; + final bool isMe; + + @override + Widget build(BuildContext context) { + return Padding( + padding: EdgeInsets.all(10.0), + child: Column( + crossAxisAlignment: + isMe ? CrossAxisAlignment.end : CrossAxisAlignment.start, + children: [ + Text( + isMe ? "" : sender, + style: TextStyle( + fontSize: 12.0, + color: Colors.black54, + ), + ), + Material( + borderRadius: BorderRadius.only( + topLeft: isMe ? Radius.circular(30.0) : Radius.circular(0.0), + topRight: isMe ? Radius.circular(0.0) : Radius.circular(30.0), + bottomLeft: Radius.circular(30.0), + bottomRight: Radius.circular(30.0), + ), + elevation: 5.0, + color: isMe ? Colors.lightBlueAccent : Colors.white, + child: Padding( + padding: EdgeInsets.symmetric(vertical: 10.0, horizontal: 20.0), + child: Text( + text, + style: TextStyle( + fontSize: 15.0, + color: isMe ? Colors.white : Colors.black54, + ), + ), + ), + ), + ], + ), + ); + } +} + +class MessageStream extends StatelessWidget { + @override + Widget build(BuildContext context) { + return StreamBuilder( + stream: _firestore.collection('messages').orderBy('date',descending: false).snapshots(), + builder: (context, snapshot) { + if (!snapshot.hasData) { + return Center( + child: CircularProgressIndicator( + backgroundColor: Colors.lightBlueAccent, + ), + ); + } + final messages = snapshot.data.documents.reversed; + List messageBubbles = []; + for (var message in messages) { + final messageText = message.data['text']; + final messageSender = message.data['sender']; + + final currentUser = loggedInUser.email; + + final messageBubble = MessageBubble( + sender: messageSender, + text: messageText, + isMe: messageSender == currentUser, + ); + messageBubbles.add(messageBubble); + } + return Expanded( + child: ListView( + reverse: true, + padding: EdgeInsets.symmetric(horizontal: 10.0, vertical: 20.0), + children: messageBubbles, + ), + ); + }, + ); + } +} diff --git a/Flutter-App/lib/screens/home_screen.dart b/Flutter-App/lib/screens/home_screen.dart new file mode 100644 index 0000000..8a78873 --- /dev/null +++ b/Flutter-App/lib/screens/home_screen.dart @@ -0,0 +1,127 @@ +import 'package:flutter/material.dart'; +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:flutter_map/flutter_map.dart'; +import 'package:flutter/widgets.dart'; +import 'package:flutter_speed_dial/flutter_speed_dial.dart'; +import 'package:latlong/latlong.dart'; + +class HomeScreen extends StatefulWidget { + static const String id = "home"; + + @override + _HomeScreenState createState() => _HomeScreenState(); +} + +class _HomeScreenState extends State { + final _auth = FirebaseAuth.instance; + FirebaseUser loggedInUser; + + List allMarkers = []; + + setMarkers() { + allMarkers.add( + Marker( + width: 45.0, + height: 45.0, + point: LatLng(5.9772833, 80.5087741), + builder: (context) => Container( + child: IconButton( + icon: Icon(Icons.location_on), + color: Colors.red, + iconSize: 45, + onPressed: () { + debugPrint("talp"); + }, + ), + ), + ), + ); + + return allMarkers; + } + + void getCurrentUser() async { + try { + final user = await _auth.currentUser(); + loggedInUser = user; + } catch (e) { + print(e); + } + } + + @override + void initState() { + super.initState(); + getCurrentUser(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + leading: null, + iconTheme: IconThemeData( + color: Colors.white, //change color here + ), + actions: [ + IconButton( + icon: Icon(Icons.close), + onPressed: () { + _auth.signOut(); + Navigator.pop(context); + }), + ], + title: Text('Dengue Stop', + style: TextStyle( + color: Colors.white, + )), + backgroundColor: Colors.blueAccent, + ), + + floatingActionButton: SpeedDial( + animatedIcon: AnimatedIcons.menu_close, + children: [ + SpeedDialChild( + child: Icon(Icons.location_searching), + label: "Your Location", + onTap: () => print("p1") +// () { +// getCurrentLocation(); +// } + ), + SpeedDialChild( + child: Icon(Icons.add_location), + label: "Add Location", + onTap: () => print("p2") +// () { +// addLocationToFierstore(); +// } + ), + ], + ), + + + body: new FlutterMap( + options: new MapOptions( + center: LatLng(7.8731, 80.7718), +// zoom: 8.0, + zoom: 7.5, + ), + layers: [ + new TileLayerOptions( + urlTemplate: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', + subdomains: ['a', 'b', 'c'], +// urlTemplate: +// 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}', +// subdomains: ['a', 'b', 'c'], +// tileProvider: CachedNetworkTileProvider(), + ), + MarkerLayerOptions( + markers: setMarkers(), + ), + ], + ), + + ); + } +} diff --git a/Flutter-App/lib/screens/login_screen.dart b/Flutter-App/lib/screens/login_screen.dart new file mode 100644 index 0000000..5c12ea1 --- /dev/null +++ b/Flutter-App/lib/screens/login_screen.dart @@ -0,0 +1,102 @@ +import 'package:flutter/material.dart'; +import 'package:dengue_stop/components/rounded_button.dart'; +import 'package:dengue_stop/constants.dart'; +import 'package:firebase_auth/firebase_auth.dart'; +import 'main_screen.dart'; +import 'package:modal_progress_hud/modal_progress_hud.dart'; +import 'package:dengue_stop/components/dialog_box.dart'; + +class LoginScreen extends StatefulWidget { + static const String id = "logins"; + + @override + _LoginScreenState createState() => _LoginScreenState(); +} + +class _LoginScreenState extends State { + bool showSpinner = false; + final _auth = FirebaseAuth.instance; + String email; + String password; + + DialogBox _dialogBox = DialogBox(); + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.white, + body: ModalProgressHUD( + inAsyncCall: showSpinner, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 24.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Flexible( + child: Hero( + tag: 'logo', + child: Container( + height: 200.0, + child: Image.asset('images/logo.png'), + ), + ), + ), + SizedBox( + height: 48.0, + ), + TextField( + textAlign: TextAlign.center, + onChanged: (value) { + email = value; + }, + decoration: + kTextFieldDecoration.copyWith(hintText: 'Enter your email'), + ), + SizedBox( + height: 8.0, + ), + TextField( + textAlign: TextAlign.center, + obscureText: true, + onChanged: (value) { + password = value; + }, + decoration: kTextFieldDecoration.copyWith( + hintText: 'Enter your password'), + ), + SizedBox( + height: 24.0, + ), + RoundedButton( + title: 'Log In', + color: Colors.lightBlueAccent, + onPressed: () async { + setState(() { + showSpinner = true; + }); + try { + final user = await _auth.signInWithEmailAndPassword( + email: email, password: password); + if (user != null) { + Navigator.pushNamed(context, MainScreen.id); + setState(() { + showSpinner = false; + }); + } + } catch (e) { + _dialogBox.information( + context, 'Error', 'Invalid Username or Password'); + setState(() { + showSpinner = false; + }); + } + }, + ), + ], + ), + ), + ), + ); + } +} diff --git a/Flutter-App/lib/screens/main_screen.dart b/Flutter-App/lib/screens/main_screen.dart new file mode 100644 index 0000000..fd50fd1 --- /dev/null +++ b/Flutter-App/lib/screens/main_screen.dart @@ -0,0 +1,101 @@ +import 'package:curved_navigation_bar/curved_navigation_bar.dart'; +import 'package:dengue_stop/screens/home_screen.dart'; +import 'package:dengue_stop/screens/post_screen.dart'; +import 'package:dengue_stop/screens/report_screen.dart'; +import 'package:flutter/material.dart'; +import 'package:firebase_auth/firebase_auth.dart'; +import 'chat_screen.dart'; +import 'user_location_screen.dart'; + +class MainScreen extends StatefulWidget { + static const String id = "main"; + + @override + _MainScreenState createState() => _MainScreenState(); +} + +class _MainScreenState extends State { + final _auth = FirebaseAuth.instance; + FirebaseUser loggedInUser; + + void getCurrentUser() async { + try { + final user = await _auth.currentUser(); + loggedInUser = user; + } catch (e) { + print(e); + } + } + + final PageController _pageController = PageController(); + + @override + void initState() { + super.initState(); + getCurrentUser(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + body: PageView( + controller: _pageController, + children: [ + HomeScreen(), + ReportScreen(), + PostScreen(), + ChatScreen(), + UserLocationScreen(), + ], + onPageChanged: (int index) { + setState(() { + _pageController.jumpToPage(index); + }); + }), + + bottomNavigationBar: CurvedNavigationBar( + color: Colors.blueAccent, + backgroundColor: Colors.white70, + buttonBackgroundColor: Colors.blueAccent, + height: 50, + index: 0, + items: [ + Icon( + Icons.home, + size: 20, + color: Colors.white, + ), + Icon( + Icons.report, + size: 20, + color: Colors.white, + ), + Icon( + Icons.add, + size: 20, + color: Colors.white, + ), + Icon( + Icons.chat, + size: 20, + color: Colors.white, + ), + Icon( + Icons.map, + size: 20, + color: Colors.white, + ), + ], + animationDuration: Duration(milliseconds: 200), + animationCurve: Curves.bounceInOut, + onTap: (index) { + debugPrint("$index"); + + setState(() { + _pageController.jumpToPage(index); + }); + }, + ), + ); + } +} diff --git a/Flutter-App/lib/screens/post_screen.dart b/Flutter-App/lib/screens/post_screen.dart new file mode 100644 index 0000000..638ca98 --- /dev/null +++ b/Flutter-App/lib/screens/post_screen.dart @@ -0,0 +1,55 @@ +import 'package:flutter/material.dart'; +import 'package:firebase_auth/firebase_auth.dart'; + +class PostScreen extends StatefulWidget { + static const String id = "posts"; + + @override + _PostScreenState createState() => _PostScreenState(); +} + +class _PostScreenState extends State { + final _auth = FirebaseAuth.instance; + FirebaseUser loggedInUser; + + void getCurrentUser() async { + try { + final user = await _auth.currentUser(); + loggedInUser = user; + } catch (e) { + print(e); + } + } + + @override + void initState() { + super.initState(); + getCurrentUser(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + + appBar: AppBar( + leading: null, + iconTheme: IconThemeData( + color: Colors.white, //change color here + ), + actions: [ + IconButton( + icon: Icon(Icons.close), + onPressed: () { + _auth.signOut(); + Navigator.pop(context); + }), + ], + title: Text('Posts', + style: TextStyle( + color: Colors.white, + )), + backgroundColor: Colors.blueAccent, + ), + ); + } +} diff --git a/Flutter-App/lib/screens/registration_screen.dart b/Flutter-App/lib/screens/registration_screen.dart new file mode 100644 index 0000000..80f789e --- /dev/null +++ b/Flutter-App/lib/screens/registration_screen.dart @@ -0,0 +1,109 @@ +import 'package:flutter/material.dart'; +import 'package:dengue_stop/components/rounded_button.dart'; +import 'package:dengue_stop/constants.dart'; +import 'package:dengue_stop/screens/main_screen.dart'; +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:modal_progress_hud/modal_progress_hud.dart'; +import 'package:dengue_stop/components/dialog_box.dart'; + +class RegistrationScreen extends StatefulWidget { + static const String id = "registrations"; + + @override + _RegistrationScreenState createState() => _RegistrationScreenState(); +} + +class _RegistrationScreenState extends State { + + bool showSpinner = false; + final _auth = FirebaseAuth.instance; + String email; + String password; + + DialogBox _dialogBox = DialogBox(); + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.white, + body:ModalProgressHUD( + inAsyncCall: showSpinner, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 24.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Flexible( + child: Hero( + tag: 'logo', + child: Container( + height: 200.0, + child: Image.asset('images/logo.png'), + ), + ), + ), + SizedBox( + height: 48.0, + ), + TextField( + keyboardType: TextInputType.emailAddress, + textAlign: TextAlign.center, + onChanged: (value) { + email = value; + }, + decoration: kTextFieldDecoration.copyWith( + hintText: 'Enter your email'), + ), + SizedBox( + height: 8.0, + ), + TextField( + textAlign: TextAlign.center, + obscureText: true, + onChanged: (value) { + password = value; + }, + decoration: kTextFieldDecoration.copyWith( + hintText: 'Enter your password'), + ), + SizedBox( + height: 24.0, + ), + RoundedButton( + title: 'Register', + color: Colors.blueAccent, + + onPressed: () async { + setState(() { + showSpinner = true; + }); + try { + final newUser = await _auth + .createUserWithEmailAndPassword( + email: email, password: password); + if (newUser != null) { + Navigator.pushNamed(context, MainScreen.id); + + setState(() { + showSpinner = false; + }); + } + } catch (e) { + _dialogBox.information( + context, 'Error', 'Invalid Username or Username alredy exists. Make sure Password contains atleast 6 characters.'); + setState(() { + showSpinner = false; + }); + } + }, + ), + ], + ), + ), + ), + + + ); + } +} diff --git a/Flutter-App/lib/screens/report_screen.dart b/Flutter-App/lib/screens/report_screen.dart new file mode 100644 index 0000000..f03a7cf --- /dev/null +++ b/Flutter-App/lib/screens/report_screen.dart @@ -0,0 +1,78 @@ +import 'package:flutter/material.dart'; +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:flutter_speed_dial/flutter_speed_dial.dart'; + +class ReportScreen extends StatefulWidget { + static const String id = "report"; + + @override + _ReportScreenState createState() => _ReportScreenState(); +} + +class _ReportScreenState extends State { + + final _auth = FirebaseAuth.instance; + FirebaseUser loggedInUser; + + void getCurrentUser() async { + try { + final user = await _auth.currentUser(); + loggedInUser = user; + } catch (e) { + print(e); + } + } + + @override + void initState() { + super.initState(); + getCurrentUser(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + leading: null, + iconTheme: IconThemeData( + color: Colors.white, //change color here + ), + actions: [ + IconButton( + icon: Icon(Icons.close), + onPressed: () { + _auth.signOut(); + Navigator.pop(context); + }), + ], + title: Text('Report', + style: TextStyle( + color: Colors.white, + )), + backgroundColor: Colors.blueAccent, + ), + floatingActionButton: SpeedDial( + animatedIcon: AnimatedIcons.menu_close, + children: [ + SpeedDialChild( + child: Icon(Icons.location_searching), + label: "Your Location", + onTap: () => print("p1") +// () { +// getCurrentLocation(); +// } + ), + SpeedDialChild( + child: Icon(Icons.add_location), + label: "Add Location", + onTap: () => print("p2") +// () { +// addLocationToFierstore(); +// } + ), + ], + ), + + ); + } +} diff --git a/Flutter-App/lib/screens/user_location_screen.dart b/Flutter-App/lib/screens/user_location_screen.dart new file mode 100644 index 0000000..af7828f --- /dev/null +++ b/Flutter-App/lib/screens/user_location_screen.dart @@ -0,0 +1,166 @@ +import 'dart:async'; +import 'dart:typed_data'; +import 'package:cloud_firestore/cloud_firestore.dart'; +import 'package:dengue_stop/components/dialog_box.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_speed_dial/flutter_speed_dial.dart'; +import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'package:location/location.dart'; + +class UserLocationScreen extends StatefulWidget { + static const String id = "user_location"; + + @override + _UserLocationScreenState createState() => _UserLocationScreenState(); +} + +class _UserLocationScreenState extends State { + + DialogBox _dialogBox = DialogBox(); + + StreamSubscription _locationSubscription; + Location _locationTracker = Location(); + Marker marker; + Circle circle; + GoogleMapController _controller; + + var location; + + static final CameraPosition initialLocation = CameraPosition( + target: LatLng(7.8731, 80.7718), + zoom: 8.4746, + ); + + Future getMarker() async { + ByteData byteData = + await DefaultAssetBundle.of(context).load("images/mosquito_icon.png"); + return byteData.buffer.asUint8List(); + } + + void updateMarkerAndCircle(LocationData newLocalData, Uint8List imageData) { + LatLng latlng = LatLng(newLocalData.latitude, newLocalData.longitude); + this.setState(() { + marker = Marker( + markerId: MarkerId("user_location"), + position: latlng, + rotation: newLocalData.heading, + draggable: false, + zIndex: 2, + flat: true, + anchor: Offset(0.5, 0.5), + icon: BitmapDescriptor.fromBytes(imageData)); + circle = Circle( + circleId: CircleId("mosquito"), + radius: newLocalData.accuracy, + zIndex: 1, + strokeColor: Colors.blue, + center: latlng, + fillColor: Colors.blue.withAlpha(70)); + }); + } + + void addLocationToFierstore() { + Firestore.instance.collection('markers').add({ + 'coodrs': GeoPoint(location.latitude, location.longitude), + 'place': "user location" + }); + } + + void getCurrentLocation() async { + try { + Uint8List imageData = await getMarker(); + location = await _locationTracker.getLocation(); + updateMarkerAndCircle(location, imageData); + + if (_locationSubscription != null) { + _locationSubscription.cancel(); + } + _locationSubscription = + _locationTracker.onLocationChanged().listen((newLocalData) { + if (_controller != null) { + _controller.animateCamera(CameraUpdate.newCameraPosition( + new CameraPosition( + bearing: 192.8334901395799, + target: LatLng(newLocalData.latitude, newLocalData.longitude), + tilt: 0, + zoom: 18.00))); + + updateMarkerAndCircle(newLocalData, imageData); + } + }); + } on PlatformException catch (e) { + if (e.code == 'PERMISSION_DENIED') { + debugPrint("Permission Denied"); + } + } + } + + @override + void dispose() { + if (_locationSubscription != null) { + _locationSubscription.cancel(); + } + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + leading: null, + iconTheme: IconThemeData( + color: Colors.white, //change color here + ), + actions: [ + IconButton( + icon: Icon(Icons.close), + onPressed: () { + Navigator.pop(context); + }), + ], + title: Text('Your Location', + style: TextStyle( + color: Colors.white, + )), + backgroundColor: Colors.blueAccent, + ), + body: GoogleMap( + mapType: MapType.hybrid, + initialCameraPosition: initialLocation, + markers: Set.of((marker != null) ? [marker] : []), + circles: Set.of((circle != null) ? [circle] : []), + onMapCreated: (GoogleMapController controller) { + _controller = controller; + }, + ), + floatingActionButton: SpeedDial( + animatedIcon: AnimatedIcons.menu_close, + onOpen:(){ + getCurrentLocation(); + }, + children: [ + SpeedDialChild( + child: Icon(Icons.add_location), + backgroundColor: Colors.orange, + labelBackgroundColor: Colors.orangeAccent, + label: "Add Location", + onTap: () { + addLocationToFierstore(); + _dialogBox.information( + context, 'Add Location', 'Your Location Added'); + }), + SpeedDialChild( + child: Icon(Icons.add_location), + backgroundColor: Colors.red, + labelBackgroundColor: Colors.redAccent, + label: "Remove Location", + onTap: () { + _dialogBox.information( + context, 'Remove Location', 'Sorry, this is not yet implemented'); + }), + ], + ), + ); + } +} diff --git a/Flutter-App/lib/screens/welcome_screen.dart b/Flutter-App/lib/screens/welcome_screen.dart new file mode 100644 index 0000000..581d0c2 --- /dev/null +++ b/Flutter-App/lib/screens/welcome_screen.dart @@ -0,0 +1,65 @@ +import 'package:flutter/material.dart'; +import 'login_screen.dart'; +import 'registration_screen.dart'; +import 'package:dengue_stop/components/rounded_button.dart'; + +class WelcomeScreen extends StatefulWidget { + static const String id = "welcomes"; + + @override + _WelcomeScreenState createState() => _WelcomeScreenState(); +} + +class _WelcomeScreenState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.white, + body: Padding( + padding: EdgeInsets.symmetric(horizontal: 24.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Row( + children: [ + Hero( + tag: 'logo', + child: Container( + child: Image.asset('images/logo.png'), + height: 60.0, + ), + ), + Text( + 'Dengue Stop', + style: TextStyle( + fontSize: 45.0, + fontWeight: FontWeight.w900, + ), + ), + ], + ), + SizedBox( + height: 48.0, + ), + RoundedButton( + title: 'Log In', + color: Colors.lightBlueAccent, + onPressed: () { + Navigator.pushNamed(context, LoginScreen.id); + }, + ), + RoundedButton( + title: 'Register', + color: Colors.blueAccent, + onPressed: () { + Navigator.pushNamed(context, RegistrationScreen.id); + }, + ), + ], + ), + ), + ); + } +} + diff --git a/Flutter-App/pubspec.lock b/Flutter-App/pubspec.lock new file mode 100644 index 0000000..0fa9548 --- /dev/null +++ b/Flutter-App/pubspec.lock @@ -0,0 +1,474 @@ +# 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.0.2" + archive: + dependency: transitive + description: + name: archive + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.11" + args: + dependency: transitive + description: + name: args + url: "https://pub.dartlang.org" + source: hosted + version: "1.5.2" + async: + dependency: transitive + description: + name: async + url: "https://pub.dartlang.org" + source: hosted + version: "2.4.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.5" + cached_network_image: + dependency: transitive + description: + name: cached_network_image + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + charcode: + dependency: transitive + description: + name: charcode + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.2" + cloud_firestore: + dependency: "direct main" + description: + name: cloud_firestore + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.11" + collection: + dependency: transitive + description: + name: collection + url: "https://pub.dartlang.org" + source: hosted + version: "1.14.11" + 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.3" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.3" + curved_navigation_bar: + dependency: "direct main" + description: + name: curved_navigation_bar + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.2" + firebase: + dependency: transitive + description: + name: firebase + url: "https://pub.dartlang.org" + source: hosted + version: "7.2.1" + firebase_auth: + dependency: "direct main" + description: + name: firebase_auth + url: "https://pub.dartlang.org" + source: hosted + version: "0.14.0+9" + firebase_core: + dependency: "direct main" + description: + name: firebase_core + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.4+3" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.4" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.1+2" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_cache_manager: + dependency: transitive + description: + name: flutter_cache_manager + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.3" + 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.8.2" + flutter_plugin_android_lifecycle: + dependency: transitive + description: + name: flutter_plugin_android_lifecycle + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.6" + flutter_speed_dial: + dependency: "direct main" + description: + name: flutter_speed_dial + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.5" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + geoflutterfire: + dependency: "direct main" + description: + name: geoflutterfire + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.3+5" + google_maps_flutter: + dependency: "direct main" + description: + name: google_maps_flutter + url: "https://pub.dartlang.org" + source: hosted + version: "0.5.25" + http: + dependency: transitive + description: + name: http + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.0+4" + http_parser: + dependency: transitive + description: + name: http_parser + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.3" + image: + dependency: transitive + description: + name: image + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.4" + 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.1+1" + latlong: + dependency: transitive + description: + name: latlong + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.1" + location: + dependency: "direct main" + description: + name: location + url: "https://pub.dartlang.org" + source: hosted + version: "2.5.4" + 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.6" + meta: + dependency: transitive + description: + name: meta + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.8" + modal_progress_hud: + dependency: "direct main" + description: + name: modal_progress_hud + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.3" + path: + dependency: transitive + description: + name: path + url: "https://pub.dartlang.org" + source: hosted + version: "1.6.4" + path_provider: + dependency: transitive + description: + name: path_provider + url: "https://pub.dartlang.org" + source: hosted + version: "1.6.5" + path_provider_macos: + dependency: transitive + description: + name: path_provider_macos + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.4" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + pedantic: + dependency: transitive + description: + name: pedantic + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.0+1" + petitparser: + dependency: transitive + description: + name: petitparser + url: "https://pub.dartlang.org" + source: hosted + version: "2.4.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.2" + positioned_tap_detector: + dependency: transitive + description: + name: positioned_tap_detector + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.3" + quiver: + dependency: transitive + description: + name: quiver + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.5" + rxdart: + dependency: transitive + description: + name: rxdart + url: "https://pub.dartlang.org" + source: hosted + version: "0.22.6" + 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.5.5" + sqflite: + dependency: transitive + description: + name: sqflite + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.0" + sqflite_common: + dependency: transitive + description: + name: sqflite_common + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0+1" + stack_trace: + dependency: transitive + description: + name: stack_trace + url: "https://pub.dartlang.org" + source: hosted + version: "1.9.3" + stream_channel: + dependency: transitive + description: + name: stream_channel + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.5" + synchronized: + dependency: transitive + description: + name: synchronized + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + test_api: + dependency: transitive + description: + name: test_api + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.11" + 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.1.6" + uuid: + dependency: transitive + description: + name: uuid + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.4" + 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.0.8" + xml: + dependency: transitive + description: + name: xml + url: "https://pub.dartlang.org" + source: hosted + version: "3.5.0" +sdks: + dart: ">=2.7.0 <3.0.0" + flutter: ">=1.12.13+hotfix.5 <2.0.0" diff --git a/Flutter-App/pubspec.yaml b/Flutter-App/pubspec.yaml new file mode 100644 index 0000000..576288b --- /dev/null +++ b/Flutter-App/pubspec.yaml @@ -0,0 +1,34 @@ +name: dengue_stop +description: A new Flutter application for stop dengue + +version: 1.0.0+1 + +environment: + sdk: ">=2.1.0<3.0.0" + +dependencies: + flutter: + sdk: flutter + + cupertino_icons: ^0.1.2 + firebase_core: ^0.4.0+9 + firebase_auth: ^0.14.0+5 + cloud_firestore: ^0.12.9+5 + modal_progress_hud: ^0.1.3 + curved_navigation_bar: ^0.3.2 + google_maps_flutter: ^0.5.25 + geoflutterfire: ^2.0.3+2 + location: ^2.3.5 + flutter_map: ^0.8.2 + flutter_speed_dial: ^1.2.5 + + +dev_dependencies: + flutter_test: + sdk: flutter + +flutter: + uses-material-design: true + + assets: + - images/