diff --git a/README.md b/README.md
deleted file mode 100644
index d95b63d..0000000
--- a/README.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# **MEDICARE**
-
-**Project ID: 11**
->## ✍ PROJECT DESCRIPTION
-A flutter android application for Easy interaction between patients and doctors. During a pandemic, many of the patients are looking to get regular health check-ups but due lock-down this seems impossible. The app uses YouTube API to call the video player to get indulge in streaming YouTube videos there, nearby locations are also set using Google Map API and incorporating with an ambulance database which provides real-time location of the ambulance nearby.
-
->## 📂 RELEVANT TECHNOLOGY
-* Flutter
-* Firebase
-
->## 💻 GETTING STARTED
-
-=> **Fork
this repository to start contributing.**
-
-=> Open your Git Bash command window and in the root directory type the following commands :
-```bash
- 1) git init -initializes the git repository from the GitHub.
- 2) git clone -Clone the repository to your local machine
- (git clone https://github.com//LetsUpgrade/MEDICARE.git)
-```
diff --git a/medicare/.gitignore b/medicare/.gitignore
new file mode 100644
index 0000000..1ba9c33
--- /dev/null
+++ b/medicare/.gitignore
@@ -0,0 +1,43 @@
+# 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
+
+# Symbolication related
+app.*.symbols
+
+# Obfuscation related
+app.*.map.json
+
+# Exceptions to above rules.
+!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
diff --git a/medicare/.metadata b/medicare/.metadata
new file mode 100644
index 0000000..7c361dd
--- /dev/null
+++ b/medicare/.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: b041144f833e05cf463b8887fa12efdec9493488
+ channel: stable
+
+project_type: app
diff --git a/medicare/README.md b/medicare/README.md
new file mode 100644
index 0000000..01e22c3
--- /dev/null
+++ b/medicare/README.md
@@ -0,0 +1,16 @@
+# medicare
+
+A new Flutter application.
+
+## Getting Started
+
+This project is a starting point for a Flutter application.
+
+A few resources to get you started if this is your first Flutter project:
+
+- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab)
+- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook)
+
+For help getting started with Flutter, view our
+[online documentation](https://flutter.dev/docs), which offers tutorials,
+samples, guidance on mobile development, and a full API reference.
diff --git a/medicare/android/.gitignore b/medicare/android/.gitignore
new file mode 100644
index 0000000..bc2100d
--- /dev/null
+++ b/medicare/android/.gitignore
@@ -0,0 +1,7 @@
+gradle-wrapper.jar
+/.gradle
+/captures/
+/gradlew
+/gradlew.bat
+/local.properties
+GeneratedPluginRegistrant.java
diff --git a/medicare/android/app/build.gradle b/medicare/android/app/build.gradle
new file mode 100644
index 0000000..24d055f
--- /dev/null
+++ b/medicare/android/app/build.gradle
@@ -0,0 +1,60 @@
+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"
+
+android {
+ compileSdkVersion 28
+
+ lintOptions {
+ disable 'InvalidPackage'
+ }
+
+ defaultConfig {
+ // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
+ applicationId "com.example.medicare"
+ minSdkVersion 16
+ targetSdkVersion 28
+ versionCode flutterVersionCode.toInteger()
+ versionName flutterVersionName
+ multiDexEnabled true
+ }
+
+ 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
+ }
+ dependencies {
+ // Add this line
+ implementation 'com.google.firebase:firebase-analytics:17.5.0'
+ }
+ }
+}
+
+flutter {
+ source '../..'
+}
+apply plugin: 'com.google.gms.google-services'
\ No newline at end of file
diff --git a/medicare/android/app/google-services.json b/medicare/android/app/google-services.json
new file mode 100644
index 0000000..55f03db
--- /dev/null
+++ b/medicare/android/app/google-services.json
@@ -0,0 +1,40 @@
+{
+ "project_info": {
+ "project_number": "154049021886",
+ "firebase_url": "https://primeval-melody-287418.firebaseio.com",
+ "project_id": "primeval-melody-287418",
+ "storage_bucket": "primeval-melody-287418.appspot.com"
+ },
+ "client": [
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:154049021886:android:3379971902da6bbd799bef",
+ "android_client_info": {
+ "package_name": "com.example.medicare"
+ }
+ },
+ "oauth_client": [
+ {
+ "client_id": "154049021886-49ugm75e3sj51qbve9b2qosu00cnj9v8.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ],
+ "api_key": [
+ {
+ "current_key": "AIzaSyBRYOU4_xfabRubHuD0zzh4TA1vs3bYJDc"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": [
+ {
+ "client_id": "154049021886-49ugm75e3sj51qbve9b2qosu00cnj9v8.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ]
+ }
+ }
+ }
+ ],
+ "configuration_version": "1"
+}
\ No newline at end of file
diff --git a/medicare/android/app/src/debug/AndroidManifest.xml b/medicare/android/app/src/debug/AndroidManifest.xml
new file mode 100644
index 0000000..914af39
--- /dev/null
+++ b/medicare/android/app/src/debug/AndroidManifest.xml
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/medicare/android/app/src/main/AndroidManifest.xml b/medicare/android/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..b714565
--- /dev/null
+++ b/medicare/android/app/src/main/AndroidManifest.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/medicare/android/app/src/main/java/com/example/medicare/MainActivity.java b/medicare/android/app/src/main/java/com/example/medicare/MainActivity.java
new file mode 100644
index 0000000..4514b8a
--- /dev/null
+++ b/medicare/android/app/src/main/java/com/example/medicare/MainActivity.java
@@ -0,0 +1,6 @@
+package com.example.medicare;
+
+import io.flutter.embedding.android.FlutterActivity;
+
+public class MainActivity extends FlutterActivity {
+}
diff --git a/medicare/android/app/src/main/res/drawable/launch_background.xml b/medicare/android/app/src/main/res/drawable/launch_background.xml
new file mode 100644
index 0000000..304732f
--- /dev/null
+++ b/medicare/android/app/src/main/res/drawable/launch_background.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
diff --git a/medicare/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/medicare/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..db77bb4
Binary files /dev/null and b/medicare/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/medicare/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/medicare/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..17987b7
Binary files /dev/null and b/medicare/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/medicare/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/medicare/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..09d4391
Binary files /dev/null and b/medicare/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/medicare/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/medicare/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..d5f1c8d
Binary files /dev/null and b/medicare/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/medicare/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/medicare/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..4d6372e
Binary files /dev/null and b/medicare/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/medicare/android/app/src/main/res/values/styles.xml b/medicare/android/app/src/main/res/values/styles.xml
new file mode 100644
index 0000000..1f83a33
--- /dev/null
+++ b/medicare/android/app/src/main/res/values/styles.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/medicare/android/app/src/profile/AndroidManifest.xml b/medicare/android/app/src/profile/AndroidManifest.xml
new file mode 100644
index 0000000..914af39
--- /dev/null
+++ b/medicare/android/app/src/profile/AndroidManifest.xml
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/medicare/android/build.gradle b/medicare/android/build.gradle
new file mode 100644
index 0000000..846858b
--- /dev/null
+++ b/medicare/android/build.gradle
@@ -0,0 +1,30 @@
+buildscript {
+ repositories {
+ google()
+ jcenter()
+ }
+
+ dependencies {
+ classpath 'com.android.tools.build:gradle:3.5.0'
+ 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/medicare/android/gradle.properties b/medicare/android/gradle.properties
new file mode 100644
index 0000000..38c8d45
--- /dev/null
+++ b/medicare/android/gradle.properties
@@ -0,0 +1,4 @@
+org.gradle.jvmargs=-Xmx1536M
+android.enableR8=true
+android.useAndroidX=true
+android.enableJetifier=true
diff --git a/medicare/android/gradle/wrapper/gradle-wrapper.properties b/medicare/android/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..296b146
--- /dev/null
+++ b/medicare/android/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Fri Jun 23 08:50:38 CEST 2017
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip
diff --git a/medicare/android/settings.gradle b/medicare/android/settings.gradle
new file mode 100644
index 0000000..d3b6a40
--- /dev/null
+++ b/medicare/android/settings.gradle
@@ -0,0 +1,15 @@
+// Copyright 2014 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+include ':app'
+
+def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
+def properties = new Properties()
+
+assert localPropertiesFile.exists()
+localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
+
+def flutterSdkPath = properties.getProperty("flutter.sdk")
+assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
+apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
diff --git a/medicare/assets/cn_flag.png b/medicare/assets/cn_flag.png
new file mode 100644
index 0000000..afde686
Binary files /dev/null and b/medicare/assets/cn_flag.png differ
diff --git a/medicare/assets/distance.png b/medicare/assets/distance.png
new file mode 100644
index 0000000..58d9d2d
Binary files /dev/null and b/medicare/assets/distance.png differ
diff --git a/medicare/assets/fr_flag.png b/medicare/assets/fr_flag.png
new file mode 100644
index 0000000..c1a0a35
Binary files /dev/null and b/medicare/assets/fr_flag.png differ
diff --git a/medicare/assets/getstartedback.jpg b/medicare/assets/getstartedback.jpg
new file mode 100644
index 0000000..ec9ee68
Binary files /dev/null and b/medicare/assets/getstartedback.jpg differ
diff --git a/medicare/assets/in_flag.png b/medicare/assets/in_flag.png
new file mode 100644
index 0000000..09cd7d6
Binary files /dev/null and b/medicare/assets/in_flag.png differ
diff --git a/medicare/assets/it_flag.png b/medicare/assets/it_flag.png
new file mode 100644
index 0000000..7f212f6
Binary files /dev/null and b/medicare/assets/it_flag.png differ
diff --git a/medicare/assets/mask.png b/medicare/assets/mask.png
new file mode 100644
index 0000000..dddda61
Binary files /dev/null and b/medicare/assets/mask.png differ
diff --git a/medicare/assets/own_test.png b/medicare/assets/own_test.png
new file mode 100644
index 0000000..ca4663d
Binary files /dev/null and b/medicare/assets/own_test.png differ
diff --git a/medicare/assets/uk_flag.png b/medicare/assets/uk_flag.png
new file mode 100644
index 0000000..f5ac53b
Binary files /dev/null and b/medicare/assets/uk_flag.png differ
diff --git a/medicare/assets/usa_flag.png b/medicare/assets/usa_flag.png
new file mode 100644
index 0000000..67be323
Binary files /dev/null and b/medicare/assets/usa_flag.png differ
diff --git a/medicare/assets/userImage.png b/medicare/assets/userImage.png
new file mode 100644
index 0000000..42b8c77
Binary files /dev/null and b/medicare/assets/userImage.png differ
diff --git a/medicare/assets/wash_hands.png b/medicare/assets/wash_hands.png
new file mode 100644
index 0000000..9193c0e
Binary files /dev/null and b/medicare/assets/wash_hands.png differ
diff --git a/medicare/ios/.gitignore b/medicare/ios/.gitignore
new file mode 100644
index 0000000..e96ef60
--- /dev/null
+++ b/medicare/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/medicare/ios/Flutter/AppFrameworkInfo.plist b/medicare/ios/Flutter/AppFrameworkInfo.plist
new file mode 100644
index 0000000..6b4c0f7
--- /dev/null
+++ b/medicare/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/medicare/ios/Flutter/Debug.xcconfig b/medicare/ios/Flutter/Debug.xcconfig
new file mode 100644
index 0000000..592ceee
--- /dev/null
+++ b/medicare/ios/Flutter/Debug.xcconfig
@@ -0,0 +1 @@
+#include "Generated.xcconfig"
diff --git a/medicare/ios/Flutter/Release.xcconfig b/medicare/ios/Flutter/Release.xcconfig
new file mode 100644
index 0000000..592ceee
--- /dev/null
+++ b/medicare/ios/Flutter/Release.xcconfig
@@ -0,0 +1 @@
+#include "Generated.xcconfig"
diff --git a/medicare/ios/Runner.xcodeproj/project.pbxproj b/medicare/ios/Runner.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..86e9959
--- /dev/null
+++ b/medicare/ios/Runner.xcodeproj/project.pbxproj
@@ -0,0 +1,506 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
+ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
+ 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
+ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
+ 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
+ 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 9705A1C41CF9048500538489 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; };
+ 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; };
+ 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; };
+ 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; };
+ 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
+ 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; };
+ 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; };
+ 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; };
+ 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
+ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
+ 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
+ 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 97C146EB1CF9000F007C117D /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 9740EEB11CF90186004384FC /* Flutter */ = {
+ isa = PBXGroup;
+ children = (
+ 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
+ 9740EEB21CF90195004384FC /* Debug.xcconfig */,
+ 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
+ 9740EEB31CF90195004384FC /* Generated.xcconfig */,
+ );
+ name = Flutter;
+ sourceTree = "";
+ };
+ 97C146E51CF9000F007C117D = {
+ isa = PBXGroup;
+ children = (
+ 9740EEB11CF90186004384FC /* Flutter */,
+ 97C146F01CF9000F007C117D /* Runner */,
+ 97C146EF1CF9000F007C117D /* Products */,
+ );
+ sourceTree = "";
+ };
+ 97C146EF1CF9000F007C117D /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 97C146EE1CF9000F007C117D /* Runner.app */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 97C146F01CF9000F007C117D /* Runner */ = {
+ isa = PBXGroup;
+ children = (
+ 97C146FA1CF9000F007C117D /* Main.storyboard */,
+ 97C146FD1CF9000F007C117D /* Assets.xcassets */,
+ 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
+ 97C147021CF9000F007C117D /* Info.plist */,
+ 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 = "";
+ TargetAttributes = {
+ 97C146ED1CF9000F007C117D = {
+ CreatedOnToolsVersion = 7.3.1;
+ LastSwiftMigration = 1100;
+ };
+ };
+ };
+ buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
+ compatibilityVersion = "Xcode 9.3";
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = 97C146E51CF9000F007C117D;
+ productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 97C146ED1CF9000F007C117D /* Runner */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 97C146EC1CF9000F007C117D /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
+ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
+ 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
+ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Thin Binary";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
+ };
+ 9740EEB61CF901F6004384FC /* Run Script */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Run Script";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 97C146EA1CF9000F007C117D /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
+ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ 97C146FA1CF9000F007C117D /* Main.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 97C146FB1CF9000F007C117D /* Base */,
+ );
+ name = Main.storyboard;
+ sourceTree = "";
+ };
+ 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 97C147001CF9000F007C117D /* Base */,
+ );
+ name = LaunchScreen.storyboard;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 249021D3217E4FDB00AE95B9 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ 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.example.medicare;
+ 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.example.medicare;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Debug;
+ };
+ 97C147071CF9000F007C117D /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
+ ENABLE_BITCODE = NO;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Flutter",
+ );
+ INFOPLIST_FILE = Runner/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Flutter",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.example.medicare;
+ 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/medicare/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/medicare/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..1d526a1
--- /dev/null
+++ b/medicare/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/medicare/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/medicare/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000..18d9810
--- /dev/null
+++ b/medicare/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/medicare/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/medicare/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
new file mode 100644
index 0000000..f9b0d7c
--- /dev/null
+++ b/medicare/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
@@ -0,0 +1,8 @@
+
+
+
+
+ PreviewsEnabled
+
+
+
diff --git a/medicare/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/medicare/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
new file mode 100644
index 0000000..a28140c
--- /dev/null
+++ b/medicare/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/medicare/ios/Runner.xcworkspace/contents.xcworkspacedata b/medicare/ios/Runner.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..1d526a1
--- /dev/null
+++ b/medicare/ios/Runner.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/medicare/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/medicare/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000..18d9810
--- /dev/null
+++ b/medicare/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/medicare/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/medicare/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
new file mode 100644
index 0000000..f9b0d7c
--- /dev/null
+++ b/medicare/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
@@ -0,0 +1,8 @@
+
+
+
+
+ PreviewsEnabled
+
+
+
diff --git a/medicare/ios/Runner/AppDelegate.swift b/medicare/ios/Runner/AppDelegate.swift
new file mode 100644
index 0000000..70693e4
--- /dev/null
+++ b/medicare/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/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000..d36b1fa
--- /dev/null
+++ b/medicare/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/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
new file mode 100644
index 0000000..dc9ada4
Binary files /dev/null and b/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ
diff --git a/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
new file mode 100644
index 0000000..28c6bf0
Binary files /dev/null and b/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ
diff --git a/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
new file mode 100644
index 0000000..2ccbfd9
Binary files /dev/null and b/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ
diff --git a/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
new file mode 100644
index 0000000..f091b6b
Binary files /dev/null and b/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ
diff --git a/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
new file mode 100644
index 0000000..4cde121
Binary files /dev/null and b/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ
diff --git a/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
new file mode 100644
index 0000000..d0ef06e
Binary files /dev/null and b/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ
diff --git a/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
new file mode 100644
index 0000000..dcdc230
Binary files /dev/null and b/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ
diff --git a/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
new file mode 100644
index 0000000..2ccbfd9
Binary files /dev/null and b/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ
diff --git a/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
new file mode 100644
index 0000000..c8f9ed8
Binary files /dev/null and b/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ
diff --git a/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
new file mode 100644
index 0000000..a6d6b86
Binary files /dev/null and b/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ
diff --git a/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
new file mode 100644
index 0000000..a6d6b86
Binary files /dev/null and b/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ
diff --git a/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
new file mode 100644
index 0000000..75b2d16
Binary files /dev/null and b/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ
diff --git a/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
new file mode 100644
index 0000000..c4df70d
Binary files /dev/null and b/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ
diff --git a/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
new file mode 100644
index 0000000..6a84f41
Binary files /dev/null and b/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ
diff --git a/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/medicare/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/medicare/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ
diff --git a/medicare/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/medicare/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
new file mode 100644
index 0000000..0bedcf2
--- /dev/null
+++ b/medicare/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/medicare/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/medicare/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
new file mode 100644
index 0000000..9da19ea
Binary files /dev/null and b/medicare/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png differ
diff --git a/medicare/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/medicare/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
new file mode 100644
index 0000000..9da19ea
Binary files /dev/null and b/medicare/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png differ
diff --git a/medicare/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/medicare/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
new file mode 100644
index 0000000..9da19ea
Binary files /dev/null and b/medicare/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png differ
diff --git a/medicare/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/medicare/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
new file mode 100644
index 0000000..89c2725
--- /dev/null
+++ b/medicare/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/medicare/ios/Runner/Base.lproj/LaunchScreen.storyboard b/medicare/ios/Runner/Base.lproj/LaunchScreen.storyboard
new file mode 100644
index 0000000..f2e259c
--- /dev/null
+++ b/medicare/ios/Runner/Base.lproj/LaunchScreen.storyboard
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/medicare/ios/Runner/Base.lproj/Main.storyboard b/medicare/ios/Runner/Base.lproj/Main.storyboard
new file mode 100644
index 0000000..f3c2851
--- /dev/null
+++ b/medicare/ios/Runner/Base.lproj/Main.storyboard
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/medicare/ios/Runner/Info.plist b/medicare/ios/Runner/Info.plist
new file mode 100644
index 0000000..e73ba3e
--- /dev/null
+++ b/medicare/ios/Runner/Info.plist
@@ -0,0 +1,45 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ medicare
+ 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/medicare/ios/Runner/Runner-Bridging-Header.h b/medicare/ios/Runner/Runner-Bridging-Header.h
new file mode 100644
index 0000000..308a2a5
--- /dev/null
+++ b/medicare/ios/Runner/Runner-Bridging-Header.h
@@ -0,0 +1 @@
+#import "GeneratedPluginRegistrant.h"
diff --git a/medicare/lib/components/bottom_button.dart b/medicare/lib/components/bottom_button.dart
new file mode 100644
index 0000000..88c497e
--- /dev/null
+++ b/medicare/lib/components/bottom_button.dart
@@ -0,0 +1,28 @@
+import 'package:flutter/material.dart';
+
+import 'package:medicare/screens/constants.dart';
+
+class BottomButton extends StatelessWidget {
+ BottomButton({@required this.onTap, @required this.buttonTitle});
+
+ final Function onTap;
+ final String buttonTitle;
+
+ @override
+ Widget build(BuildContext context) {
+ return GestureDetector(
+ onTap: onTap,
+ child: Container(
+ child: Center(
+ child: Text(
+ buttonTitle,
+ style: kLargeButtonTextStyle,
+ ),
+ ),
+ color: kBottomContainerColor,
+ width: double.infinity,
+ height: kBottomContainerHeight,
+ ),
+ );
+ }
+}
diff --git a/medicare/lib/components/icon_content.dart b/medicare/lib/components/icon_content.dart
new file mode 100644
index 0000000..727c822
--- /dev/null
+++ b/medicare/lib/components/icon_content.dart
@@ -0,0 +1,31 @@
+import 'package:medicare/screens/constants.dart';
+import 'package:flutter/material.dart';
+
+class IconContent extends StatelessWidget {
+ IconContent({this.icon, this.label, this.labelColor});
+
+ final IconData icon;
+ final String label;
+ final Color labelColor;
+
+ @override
+ Widget build(BuildContext context) {
+ return Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ Icon(
+ icon,
+ size: 80.0,
+ color: Colors.white,
+ ),
+ SizedBox(
+ height: 15.0,
+ ),
+ Text(
+ label,
+ style: kLabelTextStyle.copyWith(color: labelColor),
+ )
+ ],
+ );
+ }
+}
diff --git a/medicare/lib/components/reusable_card.dart b/medicare/lib/components/reusable_card.dart
new file mode 100644
index 0000000..d620611
--- /dev/null
+++ b/medicare/lib/components/reusable_card.dart
@@ -0,0 +1,23 @@
+import 'package:flutter/material.dart';
+
+class ReusableCard extends StatelessWidget {
+ ReusableCard({@required this.color, this.cardChild, this.onPress});
+
+ final Color color;
+ final Widget cardChild;
+ final Function onPress;
+
+ @override
+ Widget build(BuildContext context) {
+ return GestureDetector(
+ onTap: onPress,
+ child: Card(
+ child: Padding(
+ padding: EdgeInsets.all(16.0),
+ child: cardChild,
+ ),
+ color: color,
+ ),
+ );
+ }
+}
diff --git a/medicare/lib/components/rounded_button.dart b/medicare/lib/components/rounded_button.dart
new file mode 100644
index 0000000..f311d54
--- /dev/null
+++ b/medicare/lib/components/rounded_button.dart
@@ -0,0 +1,25 @@
+import 'package:flutter/material.dart';
+
+import 'package:medicare/screens/constants.dart';
+
+class RoundIconButton extends StatelessWidget {
+ RoundIconButton({@required this.icon, @required this.onPressed});
+
+ final IconData icon;
+ final Function onPressed;
+
+ @override
+ Widget build(BuildContext context) {
+ return RawMaterialButton(
+ elevation: 0.0,
+ child: Icon(icon,color: Colors.white,),
+ onPressed: onPressed,
+ constraints: BoxConstraints.tightFor(
+ width: 56.0,
+ height: 56.0,
+ ),
+ shape: CircleBorder(),
+ fillColor: kRoundedButtonBackgroundColor,
+ );
+ }
+}
diff --git a/medicare/lib/config/palette.dart b/medicare/lib/config/palette.dart
new file mode 100644
index 0000000..decb6e0
--- /dev/null
+++ b/medicare/lib/config/palette.dart
@@ -0,0 +1,5 @@
+import 'package:flutter/material.dart';
+
+class Palette {
+ static const Color primaryColor = Color(0xFF473F97);
+}
\ No newline at end of file
diff --git a/medicare/lib/config/styles.dart b/medicare/lib/config/styles.dart
new file mode 100644
index 0000000..4282e1f
--- /dev/null
+++ b/medicare/lib/config/styles.dart
@@ -0,0 +1,19 @@
+import 'package:flutter/material.dart';
+
+class Styles {
+ static const buttonTextStyle = TextStyle(
+ fontSize: 16.0,
+ fontWeight: FontWeight.w600,
+ );
+
+ static const chartLabelsTextStyle = TextStyle(
+ color: Colors.grey,
+ fontSize: 14.0,
+ fontWeight: FontWeight.w500,
+ );
+
+ static const tabTextStyle = TextStyle(
+ fontSize: 16.0,
+ fontWeight: FontWeight.w600,
+ );
+}
diff --git a/medicare/lib/constants.dart b/medicare/lib/constants.dart
new file mode 100644
index 0000000..4f6585a
--- /dev/null
+++ b/medicare/lib/constants.dart
@@ -0,0 +1,36 @@
+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: 'Enter a value',
+ 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)),
+ ),
+);
\ No newline at end of file
diff --git a/medicare/lib/data/data.dart b/medicare/lib/data/data.dart
new file mode 100644
index 0000000..96b445d
--- /dev/null
+++ b/medicare/lib/data/data.dart
@@ -0,0 +1,7 @@
+final prevention = [
+ {'assets/images/distance.png': 'Avoid close\ncontact'},
+ {'assets/images/wash_hands.png': 'Clean your\nhands often'},
+ {'assets/images/mask.png': 'Wear a\nfacemask'},
+];
+
+final covidUSADailyNewCases = [12.17, 11.15, 10.02, 11.21, 13.83, 14.16, 14.30];
diff --git a/medicare/lib/main.dart b/medicare/lib/main.dart
new file mode 100644
index 0000000..b303b6d
--- /dev/null
+++ b/medicare/lib/main.dart
@@ -0,0 +1,27 @@
+import 'package:flutter/material.dart';
+import 'package:medicare/screens/home.dart';
+import 'package:medicare/screens/login_page.dart';
+import 'package:medicare/screens/medi_home.dart';
+import 'package:medicare/screens/ordermedicine.dart';
+import 'package:medicare/screens/register_screen.dart';
+
+
+
+
+void main() {
+ runApp(MyApp());
+}
+
+class MyApp extends StatelessWidget {
+ @override
+ Widget build(BuildContext context) {
+ return MaterialApp(
+ theme: ThemeData(
+ primarySwatch: Colors.blue,
+ primaryColor: Colors.blue,
+ visualDensity: VisualDensity.adaptivePlatformDensity,
+ ),
+ home: LoginScreen(),
+ );
+ }
+}
diff --git a/medicare/lib/models/appointment.dart b/medicare/lib/models/appointment.dart
new file mode 100644
index 0000000..e3a8901
--- /dev/null
+++ b/medicare/lib/models/appointment.dart
@@ -0,0 +1,14 @@
+import 'package:medicare/models/doctor.dart';
+import 'package:medicare/models/user.dart';
+
+class Appointment{
+ final String aId;
+ final User user;
+ final Doctor doctor;
+ final String time;
+
+
+
+ Appointment({this.aId,this.user,this.doctor,this.time});
+
+}
\ No newline at end of file
diff --git a/medicare/lib/models/doctor.dart b/medicare/lib/models/doctor.dart
new file mode 100644
index 0000000..20ec3ae
--- /dev/null
+++ b/medicare/lib/models/doctor.dart
@@ -0,0 +1,13 @@
+
+class Doctor{
+ final String dId;
+ final String name;
+ final String email;
+ final String specialist;
+ final int experience;
+ final int rating;
+
+
+ Doctor({this.dId,this.name,this.email,this.specialist,this.experience,this.rating});
+
+}
\ No newline at end of file
diff --git a/medicare/lib/models/user.dart b/medicare/lib/models/user.dart
new file mode 100644
index 0000000..ec10777
--- /dev/null
+++ b/medicare/lib/models/user.dart
@@ -0,0 +1,10 @@
+
+class User{
+ final String uId;
+ final String name;
+ final String email;
+ final int age;
+
+ User({this.uId,this.name,this.email,this.age});
+
+}
\ No newline at end of file
diff --git a/medicare/lib/rounded_button.dart b/medicare/lib/rounded_button.dart
new file mode 100644
index 0000000..fb9ed7d
--- /dev/null
+++ b/medicare/lib/rounded_button.dart
@@ -0,0 +1,31 @@
+import 'package:flutter/material.dart';
+
+
+class RoundedButton extends StatelessWidget {
+ RoundedButton({this.color,@required this.onPressed,this.title});
+
+
+ final Color color;
+ final String title;
+ final Function onPressed;
+
+ @override
+ Widget build(BuildContext context) {
+ return Padding(
+ padding: EdgeInsets.symmetric(vertical: 16.0),
+ child: Material(
+ elevation: 5.0,
+ color: color,
+ borderRadius: BorderRadius.circular(30.0),
+ child: MaterialButton(
+ onPressed: onPressed,
+ minWidth: 200.0,
+ height: 42.0,
+ child: Text(
+ title,
+ ),
+ ),
+ ),
+ );
+ }
+}
\ No newline at end of file
diff --git a/medicare/lib/screens/appointment.dart b/medicare/lib/screens/appointment.dart
new file mode 100644
index 0000000..8d13d3d
--- /dev/null
+++ b/medicare/lib/screens/appointment.dart
@@ -0,0 +1,292 @@
+import 'package:flutter/material.dart';
+import 'package:medicare/screens/input_page.dart';
+import 'package:medicare/screens/ordermedicine.dart';
+import 'package:medicare/screens/popular_list_view.dart';
+import 'package:medicare/screens/precautions.dart';
+import 'package:medicare/screens/stats_screen.dart';
+
+
+class Appointments extends StatefulWidget {
+ @override
+ _AppointmentsState createState() => _AppointmentsState();
+}
+
+class _AppointmentsState extends State {
+ CategoryType categoryType = CategoryType.BMI;
+
+ bool isBmi = true;
+
+ @override
+ Widget build(BuildContext context) {
+ return Container(
+ color: Colors.white70,
+ child: Scaffold(
+ backgroundColor: Colors.transparent,
+ body: Column(
+ children: [
+ SizedBox(
+ height: MediaQuery
+ .of(context)
+ .padding
+ .top,
+ ),
+ getAppBarUI(),
+ Expanded(
+ child: SingleChildScrollView(
+ child: Container(
+ height: MediaQuery
+ .of(context)
+ .size
+ .height,
+ child: Column(
+ children: [
+ getSearchBarUI(),
+ getCategoryUI(),
+ Flexible(
+ child: getDoctorsUI(),
+ ),
+ ],
+ ),
+ ),
+ ),
+ ),
+ ],
+ ),
+ ),
+ );
+ }
+
+ getAppBarUI() {
+ return Padding(
+ padding: const EdgeInsets.only(top: 8.0, left: 18, right: 18),
+ child: Row(
+ children: [
+ Expanded(
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.end,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Text(
+ 'MEDICURE',
+ textAlign: TextAlign.left,
+ style: TextStyle(
+ fontWeight: FontWeight.bold,
+ fontSize: 22,
+ letterSpacing: 0.27,
+ color: Colors.black,
+ ),
+ ),
+ ],
+ ),
+ ),
+ Container(
+ width: 60,
+ height: 60,
+ child: Image.asset('assets/userImage.png'),
+ )
+ ],
+ ),
+ );
+ }
+
+ getSearchBarUI() {
+ return Padding(
+ padding: const EdgeInsets.only(top: 8.0, left: 18),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.center,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Container(
+ width: MediaQuery
+ .of(context)
+ .size
+ .width * 0.75,
+ height: 64,
+ child: Padding(
+ padding: const EdgeInsets.only(top: 8, bottom: 8),
+ child: Container(
+ decoration: BoxDecoration(
+ color: Color(0xFFF8FAFB),
+ borderRadius: const BorderRadius.only(
+ bottomRight: Radius.circular(13.0),
+ bottomLeft: Radius.circular(13.0),
+ topLeft: Radius.circular(13.0),
+ topRight: Radius.circular(13.0),
+ ),
+ ),
+ child: Row(
+ children: [
+ Expanded(
+ child: Container(
+ padding: const EdgeInsets.only(left: 16, right: 16),
+ child: TextFormField(
+ style: TextStyle(
+ fontFamily: 'WorkSans',
+ fontWeight: FontWeight.bold,
+ fontSize: 16,
+ color: Colors.blueAccent,
+ ),
+ keyboardType: TextInputType.text,
+ decoration: InputDecoration(
+ labelText: 'Search for Doctor',
+ border: InputBorder.none,
+ helperStyle: TextStyle(
+ fontWeight: FontWeight.bold,
+ fontSize: 16,
+ color: Color(0xFFB9BABC),
+ ),
+ labelStyle: TextStyle(
+ fontWeight: FontWeight.w600,
+ fontSize: 16,
+ letterSpacing: 0.2,
+ color: Color(0xFFB9BABC),
+ ),
+ ),
+ onEditingComplete: () {},
+ ),
+ ),
+ ),
+ SizedBox(
+ width: 60,
+ height: 60,
+ child: Icon(Icons.search, color: Color(0xFFB9BABC)),
+ )
+ ],
+ ),
+ ),
+ ),
+ ),
+ const Expanded(
+ child: SizedBox(),
+ )
+ ],
+ ),
+ );
+ }
+
+ getCategoryUI() {
+ return Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Padding(
+ padding: const EdgeInsets.only(top: 8.0, left: 18, right: 16),
+ child: Text(
+ 'Category',
+ textAlign: TextAlign.left,
+ style: TextStyle(
+ fontWeight: FontWeight.w600,
+ fontSize: 22,
+ letterSpacing: 0.27,
+ color: Colors.black,
+ ),
+ ),
+ ),
+ const SizedBox(
+ height: 16,
+ ),
+ Padding(
+ padding: const EdgeInsets.only(left: 16, right: 16),
+ child: Row(
+ children: [
+ getButtonUI(CategoryType.BMI, categoryType == CategoryType.BMI),
+ const SizedBox(
+ width: 16,
+ ),
+ getButtonUI(CategoryType.Medicines,
+ categoryType == CategoryType.Medicines),
+ ],
+ ),
+ ),
+ const SizedBox(
+ height: 16,
+ ),
+ // CategoryListView(
+ // callBack: () {
+ // //moveTo();
+ // },
+ // ),
+ ],
+ );
+ }
+
+ Widget getButtonUI(CategoryType categoryTypeData, bool isSelected) {
+ String txt = '';
+ if (CategoryType.BMI == categoryTypeData) {
+ txt = 'Check your BMI';
+ } else if (CategoryType.Medicines == categoryTypeData) {
+ txt = 'Order Medicines';
+ }
+ return Expanded(
+ child: Container(
+ decoration: BoxDecoration(
+ color: isSelected ? Colors.blueAccent : Colors.white70,
+ borderRadius: const BorderRadius.all(Radius.circular(24.0)),
+ border: Border.all(color: Colors.blueAccent)),
+ child: Material(
+ color: Colors.transparent,
+ child: InkWell(
+ splashColor: Colors.white24,
+ borderRadius: const BorderRadius.all(Radius.circular(24.0)),
+ onTap: () {
+ setState(() {
+ categoryType = categoryTypeData;
+ isBmi = !isBmi;
+ });
+
+ Navigator.of(context).push(MaterialPageRoute(
+ builder: (context) => isBmi ? OrderMedicine() : InputPage() ));
+ },
+ child: Padding(
+ padding: const EdgeInsets.only(
+ top: 12, bottom: 12, left: 18, right: 18),
+ child: Center(
+ child: Text(
+ txt,
+ textAlign: TextAlign.left,
+ style: TextStyle(
+ fontWeight: FontWeight.w600,
+ fontSize: 12,
+ letterSpacing: 0.27,
+ color: isSelected ? Colors.white70 : Colors.blueAccent,
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ );
+ }
+
+ getDoctorsUI() {
+ return Padding(
+ padding: const EdgeInsets.only(top: 8.0, left: 18, right: 16),
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Text(
+ 'Specialists',
+ textAlign: TextAlign.left,
+ style: TextStyle(
+ fontWeight: FontWeight.w600,
+ fontSize: 22,
+ letterSpacing: 0.27,
+ color: Colors.black,
+ ),
+ ),
+ Flexible(
+ child: PopularListView(
+ callBack: () {
+
+ },
+ ),
+ )
+ ],
+ ),
+ );
+ }
+}
+
+enum CategoryType { BMI, Medicines }
diff --git a/medicare/lib/screens/calculator_brain.dart b/medicare/lib/screens/calculator_brain.dart
new file mode 100644
index 0000000..5783edd
--- /dev/null
+++ b/medicare/lib/screens/calculator_brain.dart
@@ -0,0 +1,35 @@
+import 'dart:math';
+
+class CalculatorBrain {
+ CalculatorBrain({this.height, this.weight});
+
+ final int height;
+ final int weight;
+
+ double _bmi;
+
+ String calculateBMI() {
+ _bmi = weight / pow(height / 100, 2);
+ return _bmi.toStringAsFixed(1);
+ }
+
+ String getResult() {
+ if (_bmi >= 25) {
+ return 'Overweight';
+ } else if (_bmi > 18.5) {
+ return 'Normal';
+ } else {
+ return 'Underweight';
+ }
+ }
+
+ String getInterpretation() {
+ if (_bmi >= 25) {
+ return 'You have a higher than normal body weight. Try to exercise more.';
+ } else if (_bmi >= 18.5) {
+ return 'You have a normal body weight. Good job!';
+ } else {
+ return 'You have a lower than normal body weight. You can eat a bit more.';
+ }
+ }
+}
diff --git a/medicare/lib/screens/category.dart b/medicare/lib/screens/category.dart
new file mode 100644
index 0000000..e4ca35f
--- /dev/null
+++ b/medicare/lib/screens/category.dart
@@ -0,0 +1,46 @@
+class Category {
+ Category({
+ this.name = '',
+ this.specialist = '',
+ this.experience = 0,
+ this.rating = 0.0,
+ });
+
+ String name;
+ String specialist;
+ int experience;
+ double rating;
+
+
+
+
+ static List popularList = [
+ Category(
+ name: 'ABC',
+ specialist: 'General',
+ experience: 25,
+ rating: 4.8,
+ ),
+ Category(
+
+ name: 'BCD',
+ specialist: 'Heart',
+ experience: 30,
+ rating: 4.9,
+ ),
+ Category(
+
+ name: 'DRE',
+ specialist: 'Dental',
+ experience: 18,
+ rating: 4.8,
+ ),
+ Category(
+
+ name: 'GRT',
+ specialist:'Orthopedist',
+ experience: 21,
+ rating: 4.9,
+ ),
+ ];
+}
diff --git a/medicare/lib/screens/chat.dart b/medicare/lib/screens/chat.dart
new file mode 100644
index 0000000..b476437
--- /dev/null
+++ b/medicare/lib/screens/chat.dart
@@ -0,0 +1,201 @@
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:medicare/constants.dart';
+import 'package:firebase_auth/firebase_auth.dart';
+import 'package:cloud_firestore/cloud_firestore.dart';
+import 'package:medicare/video_call/call.dart';
+
+
+
+final _firestore = Firestore.instance;
+FirebaseUser loggedInUser;
+
+class ChatScreen extends StatefulWidget {
+ static const String id = 'chat_screen';
+ @override
+ _ChatScreenState createState() => _ChatScreenState();
+}
+
+class _ChatScreenState extends State {
+ final messageTextController = new TextEditingController();
+ final _auth = FirebaseAuth.instance;
+
+ String messageText;
+ @override
+ void initState(){
+ super.initState();
+ getCurrentUser();
+ }
+
+
+
+ void getCurrentUser() async{
+ try {
+ final user = await _auth.currentUser();
+ if (user != null) {
+ loggedInUser = user;
+ print(loggedInUser.email);
+ }
+ }
+ catch (e){
+ print(e);
+ }
+ }
+
+
+ void messagesStream() async {
+ await for (var snapshot in _firestore.collection('messages').snapshots()) {
+ for (var message in snapshot.documents) {
+ print(message.data);
+ }
+ }
+ }
+
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ appBar: AppBar(
+ leading: null,
+ actions: [
+ IconButton(
+ icon: Icon(Icons.video_call),
+ onPressed: () {
+ Navigator.of(context).push(MaterialPageRoute(builder: (context) => CallPage()));
+
+ }),
+ ],
+ title: Text('Chat'),
+ backgroundColor: Colors.lightBlueAccent,
+ ),
+ body: SafeArea(
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ crossAxisAlignment: CrossAxisAlignment.stretch,
+ children: [
+ MessagesStream(),
+ Container(
+ decoration: kMessageContainerDecoration,
+ child: Row(
+ crossAxisAlignment: CrossAxisAlignment.center,
+ children: [
+ Expanded(
+ child: TextField(
+ controller: messageTextController,
+ onChanged: (value) {
+
+ //Do something with the user input.
+ messageText = value;
+ },
+ decoration: kMessageTextFieldDecoration,
+ ),
+ ),
+ FlatButton(
+ onPressed: () {
+ messageTextController.clear();
+ //Implement send functionality.
+ _firestore.collection('messages').add({
+ 'text': messageText,
+ 'sender': loggedInUser.email,
+ });
+
+ },
+ child: Text(
+ 'Send',
+ style: kSendButtonTextStyle,
+ ),
+ ),
+ ],
+ ),
+ ),
+ ],
+ ),
+ ),
+ );
+ }
+}
+
+
+class MessagesStream extends StatelessWidget {
+ @override
+ Widget build(BuildContext context) {
+ return StreamBuilder(
+ stream: _firestore.collection('messages').snapshots(),
+ // ignore: missing_return
+ 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: currentUser == messageSender,);
+
+ messageBubbles.add(messageBubble);
+
+ }
+ return Expanded(
+ child: ListView(
+ reverse: true,
+ padding: EdgeInsets.symmetric(horizontal: 10.0, vertical: 20.0),
+ children: messageBubbles,
+ ),
+ );
+
+ },
+ );
+ }
+}
+
+
+class MessageBubble extends StatelessWidget {
+
+ MessageBubble({this.sender,this.text,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(sender, style: TextStyle(
+ fontSize: 12.0,
+ color: Colors.black54,
+ ),
+ ),
+ Material(
+ elevation: 5.0,
+ borderRadius: isMe ? BorderRadius.only(topLeft: Radius.circular(30.0),bottomLeft: Radius.circular(30.0),bottomRight: Radius.circular(30.0)) : BorderRadius.only(topRight: Radius.circular(30.0),bottomLeft: Radius.circular(30.0),bottomRight: Radius.circular(30.0)),
+ color: isMe ? Colors.lightBlueAccent : Colors.white,
+ child: Padding(
+ padding: EdgeInsets.symmetric(vertical: 10.0,horizontal: 20.0),
+ child: Text('$text',
+ style: TextStyle(
+ color: isMe ? Colors.white : Colors.black54,
+ fontSize: 15.0,
+ ),
+ ),
+ ),
+
+ ),
+ ],
+ ),
+ );
+ }
+}
\ No newline at end of file
diff --git a/medicare/lib/screens/constants.dart b/medicare/lib/screens/constants.dart
new file mode 100644
index 0000000..976192e
--- /dev/null
+++ b/medicare/lib/screens/constants.dart
@@ -0,0 +1,70 @@
+import 'package:flutter/material.dart';
+
+const kBottomContainerHeight = 72.0;
+const kPrimaryColor = Color(0xFF0A0E21);
+const kAccentColor = Color(0xFFEB1555);
+const kWindowBackgroundColor = Color(0xFF0A0E21);
+const kActiveCardColor = Color(0xFF1D1E33);
+const kInactiveCardColor = Color(0xFF111328);
+const kBottomContainerColor = kAccentColor;
+const kInactiveTrackColor = Color(0xFF8D8E98);
+const kActiveTrackColor = Colors.white;
+const kThumbColor = kAccentColor;
+const kOverlayColor = Color(0x29EB1555);
+const kRoundedButtonBackgroundColor = Color(0xFF1C1F32);
+const kSaveButtonBackgroundColor = Color(0xFF181A2E);
+const kResultTextColor = Color(0xFF24D876);
+const kLabelTextColor = Color(0xFF8D8E98);
+const kActiveLabelTextColor = Colors.white;
+const kInactiveLabelTextColor = kLabelTextColor;
+
+const kAppBarTextStyle = TextStyle(
+ fontSize: 16.0,
+ fontWeight: FontWeight.w600,
+ fontFamily: 'NunitoBold',
+);
+
+const kLabelTextStyle = TextStyle(
+ fontSize: 16.0,
+ color: kLabelTextColor,
+ fontWeight: FontWeight.w900,
+ fontFamily: 'NunitoExtraBold',
+);
+
+const kLargeButtonTextStyle = TextStyle(
+ fontSize: 18.0,
+ letterSpacing: 2.0,
+ fontWeight: FontWeight.w800,
+ fontFamily: 'NunitoSemiBold',
+);
+
+const kNumberTextStyle = TextStyle(
+ fontSize: 50.0,
+ fontWeight: FontWeight.w900,
+ fontFamily: 'NunitoExtraBold',
+ color: Colors.white,
+);
+
+const kTitleTextStyle = TextStyle(
+ fontSize: 36.0,
+ fontWeight: FontWeight.bold,
+);
+
+const kResultTextStyle = TextStyle(
+ color: kResultTextColor,
+ fontSize: 18.0,
+ fontWeight: FontWeight.w900,
+ fontFamily: 'NunitoExtraBold',
+);
+
+const kBMITextStyle = TextStyle(
+ fontSize: 100.0,
+ fontFamily: 'NunitoBold',
+ color: Colors.white,
+);
+
+const kBodyTextStyle = TextStyle(
+ fontSize: 22.0,
+ fontFamily: 'NunitoSemiBold',
+ color: Colors.white,
+);
diff --git a/medicare/lib/screens/design_course_app_theme.dart b/medicare/lib/screens/design_course_app_theme.dart
new file mode 100644
index 0000000..3604e50
--- /dev/null
+++ b/medicare/lib/screens/design_course_app_theme.dart
@@ -0,0 +1,94 @@
+import 'package:flutter/material.dart';
+
+class DesignCourseAppTheme {
+ DesignCourseAppTheme._();
+
+ static const Color notWhite = Color(0xFFEDF0F2);
+ static const Color nearlyWhite = Color(0xFFFFFFFF);
+ static const Color nearlyBlue = Color(0xFF00B6F0);
+ static const Color nearlyBlack = Color(0xFF213333);
+ static const Color grey = Color(0xFF3A5160);
+ static const Color dark_grey = Color(0xFF313A44);
+
+ static const Color darkText = Color(0xFF253840);
+ static const Color darkerText = Color(0xFF17262A);
+ static const Color lightText = Color(0xFF4A6572);
+ static const Color deactivatedText = Color(0xFF767676);
+ static const Color dismissibleBackground = Color(0xFF364A54);
+ static const Color chipBackground = Color(0xFFEEF1F3);
+ static const Color spacer = Color(0xFFF2F2F2);
+
+ static const TextTheme textTheme = TextTheme(
+ headline4: display1,
+ headline5: headline,
+ headline6: title,
+ subtitle2: subtitle,
+ bodyText1: body2,
+ bodyText2: body1,
+ caption: caption,
+ );
+
+ static const TextStyle display1 = TextStyle(
+ // h4 -> display1
+ fontFamily: 'WorkSans',
+ fontWeight: FontWeight.bold,
+ fontSize: 36,
+ letterSpacing: 0.4,
+ height: 0.9,
+ color: darkerText,
+ );
+
+ static const TextStyle headline = TextStyle(
+ // h5 -> headline
+ fontFamily: 'WorkSans',
+ fontWeight: FontWeight.bold,
+ fontSize: 24,
+ letterSpacing: 0.27,
+ color: darkerText,
+ );
+
+ static const TextStyle title = TextStyle(
+ // h6 -> title
+ fontFamily: 'WorkSans',
+ fontWeight: FontWeight.bold,
+ fontSize: 16,
+ letterSpacing: 0.18,
+ color: darkerText,
+ );
+
+ static const TextStyle subtitle = TextStyle(
+ // subtitle2 -> subtitle
+ fontFamily: 'WorkSans',
+ fontWeight: FontWeight.w400,
+ fontSize: 14,
+ letterSpacing: -0.04,
+ color: darkText,
+ );
+
+ static const TextStyle body2 = TextStyle(
+ // body1 -> body2
+ fontFamily: 'WorkSans',
+ fontWeight: FontWeight.w400,
+ fontSize: 14,
+ letterSpacing: 0.2,
+ color: darkText,
+ );
+
+ static const TextStyle body1 = TextStyle(
+ // body2 -> body1
+ fontFamily: 'WorkSans',
+ fontWeight: FontWeight.w400,
+ fontSize: 16,
+ letterSpacing: -0.05,
+ color: darkText,
+ );
+
+ static const TextStyle caption = TextStyle(
+ // Caption -> caption
+ fontFamily: 'WorkSans',
+ fontWeight: FontWeight.w400,
+ fontSize: 12,
+ letterSpacing: 0.2,
+ color: lightText, // was lightText
+ );
+}
diff --git a/medicare/lib/screens/doctor_info_screen.dart b/medicare/lib/screens/doctor_info_screen.dart
new file mode 100644
index 0000000..d930a55
--- /dev/null
+++ b/medicare/lib/screens/doctor_info_screen.dart
@@ -0,0 +1,420 @@
+import 'package:cloud_firestore/cloud_firestore.dart';
+import 'package:firebase_auth/firebase_auth.dart';
+import 'package:flutter/material.dart';
+import 'package:medicare/models/doctor.dart';
+import 'chat.dart';
+import 'design_course_app_theme.dart';
+
+
+
+class DoctorInfoScreen extends StatefulWidget {
+ @override
+ _DoctorInfoScreenState createState() => _DoctorInfoScreenState();
+
+ Doctor doctor;
+
+ DoctorInfoScreen({this.doctor});
+
+}
+
+ class _DoctorInfoScreenState extends State
+ with TickerProviderStateMixin {
+
+
+
+
+
+
+
+ String _value = "10am to 12pm";
+ final double infoHeight = 364.0;
+ AnimationController animationController;
+ Animation animation;
+ double opacity1 = 0.0;
+ double opacity2 = 0.0;
+ double opacity3 = 0.0;
+ @override
+ void initState() {
+ animationController = AnimationController(
+ duration: const Duration(milliseconds: 1000), vsync: this);
+ animation = Tween(begin: 0.0, end: 1.0).animate(CurvedAnimation(
+ parent: animationController,
+ curve: Interval(0, 1.0, curve: Curves.fastOutSlowIn)));
+ setData();
+ super.initState();
+ }
+
+ Future setData() async {
+ animationController.forward();
+ await Future.delayed(const Duration(milliseconds: 200));
+ setState(() {
+ opacity1 = 1.0;
+ });
+ await Future.delayed(const Duration(milliseconds: 200));
+ setState(() {
+ opacity2 = 1.0;
+ });
+ await Future.delayed(const Duration(milliseconds: 200));
+ setState(() {
+ opacity3 = 1.0;
+ });
+ }
+
+ @override
+ Widget build(BuildContext context) {
+
+ Doctor doctor = widget.doctor;
+
+
+ final double tempHeight = MediaQuery.of(context).size.height -
+ (MediaQuery.of(context).size.width / 1.2) +
+ 24.0;
+ return Container(
+ color: DesignCourseAppTheme.nearlyWhite,
+ child: Scaffold(
+ backgroundColor: Colors.transparent,
+ body: Stack(
+ children: [
+ Column(
+ children: [
+ AspectRatio(
+ aspectRatio: 1.2,
+ child: Image.asset('assets/userImage.png'),
+ ),
+ ],
+ ),
+ Positioned(
+ top: (MediaQuery.of(context).size.width / 1.2) - 24.0,
+ bottom: 0,
+ left: 0,
+ right: 0,
+ child: Container(
+ decoration: BoxDecoration(
+ color: DesignCourseAppTheme.nearlyWhite,
+ borderRadius: const BorderRadius.only(
+ topLeft: Radius.circular(32.0),
+ topRight: Radius.circular(32.0)),
+ boxShadow: [
+ BoxShadow(
+ color: DesignCourseAppTheme.grey.withOpacity(0.2),
+ offset: const Offset(1.1, 1.1),
+ blurRadius: 10.0),
+ ],
+ ),
+ child: Padding(
+ padding: const EdgeInsets.only(left: 8, right: 8),
+ child: SingleChildScrollView(
+ child: Container(
+ constraints: BoxConstraints(
+ minHeight: infoHeight,
+ maxHeight: tempHeight > infoHeight
+ ? tempHeight
+ : infoHeight),
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Padding(
+ padding: const EdgeInsets.only(
+ top: 32.0, left: 18, right: 16),
+ child: Text(
+ doctor.name ?? 'No name found',
+ textAlign: TextAlign.left,
+ style: TextStyle(
+ fontWeight: FontWeight.w600,
+ fontSize: 22,
+ letterSpacing: 0.27,
+ color: DesignCourseAppTheme.darkerText,
+ ),
+ ),
+ ),
+ Padding(
+ padding: const EdgeInsets.only(
+ left: 16, right: 16, bottom: 8, top: 16),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ crossAxisAlignment: CrossAxisAlignment.center,
+ children: [
+ Text(
+ doctor.specialist ?? 'No specialization found',
+ textAlign: TextAlign.left,
+ style: TextStyle(
+ fontWeight: FontWeight.w200,
+ fontSize: 22,
+ letterSpacing: 0.27,
+ color: DesignCourseAppTheme.nearlyBlue,
+ ),
+ ),
+ Container(
+ child: Row(
+ children: [
+ Text(
+ doctor.rating.toString() ?? 'No rating found',
+ textAlign: TextAlign.left,
+ style: TextStyle(
+ fontWeight: FontWeight.w200,
+ fontSize: 22,
+ letterSpacing: 0.27,
+ color: DesignCourseAppTheme.grey,
+ ),
+ ),
+ Icon(
+ Icons.star,
+ color: DesignCourseAppTheme.nearlyBlue,
+ size: 24,
+ ),
+ ],
+ ),
+ )
+ ],
+ ),
+ ),
+ DropdownButton(
+ value: _value,
+ items: [
+ DropdownMenuItem(
+ child: Text("10am to 12pm"),
+ value: "10am to 12pm",
+ ),
+ DropdownMenuItem(
+ child: Text("12pm to 2pm"),
+ value: "12pm to 2pm",
+ ),
+ DropdownMenuItem(
+ child: Text("5pm to 7pm"),
+ value: "5pm to 7pm",
+ ),
+ DropdownMenuItem(
+ child: Text("9pm to 10pm"),
+ value: "9pm to 10pm"
+ )
+ ],
+ onChanged: (value) {
+ setState(() {
+ _value = value;
+ });
+ }),
+ Expanded(
+ child: AnimatedOpacity(
+ duration: const Duration(milliseconds: 500),
+ opacity: opacity2,
+ child: Padding(
+ padding: const EdgeInsets.only(
+ left: 16, right: 16, top: 8, bottom: 8),
+ child: Text(
+ 'Lorem ipsum is simply dummy text of printing & typesetting industry, Lorem ipsum is simply dummy text of printing & typesetting industry.',
+ textAlign: TextAlign.justify,
+ style: TextStyle(
+ fontWeight: FontWeight.w200,
+ fontSize: 14,
+ letterSpacing: 0.27,
+ color: DesignCourseAppTheme.grey,
+ ),
+ maxLines: 3,
+ overflow: TextOverflow.ellipsis,
+ ),
+ ),
+ ),
+ ),
+ AnimatedOpacity(
+ duration: const Duration(milliseconds: 500),
+ opacity: opacity3,
+ child: Padding(
+ padding: const EdgeInsets.only(
+ left: 16, bottom: 16, right: 16),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.center,
+ crossAxisAlignment: CrossAxisAlignment.center,
+ children: [
+
+
+ Expanded(
+ child: Container(
+ height: 48,
+ decoration: BoxDecoration(
+ color: DesignCourseAppTheme.nearlyBlue,
+ borderRadius: const BorderRadius.all(
+ Radius.circular(16.0),
+ ),
+ boxShadow: [
+ BoxShadow(
+ color: DesignCourseAppTheme
+ .nearlyBlue
+ .withOpacity(0.5),
+ offset: const Offset(1.1, 1.1),
+ blurRadius: 10.0),
+ ],
+ ),
+ child: Center(
+ child: FlatButton(
+ child: Text(
+ 'Take Appointment',
+ textAlign: TextAlign.left,
+ style: TextStyle(
+ fontWeight: FontWeight.w600,
+ fontSize: 18,
+ letterSpacing: 0.0,
+ color: DesignCourseAppTheme
+ .nearlyWhite,
+ ),
+ ),
+ color: Colors.blueAccent,
+ textColor: Colors.white,
+ onPressed: () async {
+
+ // store in the firestore
+ final FirebaseUser user = await FirebaseAuth.instance.currentUser();
+ final userid = user.uid;
+
+ final DocumentReference document = Firestore.instance.collection("users").document(userid);
+
+ await document.get().then(( DocumentSnapshot snapshot) async{
+ print("User name "+snapshot.data['name']);
+
+ final CollectionReference _collectionReference = Firestore.instance
+ .collection('appointments');
+
+ _collectionReference.document(user.uid).setData({
+ //doctor details
+ 'docName' : doctor.name,
+ 'docSpecialization' : doctor.specialist,
+
+ //patient details
+ 'patUid' : userid,
+ 'patName' : snapshot.data['name'],
+ //timings
+ 'time': _value,
+
+ }).then((value) {
+ print("Successful");
+
+
+ Navigator.of(context).push(MaterialPageRoute(builder: (context) => ChatScreen()));
+
+ });
+
+ });
+
+
+
+
+ }
+ ),
+ ),
+ ),
+ )
+ ],
+ ),
+ ),
+ ),
+ SizedBox(
+ height: MediaQuery.of(context).padding.bottom,
+ )
+ ],
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ Positioned(
+ top: (MediaQuery.of(context).size.width / 1.2) - 24.0 - 35,
+ right: 35,
+ child: ScaleTransition(
+ alignment: Alignment.center,
+ scale: CurvedAnimation(
+ parent: animationController, curve: Curves.fastOutSlowIn),
+ child: Card(
+ color: DesignCourseAppTheme.nearlyBlue,
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(50.0)),
+ elevation: 10.0,
+ child: Container(
+ width: 60,
+ height: 60,
+ child: Center(
+ child: Icon(
+ Icons.favorite,
+ color: DesignCourseAppTheme.nearlyWhite,
+ size: 30,
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ Padding(
+ padding: EdgeInsets.only(top: MediaQuery.of(context).padding.top),
+ child: SizedBox(
+ width: AppBar().preferredSize.height,
+ height: AppBar().preferredSize.height,
+ child: Material(
+ color: Colors.transparent,
+ child: InkWell(
+ borderRadius:
+ BorderRadius.circular(AppBar().preferredSize.height),
+ child: Icon(
+ Icons.arrow_back_ios,
+ color: DesignCourseAppTheme.nearlyBlack,
+ ),
+ onTap: () {
+ Navigator.pop(context);
+ },
+ ),
+ ),
+ ),
+ )
+ ],
+ ),
+ ),
+ );
+ }
+
+ Widget getTimeBoxUI(String text1, String txt2) {
+ return Padding(
+ padding: const EdgeInsets.all(8.0),
+ child: Container(
+ decoration: BoxDecoration(
+ color: DesignCourseAppTheme.nearlyWhite,
+ borderRadius: const BorderRadius.all(Radius.circular(16.0)),
+ boxShadow: [
+ BoxShadow(
+ color: DesignCourseAppTheme.grey.withOpacity(0.2),
+ offset: const Offset(1.1, 1.1),
+ blurRadius: 8.0),
+ ],
+ ),
+ child: Padding(
+ padding: const EdgeInsets.only(
+ left: 18.0, right: 18.0, top: 12.0, bottom: 12.0),
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ crossAxisAlignment: CrossAxisAlignment.center,
+ children: [
+ Text(
+ text1,
+ textAlign: TextAlign.center,
+ style: TextStyle(
+ fontWeight: FontWeight.w600,
+ fontSize: 14,
+ letterSpacing: 0.27,
+ color: DesignCourseAppTheme.nearlyBlue,
+ ),
+ ),
+ Text(
+ txt2,
+ textAlign: TextAlign.center,
+ style: TextStyle(
+ fontWeight: FontWeight.w200,
+ fontSize: 14,
+ letterSpacing: 0.27,
+ color: DesignCourseAppTheme.grey,
+ ),
+ ),
+ ],
+ ),
+ ),
+ ),
+ );
+ }
+}
diff --git a/medicare/lib/screens/home.dart b/medicare/lib/screens/home.dart
new file mode 100644
index 0000000..8dd911d
--- /dev/null
+++ b/medicare/lib/screens/home.dart
@@ -0,0 +1,58 @@
+import 'package:animated_text_kit/animated_text_kit.dart';
+import 'package:flutter/material.dart';
+import 'package:medicare/screens/login_page.dart';
+
+class Home extends StatelessWidget {
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ body: Container(
+ decoration: BoxDecoration(
+ gradient: LinearGradient(colors: [Colors.blueAccent,Colors.white]),
+ ),
+ padding: EdgeInsets.only(top: 200.0, left: 100.0),
+ child: Column(
+ children: [
+ Row(
+ children: [
+ SizedBox(
+ width: 250.0,
+ child: ColorizeAnimatedTextKit(
+
+ text: [
+ "Medicure",
+ ],
+ textStyle:
+ TextStyle(fontSize: 50.0, fontFamily: "Horizon"),
+ colors: [
+ Colors.purple,
+ Colors.blue,
+ Colors.yellow,
+ Colors.red,
+ ],
+ textAlign: TextAlign.start,
+ alignment:
+ AlignmentDirectional.topStart // or Alignment.topLeft
+ ),
+ ),
+ ],
+ ),
+ SizedBox(height: 400.0),
+ FlatButton(
+ shape: RoundedRectangleBorder(
+ borderRadius:
+ BorderRadius.circular(
+ 10.0),
+ ),
+ onPressed: () {
+ Navigator.of(context).push(MaterialPageRoute(builder: (context) => LoginScreen()));
+ },
+ child: Text('Get Started'),
+ color: Colors.blue,
+ textColor: Colors.white),
+ ],
+ ),
+ ),
+ );
+ }
+}
diff --git a/medicare/lib/screens/input_page.dart b/medicare/lib/screens/input_page.dart
new file mode 100644
index 0000000..b1de249
--- /dev/null
+++ b/medicare/lib/screens/input_page.dart
@@ -0,0 +1,262 @@
+import 'package:medicare/components/bottom_button.dart';
+import 'package:medicare/components/icon_content.dart';
+import 'package:medicare/components/reusable_card.dart';
+import 'package:medicare/components/rounded_button.dart';
+import 'package:medicare/screens/results_page.dart';
+import 'package:flutter/material.dart';
+import 'package:font_awesome_flutter/font_awesome_flutter.dart';
+
+import 'calculator_brain.dart';
+import 'constants.dart';
+
+enum Gender {
+ male,
+ female,
+}
+
+class InputPage extends StatefulWidget {
+ @override
+ _InputPageState createState() => _InputPageState();
+}
+
+class _InputPageState extends State {
+ Gender selectedGender = Gender.male;
+ int height = 180;
+ int weight = 60;
+ int age = 20;
+
+ @override
+ Widget build(BuildContext context) {
+ const defaultPadding = EdgeInsets.fromLTRB(16.0, 0.0, 16.0, 16.0);
+
+ return Scaffold(
+ appBar: AppBar(
+ centerTitle: true,
+ title: Text(
+ 'BMI CALCULATOR',
+ style: kAppBarTextStyle,
+ ),
+ ),
+ body: new SingleChildScrollView(
+ padding: EdgeInsets.only(bottom: 16.0),
+ child: Column(
+ children: [
+ Padding(
+ padding: EdgeInsets.all(16.0),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.center,
+ crossAxisAlignment: CrossAxisAlignment.center,
+ children: [
+ Expanded(
+ flex: 1,
+ child: ReusableCard(
+ onPress: () {
+ setState(() {
+ selectedGender = Gender.male;
+ });
+ },
+ color: selectedGender == Gender.male
+ ? kActiveCardColor
+ : kInactiveCardColor,
+ cardChild: IconContent(
+ icon: FontAwesomeIcons.mars,
+ label: 'MALE',
+ labelColor: selectedGender == Gender.male
+ ? kActiveLabelTextColor
+ : kInactiveLabelTextColor,
+ ),
+ ),
+ ),
+ Expanded(
+ flex: 1,
+ child: ReusableCard(
+ onPress: () {
+ setState(() {
+ selectedGender = Gender.female;
+ });
+ },
+ color: selectedGender == Gender.female
+ ? kActiveCardColor
+ : kInactiveCardColor,
+ cardChild: IconContent(
+ icon: FontAwesomeIcons.venus,
+
+ label: 'FEMALE',
+ labelColor: selectedGender == Gender.female
+ ? kActiveLabelTextColor
+ : kInactiveLabelTextColor,
+ ),
+ ),
+ ),
+ ],
+ ),
+ ),
+ Padding(
+ padding: defaultPadding,
+ child: ReusableCard(
+ color: kInactiveCardColor,
+ cardChild: Padding(
+ padding: EdgeInsets.all(10.0),
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ Text(
+ 'HEIGHT',
+ style: kLabelTextStyle,
+ ),
+ Row(
+ mainAxisAlignment: MainAxisAlignment.center,
+ crossAxisAlignment: CrossAxisAlignment.baseline,
+ textBaseline: TextBaseline.alphabetic,
+ children: [
+ Text(
+ height.toString(),
+ style: kNumberTextStyle,
+
+ ),
+ Text(
+ 'cm',
+ style: kLabelTextStyle,
+ ),
+ ],
+ ),
+ SliderTheme(
+ data: SliderTheme.of(context).copyWith(
+ inactiveTrackColor: kInactiveTrackColor,
+ activeTrackColor: kActiveTrackColor,
+ thumbColor: kThumbColor,
+ overlayColor: kOverlayColor,
+ thumbShape:
+ RoundSliderThumbShape(enabledThumbRadius: 15.0),
+ overlayShape:
+ RoundSliderOverlayShape(overlayRadius: 30.0),
+ ),
+ child: Slider(
+ value: height.toDouble(),
+ min: 120.0,
+ max: 220.0,
+ onChanged: (double newValue) {
+ setState(() {
+ height = newValue.toInt();
+ });
+ },
+ ),
+ ),
+ ]),
+ ),
+ ),
+ ),
+ Padding(
+ padding: defaultPadding,
+ child: Row(
+ children: [
+ Expanded(
+ child: ReusableCard(
+ color: kInactiveCardColor,
+ cardChild: Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ Text(
+ 'WEIGHT',
+ style: kLabelTextStyle,
+ ),
+ Text(
+ weight.toString(),
+ style: kNumberTextStyle,
+ ),
+ SizedBox(height: 10.0),
+ Row(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ RoundIconButton(
+ icon: FontAwesomeIcons.minus,
+
+ onPressed: () {
+ setState(() {
+ weight -= 1;
+ });
+ },
+ ),
+ SizedBox(width: 10.0),
+ RoundIconButton(
+ icon: FontAwesomeIcons.plus,
+ onPressed: () {
+ setState(() {
+ weight += 1;
+ });
+ },
+ ),
+ ],
+ )
+ ],
+ ),
+ ),
+ ),
+ Expanded(
+ child: ReusableCard(
+ color: kInactiveCardColor,
+ cardChild: Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ Text(
+ 'AGE',
+ style: kLabelTextStyle,
+ ),
+ Text(
+ age.toString(),
+ style: kNumberTextStyle,
+ ),
+ SizedBox(height: 10.0),
+ Row(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ RoundIconButton(
+ icon: FontAwesomeIcons.minus,
+ onPressed: () {
+ setState(() {
+ age -= 1;
+ });
+ },
+ ),
+ SizedBox(width: 10.0),
+ RoundIconButton(
+ icon: FontAwesomeIcons.plus,
+ onPressed: () {
+ setState(() {
+ age += 1;
+ });
+ },
+ ),
+ ],
+ )
+ ],
+ ),
+ ),
+ ),
+ ],
+ ),
+ ),
+ ],
+ ),
+ ),
+ bottomNavigationBar: BottomButton(
+ buttonTitle: 'CALCULATE YOUR BMI',
+ onTap: () {
+ CalculatorBrain calc =
+ CalculatorBrain(height: height, weight: weight);
+
+ Navigator.push(
+ context,
+ MaterialPageRoute(
+ builder: (context) => ResultsPage(
+ bmiResult: calc.calculateBMI(),
+ resultText: calc.getResult(),
+ interpretation: calc.getInterpretation(),
+ ),
+ ),
+ );
+ },
+ ),
+ );
+ }
+}
diff --git a/medicare/lib/screens/login_page.dart b/medicare/lib/screens/login_page.dart
new file mode 100644
index 0000000..78fc924
--- /dev/null
+++ b/medicare/lib/screens/login_page.dart
@@ -0,0 +1,108 @@
+import 'package:flutter/material.dart';
+import 'package:medicare/screens/medi_home.dart';
+import 'package:medicare/screens/register_screen.dart';
+import 'package:medicare/rounded_button.dart';
+import 'package:medicare/constants.dart';
+import 'package:firebase_auth/firebase_auth.dart';
+
+import 'package:modal_progress_hud/modal_progress_hud.dart';
+
+class LoginScreen extends StatefulWidget {
+ static const String id = 'login_screen';
+ @override
+ _LoginScreenState createState() => _LoginScreenState();
+}
+
+class _LoginScreenState extends State {
+ final _auth = FirebaseAuth.instance;
+ bool showSpinner = false;
+ String email;
+ String password;
+
+ @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) {
+ //Do something with the user input.
+ email = value;
+ },
+ decoration: kTextFieldDecoration.copyWith(hintText: "Enter your email"),
+ ),
+ SizedBox(
+ height: 8.0,
+ ),
+ TextField(
+ obscureText: true,
+ textAlign: TextAlign.center,
+ onChanged: (value) {
+ //Do something with the user input.
+ password = value;
+ },
+ decoration: kTextFieldDecoration.copyWith(hintText: "Enter your password")
+ ),
+ SizedBox(
+ height: 24.0,
+ ),
+ RoundedButton(
+ title: "Log In",
+ onPressed: () async {
+ setState(() {
+ showSpinner = true;
+ });
+ try{
+ final user =await _auth.signInWithEmailAndPassword(email: email, password: password);
+ if(user != null){
+ Navigator.of(context).push(MaterialPageRoute(builder: (context) => MediHome()));
+ }
+ setState(() {
+ showSpinner = false;
+ });
+ }
+ catch (e){
+ print(e);
+ }
+ },
+ color: Colors.lightBlueAccent,
+
+
+ ),
+ RoundedButton(
+ title: "Register",
+ onPressed: (){
+ Navigator.of(context).push(MaterialPageRoute(builder: (context) => RegistrationScreen()));
+ },
+ color: Colors.lightBlueAccent,
+
+
+ ),
+ ],
+ ),
+ ),
+ ),
+ );
+ }
+}
\ No newline at end of file
diff --git a/medicare/lib/screens/medi_home.dart b/medicare/lib/screens/medi_home.dart
new file mode 100644
index 0000000..684e5ee
--- /dev/null
+++ b/medicare/lib/screens/medi_home.dart
@@ -0,0 +1,48 @@
+import 'package:flutter/material.dart';
+import 'package:liquid_swipe/liquid_swipe.dart';
+import 'package:medicare/models/doctor.dart';
+import 'package:medicare/screens/appointment.dart';
+import 'package:medicare/screens/precautions.dart';
+import 'package:medicare/screens/stats_screen.dart';
+import 'package:medicare/services/database.dart';
+import 'package:provider/provider.dart';
+
+
+
+class MediHome extends StatelessWidget {
+
+ final pages = [
+ Container(
+ child: Appointments(),
+ ),
+
+ Container(
+ child: Precautions(),
+ ),
+ Container(
+ child: StatsScreen(),
+ ),
+ ];
+
+ final DatabaseService _databaseService = DatabaseService();
+
+
+ @override
+ Widget build(BuildContext context) {
+ return StreamProvider>.value(
+ value: _databaseService.doctors,
+ child:MaterialApp(
+ home: Scaffold(
+ body: LiquidSwipe(
+ pages:pages,
+ enableLoop: true,
+ fullTransitionValue: 300,
+ enableSlideIcon: true,
+ waveType: WaveType.liquidReveal,
+ positionSlideIcon: 0.5,
+ ),
+ ),
+ )
+ );
+ }
+}
diff --git a/medicare/lib/screens/ordermedicine.dart b/medicare/lib/screens/ordermedicine.dart
new file mode 100644
index 0000000..3a3ea8a
--- /dev/null
+++ b/medicare/lib/screens/ordermedicine.dart
@@ -0,0 +1,53 @@
+import 'dart:math';
+
+import 'package:flutter/material.dart';
+import 'package:google_maps_flutter/google_maps_flutter.dart';
+
+class OrderMedicine extends StatefulWidget {
+ OrderMedicine({Key key, this.title}) : super(key:key);
+
+ final String title;
+
+ @override
+ _OrderMedicineState createState() => _OrderMedicineState();
+}
+
+class _OrderMedicineState extends State {
+ GoogleMapController _controller;
+
+ final CameraPosition _initialPosition = CameraPosition(target: LatLng(24.903623,67.198367));
+ final List markers = [];
+
+ addMarker(cordinate){
+ setState(() {
+ int id = Random().nextInt(100);
+ markers.add((Marker(position: cordinate, markerId: MarkerId(id.toString()) )));
+ });
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ body: GoogleMap(
+ initialCameraPosition: _initialPosition,
+ mapType: MapType.normal,
+ onMapCreated: (controller){
+ setState(() {
+ _controller = controller;
+ });
+ },
+ markers: markers.toSet(),
+ onTap: (cordinate){
+ _controller.animateCamera(CameraUpdate.newLatLng(cordinate));
+ addMarker((cordinate));
+ },
+ ),
+ floatingActionButton: FloatingActionButton(
+ onPressed: (){
+ _controller.animateCamera(CameraUpdate.zoomOut());
+ },
+ child: Icon(Icons.zoom_out),
+ ),
+ );
+ }
+}
\ No newline at end of file
diff --git a/medicare/lib/screens/popular_list_view.dart b/medicare/lib/screens/popular_list_view.dart
new file mode 100644
index 0000000..c6e5a81
--- /dev/null
+++ b/medicare/lib/screens/popular_list_view.dart
@@ -0,0 +1,483 @@
+import 'package:cloud_firestore/cloud_firestore.dart';
+import 'package:medicare/models/doctor.dart';
+import 'package:medicare/screens/doctor_info_screen.dart';
+import 'package:provider/provider.dart';
+
+import 'category.dart';
+
+import 'package:flutter/material.dart';
+
+class PopularListView extends StatefulWidget {
+ const PopularListView({Key key, this.callBack}) : super(key: key);
+
+ final Function callBack;
+ @override
+ _PopularListViewState createState() => _PopularListViewState();
+}
+
+class _PopularListViewState extends State
+ with TickerProviderStateMixin {
+ AnimationController animationController;
+ @override
+ void initState() {
+ animationController = AnimationController(
+ duration: const Duration(milliseconds: 2000), vsync: this);
+ super.initState();
+ }
+
+ Future getData() async {
+ await Future.delayed(const Duration(milliseconds: 200));
+ return true;
+ }
+
+
+
+ //class UserInformation extends StatelessWidget {
+ @override
+ Widget build(BuildContext context) {
+ CollectionReference users = Firestore.instance.collection('doctors');
+ final doctors = Provider.of>(context) ?? [];
+
+ return ListView.builder(
+ itemCount: doctors.length,
+ itemBuilder : (context,index){
+ return BrewListTile(doctor:doctors[index]);
+ }
+ );
+ }
+
+
+
+
+
+
+
+//}
+
+
+
+
+
+
+/*
+ @override
+ Widget build(BuildContext context) {
+ return Padding(
+ padding: const EdgeInsets.only(top: 8),
+ child: FutureBuilder(
+ future: getData(),
+ builder: (BuildContext context, AsyncSnapshot snapshot) {
+ if (!snapshot.hasData) {
+ return const SizedBox();
+ } else {
+ return GridView(
+ padding: const EdgeInsets.all(8),
+ physics: const BouncingScrollPhysics(),
+ scrollDirection: Axis.vertical,
+ //starting of the list view
+
+ children: List.generate(
+ Category.popularList.length,
+ (int index) {
+ final int count = Category.popularList.length;
+ final Animation animation =
+ Tween(begin: 0.0, end: 1.0).animate(
+ CurvedAnimation(
+ parent: animationController,
+ curve: Interval((1 / count) * index, 1.0,
+ curve: Curves.fastOutSlowIn),
+ ),
+ );
+ animationController.forward();
+ return CategoryView(
+ callback: () {
+ widget.callBack();
+ },
+ category: Category.popularList[index],
+ animation: animation,
+ animationController: animationController,
+ );
+ },
+ ),
+ gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
+ crossAxisCount: 2,
+ mainAxisSpacing: 32.0,
+ crossAxisSpacing: 32.0,
+ childAspectRatio: 0.8,
+ ),
+ );
+ }
+ },
+ ),
+ );
+ }
+
+ */
+
+}
+
+class BrewListTile extends StatelessWidget {
+
+ final Doctor doctor;
+ BrewListTile({this.doctor});
+
+ @override
+ Widget build(BuildContext context) {
+ return
+ /*
+ Padding(
+ padding: EdgeInsets.only(top:16.0),
+
+ child: Card(
+ margin: EdgeInsets.fromLTRB(20.0, 6.0, 20.0, 0.0),
+ child: ListTile(
+ leading: CircleAvatar(
+ radius: 25.0,
+ //backgroundColor: Colors.brown[doctor.strength],
+ //backgroundImage: AssetImage('assets/coffee_icon.png'),
+ ),
+ title: Text(doctor.name),
+ subtitle: Text('Takes ${doctor.experience} sugar(s)'),
+ ),
+ ),
+ */
+ Column(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Padding(
+ padding: const EdgeInsets.only(
+ top: 16, left: 16, right: 16),
+ child: Text(
+ doctor.name,
+ textAlign: TextAlign.left,
+ style: TextStyle(
+ fontWeight: FontWeight.w600,
+ fontSize: 16,
+ letterSpacing: 0.27,
+ color: Colors.black,
+ ),
+ ),
+ ),
+ Padding(
+ padding: const EdgeInsets.only(
+ top: 8,
+ left: 16,
+ right: 16,
+ bottom: 8),
+ child: Row(
+ mainAxisAlignment:
+ MainAxisAlignment
+ .spaceBetween,
+ crossAxisAlignment:
+ CrossAxisAlignment.center,
+ children: [
+ Text(
+ '${doctor.experience} years',
+ textAlign: TextAlign.left,
+ style: TextStyle(
+ fontWeight: FontWeight.w200,
+ fontSize: 12,
+ letterSpacing: 0.27,
+ color: Colors.black,
+ ),
+ ),
+ Container(
+ child: Row(
+ children: [
+ Text(
+ '${doctor.rating}',
+ textAlign:
+ TextAlign.left,
+ style: TextStyle(
+ fontWeight:
+ FontWeight.w200,
+ fontSize: 18,
+ letterSpacing: 0.27,
+ color: Colors.black,
+ ),
+ ),
+ Icon(
+ Icons.star,
+ color:
+ Colors.blueAccent,
+ size: 20,
+ ),
+ ],
+ ),
+ ),
+ ],
+ ),
+ ),
+ Padding(
+ padding: const EdgeInsets.only(
+ top: 8,
+ left: 16,
+ right: 16,
+ bottom: 8),
+ child: Row(
+ children: [
+ Text(
+ '${doctor.specialist}',
+ textAlign: TextAlign.left,
+ style: TextStyle(
+ fontWeight: FontWeight.w200,
+ fontSize: 12,
+ letterSpacing: 0.27,
+ color: Colors.black,
+ ),
+ ),
+ ],
+ ),
+ ),
+ Padding(
+ padding: const EdgeInsets.only(
+ left: 16,
+ right: 16,
+ ),
+ child: Row(
+ children: [
+ FlatButton(
+ shape: RoundedRectangleBorder(
+ borderRadius:
+ BorderRadius.circular(
+ 10.0),
+ ),
+ onPressed: () {
+ Navigator.push(context, new MaterialPageRoute(builder: (context) => DoctorInfoScreen(doctor: doctor)));
+ //Navigator.of(context).push(MaterialPageRoute(builder: (context) => DoctorInfoScreen()));
+
+ },
+ child: Text(
+ 'Appointment',
+ style: TextStyle(
+ color: Colors.white),
+ ),
+ color: Colors.blueAccent,
+ )
+ ],
+ ),
+ ),
+ ],
+ );
+
+
+ }
+}
+
+
+
+
+
+
+
+
+class CategoryView extends StatelessWidget {
+ const CategoryView(
+ {Key key,
+ this.category,
+ this.animationController,
+ this.animation,
+ this.callback})
+ : super(key: key);
+
+ final VoidCallback callback;
+ final Category category;
+ final AnimationController animationController;
+ final Animation animation;
+
+ @override
+ Widget build(BuildContext context) {
+ return AnimatedBuilder(
+ animation: animationController,
+ builder: (BuildContext context, Widget child) {
+ return FadeTransition(
+ opacity: animation,
+ child: Transform(
+ transform: Matrix4.translationValues(
+ 0.0, 50 * (1.0 - animation.value), 0.0),
+ child: InkWell(
+ splashColor: Colors.transparent,
+ onTap: () {
+ callback();
+ },
+ child: SizedBox(
+ height: 200,
+ child: Stack(
+ alignment: AlignmentDirectional.bottomCenter,
+ children: [
+ Container(
+ child: Column(
+ children: [
+ Expanded(
+ child: Container(
+ decoration: BoxDecoration(
+ color: Color(0xFFF8FAFB),
+ borderRadius: const BorderRadius.all(
+ Radius.circular(16.0)),
+ // border: new Border.all(
+ // color: DesignCourseAppTheme.notWhite),
+ ),
+ child: Column(
+ children: [
+ Expanded(
+ child: Container(
+ child: Column(
+ children: [
+ Padding(
+ padding: const EdgeInsets.only(
+ top: 16, left: 16, right: 16),
+ child: Text(
+ category.name,
+ textAlign: TextAlign.left,
+ style: TextStyle(
+ fontWeight: FontWeight.w600,
+ fontSize: 16,
+ letterSpacing: 0.27,
+ color: Colors.black,
+ ),
+ ),
+ ),
+ Padding(
+ padding: const EdgeInsets.only(
+ top: 8,
+ left: 16,
+ right: 16,
+ bottom: 8),
+ child: Row(
+ mainAxisAlignment:
+ MainAxisAlignment
+ .spaceBetween,
+ crossAxisAlignment:
+ CrossAxisAlignment.center,
+ children: [
+ Text(
+ '${category.experience} years',
+ textAlign: TextAlign.left,
+ style: TextStyle(
+ fontWeight: FontWeight.w200,
+ fontSize: 12,
+ letterSpacing: 0.27,
+ color: Colors.black,
+ ),
+ ),
+ Container(
+ child: Row(
+ children: [
+ Text(
+ '${category.rating}',
+ textAlign:
+ TextAlign.left,
+ style: TextStyle(
+ fontWeight:
+ FontWeight.w200,
+ fontSize: 18,
+ letterSpacing: 0.27,
+ color: Colors.black,
+ ),
+ ),
+ Icon(
+ Icons.star,
+ color:
+ Colors.blueAccent,
+ size: 20,
+ ),
+ ],
+ ),
+ ),
+ ],
+ ),
+ ),
+ Padding(
+ padding: const EdgeInsets.only(
+ top: 8,
+ left: 16,
+ right: 16,
+ bottom: 8),
+ child: Row(
+ children: [
+ Text(
+ '${category.specialist}',
+ textAlign: TextAlign.left,
+ style: TextStyle(
+ fontWeight: FontWeight.w200,
+ fontSize: 12,
+ letterSpacing: 0.27,
+ color: Colors.black,
+ ),
+ ),
+ ],
+ ),
+ ),
+ Padding(
+ padding: const EdgeInsets.only(
+ left: 16,
+ right: 16,
+ ),
+ child: Row(
+ children: [
+ FlatButton(
+ shape: RoundedRectangleBorder(
+ borderRadius:
+ BorderRadius.circular(
+ 10.0),
+ ),
+ onPressed: () {},
+ child: Text(
+ 'Appointment',
+ style: TextStyle(
+ color: Colors.white),
+ ),
+ color: Colors.blueAccent,
+ )
+ ],
+ ),
+ ),
+ ],
+ ),
+ ),
+ ),
+ const SizedBox(
+ width: 48,
+ ),
+ ],
+ ),
+ ),
+ ),
+ const SizedBox(
+ height: 28,
+ ),
+ ],
+ ),
+ ),
+ Container(
+ child: Padding(
+ padding:
+ const EdgeInsets.only(top: 24, right: 16, left: 16),
+ child: Container(
+ decoration: BoxDecoration(
+ borderRadius:
+ const BorderRadius.all(Radius.circular(16.0)),
+ boxShadow: [
+ BoxShadow(
+ color: Colors.grey.withOpacity(0.2),
+ offset: const Offset(0.0, 0.0),
+ blurRadius: 6.0),
+ ],
+ ),
+ child: ClipRRect(
+ borderRadius:
+ const BorderRadius.all(Radius.circular(16.0)),
+ ),
+ ),
+ ),
+ ),
+ ],
+ ),
+ ),
+ ),
+ ),
+ );
+ },
+ );
+ }
+}
diff --git a/medicare/lib/screens/precautions.dart b/medicare/lib/screens/precautions.dart
new file mode 100644
index 0000000..972b8a1
--- /dev/null
+++ b/medicare/lib/screens/precautions.dart
@@ -0,0 +1,227 @@
+import 'package:flutter/material.dart';
+import 'package:medicare/config/palette.dart';
+import 'package:medicare/config/styles.dart';
+import 'package:medicare/data/data.dart';
+import 'package:medicare/widgets/widgets.dart';
+
+class Precautions extends StatefulWidget {
+ @override
+ _PrecautionsState createState() => _PrecautionsState();
+}
+
+class _PrecautionsState extends State {
+ String _country = 'USA';
+
+ @override
+ Widget build(BuildContext context) {
+ final screenHeight = MediaQuery.of(context).size.height;
+ return Scaffold(
+ appBar: CustomAppBar(),
+ body: CustomScrollView(
+ physics: ClampingScrollPhysics(),
+ slivers: [
+ _buildHeader(screenHeight),
+ _buildPreventionTips(screenHeight),
+ _buildYourOwnTest(screenHeight),
+ ],
+ ),
+ );
+ }
+
+ SliverToBoxAdapter _buildHeader(double screenHeight) {
+ return SliverToBoxAdapter(
+ child: Container(
+ padding: const EdgeInsets.all(20.0),
+ decoration: BoxDecoration(
+ color: Palette.primaryColor,
+ borderRadius: BorderRadius.only(
+ bottomLeft: Radius.circular(40.0),
+ bottomRight: Radius.circular(40.0),
+ ),
+ ),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Text(
+ 'COVID-19',
+ style: const TextStyle(
+ color: Colors.white,
+ fontSize: 25.0,
+ fontWeight: FontWeight.bold,
+ ),
+ ),
+ CountryDropdown(
+ countries: ['CN', 'FR', 'IN', 'IT', 'UK', 'USA'],
+ country: _country,
+ onChanged: (val) => setState(() => _country = val),
+ ),
+ ],
+ ),
+ SizedBox(height: screenHeight * 0.03),
+ Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Text(
+ 'Are you feeling sick?',
+ style: const TextStyle(
+ color: Colors.white,
+ fontSize: 22.0,
+ fontWeight: FontWeight.w600,
+ ),
+ ),
+ SizedBox(height: screenHeight * 0.01),
+ Text(
+ 'If you feel sick with any COVID-19 symptoms, please call or text us immediately for help',
+ style: const TextStyle(
+ color: Colors.white70,
+ fontSize: 15.0,
+ ),
+ ),
+ SizedBox(height: screenHeight * 0.03),
+ Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ FlatButton.icon(
+ padding: const EdgeInsets.symmetric(
+ vertical: 10.0,
+ horizontal: 20.0,
+ ),
+ onPressed: () {},
+ color: Colors.red,
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(30.0),
+ ),
+ icon: const Icon(
+ Icons.phone,
+ color: Colors.white,
+ ),
+ label: Text(
+ 'Call Now',
+ style: Styles.buttonTextStyle,
+ ),
+ textColor: Colors.white,
+ ),
+ FlatButton.icon(
+ padding: const EdgeInsets.symmetric(
+ vertical: 10.0,
+ horizontal: 20.0,
+ ),
+ onPressed: () {},
+ color: Colors.blue,
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(30.0),
+ ),
+ icon: const Icon(
+ Icons.chat_bubble,
+ color: Colors.white,
+ ),
+ label: Text(
+ 'Send SMS',
+ style: Styles.buttonTextStyle,
+ ),
+ textColor: Colors.white,
+ ),
+ ],
+ ),
+ ],
+ )
+ ],
+ ),
+ ),
+ );
+ }
+
+ SliverToBoxAdapter _buildPreventionTips(double screenHeight) {
+ return SliverToBoxAdapter(
+ child: Container(
+ padding: const EdgeInsets.all(20.0),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Text(
+ 'Prevention Tips',
+ style: const TextStyle(
+ fontSize: 22.0,
+ fontWeight: FontWeight.w600,
+ ),
+ ),
+ const SizedBox(height: 20.0),
+ Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: prevention
+ .map((e) => Column(
+ children: [
+ Image.asset(
+ e.keys.first,
+ height: screenHeight * 0.12,
+ ),
+ SizedBox(height: screenHeight * 0.015),
+ Text(
+ e.values.first,
+ style: const TextStyle(
+ fontSize: 16.0,
+ fontWeight: FontWeight.w500,
+ ),
+ textAlign: TextAlign.center,
+ )
+ ],
+ ))
+ .toList(),
+ ),
+ ],
+ ),
+ ),
+ );
+ }
+
+ SliverToBoxAdapter _buildYourOwnTest(double screenHeight) {
+ return SliverToBoxAdapter(
+ child: Container(
+ margin: const EdgeInsets.symmetric(
+ vertical: 10.0,
+ horizontal: 20.0,
+ ),
+ padding: const EdgeInsets.all(10.0),
+ height: screenHeight * 0.15,
+ decoration: BoxDecoration(
+ gradient: LinearGradient(
+ colors: [Color(0xFFAD9FE4), Palette.primaryColor],
+ ),
+ borderRadius: BorderRadius.circular(20.0),
+ ),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceAround,
+ children: [
+ Image.asset('assets/images/own_test.png'),
+ Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Text(
+ 'Do your own test!',
+ style: const TextStyle(
+ color: Colors.white,
+ fontSize: 18.0,
+ fontWeight: FontWeight.bold,
+ ),
+ ),
+ SizedBox(height: screenHeight * 0.01),
+ Text(
+ 'Follow the instructions\nto do your own test.',
+ style: const TextStyle(
+ color: Colors.white,
+ fontSize: 16.0,
+ ),
+ maxLines: 2,
+ ),
+ ],
+ )
+ ],
+ ),
+ ),
+ );
+ }
+}
diff --git a/medicare/lib/screens/register_screen.dart b/medicare/lib/screens/register_screen.dart
new file mode 100644
index 0000000..328e73b
--- /dev/null
+++ b/medicare/lib/screens/register_screen.dart
@@ -0,0 +1,180 @@
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:medicare/constants.dart';
+import 'package:medicare/rounded_button.dart';
+
+import 'package:firebase_auth/firebase_auth.dart';
+import 'package:medicare/screens/medi_home.dart';
+import 'package:cloud_firestore/cloud_firestore.dart';
+import 'package:medicare/services/auth.dart';
+import 'package:medicare/services/database.dart';
+
+
+import 'package:modal_progress_hud/modal_progress_hud.dart';
+
+class RegistrationScreen extends StatefulWidget {
+ static const String id = 'registration_screen';
+ @override
+ _RegistrationScreenState createState() => _RegistrationScreenState();
+}
+
+class _RegistrationScreenState extends State {
+ final _auth = FirebaseAuth.instance ;
+
+ final CollectionReference _collectionReference = Firestore.instance
+ .collection('users');
+ final AuthService _authService = AuthService();
+
+ bool showSpinner = false;
+ String email;
+ String password;
+ String name;
+ int age;
+
+
+
+
+ @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) {
+ //Do something with the user input.
+ name = value;
+ },
+ decoration: kTextFieldDecoration.copyWith(hintText: "Enter your Name"),
+ ),
+ SizedBox(
+ height: 8.0,
+ ),
+ TextField(
+
+ textAlign: TextAlign.center,
+ keyboardType: TextInputType.number,
+ onChanged: (value) {
+ //Do something with the user input.
+ age = int.parse(value);
+ },
+ decoration: kTextFieldDecoration.copyWith(hintText: "Enter your Age"),
+ ),
+ SizedBox(
+ height: 8.0,
+ ),
+ TextField(
+ keyboardType: TextInputType.emailAddress,
+ textAlign: TextAlign.center,
+ onChanged: (value) {
+ //Do something with the user input.
+ email = value;
+ },
+ decoration: kTextFieldDecoration.copyWith(hintText: "Enter your email"),
+ ),
+ SizedBox(
+ height: 8.0,
+ ),
+ TextField(
+ obscureText: true,
+ textAlign: TextAlign.center,
+ onChanged: (value) {
+ //Do something with the user input.
+ password = value;
+ },
+ decoration: kTextFieldDecoration.copyWith(hintText: "Enter your password"),
+ ),
+ SizedBox(
+ height: 24.0,
+ ),
+ RoundedButton(
+ title: "Register",
+ onPressed: () async{
+ setState(() {
+ showSpinner = true;
+ });
+ try {
+
+ AuthResult result = await _auth.createUserWithEmailAndPassword(email: email, password: password);
+ FirebaseUser user = result.user;
+
+
+ _collectionReference.document(user.uid).setData({
+ 'name': name,
+ 'email': email,
+ 'age': age
+ }).then((value){
+ print("Successful");
+ setState(() {
+ showSpinner = false;
+ });
+ Navigator.of(context).push(MaterialPageRoute(builder: (context) => MediHome()));
+ }).catchError((error) {
+ print("Failed to add user: $error");
+
+ });
+
+
+
+
+
+ /*
+ dynamic result = _authService.registerWithEmaillAndPassword(email, password);
+
+ if(result != null){
+ print("RESULT"+result);
+
+ DatabaseService _database = DatabaseService(uid:result.uid);
+
+ dynamic response = _database.updateUserData(name, email, age);
+
+
+ print(result);
+
+
+ Navigator.of(context).push(MaterialPageRoute(builder: (context) => MediHome()));
+ }
+
+ else{
+ print("result null");
+ }
+ */
+
+
+ }
+ catch (e){
+ print(e);
+ }
+
+ },
+ color: Colors.lightBlueAccent,
+
+
+ ),
+ ],
+ ),
+ ),
+ ),
+ );
+ }
+}
\ No newline at end of file
diff --git a/medicare/lib/screens/results_page.dart b/medicare/lib/screens/results_page.dart
new file mode 100644
index 0000000..04c3eb9
--- /dev/null
+++ b/medicare/lib/screens/results_page.dart
@@ -0,0 +1,106 @@
+import 'package:medicare/components/bottom_button.dart';
+import 'package:medicare/components/reusable_card.dart';
+import 'package:flutter/material.dart';
+
+import 'constants.dart';
+
+class ResultsPage extends StatelessWidget {
+ ResultsPage(
+ {@required this.interpretation,
+ @required this.bmiResult,
+ @required this.resultText});
+
+ final String bmiResult;
+ final String resultText;
+ final String interpretation;
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ appBar: AppBar(
+ title: Text(
+ 'BMI CALCULATOR',
+ style: kAppBarTextStyle,
+ ),
+ ),
+ body: SingleChildScrollView(
+ child: Column(
+ children: [
+ Container(
+ padding: EdgeInsets.all(16.0),
+ alignment: Alignment.bottomLeft,
+ child: Padding(
+ padding: EdgeInsets.symmetric(vertical: 8.0),
+ child: Text(
+ 'Your Result',
+ style: kTitleTextStyle,
+ ),
+ ),
+ ),
+ Padding(
+ padding: EdgeInsets.fromLTRB(16.0, 0.0, 16.0, 32.0),
+ child: ReusableCard(
+ color: kActiveCardColor,
+ cardChild: Padding(
+ padding: EdgeInsets.all(16.0),
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.spaceEvenly,
+ crossAxisAlignment: CrossAxisAlignment.center,
+ children: [
+ Text(
+ resultText.toUpperCase(),
+ style: kResultTextStyle,
+
+ ),
+ Text(
+ bmiResult,
+ style: kBMITextStyle,
+ ),
+ Text(
+ 'Normal BMI range:',
+ style: kLabelTextStyle.copyWith(
+ fontSize: 20.0,
+ fontFamily: 'NunitoSemiBold',
+ ),
+ ),
+ SizedBox(height: 4.0),
+ Text('18,5 - 25 kg/m2',
+ style: kNumberTextStyle.copyWith(
+ fontSize: 20.0,
+ fontFamily: 'NunitoSemiBold',
+ )),
+ SizedBox(height: 32.0),
+ Text(
+ interpretation,
+ textAlign: TextAlign.center,
+ style: kBodyTextStyle,
+ ),
+ SizedBox(height: 32.0),
+ FlatButton(
+ color: kSaveButtonBackgroundColor,
+ padding: EdgeInsets.fromLTRB(50.0, 20.0, 50.0, 20.0),
+ child: Text('SAVE RESULT',
+ style: TextStyle(
+ color: Colors.white,
+ fontWeight: FontWeight.w800,
+ letterSpacing: 1.2,
+ fontFamily: 'Nunito')),
+ onPressed: () {},
+ )
+ ],
+ ),
+ ),
+ ),
+ ),
+ ],
+ ),
+ ),
+ bottomNavigationBar: BottomButton(
+ buttonTitle: 'RE-CALCULATE',
+ onTap: () {
+ Navigator.pop(context);
+ },
+ ),
+ );
+ }
+}
diff --git a/medicare/lib/screens/stats_screen.dart b/medicare/lib/screens/stats_screen.dart
new file mode 100644
index 0000000..92966a2
--- /dev/null
+++ b/medicare/lib/screens/stats_screen.dart
@@ -0,0 +1,111 @@
+import 'package:bubble_tab_indicator/bubble_tab_indicator.dart';
+import 'package:flutter/material.dart';
+import 'package:medicare/config/palette.dart';
+import 'package:medicare/config/styles.dart';
+import 'package:medicare/data/data.dart';
+import 'package:medicare/widgets/widgets.dart';
+
+class StatsScreen extends StatefulWidget {
+ @override
+ _StatsScreenState createState() => _StatsScreenState();
+}
+
+class _StatsScreenState extends State {
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ backgroundColor: Palette.primaryColor,
+ appBar: CustomAppBar(),
+ body: CustomScrollView(
+ physics: ClampingScrollPhysics(),
+ slivers: [
+ _buildHeader(),
+ _buildRegionTabBar(),
+ _buildStatsTabBar(),
+ SliverPadding(
+ padding: const EdgeInsets.symmetric(horizontal: 10.0),
+ sliver: SliverToBoxAdapter(
+ child: StatsGrid(),
+ ),
+ ),
+ SliverPadding(
+ padding: const EdgeInsets.only(top: 20.0),
+ sliver: SliverToBoxAdapter(
+ child: CovidBarChart(covidCases: covidUSADailyNewCases),
+ ),
+ ),
+ ],
+ ),
+ );
+ }
+
+ SliverPadding _buildHeader() {
+ return SliverPadding(
+ padding: const EdgeInsets.all(20.0),
+ sliver: SliverToBoxAdapter(
+ child: Text(
+ 'Statistics',
+ style: const TextStyle(
+ color: Colors.white,
+ fontSize: 25.0,
+ fontWeight: FontWeight.bold,
+ ),
+ ),
+ ),
+ );
+ }
+
+ SliverToBoxAdapter _buildRegionTabBar() {
+ return SliverToBoxAdapter(
+ child: DefaultTabController(
+ length: 2,
+ child: Container(
+ margin: const EdgeInsets.symmetric(horizontal: 20.0),
+ height: 50.0,
+ decoration: BoxDecoration(
+ color: Colors.white24,
+ borderRadius: BorderRadius.circular(25.0),
+ ),
+ child: TabBar(
+ indicator: BubbleTabIndicator(
+ tabBarIndicatorSize: TabBarIndicatorSize.tab,
+ indicatorHeight: 40.0,
+ indicatorColor: Colors.white,
+ ),
+ labelStyle: Styles.tabTextStyle,
+ labelColor: Colors.black,
+ unselectedLabelColor: Colors.white,
+ tabs: [
+ Text('My Country'),
+ Text('Global'),
+ ],
+ onTap: (index) {},
+ ),
+ ),
+ ),
+ );
+ }
+
+ SliverPadding _buildStatsTabBar() {
+ return SliverPadding(
+ padding: const EdgeInsets.all(20.0),
+ sliver: SliverToBoxAdapter(
+ child: DefaultTabController(
+ length: 3,
+ child: TabBar(
+ indicatorColor: Colors.transparent,
+ labelStyle: Styles.tabTextStyle,
+ labelColor: Colors.white,
+ unselectedLabelColor: Colors.white60,
+ tabs: [
+ Text('Total'),
+ Text('Today'),
+ Text('Yesterday'),
+ ],
+ onTap: (index) {},
+ ),
+ ),
+ ),
+ );
+ }
+}
diff --git a/medicare/lib/screens/video_call.dart b/medicare/lib/screens/video_call.dart
new file mode 100644
index 0000000..465295d
--- /dev/null
+++ b/medicare/lib/screens/video_call.dart
@@ -0,0 +1,139 @@
+import 'dart:async';
+
+import 'package:agora_rtc_engine/agora_rtc_engine.dart';
+import 'package:flutter/material.dart';
+import 'package:permission_handler/permission_handler.dart';
+
+import 'package:medicare/video_call/call.dart';
+
+class IndexPage extends StatefulWidget {
+ @override
+ State createState() => IndexState();
+}
+
+class IndexState extends State {
+ /// create a channelController to retrieve text value
+ final _channelController = TextEditingController();
+
+ /// if channel textField is validated to have error
+ bool _validateError = true;
+
+ ClientRole _role = ClientRole.Broadcaster;
+
+ @override
+ void dispose() {
+ // dispose input controller
+ _channelController.dispose();
+ super.dispose();
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ appBar: AppBar(
+ title: Text('Medicare '),
+ ),
+ body: Center(
+ child: Container(
+ padding: const EdgeInsets.symmetric(horizontal: 20),
+ height: 400,
+ child: Column(
+ children: [
+ Row(
+ children: [
+ Expanded(
+ child: TextField(
+ controller: _channelController,
+ decoration: InputDecoration(
+ errorText:
+ _validateError ? 'Channel name is mandatory' : null,
+ border: UnderlineInputBorder(
+ borderSide: BorderSide(width: 1),
+ ),
+ hintText: 'Channel name',
+ ),
+ ))
+ ],
+ ),
+ Column(
+ children: [
+ ListTile(
+ title: Text(ClientRole.Broadcaster.toString()),
+ leading: Radio(
+ value: ClientRole.Broadcaster,
+ groupValue: _role,
+ onChanged: (ClientRole value) {
+ setState(() {
+ _role = value;
+ });
+ },
+ ),
+ ),
+ ListTile(
+ title: Text(ClientRole.Audience.toString()),
+ leading: Radio(
+ value: ClientRole.Audience,
+ groupValue: _role,
+ onChanged: (ClientRole value) {
+ setState(() {
+ _role = value;
+ });
+ },
+ ),
+ )
+ ],
+ ),
+ Padding(
+ padding: const EdgeInsets.symmetric(vertical: 20),
+ child: Row(
+ children: [
+ Expanded(
+ child: RaisedButton(
+ onPressed: onJoin,
+ child: Text('Join'),
+ color: Colors.blueAccent,
+ textColor: Colors.white,
+ ),
+ )
+ ],
+ ),
+ )
+ ],
+ ),
+ ),
+ ),
+ );
+ }
+
+ Future onJoin() async {
+ // update input validation
+ setState(() {
+ _channelController.text.isEmpty
+ ? _validateError = true
+ : _validateError = false;
+ });
+ if (_channelController.text.isNotEmpty) {
+ // await for camera and mic permissions before pushing video page
+ await _handleCameraAndMic();
+ // push video page with given channel name
+ await Navigator.push(
+ context,
+ MaterialPageRoute(
+ builder: (context) => CallPage(
+ channelName: _channelController.text,
+ role: _role,
+ ),
+ ),
+ );
+ }
+ }
+
+ Future _handleCameraAndMic() async {
+ await PermissionHandler().requestPermissions(
+ [PermissionGroup.camera, PermissionGroup.microphone],
+ );
+ }
+}
+class Permissiongroup {
+ static var microphone;
+}
\ No newline at end of file
diff --git a/medicare/lib/services/auth.dart b/medicare/lib/services/auth.dart
new file mode 100644
index 0000000..a1892f1
--- /dev/null
+++ b/medicare/lib/services/auth.dart
@@ -0,0 +1,34 @@
+import 'package:firebase_auth/firebase_auth.dart';
+import 'package:medicare/models/user.dart';
+import 'package:medicare/services/database.dart';
+
+class AuthService {
+
+ final FirebaseAuth _auth = FirebaseAuth.instance;
+
+ User _createUserFromFB(FirebaseUser user) {
+ return user != null ? User(uId: user.uid) : null;
+ }
+
+
+ //register
+ Future registerWithEmaillAndPassword(String email, String password) async{
+
+ try{
+ AuthResult result = await _auth.createUserWithEmailAndPassword(email: email, password: password);
+ FirebaseUser user = result.user;
+ return user;
+
+ // DatabaseService _database = DatabaseService(uid:user.uid);
+
+ //_database.updateUserData('0', 'New Brew Crew Member', 100);
+
+ //return _createUserFromFB(user);
+ }catch(e){
+ print(e.toString());
+ return null;
+ }
+ }
+
+
+}
\ No newline at end of file
diff --git a/medicare/lib/services/database.dart b/medicare/lib/services/database.dart
new file mode 100644
index 0000000..9f81cc9
--- /dev/null
+++ b/medicare/lib/services/database.dart
@@ -0,0 +1,86 @@
+
+import 'package:cloud_firestore/cloud_firestore.dart';
+import 'package:medicare/models/doctor.dart';
+
+
+class DatabaseService {
+
+ final String uid;
+
+ DatabaseService({this.uid});
+
+ final CollectionReference _collectionReference = Firestore.instance
+ .collection('users');
+
+ final CollectionReference _doctorsReference = Firestore.instance
+ .collection('doctors');
+
+ Future updateUserData(String name, String email, int age) async {
+ print("inside updateUserData");
+ return await _collectionReference.document(uid).setData({
+ 'name': name,
+ 'email': email,
+ 'age': age
+ }).then((value){
+ print("Successful");
+ }).catchError((error) => print("Failed to add user: $error"));
+ }
+
+ //get users and data
+ Stream> get doctors {
+
+ return _doctorsReference.snapshots().map(_convertToBrewList);
+ }
+
+ List _convertToBrewList(QuerySnapshot snapshot){
+
+ return snapshot.documents.map((doc) {
+ return Doctor(
+
+ /*
+ final String name;
+ final String email;
+ final String specialist;
+ final int experience;
+ final int rating;
+ */
+ name: doc.data['name'] ?? '',
+ experience: doc.data['experience'] ?? 0,
+ specialist: doc.data['specialist'] ?? '0',
+ rating: doc.data['rating'] ?? 0
+ );
+ }).toList();
+ }
+
+}
+/*
+
+
+
+
+//convert user data to user model
+ UserData convertToUserDataFromDocumentSnapshot(DocumentSnapshot snapshot){
+
+ return UserData(
+ uid: uid,
+ name: snapshot.data['name'],
+ sugar: snapshot.data['sugar'],
+ strength: snapshot.data['strength']
+ );
+ }
+//get users and data
+ Stream> get brew {
+
+ return _collectionReference.snapshots().map(_convertToBrewList);
+ }
+
+
+//get user data stream
+ Stream get userData {
+ return _collectionReference.document(uid).snapshots().map(convertToUserDataFromDocumentSnapshot);
+ }
+
+
+
+}
+*/
\ No newline at end of file
diff --git a/medicare/lib/video_call/call.dart b/medicare/lib/video_call/call.dart
new file mode 100644
index 0000000..420efbc
--- /dev/null
+++ b/medicare/lib/video_call/call.dart
@@ -0,0 +1,324 @@
+import 'dart:async';
+
+import 'package:agora_rtc_engine/agora_rtc_engine.dart';
+import 'package:flutter/material.dart';
+
+import 'package:medicare/video_call/settings.dart';
+
+class CallPage extends StatefulWidget {
+ /// non-modifiable channel name of the page
+ final String channelName;
+
+ /// non-modifiable client role of the page
+ final ClientRole role;
+
+ /// Creates a call page with given channel name.
+ const CallPage({Key key, this.channelName, this.role}) : super(key: key);
+
+ @override
+ _CallPageState createState() => _CallPageState();
+}
+
+class _CallPageState extends State {
+ static final _users = [];
+ final _infoStrings = [];
+ bool muted = false;
+
+ @override
+ void dispose() {
+ // clear users
+ _users.clear();
+ // destroy sdk
+ AgoraRtcEngine.leaveChannel();
+ AgoraRtcEngine.destroy();
+ super.dispose();
+ }
+
+ @override
+ void initState() {
+ super.initState();
+ // initialize agora sdk
+ initialize();
+ }
+
+ Future initialize() async {
+ if (APP_ID.isEmpty) {
+ setState(() {
+ _infoStrings.add(
+ 'APP_ID missing, please provide your APP_ID in settings.dart',
+ );
+ _infoStrings.add('Agora Engine is not starting');
+ });
+ return;
+ }
+
+ await _initAgoraRtcEngine();
+ _addAgoraEventHandlers();
+ await AgoraRtcEngine.enableWebSdkInteroperability(true);
+ VideoEncoderConfiguration configuration = VideoEncoderConfiguration();
+ configuration.dimensions = Size(1920, 1080);
+ await AgoraRtcEngine.setVideoEncoderConfiguration(configuration);
+ await AgoraRtcEngine.joinChannel(null, widget.channelName, null, 0);
+ }
+
+ /// Create agora sdk instance and initialize
+ Future _initAgoraRtcEngine() async {
+ await AgoraRtcEngine.create(APP_ID);
+ await AgoraRtcEngine.enableVideo();
+ await AgoraRtcEngine.setChannelProfile(ChannelProfile.LiveBroadcasting);
+ await AgoraRtcEngine.setClientRole(widget.role);
+ }
+
+ /// Add agora event handlers
+ void _addAgoraEventHandlers() {
+ AgoraRtcEngine.onError = (dynamic code) {
+ setState(() {
+ final info = 'onError: $code';
+ _infoStrings.add(info);
+ });
+ };
+
+ AgoraRtcEngine.onJoinChannelSuccess = (
+ String channel,
+ int uid,
+ int elapsed,
+ ) {
+ setState(() {
+ final info = 'onJoinChannel: $channel, uid: $uid';
+ _infoStrings.add(info);
+ });
+ };
+
+ AgoraRtcEngine.onLeaveChannel = () {
+ setState(() {
+ _infoStrings.add('onLeaveChannel');
+ _users.clear();
+ });
+ };
+
+ AgoraRtcEngine.onUserJoined = (int uid, int elapsed) {
+ setState(() {
+ final info = 'userJoined: $uid';
+ _infoStrings.add(info);
+ _users.add(uid);
+ });
+ };
+
+ AgoraRtcEngine.onUserOffline = (int uid, int reason) {
+ setState(() {
+ final info = 'userOffline: $uid';
+ _infoStrings.add(info);
+ _users.remove(uid);
+ });
+ };
+
+ AgoraRtcEngine.onFirstRemoteVideoFrame = (
+ int uid,
+ int width,
+ int height,
+ int elapsed,
+ ) {
+ setState(() {
+ final info = 'firstRemoteVideo: $uid ${width}x $height';
+ _infoStrings.add(info);
+ });
+ };
+ }
+
+ /// Helper function to get list of native views
+ List _getRenderViews() {
+ final List list = [];
+ if (widget.role == ClientRole.Broadcaster) {
+ list.add(AgoraRenderWidget(0, local: true, preview: true));
+ }
+ _users.forEach((int uid) => list.add(AgoraRenderWidget(uid)));
+ return list;
+ }
+
+ /// Video view wrapper
+ Widget _videoView(view) {
+ return Expanded(child: Container(child: view));
+ }
+
+ /// Video view row wrapper
+ Widget _expandedVideoRow(List views) {
+ final wrappedViews = views.map(_videoView).toList();
+ return Expanded(
+ child: Row(
+ children: wrappedViews,
+ ),
+ );
+ }
+
+ /// Video layout wrapper
+ Widget _viewRows() {
+ final views = _getRenderViews();
+ switch (views.length) {
+ case 1:
+ return Container(
+ child: Column(
+ children: [_videoView(views[0])],
+ ));
+ case 2:
+ return Container(
+ child: Column(
+ children: [
+ _expandedVideoRow([views[0]]),
+ _expandedVideoRow([views[1]])
+ ],
+ ));
+ case 3:
+ return Container(
+ child: Column(
+ children: [
+ _expandedVideoRow(views.sublist(0, 2)),
+ _expandedVideoRow(views.sublist(2, 3))
+ ],
+ ));
+ case 4:
+ return Container(
+ child: Column(
+ children: [
+ _expandedVideoRow(views.sublist(0, 2)),
+ _expandedVideoRow(views.sublist(2, 4))
+ ],
+ ));
+ default:
+ }
+ return Container();
+ }
+
+ /// Toolbar layout
+ Widget _toolbar() {
+ if (widget.role == ClientRole.Audience) return Container();
+ return Container(
+ alignment: Alignment.bottomCenter,
+ padding: const EdgeInsets.symmetric(vertical: 48),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ RawMaterialButton(
+ onPressed: _onToggleMute,
+ child: Icon(
+ muted ? Icons.mic_off : Icons.mic,
+ color: muted ? Colors.white : Colors.blueAccent,
+ size: 20.0,
+ ),
+ shape: CircleBorder(),
+ elevation: 2.0,
+ fillColor: muted ? Colors.blueAccent : Colors.white,
+ padding: const EdgeInsets.all(12.0),
+ ),
+ RawMaterialButton(
+ onPressed: () => _onCallEnd(context),
+ child: Icon(
+ Icons.call_end,
+ color: Colors.white,
+ size: 35.0,
+ ),
+ shape: CircleBorder(),
+ elevation: 2.0,
+ fillColor: Colors.redAccent,
+ padding: const EdgeInsets.all(15.0),
+ ),
+ RawMaterialButton(
+ onPressed: _onSwitchCamera,
+ child: Icon(
+ Icons.switch_camera,
+ color: Colors.blueAccent,
+ size: 20.0,
+ ),
+ shape: CircleBorder(),
+ elevation: 2.0,
+ fillColor: Colors.white,
+ padding: const EdgeInsets.all(12.0),
+ )
+ ],
+ ),
+ );
+ }
+
+ /// Info panel to show logs
+ Widget _panel() {
+ return Container(
+ padding: const EdgeInsets.symmetric(vertical: 48),
+ alignment: Alignment.bottomCenter,
+ child: FractionallySizedBox(
+ heightFactor: 0.5,
+ child: Container(
+ padding: const EdgeInsets.symmetric(vertical: 48),
+ child: ListView.builder(
+ reverse: true,
+ itemCount: _infoStrings.length,
+ itemBuilder: (BuildContext context, int index) {
+ if (_infoStrings.isEmpty) {
+ return null;
+ }
+ return Padding(
+ padding: const EdgeInsets.symmetric(
+ vertical: 3,
+ horizontal: 10,
+ ),
+ child: Row(
+ mainAxisSize: MainAxisSize.min,
+ children: [
+ Flexible(
+ child: Container(
+ padding: const EdgeInsets.symmetric(
+ vertical: 2,
+ horizontal: 5,
+ ),
+ decoration: BoxDecoration(
+ color: Colors.yellowAccent,
+ borderRadius: BorderRadius.circular(5),
+ ),
+ child: Text(
+ _infoStrings[index],
+ style: TextStyle(color: Colors.blueGrey),
+ ),
+ ),
+ )
+ ],
+ ),
+ );
+ },
+ ),
+ ),
+ ),
+ );
+ }
+
+ void _onCallEnd(BuildContext context) {
+ Navigator.pop(context);
+ }
+
+ void _onToggleMute() {
+ setState(() {
+ muted = !muted;
+ });
+ AgoraRtcEngine.muteLocalAudioStream(muted);
+ }
+
+ void _onSwitchCamera() {
+ AgoraRtcEngine.switchCamera();
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ appBar: AppBar(
+ title: Text('Agora Flutter QuickStart'),
+ ),
+ backgroundColor: Colors.black,
+ body: Center(
+ child: Stack(
+ children: [
+ _viewRows(),
+ _panel(),
+ _toolbar(),
+ ],
+ ),
+ ),
+ );
+ }
+}
\ No newline at end of file
diff --git a/medicare/lib/video_call/settings.dart b/medicare/lib/video_call/settings.dart
new file mode 100644
index 0000000..ba8b1b3
--- /dev/null
+++ b/medicare/lib/video_call/settings.dart
@@ -0,0 +1,2 @@
+// Agora AppId
+const APP_ID = "c0c3bbe6cf5b4771ad8019c8dc192631";
\ No newline at end of file
diff --git a/medicare/lib/widgets/country_dropdown.dart b/medicare/lib/widgets/country_dropdown.dart
new file mode 100644
index 0000000..91d35da
--- /dev/null
+++ b/medicare/lib/widgets/country_dropdown.dart
@@ -0,0 +1,54 @@
+import 'package:flutter/material.dart';
+
+class CountryDropdown extends StatelessWidget {
+ final List countries;
+ final String country;
+ final Function(String) onChanged;
+
+ const CountryDropdown({
+ @required this.countries,
+ @required this.country,
+ @required this.onChanged,
+ });
+
+ @override
+ Widget build(BuildContext context) {
+ return Container(
+ padding: const EdgeInsets.symmetric(horizontal: 12.0),
+ height: 40.0,
+ decoration: BoxDecoration(
+ color: Colors.white,
+ borderRadius: BorderRadius.circular(30.0),
+ ),
+ child: DropdownButtonHideUnderline(
+ child: DropdownButton(
+ value: country,
+ items: countries
+ .map((e) => DropdownMenuItem(
+ child: Row(
+ children: [
+ CircleAvatar(
+ radius: 12.0,
+ child: Image.asset(
+ 'assets/images/${e.toLowerCase()}_flag.png',
+ ),
+ ),
+ const SizedBox(width: 8.0),
+ Text(
+ e,
+ style: const TextStyle(
+ fontSize: 16.0,
+ fontWeight: FontWeight.bold,
+ ),
+ )
+ ],
+ ),
+ value: e,
+ ))
+ .toList(),
+ onChanged: onChanged,
+ ),
+ ),
+ );
+ }
+}
diff --git a/medicare/lib/widgets/covid_bar_chart.dart b/medicare/lib/widgets/covid_bar_chart.dart
new file mode 100644
index 0000000..368521a
--- /dev/null
+++ b/medicare/lib/widgets/covid_bar_chart.dart
@@ -0,0 +1,114 @@
+import 'package:fl_chart/fl_chart.dart';
+import 'package:flutter/material.dart';
+import 'package:medicare/config/styles.dart';
+
+class CovidBarChart extends StatelessWidget {
+ final List covidCases;
+
+ const CovidBarChart({@required this.covidCases});
+
+ @override
+ Widget build(BuildContext context) {
+ return Container(
+ height: 350.0,
+ decoration: BoxDecoration(
+ color: Colors.white,
+ borderRadius: BorderRadius.only(
+ topLeft: Radius.circular(20.0),
+ topRight: Radius.circular(20.0),
+ ),
+ ),
+ child: Column(
+ children: [
+ Container(
+ padding: const EdgeInsets.all(20.0),
+ alignment: Alignment.centerLeft,
+ child: Text(
+ 'Daily New Cases',
+ style: const TextStyle(
+ fontSize: 22.0,
+ fontWeight: FontWeight.bold,
+ ),
+ ),
+ ),
+ Container(
+ width: MediaQuery.of(context).size.width * 0.85,
+ child: BarChart(
+ BarChartData(
+ alignment: BarChartAlignment.spaceAround,
+ maxY: 16.0,
+ barTouchData: BarTouchData(enabled: false),
+ titlesData: FlTitlesData(
+ show: true,
+ bottomTitles: SideTitles(
+ margin: 10.0,
+ showTitles: true,
+ textStyle: Styles.chartLabelsTextStyle,
+ rotateAngle: 35.0,
+ getTitles: (double value) {
+ switch (value.toInt()) {
+ case 0:
+ return 'May 24';
+ case 1:
+ return 'May 25';
+ case 2:
+ return 'May 26';
+ case 3:
+ return 'May 27';
+ case 4:
+ return 'May 28';
+ case 5:
+ return 'May 29';
+ case 6:
+ return 'May 30';
+ default:
+ return '';
+ }
+ },
+ ),
+ leftTitles: SideTitles(
+ margin: 10.0,
+ showTitles: true,
+ textStyle: Styles.chartLabelsTextStyle,
+ getTitles: (value) {
+ if (value == 0) {
+ return '0';
+ } else if (value % 3 == 0) {
+ return '${value ~/ 3 * 5}K';
+ }
+ return '';
+ }),
+ ),
+ gridData: FlGridData(
+ show: true,
+ checkToShowHorizontalLine: (value) => value % 3 == 0,
+ getDrawingHorizontalLine: (value) => FlLine(
+ color: Colors.black12,
+ strokeWidth: 1.0,
+ dashArray: [5],
+ ),
+ ),
+ borderData: FlBorderData(show: false),
+ barGroups: covidCases
+ .asMap()
+ .map((key, value) => MapEntry(
+ key,
+ BarChartGroupData(
+ x: key,
+ barRods: [
+ BarChartRodData(
+ y: value,
+ color: Colors.red,
+ ),
+ ],
+ )))
+ .values
+ .toList(),
+ ),
+ ),
+ ),
+ ],
+ ),
+ );
+ }
+}
diff --git a/medicare/lib/widgets/custom_app_bar.dart b/medicare/lib/widgets/custom_app_bar.dart
new file mode 100644
index 0000000..669b441
--- /dev/null
+++ b/medicare/lib/widgets/custom_app_bar.dart
@@ -0,0 +1,27 @@
+import 'package:flutter/material.dart';
+import 'package:medicare/config/palette.dart';
+
+class CustomAppBar extends StatelessWidget with PreferredSizeWidget {
+ @override
+ Widget build(BuildContext context) {
+ return AppBar(
+ backgroundColor: Palette.primaryColor,
+ elevation: 0.0,
+ leading: IconButton(
+ icon: const Icon(Icons.menu),
+ iconSize: 28.0,
+ onPressed: () {},
+ ),
+ actions: [
+ IconButton(
+ icon: const Icon(Icons.notifications_none),
+ iconSize: 28.0,
+ onPressed: () {},
+ ),
+ ],
+ );
+ }
+
+ @override
+ Size get preferredSize => Size.fromHeight(kToolbarHeight);
+}
diff --git a/medicare/lib/widgets/stats_grid.dart b/medicare/lib/widgets/stats_grid.dart
new file mode 100644
index 0000000..4736fe5
--- /dev/null
+++ b/medicare/lib/widgets/stats_grid.dart
@@ -0,0 +1,66 @@
+import 'package:flutter/material.dart';
+
+class StatsGrid extends StatelessWidget {
+ @override
+ Widget build(BuildContext context) {
+ return Container(
+ height: MediaQuery.of(context).size.height * 0.25,
+ child: Column(
+ children: [
+ Flexible(
+ child: Row(
+ children: [
+ _buildStatCard('Total Cases', '1.81 M', Colors.orange),
+ _buildStatCard('Deaths', '105 K', Colors.red),
+ ],
+ ),
+ ),
+ Flexible(
+ child: Row(
+ children: [
+ _buildStatCard('Recovered', '391 K', Colors.green),
+ _buildStatCard('Active', '1.31 M', Colors.lightBlue),
+ _buildStatCard('Critical', 'N/A', Colors.purple),
+ ],
+ ),
+ ),
+ ],
+ ),
+ );
+ }
+
+ Expanded _buildStatCard(String title, String count, MaterialColor color) {
+ return Expanded(
+ child: Container(
+ margin: const EdgeInsets.all(8.0),
+ padding: const EdgeInsets.all(10.0),
+ decoration: BoxDecoration(
+ color: color,
+ borderRadius: BorderRadius.circular(10.0),
+ ),
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Text(
+ title,
+ style: const TextStyle(
+ color: Colors.white,
+ fontSize: 15.0,
+ fontWeight: FontWeight.w600,
+ ),
+ ),
+ Text(
+ count,
+ style: const TextStyle(
+ color: Colors.white,
+ fontSize: 20.0,
+ fontWeight: FontWeight.bold,
+ ),
+ ),
+ ],
+ ),
+ ),
+ );
+ }
+}
diff --git a/medicare/lib/widgets/widgets.dart b/medicare/lib/widgets/widgets.dart
new file mode 100644
index 0000000..f5d7f5b
--- /dev/null
+++ b/medicare/lib/widgets/widgets.dart
@@ -0,0 +1,4 @@
+export 'custom_app_bar.dart';
+export 'country_dropdown.dart';
+export 'stats_grid.dart';
+export 'covid_bar_chart.dart';
diff --git a/medicare/pubspec.lock b/medicare/pubspec.lock
new file mode 100644
index 0000000..01b0f6d
--- /dev/null
+++ b/medicare/pubspec.lock
@@ -0,0 +1,425 @@
+# Generated by pub
+# See https://dart.dev/tools/pub/glossary#lockfile
+packages:
+ agora_rtc_engine:
+ dependency: "direct main"
+ description:
+ name: agora_rtc_engine
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.0.15"
+ animated_text_kit:
+ dependency: "direct main"
+ description:
+ name: animated_text_kit
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.2.0"
+ archive:
+ dependency: transitive
+ description:
+ name: archive
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.0.13"
+ args:
+ dependency: transitive
+ description:
+ name: args
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.6.0"
+ async:
+ dependency: transitive
+ description:
+ name: async
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.4.1"
+ boolean_selector:
+ dependency: transitive
+ description:
+ name: boolean_selector
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.0.0"
+ bubble_tab_indicator:
+ dependency: "direct main"
+ description:
+ name: bubble_tab_indicator
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.1.4"
+ charcode:
+ dependency: transitive
+ description:
+ name: charcode
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.1.3"
+ cloud_firestore:
+ dependency: "direct main"
+ description:
+ name: cloud_firestore
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.13.7"
+ cloud_firestore_platform_interface:
+ dependency: transitive
+ description:
+ name: cloud_firestore_platform_interface
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.1.2"
+ cloud_firestore_web:
+ dependency: transitive
+ description:
+ name: cloud_firestore_web
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.1.1+2"
+ collection:
+ dependency: transitive
+ description:
+ name: collection
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.14.12"
+ 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.4"
+ cupertino_icons:
+ dependency: "direct main"
+ description:
+ name: cupertino_icons
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.1.3"
+ equatable:
+ dependency: transitive
+ description:
+ name: equatable
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.2.5"
+ firebase:
+ dependency: transitive
+ description:
+ name: firebase
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "7.3.0"
+ firebase_auth:
+ dependency: "direct main"
+ description:
+ name: firebase_auth
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.15.5+3"
+ firebase_auth_platform_interface:
+ dependency: transitive
+ description:
+ name: firebase_auth_platform_interface
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.1.8"
+ firebase_auth_web:
+ dependency: transitive
+ description:
+ name: firebase_auth_web
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.1.3+1"
+ firebase_core:
+ dependency: transitive
+ description:
+ name: firebase_core
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.4.5"
+ 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"
+ fl_chart:
+ dependency: "direct main"
+ description:
+ name: fl_chart
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.9.4"
+ flutter:
+ dependency: "direct main"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ flutter_plugin_android_lifecycle:
+ dependency: transitive
+ description:
+ name: flutter_plugin_android_lifecycle
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.0.11"
+ 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"
+ font_awesome_flutter:
+ dependency: "direct main"
+ description:
+ name: font_awesome_flutter
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "8.8.1"
+ google_maps_flutter:
+ dependency: "direct main"
+ description:
+ name: google_maps_flutter
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.5.33"
+ google_maps_flutter_platform_interface:
+ dependency: transitive
+ description:
+ name: google_maps_flutter_platform_interface
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.0.4"
+ http:
+ dependency: transitive
+ description:
+ name: http
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.12.2"
+ http_parser:
+ dependency: transitive
+ description:
+ name: http_parser
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "3.1.4"
+ image:
+ dependency: transitive
+ description:
+ name: image
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.1.12"
+ js:
+ dependency: transitive
+ description:
+ name: js
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.6.2"
+ liquid_swipe:
+ dependency: "direct main"
+ description:
+ name: liquid_swipe
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.5.0"
+ 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"
+ nested:
+ dependency: transitive
+ description:
+ name: nested
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.0.4"
+ path:
+ dependency: transitive
+ description:
+ name: path
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.6.4"
+ path_drawing:
+ dependency: transitive
+ description:
+ name: path_drawing
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.4.1+1"
+ path_parsing:
+ dependency: transitive
+ description:
+ name: path_parsing
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.1.4"
+ pedantic:
+ dependency: transitive
+ description:
+ name: pedantic
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.9.0"
+ permission_handler:
+ dependency: "direct main"
+ description:
+ name: permission_handler
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "4.4.0+hotfix.4"
+ permission_handler_platform_interface:
+ dependency: transitive
+ description:
+ name: permission_handler_platform_interface
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.0.0"
+ petitparser:
+ dependency: transitive
+ description:
+ name: petitparser
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.4.0"
+ plugin_platform_interface:
+ dependency: transitive
+ description:
+ name: plugin_platform_interface
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.0.3"
+ provider:
+ dependency: "direct main"
+ description:
+ name: provider
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "4.3.2+2"
+ quiver:
+ dependency: transitive
+ description:
+ name: quiver
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.1.3"
+ sky_engine:
+ dependency: transitive
+ description: flutter
+ source: sdk
+ version: "0.0.99"
+ source_span:
+ dependency: transitive
+ description:
+ name: source_span
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.7.0"
+ 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"
+ stream_transform:
+ dependency: transitive
+ description:
+ name: stream_transform
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.2.0"
+ string_scanner:
+ dependency: transitive
+ description:
+ name: string_scanner
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.0.5"
+ 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.15"
+ typed_data:
+ dependency: transitive
+ description:
+ name: typed_data
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.1.6"
+ 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.6.1"
+sdks:
+ dart: ">=2.7.0 <3.0.0"
+ flutter: ">=1.16.3 <2.0.0"
diff --git a/medicare/pubspec.yaml b/medicare/pubspec.yaml
new file mode 100644
index 0000000..5017433
--- /dev/null
+++ b/medicare/pubspec.yaml
@@ -0,0 +1,88 @@
+name: medicare
+description: A new Flutter application.
+
+# The following line prevents the package from being accidentally published to
+# pub.dev using `pub publish`. This is preferred for private packages.
+publish_to: 'none' # Remove this line if you wish to publish to pub.dev
+
+# The following defines the version and build number for your application.
+# A version number is three numbers separated by dots, like 1.2.43
+# followed by an optional build number separated by a +.
+# Both the version and the builder number may be overridden in flutter
+# build by specifying --build-name and --build-number, respectively.
+# In Android, build-name is used as versionName while build-number used as versionCode.
+# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
+# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
+# Read more about iOS versioning at
+# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
+version: 1.0.0+1
+
+environment:
+ sdk: ">=2.7.0 <3.0.0"
+
+dependencies:
+ flutter:
+ sdk: flutter
+
+
+ # The following adds the Cupertino Icons font to your application.
+ # Use with the CupertinoIcons class for iOS style icons.
+ cupertino_icons: ^0.1.3
+ animated_text_kit: ^2.2.0
+ firebase_auth: ^0.15.3
+ agora_rtc_engine: ^1.0.13
+ permission_handler: ^4.4.0
+ google_maps_flutter: ^0.5.30
+ font_awesome_flutter: ^8.4.0
+ liquid_swipe: ^1.5.0
+ fl_chart: ^0.9.4
+ bubble_tab_indicator: ^0.1.4
+ cloud_firestore: ^0.13.6
+ modal_progress_hud: ^0.1.3
+ provider: ^4.1.3
+
+dev_dependencies:
+ flutter_test:
+ sdk: flutter
+
+# For information on the generic Dart part of this file, see the
+# following page: https://dart.dev/tools/pub/pubspec
+
+# The following section is specific to Flutter.
+flutter:
+
+ # The following line ensures that the Material Icons font is
+ # included with your application, so that you can use the icons in
+ # the material Icons class.
+ uses-material-design: true
+
+ # To add assets to your application, add an assets section, like this:
+ assets:
+ - assets/
+ # - images/a_dot_ham.jpeg
+
+ # An image asset can refer to one or more resolution-specific "variants", see
+ # https://flutter.dev/assets-and-images/#resolution-aware.
+
+ # For details regarding adding assets from package dependencies, see
+ # https://flutter.dev/assets-and-images/#from-packages
+
+ # To add custom fonts to your application, add a fonts section here,
+ # in this "flutter" section. Each entry in this list should have a
+ # "family" key with the font family name, and a "fonts" key with a
+ # list giving the asset and other descriptors for the font. For
+ # example:
+ # fonts:
+ # - family: Schyler
+ # fonts:
+ # - asset: fonts/Schyler-Regular.ttf
+ # - asset: fonts/Schyler-Italic.ttf
+ # style: italic
+ # - family: Trajan Pro
+ # fonts:
+ # - asset: fonts/TrajanPro.ttf
+ # - asset: fonts/TrajanPro_Bold.ttf
+ # weight: 700
+ #
+ # For details regarding fonts from package dependencies,
+ # see https://flutter.dev/custom-fonts/#from-packages
diff --git a/medicare/test/widget_test.dart b/medicare/test/widget_test.dart
new file mode 100644
index 0000000..3d8679f
--- /dev/null
+++ b/medicare/test/widget_test.dart
@@ -0,0 +1,30 @@
+// This is a basic Flutter widget test.
+//
+// To perform an interaction with a widget in your test, use the WidgetTester
+// utility that Flutter provides. For example, you can send tap and scroll
+// gestures. You can also use WidgetTester to find child widgets in the widget
+// tree, read text, and verify that the values of widget properties are correct.
+
+import 'package:flutter/material.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+import 'package:medicare/main.dart';
+
+void main() {
+ testWidgets('Counter increments smoke test', (WidgetTester tester) async {
+ // Build our app and trigger a frame.
+ await tester.pumpWidget(MyApp());
+
+ // Verify that our counter starts at 0.
+ expect(find.text('0'), findsOneWidget);
+ expect(find.text('1'), findsNothing);
+
+ // Tap the '+' icon and trigger a frame.
+ await tester.tap(find.byIcon(Icons.add));
+ await tester.pump();
+
+ // Verify that our counter has incremented.
+ expect(find.text('0'), findsNothing);
+ expect(find.text('1'), findsOneWidget);
+ });
+}
diff --git a/medicare_doctor/.gitignore b/medicare_doctor/.gitignore
new file mode 100644
index 0000000..1ba9c33
--- /dev/null
+++ b/medicare_doctor/.gitignore
@@ -0,0 +1,43 @@
+# 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
+
+# Symbolication related
+app.*.symbols
+
+# Obfuscation related
+app.*.map.json
+
+# Exceptions to above rules.
+!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
diff --git a/medicare_doctor/.metadata b/medicare_doctor/.metadata
new file mode 100644
index 0000000..7c361dd
--- /dev/null
+++ b/medicare_doctor/.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: b041144f833e05cf463b8887fa12efdec9493488
+ channel: stable
+
+project_type: app
diff --git a/medicare_doctor/README.md b/medicare_doctor/README.md
new file mode 100644
index 0000000..ed43b46
--- /dev/null
+++ b/medicare_doctor/README.md
@@ -0,0 +1,16 @@
+# medicare_doctor
+
+A new Flutter application.
+
+## Getting Started
+
+This project is a starting point for a Flutter application.
+
+A few resources to get you started if this is your first Flutter project:
+
+- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab)
+- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook)
+
+For help getting started with Flutter, view our
+[online documentation](https://flutter.dev/docs), which offers tutorials,
+samples, guidance on mobile development, and a full API reference.
diff --git a/medicare_doctor/android/.gitignore b/medicare_doctor/android/.gitignore
new file mode 100644
index 0000000..bc2100d
--- /dev/null
+++ b/medicare_doctor/android/.gitignore
@@ -0,0 +1,7 @@
+gradle-wrapper.jar
+/.gradle
+/captures/
+/gradlew
+/gradlew.bat
+/local.properties
+GeneratedPluginRegistrant.java
diff --git a/medicare_doctor/android/app/build.gradle b/medicare_doctor/android/app/build.gradle
new file mode 100644
index 0000000..b4fcb94
--- /dev/null
+++ b/medicare_doctor/android/app/build.gradle
@@ -0,0 +1,66 @@
+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 28
+
+ lintOptions {
+ disable 'InvalidPackage'
+ }
+
+ defaultConfig {
+ // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
+ applicationId "com.example.medicare_doctor"
+ minSdkVersion 16
+ targetSdkVersion 28
+ versionCode flutterVersionCode.toInteger()
+ versionName flutterVersionName
+ multiDexEnabled true
+ }
+
+ 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
+ }
+
+ dependencies {
+ // add the Firebase SDK for Google Analytics
+ implementation 'com.google.firebase:firebase-analytics:17.5.0'
+ // add SDKs for any other desired Firebase products
+ // https://firebase.google.com/docs/android/setup#available-libraries
+ }
+ }
+}
+
+
+
+flutter {
+ source '../..'
+}
diff --git a/medicare_doctor/android/app/google-services.json b/medicare_doctor/android/app/google-services.json
new file mode 100644
index 0000000..dde4e4b
--- /dev/null
+++ b/medicare_doctor/android/app/google-services.json
@@ -0,0 +1,69 @@
+{
+ "project_info": {
+ "project_number": "154049021886",
+ "firebase_url": "https://primeval-melody-287418.firebaseio.com",
+ "project_id": "primeval-melody-287418",
+ "storage_bucket": "primeval-melody-287418.appspot.com"
+ },
+ "client": [
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:154049021886:android:3379971902da6bbd799bef",
+ "android_client_info": {
+ "package_name": "com.example.medicare"
+ }
+ },
+ "oauth_client": [
+ {
+ "client_id": "154049021886-49ugm75e3sj51qbve9b2qosu00cnj9v8.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ],
+ "api_key": [
+ {
+ "current_key": "AIzaSyBRYOU4_xfabRubHuD0zzh4TA1vs3bYJDc"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": [
+ {
+ "client_id": "154049021886-49ugm75e3sj51qbve9b2qosu00cnj9v8.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ]
+ }
+ }
+ },
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:154049021886:android:0dcb2021456e7a05799bef",
+ "android_client_info": {
+ "package_name": "com.example.medicare_doctor"
+ }
+ },
+ "oauth_client": [
+ {
+ "client_id": "154049021886-49ugm75e3sj51qbve9b2qosu00cnj9v8.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ],
+ "api_key": [
+ {
+ "current_key": "AIzaSyBRYOU4_xfabRubHuD0zzh4TA1vs3bYJDc"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": [
+ {
+ "client_id": "154049021886-49ugm75e3sj51qbve9b2qosu00cnj9v8.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ]
+ }
+ }
+ }
+ ],
+ "configuration_version": "1"
+}
\ No newline at end of file
diff --git a/medicare_doctor/android/app/src/debug/AndroidManifest.xml b/medicare_doctor/android/app/src/debug/AndroidManifest.xml
new file mode 100644
index 0000000..b451a2d
--- /dev/null
+++ b/medicare_doctor/android/app/src/debug/AndroidManifest.xml
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/medicare_doctor/android/app/src/main/AndroidManifest.xml b/medicare_doctor/android/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..6117539
--- /dev/null
+++ b/medicare_doctor/android/app/src/main/AndroidManifest.xml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/medicare_doctor/android/app/src/main/java/com/example/medicare_doctor/MainActivity.java b/medicare_doctor/android/app/src/main/java/com/example/medicare_doctor/MainActivity.java
new file mode 100644
index 0000000..e3d2e7d
--- /dev/null
+++ b/medicare_doctor/android/app/src/main/java/com/example/medicare_doctor/MainActivity.java
@@ -0,0 +1,6 @@
+package com.example.medicare_doctor;
+
+import io.flutter.embedding.android.FlutterActivity;
+
+public class MainActivity extends FlutterActivity {
+}
diff --git a/medicare_doctor/android/app/src/main/res/drawable/launch_background.xml b/medicare_doctor/android/app/src/main/res/drawable/launch_background.xml
new file mode 100644
index 0000000..304732f
--- /dev/null
+++ b/medicare_doctor/android/app/src/main/res/drawable/launch_background.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
diff --git a/medicare_doctor/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/medicare_doctor/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..db77bb4
Binary files /dev/null and b/medicare_doctor/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/medicare_doctor/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/medicare_doctor/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..17987b7
Binary files /dev/null and b/medicare_doctor/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/medicare_doctor/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/medicare_doctor/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..09d4391
Binary files /dev/null and b/medicare_doctor/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/medicare_doctor/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/medicare_doctor/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..d5f1c8d
Binary files /dev/null and b/medicare_doctor/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/medicare_doctor/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/medicare_doctor/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..4d6372e
Binary files /dev/null and b/medicare_doctor/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/medicare_doctor/android/app/src/main/res/values/styles.xml b/medicare_doctor/android/app/src/main/res/values/styles.xml
new file mode 100644
index 0000000..1f83a33
--- /dev/null
+++ b/medicare_doctor/android/app/src/main/res/values/styles.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/medicare_doctor/android/app/src/profile/AndroidManifest.xml b/medicare_doctor/android/app/src/profile/AndroidManifest.xml
new file mode 100644
index 0000000..b451a2d
--- /dev/null
+++ b/medicare_doctor/android/app/src/profile/AndroidManifest.xml
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/medicare_doctor/android/build.gradle b/medicare_doctor/android/build.gradle
new file mode 100644
index 0000000..92e0e4a
--- /dev/null
+++ b/medicare_doctor/android/build.gradle
@@ -0,0 +1,30 @@
+buildscript {
+ repositories {
+ google()
+ jcenter()
+ }
+
+ dependencies {
+ classpath 'com.android.tools.build:gradle:3.5.0'
+ classpath 'com.google.gms:google-services:4.3.4'
+ }
+}
+
+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/medicare_doctor/android/gradle.properties b/medicare_doctor/android/gradle.properties
new file mode 100644
index 0000000..38c8d45
--- /dev/null
+++ b/medicare_doctor/android/gradle.properties
@@ -0,0 +1,4 @@
+org.gradle.jvmargs=-Xmx1536M
+android.enableR8=true
+android.useAndroidX=true
+android.enableJetifier=true
diff --git a/medicare_doctor/android/gradle/wrapper/gradle-wrapper.properties b/medicare_doctor/android/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..296b146
--- /dev/null
+++ b/medicare_doctor/android/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Fri Jun 23 08:50:38 CEST 2017
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip
diff --git a/medicare_doctor/android/settings.gradle b/medicare_doctor/android/settings.gradle
new file mode 100644
index 0000000..d3b6a40
--- /dev/null
+++ b/medicare_doctor/android/settings.gradle
@@ -0,0 +1,15 @@
+// Copyright 2014 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+include ':app'
+
+def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
+def properties = new Properties()
+
+assert localPropertiesFile.exists()
+localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
+
+def flutterSdkPath = properties.getProperty("flutter.sdk")
+assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
+apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
diff --git a/medicare_doctor/ios/.gitignore b/medicare_doctor/ios/.gitignore
new file mode 100644
index 0000000..e96ef60
--- /dev/null
+++ b/medicare_doctor/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/medicare_doctor/ios/Flutter/AppFrameworkInfo.plist b/medicare_doctor/ios/Flutter/AppFrameworkInfo.plist
new file mode 100644
index 0000000..6b4c0f7
--- /dev/null
+++ b/medicare_doctor/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/medicare_doctor/ios/Flutter/Debug.xcconfig b/medicare_doctor/ios/Flutter/Debug.xcconfig
new file mode 100644
index 0000000..592ceee
--- /dev/null
+++ b/medicare_doctor/ios/Flutter/Debug.xcconfig
@@ -0,0 +1 @@
+#include "Generated.xcconfig"
diff --git a/medicare_doctor/ios/Flutter/Release.xcconfig b/medicare_doctor/ios/Flutter/Release.xcconfig
new file mode 100644
index 0000000..592ceee
--- /dev/null
+++ b/medicare_doctor/ios/Flutter/Release.xcconfig
@@ -0,0 +1 @@
+#include "Generated.xcconfig"
diff --git a/medicare_doctor/ios/Runner.xcodeproj/project.pbxproj b/medicare_doctor/ios/Runner.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..c0f22a7
--- /dev/null
+++ b/medicare_doctor/ios/Runner.xcodeproj/project.pbxproj
@@ -0,0 +1,506 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
+ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
+ 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
+ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
+ 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
+ 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 9705A1C41CF9048500538489 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; };
+ 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; };
+ 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; };
+ 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; };
+ 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
+ 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; };
+ 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; };
+ 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; };
+ 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
+ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
+ 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
+ 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 97C146EB1CF9000F007C117D /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 9740EEB11CF90186004384FC /* Flutter */ = {
+ isa = PBXGroup;
+ children = (
+ 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
+ 9740EEB21CF90195004384FC /* Debug.xcconfig */,
+ 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
+ 9740EEB31CF90195004384FC /* Generated.xcconfig */,
+ );
+ name = Flutter;
+ sourceTree = "";
+ };
+ 97C146E51CF9000F007C117D = {
+ isa = PBXGroup;
+ children = (
+ 9740EEB11CF90186004384FC /* Flutter */,
+ 97C146F01CF9000F007C117D /* Runner */,
+ 97C146EF1CF9000F007C117D /* Products */,
+ );
+ sourceTree = "";
+ };
+ 97C146EF1CF9000F007C117D /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 97C146EE1CF9000F007C117D /* Runner.app */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 97C146F01CF9000F007C117D /* Runner */ = {
+ isa = PBXGroup;
+ children = (
+ 97C146FA1CF9000F007C117D /* Main.storyboard */,
+ 97C146FD1CF9000F007C117D /* Assets.xcassets */,
+ 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
+ 97C147021CF9000F007C117D /* Info.plist */,
+ 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 = "";
+ TargetAttributes = {
+ 97C146ED1CF9000F007C117D = {
+ CreatedOnToolsVersion = 7.3.1;
+ LastSwiftMigration = 1100;
+ };
+ };
+ };
+ buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
+ compatibilityVersion = "Xcode 9.3";
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = 97C146E51CF9000F007C117D;
+ productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 97C146ED1CF9000F007C117D /* Runner */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 97C146EC1CF9000F007C117D /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
+ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
+ 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
+ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Thin Binary";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
+ };
+ 9740EEB61CF901F6004384FC /* Run Script */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Run Script";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 97C146EA1CF9000F007C117D /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
+ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ 97C146FA1CF9000F007C117D /* Main.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 97C146FB1CF9000F007C117D /* Base */,
+ );
+ name = Main.storyboard;
+ sourceTree = "";
+ };
+ 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 97C147001CF9000F007C117D /* Base */,
+ );
+ name = LaunchScreen.storyboard;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 249021D3217E4FDB00AE95B9 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ 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.example.medicareDoctor;
+ 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.example.medicareDoctor;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Debug;
+ };
+ 97C147071CF9000F007C117D /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
+ ENABLE_BITCODE = NO;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Flutter",
+ );
+ INFOPLIST_FILE = Runner/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Flutter",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.example.medicareDoctor;
+ 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/medicare_doctor/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/medicare_doctor/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..1d526a1
--- /dev/null
+++ b/medicare_doctor/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/medicare_doctor/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/medicare_doctor/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000..18d9810
--- /dev/null
+++ b/medicare_doctor/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/medicare_doctor/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/medicare_doctor/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
new file mode 100644
index 0000000..f9b0d7c
--- /dev/null
+++ b/medicare_doctor/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
@@ -0,0 +1,8 @@
+
+
+
+
+ PreviewsEnabled
+
+
+
diff --git a/medicare_doctor/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/medicare_doctor/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
new file mode 100644
index 0000000..a28140c
--- /dev/null
+++ b/medicare_doctor/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/medicare_doctor/ios/Runner.xcworkspace/contents.xcworkspacedata b/medicare_doctor/ios/Runner.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..1d526a1
--- /dev/null
+++ b/medicare_doctor/ios/Runner.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/medicare_doctor/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/medicare_doctor/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000..18d9810
--- /dev/null
+++ b/medicare_doctor/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/medicare_doctor/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/medicare_doctor/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
new file mode 100644
index 0000000..f9b0d7c
--- /dev/null
+++ b/medicare_doctor/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
@@ -0,0 +1,8 @@
+
+
+
+
+ PreviewsEnabled
+
+
+
diff --git a/medicare_doctor/ios/Runner/AppDelegate.swift b/medicare_doctor/ios/Runner/AppDelegate.swift
new file mode 100644
index 0000000..70693e4
--- /dev/null
+++ b/medicare_doctor/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/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000..d36b1fa
--- /dev/null
+++ b/medicare_doctor/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/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
new file mode 100644
index 0000000..dc9ada4
Binary files /dev/null and b/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ
diff --git a/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
new file mode 100644
index 0000000..28c6bf0
Binary files /dev/null and b/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ
diff --git a/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
new file mode 100644
index 0000000..2ccbfd9
Binary files /dev/null and b/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ
diff --git a/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
new file mode 100644
index 0000000..f091b6b
Binary files /dev/null and b/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ
diff --git a/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
new file mode 100644
index 0000000..4cde121
Binary files /dev/null and b/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ
diff --git a/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
new file mode 100644
index 0000000..d0ef06e
Binary files /dev/null and b/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ
diff --git a/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
new file mode 100644
index 0000000..dcdc230
Binary files /dev/null and b/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ
diff --git a/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
new file mode 100644
index 0000000..2ccbfd9
Binary files /dev/null and b/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ
diff --git a/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
new file mode 100644
index 0000000..c8f9ed8
Binary files /dev/null and b/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ
diff --git a/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
new file mode 100644
index 0000000..a6d6b86
Binary files /dev/null and b/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ
diff --git a/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
new file mode 100644
index 0000000..a6d6b86
Binary files /dev/null and b/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ
diff --git a/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
new file mode 100644
index 0000000..75b2d16
Binary files /dev/null and b/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ
diff --git a/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
new file mode 100644
index 0000000..c4df70d
Binary files /dev/null and b/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ
diff --git a/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
new file mode 100644
index 0000000..6a84f41
Binary files /dev/null and b/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ
diff --git a/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/medicare_doctor/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/medicare_doctor/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ
diff --git a/medicare_doctor/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/medicare_doctor/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
new file mode 100644
index 0000000..0bedcf2
--- /dev/null
+++ b/medicare_doctor/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/medicare_doctor/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/medicare_doctor/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
new file mode 100644
index 0000000..9da19ea
Binary files /dev/null and b/medicare_doctor/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png differ
diff --git a/medicare_doctor/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/medicare_doctor/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
new file mode 100644
index 0000000..9da19ea
Binary files /dev/null and b/medicare_doctor/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png differ
diff --git a/medicare_doctor/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/medicare_doctor/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
new file mode 100644
index 0000000..9da19ea
Binary files /dev/null and b/medicare_doctor/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png differ
diff --git a/medicare_doctor/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/medicare_doctor/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
new file mode 100644
index 0000000..89c2725
--- /dev/null
+++ b/medicare_doctor/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/medicare_doctor/ios/Runner/Base.lproj/LaunchScreen.storyboard b/medicare_doctor/ios/Runner/Base.lproj/LaunchScreen.storyboard
new file mode 100644
index 0000000..f2e259c
--- /dev/null
+++ b/medicare_doctor/ios/Runner/Base.lproj/LaunchScreen.storyboard
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/medicare_doctor/ios/Runner/Base.lproj/Main.storyboard b/medicare_doctor/ios/Runner/Base.lproj/Main.storyboard
new file mode 100644
index 0000000..f3c2851
--- /dev/null
+++ b/medicare_doctor/ios/Runner/Base.lproj/Main.storyboard
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/medicare_doctor/ios/Runner/Info.plist b/medicare_doctor/ios/Runner/Info.plist
new file mode 100644
index 0000000..33e5b6e
--- /dev/null
+++ b/medicare_doctor/ios/Runner/Info.plist
@@ -0,0 +1,45 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ medicare_doctor
+ 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/medicare_doctor/ios/Runner/Runner-Bridging-Header.h b/medicare_doctor/ios/Runner/Runner-Bridging-Header.h
new file mode 100644
index 0000000..308a2a5
--- /dev/null
+++ b/medicare_doctor/ios/Runner/Runner-Bridging-Header.h
@@ -0,0 +1 @@
+#import "GeneratedPluginRegistrant.h"
diff --git a/medicare_doctor/lib/constants.dart b/medicare_doctor/lib/constants.dart
new file mode 100644
index 0000000..4f6585a
--- /dev/null
+++ b/medicare_doctor/lib/constants.dart
@@ -0,0 +1,36 @@
+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: 'Enter a value',
+ 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)),
+ ),
+);
\ No newline at end of file
diff --git a/medicare_doctor/lib/main.dart b/medicare_doctor/lib/main.dart
new file mode 100644
index 0000000..a482d55
--- /dev/null
+++ b/medicare_doctor/lib/main.dart
@@ -0,0 +1,25 @@
+import 'package:flutter/material.dart';
+import 'package:medicare_doctor/screens/chat.dart';
+import 'package:medicare_doctor/screens/doctor_appointments.dart';
+import 'package:medicare_doctor/screens/home.dart';
+
+import 'screens/home.dart';
+import 'screens/login_page.dart';
+
+void main() {
+ runApp(MedicareD());
+}
+
+class MedicareD extends StatelessWidget {
+ @override
+ Widget build(BuildContext context) {
+ return MaterialApp(
+ theme: ThemeData(
+ primarySwatch: Colors.blue,
+ primaryColor: Colors.blue,
+ visualDensity: VisualDensity.adaptivePlatformDensity,
+ ),
+ home: LoginScreen(),
+ );
+ }
+}
diff --git a/medicare_doctor/lib/models/appointment.dart b/medicare_doctor/lib/models/appointment.dart
new file mode 100644
index 0000000..78f0a85
--- /dev/null
+++ b/medicare_doctor/lib/models/appointment.dart
@@ -0,0 +1,30 @@
+
+import 'package:medicare_doctor/models/doctor.dart';
+import 'package:medicare_doctor/models/user.dart';
+
+
+class Appointment{
+ final String aId;
+ final User user;
+ final Doctor doctor;
+ final String time;
+
+
+
+ Appointment({this.aId,this.user,this.doctor,this.time, name});
+
+}
+
+
+class AppointmentBooking{
+ final String docName;
+ final String docSpecialization;
+ final String patUid;
+ final String patName;
+ final String time;
+
+
+
+ AppointmentBooking({this.docName,this.docSpecialization,this.patUid,this.patName,this.time});
+
+}
\ No newline at end of file
diff --git a/medicare_doctor/lib/models/doctor.dart b/medicare_doctor/lib/models/doctor.dart
new file mode 100644
index 0000000..20ec3ae
--- /dev/null
+++ b/medicare_doctor/lib/models/doctor.dart
@@ -0,0 +1,13 @@
+
+class Doctor{
+ final String dId;
+ final String name;
+ final String email;
+ final String specialist;
+ final int experience;
+ final int rating;
+
+
+ Doctor({this.dId,this.name,this.email,this.specialist,this.experience,this.rating});
+
+}
\ No newline at end of file
diff --git a/medicare_doctor/lib/models/user.dart b/medicare_doctor/lib/models/user.dart
new file mode 100644
index 0000000..ec10777
--- /dev/null
+++ b/medicare_doctor/lib/models/user.dart
@@ -0,0 +1,10 @@
+
+class User{
+ final String uId;
+ final String name;
+ final String email;
+ final int age;
+
+ User({this.uId,this.name,this.email,this.age});
+
+}
\ No newline at end of file
diff --git a/medicare_doctor/lib/rounded_button.dart b/medicare_doctor/lib/rounded_button.dart
new file mode 100644
index 0000000..fb9ed7d
--- /dev/null
+++ b/medicare_doctor/lib/rounded_button.dart
@@ -0,0 +1,31 @@
+import 'package:flutter/material.dart';
+
+
+class RoundedButton extends StatelessWidget {
+ RoundedButton({this.color,@required this.onPressed,this.title});
+
+
+ final Color color;
+ final String title;
+ final Function onPressed;
+
+ @override
+ Widget build(BuildContext context) {
+ return Padding(
+ padding: EdgeInsets.symmetric(vertical: 16.0),
+ child: Material(
+ elevation: 5.0,
+ color: color,
+ borderRadius: BorderRadius.circular(30.0),
+ child: MaterialButton(
+ onPressed: onPressed,
+ minWidth: 200.0,
+ height: 42.0,
+ child: Text(
+ title,
+ ),
+ ),
+ ),
+ );
+ }
+}
\ No newline at end of file
diff --git a/medicare_doctor/lib/screens/chat.dart b/medicare_doctor/lib/screens/chat.dart
new file mode 100644
index 0000000..87605f7
--- /dev/null
+++ b/medicare_doctor/lib/screens/chat.dart
@@ -0,0 +1,201 @@
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:medicare_doctor/constants.dart';
+import 'package:firebase_auth/firebase_auth.dart';
+import 'package:cloud_firestore/cloud_firestore.dart';
+import 'package:medicare_doctor/video_call/call.dart';
+
+
+
+final _firestore = Firestore.instance;
+FirebaseUser loggedInUser;
+
+class ChatScreen extends StatefulWidget {
+ static const String id = 'chat_screen';
+ @override
+ _ChatScreenState createState() => _ChatScreenState();
+}
+
+class _ChatScreenState extends State {
+ final messageTextController = new TextEditingController();
+ final _auth = FirebaseAuth.instance;
+
+ String messageText;
+ @override
+ void initState(){
+ super.initState();
+ getCurrentUser();
+ }
+
+
+
+ void getCurrentUser() async{
+ try {
+ final user = await _auth.currentUser();
+ if (user != null) {
+ loggedInUser = user;
+ print(loggedInUser.email);
+ }
+ }
+ catch (e){
+ print(e);
+ }
+ }
+
+
+ void messagesStream() async {
+ await for (var snapshot in _firestore.collection('messages').snapshots()) {
+ for (var message in snapshot.documents) {
+ print(message.data);
+ }
+ }
+ }
+
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ appBar: AppBar(
+ leading: null,
+ actions: [
+ IconButton(
+ icon: Icon(Icons.video_call),
+ onPressed: () {
+ Navigator.of(context).push(MaterialPageRoute(builder: (context) => CallPage()));
+
+ }),
+ ],
+ title: Text('Chat'),
+ backgroundColor: Colors.lightBlueAccent,
+ ),
+ body: SafeArea(
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ crossAxisAlignment: CrossAxisAlignment.stretch,
+ children: [
+ MessagesStream(),
+ Container(
+ decoration: kMessageContainerDecoration,
+ child: Row(
+ crossAxisAlignment: CrossAxisAlignment.center,
+ children: [
+ Expanded(
+ child: TextField(
+ controller: messageTextController,
+ onChanged: (value) {
+
+ //Do something with the user input.
+ messageText = value;
+ },
+ decoration: kMessageTextFieldDecoration,
+ ),
+ ),
+ FlatButton(
+ onPressed: () {
+ messageTextController.clear();
+ //Implement send functionality.
+ _firestore.collection('messages').add({
+ 'text': messageText,
+ 'sender': loggedInUser.email,
+ });
+
+ },
+ child: Text(
+ 'Send',
+ style: kSendButtonTextStyle,
+ ),
+ ),
+ ],
+ ),
+ ),
+ ],
+ ),
+ ),
+ );
+ }
+}
+
+
+class MessagesStream extends StatelessWidget {
+ @override
+ Widget build(BuildContext context) {
+ return StreamBuilder(
+ stream: _firestore.collection('messages').snapshots(),
+ // ignore: missing_return
+ 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: currentUser == messageSender,);
+
+ messageBubbles.add(messageBubble);
+
+ }
+ return Expanded(
+ child: ListView(
+ reverse: true,
+ padding: EdgeInsets.symmetric(horizontal: 10.0, vertical: 20.0),
+ children: messageBubbles,
+ ),
+ );
+
+ },
+ );
+ }
+}
+
+
+class MessageBubble extends StatelessWidget {
+
+ MessageBubble({this.sender,this.text,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(sender, style: TextStyle(
+ fontSize: 12.0,
+ color: Colors.black54,
+ ),
+ ),
+ Material(
+ elevation: 5.0,
+ borderRadius: isMe ? BorderRadius.only(topLeft: Radius.circular(30.0),bottomLeft: Radius.circular(30.0),bottomRight: Radius.circular(30.0)) : BorderRadius.only(topRight: Radius.circular(30.0),bottomLeft: Radius.circular(30.0),bottomRight: Radius.circular(30.0)),
+ color: isMe ? Colors.lightBlueAccent : Colors.white,
+ child: Padding(
+ padding: EdgeInsets.symmetric(vertical: 10.0,horizontal: 20.0),
+ child: Text('$text',
+ style: TextStyle(
+ color: isMe ? Colors.white : Colors.black54,
+ fontSize: 15.0,
+ ),
+ ),
+ ),
+
+ ),
+ ],
+ ),
+ );
+ }
+}
\ No newline at end of file
diff --git a/medicare_doctor/lib/screens/doctor_appointments.dart b/medicare_doctor/lib/screens/doctor_appointments.dart
new file mode 100644
index 0000000..e669cf4
--- /dev/null
+++ b/medicare_doctor/lib/screens/doctor_appointments.dart
@@ -0,0 +1,457 @@
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:medicare_doctor/models/appointment.dart';
+import 'package:medicare_doctor/services/database.dart';
+import 'package:provider/provider.dart';
+//import 'package:flutter/services.dart';
+
+
+
+class DoctorAppointment extends StatelessWidget {
+ @override
+ Widget build(BuildContext context) {
+
+ final DatabaseService _databaseService = DatabaseService();
+
+
+ return MaterialApp(
+ title: "Doctor Appointment",
+ theme: ThemeData(
+ primarySwatch: Colors.blue,
+ ),
+ home: StreamProvider>.value(
+ value: _databaseService.appointmentBookings,
+ child: Scaffold(
+ appBar: AppBar(
+ title: Text("MEDICURE"),
+ ),
+ backgroundColor: Colors.white,
+ body: Center(
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.center,
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ Text(
+ "Appointments",
+ style: TextStyle(
+ color: Colors.black,
+ fontSize: 30.0,
+
+ fontWeight: FontWeight.bold),
+ ),
+ Container(
+ margin: EdgeInsets.only(top: 50.0, left: 10.0, right: 10.0),
+ padding: EdgeInsets.symmetric(horizontal: 5.0, vertical: 00.0),
+ width: MediaQuery.of(context).size.width,
+ height: MediaQuery.of(context).size.height / 2,
+ decoration: BoxDecoration(
+ border: Border.all(
+ color: Colors.deepPurple,
+ ),
+ borderRadius: BorderRadius.circular(10.0),
+ ),
+ child: BrewList(),
+
+
+ /*
+ ListView.builder(
+ itemCount: names.length,
+ shrinkWrap: true,
+ itemBuilder: (BuildContext context, int index) => Container(
+ width: MediaQuery.of(context).size.width,
+ height: MediaQuery.of(context).size.height / 6,
+ padding: EdgeInsets.symmetric(horizontal: 5.0, vertical: 5.0),
+ margin: EdgeInsets.symmetric(horizontal: 5.0, vertical: 00.0),
+ child: Card(
+ elevation: 10.0,
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(5.0),
+ ),
+ child: Container(
+ width: MediaQuery.of(context).size.width,
+ padding:
+ EdgeInsets.symmetric(horizontal: 5.0, vertical: 5.0),
+ decoration: BoxDecoration(
+ border: Border.all(
+ color: Colors.deepPurple,
+ ),
+ borderRadius: BorderRadius.circular(5.0),
+ ),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ crossAxisAlignment: CrossAxisAlignment.center,
+ children: [
+ Row(
+ crossAxisAlignment: CrossAxisAlignment.center,
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ Container(
+ padding: EdgeInsets.symmetric(
+ horizontal: 2.0, vertical: 00.0),
+ margin: EdgeInsets.all(00.0),
+ decoration: BoxDecoration(
+ border: Border.all(
+ color: Colors.black,
+ ),
+ borderRadius: BorderRadius.circular(30.0),
+ ),
+ width: 50.0,
+ height: 50.0,
+ child: CircleAvatar(
+ backgroundColor: Colors.deepPurpleAccent,
+// foregroundColor: Colors.white,
+ backgroundImage: NetworkImage(
+ "https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcSya2MDHt8WIgyWsx5-t2KFF7oFwpqd8d8dZw&usqp=CAU"),
+// child: Text(
+// names[0],
+// style: TextStyle(color: Colors.white),
+// textAlign: TextAlign.center,
+// ),
+ ),
+ ),
+ SizedBox(width: 5.0),
+ Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ Text(names[index],
+ style: TextStyle(
+ color: Colors.black,
+ fontSize: 18.0,
+ fontWeight: FontWeight.bold)),
+ ],
+ ),
+ ],
+ ),
+ Container(
+ alignment: Alignment.center,
+ padding: EdgeInsets.symmetric(
+ horizontal: 5.0, vertical: 10.0),
+ child: FlatButton(
+ onPressed: () {},
+ color: Colors.deepPurpleAccent,
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(20.0),
+ side: BorderSide(color: Colors.black),
+ ),
+ child: Text(
+ "START",
+ style: TextStyle(color: Colors.white),
+ ),
+ ),
+ ),
+ ],
+ ),
+ ),
+ ),
+ ),
+ ),
+
+ */
+ ),
+ ],
+ ),
+ ),
+ ),
+ ),
+ );
+ }
+}
+
+class BrewList extends StatefulWidget {
+ @override
+ _BrewListState createState() => _BrewListState();
+}
+
+class _BrewListState extends State {
+ @override
+ Widget build(BuildContext context) {
+
+ final appointments = Provider.of>(context) ?? [];
+
+ return ListView.builder(
+ itemCount: appointments.length,
+ itemBuilder : (context,index){
+ return BrewListTile(appointmentBooking:appointments[index]);
+ }
+ );
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+class MainPage extends StatefulWidget {
+ @override
+ _MainPageState createState() => _MainPageState();
+}
+
+class _MainPageState extends State {
+ List names = [
+ "Name",
+ "Name",
+ "Ali Alshaibani",
+ "Rohini",
+ ];
+
+
+
+ @override
+ Widget build(BuildContext context) {
+
+ final appointments = Provider.of>(context) ?? [];
+
+
+ return Scaffold(
+ appBar: AppBar(
+ title: Text("MEDICURE"),
+ ),
+ backgroundColor: Colors.white,
+ body: Center(
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.center,
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ Text(
+ "Appointments",
+ style: TextStyle(
+ color: Colors.black,
+ fontSize: 30.0,
+
+ fontWeight: FontWeight.bold),
+ ),
+ Container(
+ margin: EdgeInsets.only(top: 50.0, left: 10.0, right: 10.0),
+ padding: EdgeInsets.symmetric(horizontal: 5.0, vertical: 00.0),
+ width: MediaQuery.of(context).size.width,
+ height: MediaQuery.of(context).size.height / 2,
+ decoration: BoxDecoration(
+ border: Border.all(
+ color: Colors.deepPurple,
+ ),
+ borderRadius: BorderRadius.circular(10.0),
+ ),
+ child: ListView.builder(
+ itemCount: appointments.length,
+ itemBuilder : (context,index){
+ return BrewListTile(appointmentBooking:appointments[index]);
+ }
+ ),
+
+
+ /*
+ ListView.builder(
+ itemCount: names.length,
+ shrinkWrap: true,
+ itemBuilder: (BuildContext context, int index) => Container(
+ width: MediaQuery.of(context).size.width,
+ height: MediaQuery.of(context).size.height / 6,
+ padding: EdgeInsets.symmetric(horizontal: 5.0, vertical: 5.0),
+ margin: EdgeInsets.symmetric(horizontal: 5.0, vertical: 00.0),
+ child: Card(
+ elevation: 10.0,
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(5.0),
+ ),
+ child: Container(
+ width: MediaQuery.of(context).size.width,
+ padding:
+ EdgeInsets.symmetric(horizontal: 5.0, vertical: 5.0),
+ decoration: BoxDecoration(
+ border: Border.all(
+ color: Colors.deepPurple,
+ ),
+ borderRadius: BorderRadius.circular(5.0),
+ ),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ crossAxisAlignment: CrossAxisAlignment.center,
+ children: [
+ Row(
+ crossAxisAlignment: CrossAxisAlignment.center,
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ Container(
+ padding: EdgeInsets.symmetric(
+ horizontal: 2.0, vertical: 00.0),
+ margin: EdgeInsets.all(00.0),
+ decoration: BoxDecoration(
+ border: Border.all(
+ color: Colors.black,
+ ),
+ borderRadius: BorderRadius.circular(30.0),
+ ),
+ width: 50.0,
+ height: 50.0,
+ child: CircleAvatar(
+ backgroundColor: Colors.deepPurpleAccent,
+// foregroundColor: Colors.white,
+ backgroundImage: NetworkImage(
+ "https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcSya2MDHt8WIgyWsx5-t2KFF7oFwpqd8d8dZw&usqp=CAU"),
+// child: Text(
+// names[0],
+// style: TextStyle(color: Colors.white),
+// textAlign: TextAlign.center,
+// ),
+ ),
+ ),
+ SizedBox(width: 5.0),
+ Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ Text(names[index],
+ style: TextStyle(
+ color: Colors.black,
+ fontSize: 18.0,
+ fontWeight: FontWeight.bold)),
+ ],
+ ),
+ ],
+ ),
+ Container(
+ alignment: Alignment.center,
+ padding: EdgeInsets.symmetric(
+ horizontal: 5.0, vertical: 10.0),
+ child: FlatButton(
+ onPressed: () {},
+ color: Colors.deepPurpleAccent,
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(20.0),
+ side: BorderSide(color: Colors.black),
+ ),
+ child: Text(
+ "START",
+ style: TextStyle(color: Colors.white),
+ ),
+ ),
+ ),
+ ],
+ ),
+ ),
+ ),
+ ),
+ ),
+
+ */
+ ),
+ ],
+ ),
+ ),
+ );
+ }
+}
+
+class BrewListTile extends StatelessWidget {
+
+ final AppointmentBooking appointmentBooking;
+ BrewListTile({this.appointmentBooking});
+
+ @override
+ Widget build(BuildContext context) {
+ return Padding(
+ padding: EdgeInsets.only(top:16.0),
+ child: Card(
+ elevation: 10.0,
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(5.0),
+ ),
+ child: Container(
+ width: MediaQuery.of(context).size.width,
+ padding:
+ EdgeInsets.symmetric(horizontal: 5.0, vertical: 5.0),
+ decoration: BoxDecoration(
+ border: Border.all(
+ color: Colors.deepPurple,
+ ),
+ borderRadius: BorderRadius.circular(5.0),
+ ),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ crossAxisAlignment: CrossAxisAlignment.center,
+ children: [
+ Row(
+ crossAxisAlignment: CrossAxisAlignment.center,
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ Container(
+ padding: EdgeInsets.symmetric(
+ horizontal: 2.0, vertical: 00.0),
+ margin: EdgeInsets.all(00.0),
+ decoration: BoxDecoration(
+ border: Border.all(
+ color: Colors.black,
+ ),
+ borderRadius: BorderRadius.circular(30.0),
+ ),
+ width: 50.0,
+ height: 50.0,
+ child: CircleAvatar(
+ backgroundColor: Colors.deepPurpleAccent,
+// foregroundColor: Colors.white,
+ backgroundImage: NetworkImage(
+ "https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcSya2MDHt8WIgyWsx5-t2KFF7oFwpqd8d8dZw&usqp=CAU"),
+// child: Text(
+// names[0],
+// style: TextStyle(color: Colors.white),
+// textAlign: TextAlign.center,
+// ),
+ ),
+ ),
+ SizedBox(width: 5.0),
+ Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ Text(appointmentBooking.patName,
+ style: TextStyle(
+ color: Colors.black,
+ fontSize: 18.0,
+ fontWeight: FontWeight.bold)),
+ ],
+ ),
+ ],
+ ),
+ Container(
+ alignment: Alignment.center,
+ padding: EdgeInsets.symmetric(
+ horizontal: 5.0, vertical: 10.0),
+ child: FlatButton(
+ onPressed: () {},
+ color: Colors.deepPurpleAccent,
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(20.0),
+ side: BorderSide(color: Colors.black),
+ ),
+ child: Text(
+ "START",
+ style: TextStyle(color: Colors.white),
+ ),
+ ),
+ ),
+ ],
+ ),
+ ),
+ ),
+
+ );
+ }
+}
\ No newline at end of file
diff --git a/medicare_doctor/lib/screens/home.dart b/medicare_doctor/lib/screens/home.dart
new file mode 100644
index 0000000..d580d53
--- /dev/null
+++ b/medicare_doctor/lib/screens/home.dart
@@ -0,0 +1,58 @@
+import 'package:animated_text_kit/animated_text_kit.dart';
+import 'package:flutter/material.dart';
+import 'package:medicare_doctor/screens/login_page.dart';
+
+class Home extends StatelessWidget {
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ body: Container(
+ decoration: BoxDecoration(
+ gradient: LinearGradient(colors: [Colors.blueAccent,Colors.white]),
+ ),
+ padding: EdgeInsets.only(top: 200.0, left: 100.0),
+ child: Column(
+ children: [
+ Row(
+ children: [
+ SizedBox(
+ width: 250.0,
+ child: ColorizeAnimatedTextKit(
+
+ text: [
+ "Medicure",
+ ],
+ textStyle:
+ TextStyle(fontSize: 50.0, fontFamily: "Horizon"),
+ colors: [
+ Colors.purple,
+ Colors.blue,
+ Colors.yellow,
+ Colors.red,
+ ],
+ textAlign: TextAlign.start,
+ alignment:
+ AlignmentDirectional.topStart // or Alignment.topLeft
+ ),
+ ),
+ ],
+ ),
+ SizedBox(height: 400.0),
+ FlatButton(
+ shape: RoundedRectangleBorder(
+ borderRadius:
+ BorderRadius.circular(
+ 10.0),
+ ),
+ onPressed: () {
+ Navigator.of(context).push(MaterialPageRoute(builder: (context) => LoginScreen()));
+ },
+ child: Text('Get Started'),
+ color: Colors.blue,
+ textColor: Colors.white),
+ ],
+ ),
+ ),
+ );
+ }
+}
diff --git a/medicare_doctor/lib/screens/login_page.dart b/medicare_doctor/lib/screens/login_page.dart
new file mode 100644
index 0000000..d3fbcfc
--- /dev/null
+++ b/medicare_doctor/lib/screens/login_page.dart
@@ -0,0 +1,123 @@
+import 'package:cloud_firestore/cloud_firestore.dart';
+import 'package:flutter/material.dart';
+import 'package:medicare_doctor/models/appointment.dart';
+import 'package:medicare_doctor/screens/register_screen.dart';
+import 'package:medicare_doctor/rounded_button.dart';
+import 'package:medicare_doctor/constants.dart';
+import 'package:firebase_auth/firebase_auth.dart';
+import 'package:medicare_doctor/services/database.dart';
+
+import 'package:modal_progress_hud/modal_progress_hud.dart';
+import 'package:provider/provider.dart';
+
+import 'doctor_appointments.dart';
+
+class LoginScreen extends StatefulWidget {
+ static const String id = 'login_screen';
+ @override
+ _LoginScreenState createState() => _LoginScreenState();
+}
+
+class _LoginScreenState extends State {
+ final _auth = FirebaseAuth.instance;
+
+ final CollectionReference _collectionReference = Firestore.instance
+ .collection('doctors');
+ final DatabaseService _databaseService = DatabaseService();
+
+
+
+ bool showSpinner = false;
+ String email;
+ String password;
+
+ @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) {
+ //Do something with the user input.
+ email = value;
+ },
+ decoration: kTextFieldDecoration.copyWith(hintText: "Enter your email"),
+ ),
+ SizedBox(
+ height: 8.0,
+ ),
+ TextField(
+ obscureText: true,
+ textAlign: TextAlign.center,
+ onChanged: (value) {
+ //Do something with the user input.
+ password = value;
+ },
+ decoration: kTextFieldDecoration.copyWith(hintText: "Enter your password")
+ ),
+ SizedBox(
+ height: 24.0,
+ ),
+ RoundedButton(
+ title: "Log In",
+ onPressed: () async {
+ setState(() {
+ showSpinner = true;
+ });
+ try{
+ final user =await _auth.signInWithEmailAndPassword(email: email, password: password);
+ if(user != null){
+ Navigator.of(context).push(MaterialPageRoute(builder: (context) => DoctorAppointment()));
+ }
+ setState(() {
+ showSpinner = false;
+ });
+ }
+ catch (e){
+ print(e);
+ }
+ },
+ color: Colors.lightBlueAccent,
+
+
+ ),
+ RoundedButton(
+ title: "Register",
+ onPressed: () {
+
+
+ Navigator.of(context).push(MaterialPageRoute(builder: (context) => RegistrationScreen()));
+ },
+ color: Colors.lightBlueAccent,
+
+
+ ),
+ ],
+ ),
+ ),
+ ),
+ );
+
+ }
+}
\ No newline at end of file
diff --git a/medicare_doctor/lib/screens/register_screen.dart b/medicare_doctor/lib/screens/register_screen.dart
new file mode 100644
index 0000000..06e8ce1
--- /dev/null
+++ b/medicare_doctor/lib/screens/register_screen.dart
@@ -0,0 +1,166 @@
+import 'package:flutter/material.dart';
+import 'package:medicare_doctor/constants.dart';
+import 'package:medicare_doctor/rounded_button.dart';
+import 'package:medicare_doctor/constants.dart';
+import 'package:firebase_auth/firebase_auth.dart';
+
+
+import 'package:cloud_firestore/cloud_firestore.dart';
+import 'package:medicare_doctor/services/auth.dart';
+import 'package:medicare_doctor/services/database.dart';
+
+
+import 'package:modal_progress_hud/modal_progress_hud.dart';
+
+import 'doctor_appointments.dart';
+
+class RegistrationScreen extends StatefulWidget {
+ static const String id = 'registration_screen';
+ @override
+ _RegistrationScreenState createState() => _RegistrationScreenState();
+}
+
+class _RegistrationScreenState extends State {
+ final _auth = FirebaseAuth.instance ;
+
+ final CollectionReference _collectionReference = Firestore.instance
+ .collection('doctors');
+ final AuthService _authService = AuthService();
+
+ bool showSpinner = false;
+ String email;
+ String password;
+ String name;
+ String specialist;
+ int experience;
+ int rating = 5;
+
+ @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) {
+ //Do something with the user input.
+ email = value;
+ },
+ decoration: kTextFieldDecoration.copyWith(hintText: "Enter your Name"),
+ ),
+ SizedBox(
+ height: 8.0,
+ ),
+ TextField(
+ textAlign: TextAlign.center,
+ onChanged: (value) {
+ //Do something with the user input.
+ specialist = value;
+ },
+ decoration: kTextFieldDecoration.copyWith(hintText: "Enter your Specialist"),
+ ),
+ SizedBox(
+ height: 8.0,
+ ),
+ TextField(
+
+ textAlign: TextAlign.center,
+ keyboardType: TextInputType.number,
+ onChanged: (value) {
+ //Do something with the user input.
+ experience = int.parse(value);
+ },
+ decoration: kTextFieldDecoration.copyWith(hintText: "Enter your Experience"),
+ ),
+ SizedBox(
+ height: 8.0,
+ ),
+ TextField(
+ keyboardType: TextInputType.emailAddress,
+ textAlign: TextAlign.center,
+ onChanged: (value) {
+ //Do something with the user input.
+ email = value;
+ },
+ decoration: kTextFieldDecoration.copyWith(hintText: "Enter your email"),
+ ),
+ SizedBox(
+ height: 8.0,
+ ),
+ TextField(
+ obscureText: true,
+ textAlign: TextAlign.center,
+ onChanged: (value) {
+ //Do something with the user input.
+ password = value;
+ },
+ decoration: kTextFieldDecoration.copyWith(hintText: "Enter your password"),
+ ),
+ SizedBox(
+ height: 24.0,
+ ),
+ RoundedButton(
+ title: "Register",
+ onPressed: () async{
+ setState(() {
+ showSpinner = true;
+ });
+ try {
+ AuthResult result = await _auth.createUserWithEmailAndPassword(email: email, password: password);
+ FirebaseUser user = result.user;
+
+
+ _collectionReference.document(user.uid).setData({
+ 'name': name,
+
+ 'experience': experience,
+ 'specialist': specialist,
+ 'rating': rating
+ }).then((value){
+ print("Successful");
+ setState(() {
+ showSpinner = false;
+ });
+ Navigator.of(context).push(MaterialPageRoute(builder: (context) => DoctorAppointment()));
+ }).catchError((error) {
+ print("Failed to add user: $error");
+
+ });
+
+ }
+ catch (e){
+ print(e);
+ }
+
+ },
+ color: Colors.lightBlueAccent,
+
+
+ ),
+ ],
+ ),
+ ),
+ ),
+ );
+ }
+}
\ No newline at end of file
diff --git a/medicare_doctor/lib/services/auth.dart b/medicare_doctor/lib/services/auth.dart
new file mode 100644
index 0000000..96f64ac
--- /dev/null
+++ b/medicare_doctor/lib/services/auth.dart
@@ -0,0 +1,34 @@
+import 'package:firebase_auth/firebase_auth.dart';
+import 'package:medicare_doctor/models/user.dart';
+
+
+class AuthService {
+
+ final FirebaseAuth _auth = FirebaseAuth.instance;
+
+ User _createUserFromFB(FirebaseUser user) {
+ return user != null ? User(uId: user.uid) : null;
+ }
+
+
+ //register
+ Future registerWithEmaillAndPassword(String email, String password) async{
+
+ try{
+ AuthResult result = await _auth.createUserWithEmailAndPassword(email: email, password: password);
+ FirebaseUser user = result.user;
+ return user;
+
+ // DatabaseService _database = DatabaseService(uid:user.uid);
+
+ //_database.updateUserData('0', 'New Brew Crew Member', 100);
+
+ //return _createUserFromFB(user);
+ }catch(e){
+ print(e.toString());
+ return null;
+ }
+ }
+
+
+}
\ No newline at end of file
diff --git a/medicare_doctor/lib/services/database.dart b/medicare_doctor/lib/services/database.dart
new file mode 100644
index 0000000..96701ea
--- /dev/null
+++ b/medicare_doctor/lib/services/database.dart
@@ -0,0 +1,123 @@
+
+import 'package:cloud_firestore/cloud_firestore.dart';
+import 'package:medicare_doctor/models/appointment.dart';
+import 'package:medicare_doctor/models/doctor.dart';
+
+
+class DatabaseService {
+
+ final String uid;
+
+ DatabaseService({this.uid});
+
+ final CollectionReference _collectionReference = Firestore.instance
+ .collection('users');
+
+ final CollectionReference _doctorsReference = Firestore.instance
+ .collection('doctors');
+
+ final CollectionReference _appointmentsReference = Firestore.instance
+ .collection('appointments');
+
+ Future updateUserData(String name, String email, int age) async {
+ print("inside updateUserData");
+ return await _collectionReference.document(uid).setData({
+ 'name': name,
+ 'email': email,
+ 'age': age
+ }).then((value){
+ print("Successful");
+ }).catchError((error) => print("Failed to add user: $error"));
+ }
+
+ //get users and data
+ Stream> get doctors {
+
+ return _doctorsReference.snapshots().map(_convertToBrewList);
+ }
+
+ List _convertToBrewList(QuerySnapshot snapshot){
+
+ return snapshot.documents.map((doc) {
+ return Doctor(
+
+ /*
+ final String name;
+ final String email;
+ final String specialist;
+ final int experience;
+ final int rating;
+ */
+ name: doc.data['name'] ?? '',
+ experience: doc.data['experience'] ?? 0,
+ specialist: doc.data['specialist'] ?? '0',
+ rating: doc.data['rating'] ?? 0
+ );
+ }).toList();
+ }
+
+ //get users and data
+ Stream> get appointmentBookings {
+
+ return _appointmentsReference.snapshots().map(_convertToAppointmentList);
+ }
+
+ List _convertToAppointmentList(QuerySnapshot snapshot) {
+
+ return snapshot.documents.map((doc) {
+
+ return AppointmentBooking(
+
+ /*
+ final String docName;
+ final String docSpecialization;
+ final String patUid;
+ final String time;
+ */
+ docName: doc.data['docName'] ?? '',
+ docSpecialization: doc.data['docSpecialization'] ?? '0',
+ patUid: doc.data['patUid'] ?? '0',
+ patName: doc.data['patName'] ?? '0',
+ time: doc.data['time'] ?? '0'
+ );
+
+
+
+ }).toList();
+ }
+
+
+
+
+}
+/*
+
+
+
+
+//convert user data to user model
+ UserData convertToUserDataFromDocumentSnapshot(DocumentSnapshot snapshot){
+
+ return UserData(
+ uid: uid,
+ name: snapshot.data['name'],
+ sugar: snapshot.data['sugar'],
+ strength: snapshot.data['strength']
+ );
+ }
+//get users and data
+ Stream> get brew {
+
+ return _collectionReference.snapshots().map(_convertToBrewList);
+ }
+
+
+//get user data stream
+ Stream get userData {
+ return _collectionReference.document(uid).snapshots().map(convertToUserDataFromDocumentSnapshot);
+ }
+
+
+
+}
+*/
\ No newline at end of file
diff --git a/medicare_doctor/lib/video_call/call.dart b/medicare_doctor/lib/video_call/call.dart
new file mode 100644
index 0000000..c54b801
--- /dev/null
+++ b/medicare_doctor/lib/video_call/call.dart
@@ -0,0 +1,324 @@
+import 'dart:async';
+
+import 'package:agora_rtc_engine/agora_rtc_engine.dart';
+import 'package:flutter/material.dart';
+
+import 'package:medicare_doctor/video_call/settings.dart';
+
+class CallPage extends StatefulWidget {
+ /// non-modifiable channel name of the page
+ final String channelName;
+
+ /// non-modifiable client role of the page
+ final ClientRole role;
+
+ /// Creates a call page with given channel name.
+ const CallPage({Key key, this.channelName, this.role}) : super(key: key);
+
+ @override
+ _CallPageState createState() => _CallPageState();
+}
+
+class _CallPageState extends State {
+ static final _users = [];
+ final _infoStrings = [];
+ bool muted = false;
+
+ @override
+ void dispose() {
+ // clear users
+ _users.clear();
+ // destroy sdk
+ AgoraRtcEngine.leaveChannel();
+ AgoraRtcEngine.destroy();
+ super.dispose();
+ }
+
+ @override
+ void initState() {
+ super.initState();
+ // initialize agora sdk
+ initialize();
+ }
+
+ Future initialize() async {
+ if (APP_ID.isEmpty) {
+ setState(() {
+ _infoStrings.add(
+ 'APP_ID missing, please provide your APP_ID in settings.dart',
+ );
+ _infoStrings.add('Agora Engine is not starting');
+ });
+ return;
+ }
+
+ await _initAgoraRtcEngine();
+ _addAgoraEventHandlers();
+ await AgoraRtcEngine.enableWebSdkInteroperability(true);
+ VideoEncoderConfiguration configuration = VideoEncoderConfiguration();
+ configuration.dimensions = Size(1920, 1080);
+ await AgoraRtcEngine.setVideoEncoderConfiguration(configuration);
+ await AgoraRtcEngine.joinChannel(null, widget.channelName, null, 0);
+ }
+
+ /// Create agora sdk instance and initialize
+ Future _initAgoraRtcEngine() async {
+ await AgoraRtcEngine.create(APP_ID);
+ await AgoraRtcEngine.enableVideo();
+ await AgoraRtcEngine.setChannelProfile(ChannelProfile.LiveBroadcasting);
+ await AgoraRtcEngine.setClientRole(widget.role);
+ }
+
+ /// Add agora event handlers
+ void _addAgoraEventHandlers() {
+ AgoraRtcEngine.onError = (dynamic code) {
+ setState(() {
+ final info = 'onError: $code';
+ _infoStrings.add(info);
+ });
+ };
+
+ AgoraRtcEngine.onJoinChannelSuccess = (
+ String channel,
+ int uid,
+ int elapsed,
+ ) {
+ setState(() {
+ final info = 'onJoinChannel: $channel, uid: $uid';
+ _infoStrings.add(info);
+ });
+ };
+
+ AgoraRtcEngine.onLeaveChannel = () {
+ setState(() {
+ _infoStrings.add('onLeaveChannel');
+ _users.clear();
+ });
+ };
+
+ AgoraRtcEngine.onUserJoined = (int uid, int elapsed) {
+ setState(() {
+ final info = 'userJoined: $uid';
+ _infoStrings.add(info);
+ _users.add(uid);
+ });
+ };
+
+ AgoraRtcEngine.onUserOffline = (int uid, int reason) {
+ setState(() {
+ final info = 'userOffline: $uid';
+ _infoStrings.add(info);
+ _users.remove(uid);
+ });
+ };
+
+ AgoraRtcEngine.onFirstRemoteVideoFrame = (
+ int uid,
+ int width,
+ int height,
+ int elapsed,
+ ) {
+ setState(() {
+ final info = 'firstRemoteVideo: $uid ${width}x $height';
+ _infoStrings.add(info);
+ });
+ };
+ }
+
+ /// Helper function to get list of native views
+ List _getRenderViews() {
+ final List list = [];
+ if (widget.role == ClientRole.Broadcaster) {
+ list.add(AgoraRenderWidget(0, local: true, preview: true));
+ }
+ _users.forEach((int uid) => list.add(AgoraRenderWidget(uid)));
+ return list;
+ }
+
+ /// Video view wrapper
+ Widget _videoView(view) {
+ return Expanded(child: Container(child: view));
+ }
+
+ /// Video view row wrapper
+ Widget _expandedVideoRow(List views) {
+ final wrappedViews = views.map(_videoView).toList();
+ return Expanded(
+ child: Row(
+ children: wrappedViews,
+ ),
+ );
+ }
+
+ /// Video layout wrapper
+ Widget _viewRows() {
+ final views = _getRenderViews();
+ switch (views.length) {
+ case 1:
+ return Container(
+ child: Column(
+ children: [_videoView(views[0])],
+ ));
+ case 2:
+ return Container(
+ child: Column(
+ children: [
+ _expandedVideoRow([views[0]]),
+ _expandedVideoRow([views[1]])
+ ],
+ ));
+ case 3:
+ return Container(
+ child: Column(
+ children: [
+ _expandedVideoRow(views.sublist(0, 2)),
+ _expandedVideoRow(views.sublist(2, 3))
+ ],
+ ));
+ case 4:
+ return Container(
+ child: Column(
+ children: [
+ _expandedVideoRow(views.sublist(0, 2)),
+ _expandedVideoRow(views.sublist(2, 4))
+ ],
+ ));
+ default:
+ }
+ return Container();
+ }
+
+ /// Toolbar layout
+ Widget _toolbar() {
+ if (widget.role == ClientRole.Audience) return Container();
+ return Container(
+ alignment: Alignment.bottomCenter,
+ padding: const EdgeInsets.symmetric(vertical: 48),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ RawMaterialButton(
+ onPressed: _onToggleMute,
+ child: Icon(
+ muted ? Icons.mic_off : Icons.mic,
+ color: muted ? Colors.white : Colors.blueAccent,
+ size: 20.0,
+ ),
+ shape: CircleBorder(),
+ elevation: 2.0,
+ fillColor: muted ? Colors.blueAccent : Colors.white,
+ padding: const EdgeInsets.all(12.0),
+ ),
+ RawMaterialButton(
+ onPressed: () => _onCallEnd(context),
+ child: Icon(
+ Icons.call_end,
+ color: Colors.white,
+ size: 35.0,
+ ),
+ shape: CircleBorder(),
+ elevation: 2.0,
+ fillColor: Colors.redAccent,
+ padding: const EdgeInsets.all(15.0),
+ ),
+ RawMaterialButton(
+ onPressed: _onSwitchCamera,
+ child: Icon(
+ Icons.switch_camera,
+ color: Colors.blueAccent,
+ size: 20.0,
+ ),
+ shape: CircleBorder(),
+ elevation: 2.0,
+ fillColor: Colors.white,
+ padding: const EdgeInsets.all(12.0),
+ )
+ ],
+ ),
+ );
+ }
+
+ /// Info panel to show logs
+ Widget _panel() {
+ return Container(
+ padding: const EdgeInsets.symmetric(vertical: 48),
+ alignment: Alignment.bottomCenter,
+ child: FractionallySizedBox(
+ heightFactor: 0.5,
+ child: Container(
+ padding: const EdgeInsets.symmetric(vertical: 48),
+ child: ListView.builder(
+ reverse: true,
+ itemCount: _infoStrings.length,
+ itemBuilder: (BuildContext context, int index) {
+ if (_infoStrings.isEmpty) {
+ return null;
+ }
+ return Padding(
+ padding: const EdgeInsets.symmetric(
+ vertical: 3,
+ horizontal: 10,
+ ),
+ child: Row(
+ mainAxisSize: MainAxisSize.min,
+ children: [
+ Flexible(
+ child: Container(
+ padding: const EdgeInsets.symmetric(
+ vertical: 2,
+ horizontal: 5,
+ ),
+ decoration: BoxDecoration(
+ color: Colors.yellowAccent,
+ borderRadius: BorderRadius.circular(5),
+ ),
+ child: Text(
+ _infoStrings[index],
+ style: TextStyle(color: Colors.blueGrey),
+ ),
+ ),
+ )
+ ],
+ ),
+ );
+ },
+ ),
+ ),
+ ),
+ );
+ }
+
+ void _onCallEnd(BuildContext context) {
+ Navigator.pop(context);
+ }
+
+ void _onToggleMute() {
+ setState(() {
+ muted = !muted;
+ });
+ AgoraRtcEngine.muteLocalAudioStream(muted);
+ }
+
+ void _onSwitchCamera() {
+ AgoraRtcEngine.switchCamera();
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ appBar: AppBar(
+ title: Text('Agora Flutter QuickStart'),
+ ),
+ backgroundColor: Colors.black,
+ body: Center(
+ child: Stack(
+ children: [
+ _viewRows(),
+ _panel(),
+ _toolbar(),
+ ],
+ ),
+ ),
+ );
+ }
+}
\ No newline at end of file
diff --git a/medicare_doctor/lib/video_call/settings.dart b/medicare_doctor/lib/video_call/settings.dart
new file mode 100644
index 0000000..ba8b1b3
--- /dev/null
+++ b/medicare_doctor/lib/video_call/settings.dart
@@ -0,0 +1,2 @@
+// Agora AppId
+const APP_ID = "c0c3bbe6cf5b4771ad8019c8dc192631";
\ No newline at end of file
diff --git a/medicare_doctor/pubspec.lock b/medicare_doctor/pubspec.lock
new file mode 100644
index 0000000..556db1e
--- /dev/null
+++ b/medicare_doctor/pubspec.lock
@@ -0,0 +1,348 @@
+# Generated by pub
+# See https://dart.dev/tools/pub/glossary#lockfile
+packages:
+ agora_rtc_engine:
+ dependency: "direct main"
+ description:
+ name: agora_rtc_engine
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.0.15"
+ animated_text_kit:
+ dependency: "direct main"
+ description:
+ name: animated_text_kit
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.2.0"
+ archive:
+ dependency: transitive
+ description:
+ name: archive
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.0.13"
+ args:
+ dependency: transitive
+ description:
+ name: args
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.6.0"
+ async:
+ dependency: transitive
+ description:
+ name: async
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.4.1"
+ boolean_selector:
+ dependency: transitive
+ description:
+ name: boolean_selector
+ 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.3"
+ cloud_firestore:
+ dependency: "direct main"
+ description:
+ name: cloud_firestore
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.13.7"
+ cloud_firestore_platform_interface:
+ dependency: transitive
+ description:
+ name: cloud_firestore_platform_interface
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.1.2"
+ cloud_firestore_web:
+ dependency: transitive
+ description:
+ name: cloud_firestore_web
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.1.1+2"
+ collection:
+ dependency: transitive
+ description:
+ name: collection
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.14.12"
+ 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.4"
+ cupertino_icons:
+ dependency: "direct main"
+ description:
+ name: cupertino_icons
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.1.3"
+ firebase:
+ dependency: transitive
+ description:
+ name: firebase
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "7.3.0"
+ firebase_auth:
+ dependency: "direct main"
+ description:
+ name: firebase_auth
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.15.5+3"
+ firebase_auth_platform_interface:
+ dependency: transitive
+ description:
+ name: firebase_auth_platform_interface
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.1.8"
+ firebase_auth_web:
+ dependency: transitive
+ description:
+ name: firebase_auth_web
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.1.3+1"
+ firebase_core:
+ dependency: transitive
+ description:
+ name: firebase_core
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.4.5"
+ 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_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"
+ http:
+ dependency: transitive
+ description:
+ name: http
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.12.2"
+ http_parser:
+ dependency: transitive
+ description:
+ name: http_parser
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "3.1.4"
+ image:
+ dependency: transitive
+ description:
+ name: image
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.1.12"
+ js:
+ dependency: transitive
+ description:
+ name: js
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.6.2"
+ 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"
+ nested:
+ dependency: transitive
+ description:
+ name: nested
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.0.4"
+ path:
+ dependency: transitive
+ description:
+ name: path
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.6.4"
+ pedantic:
+ dependency: transitive
+ description:
+ name: pedantic
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.9.0"
+ permission_handler:
+ dependency: "direct main"
+ description:
+ name: permission_handler
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "4.4.0+hotfix.4"
+ permission_handler_platform_interface:
+ dependency: transitive
+ description:
+ name: permission_handler_platform_interface
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.0.0"
+ petitparser:
+ dependency: transitive
+ description:
+ name: petitparser
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.4.0"
+ plugin_platform_interface:
+ dependency: transitive
+ description:
+ name: plugin_platform_interface
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.0.3"
+ provider:
+ dependency: "direct main"
+ description:
+ name: provider
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "4.3.2+2"
+ quiver:
+ dependency: transitive
+ description:
+ name: quiver
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.1.3"
+ sky_engine:
+ dependency: transitive
+ description: flutter
+ source: sdk
+ version: "0.0.99"
+ source_span:
+ dependency: transitive
+ description:
+ name: source_span
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.7.0"
+ 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"
+ 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.15"
+ typed_data:
+ dependency: transitive
+ description:
+ name: typed_data
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.1.6"
+ 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.6.1"
+sdks:
+ dart: ">=2.7.0 <3.0.0"
+ flutter: ">=1.16.0 <2.0.0"
diff --git a/medicare_doctor/pubspec.yaml b/medicare_doctor/pubspec.yaml
new file mode 100644
index 0000000..0b37885
--- /dev/null
+++ b/medicare_doctor/pubspec.yaml
@@ -0,0 +1,83 @@
+name: medicare_doctor
+description: A new Flutter application.
+
+# The following line prevents the package from being accidentally published to
+# pub.dev using `pub publish`. This is preferred for private packages.
+publish_to: 'none' # Remove this line if you wish to publish to pub.dev
+
+# The following defines the version and build number for your application.
+# A version number is three numbers separated by dots, like 1.2.43
+# followed by an optional build number separated by a +.
+# Both the version and the builder number may be overridden in flutter
+# build by specifying --build-name and --build-number, respectively.
+# In Android, build-name is used as versionName while build-number used as versionCode.
+# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
+# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
+# Read more about iOS versioning at
+# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
+version: 1.0.0+1
+
+environment:
+ sdk: ">=2.7.0 <3.0.0"
+
+dependencies:
+ flutter:
+ sdk: flutter
+
+
+ # The following adds the Cupertino Icons font to your application.
+ # Use with the CupertinoIcons class for iOS style icons.
+ cupertino_icons: ^0.1.3
+ animated_text_kit: ^2.2.0
+ firebase_auth: ^0.15.3
+ agora_rtc_engine: ^1.0.13
+ permission_handler: ^4.4.0
+ cloud_firestore: ^0.13.6
+ modal_progress_hud: ^0.1.3
+ provider: ^4.1.3
+
+dev_dependencies:
+ flutter_test:
+ sdk: flutter
+
+# For information on the generic Dart part of this file, see the
+# following page: https://dart.dev/tools/pub/pubspec
+
+# The following section is specific to Flutter.
+flutter:
+
+ # The following line ensures that the Material Icons font is
+ # included with your application, so that you can use the icons in
+ # the material Icons class.
+ uses-material-design: true
+
+ # To add assets to your application, add an assets section, like this:
+ # assets:
+ # - images/a_dot_burr.jpeg
+ # - images/a_dot_ham.jpeg
+
+ # An image asset can refer to one or more resolution-specific "variants", see
+ # https://flutter.dev/assets-and-images/#resolution-aware.
+
+ # For details regarding adding assets from package dependencies, see
+ # https://flutter.dev/assets-and-images/#from-packages
+
+ # To add custom fonts to your application, add a fonts section here,
+ # in this "flutter" section. Each entry in this list should have a
+ # "family" key with the font family name, and a "fonts" key with a
+ # list giving the asset and other descriptors for the font. For
+ # example:
+ # fonts:
+ # - family: Schyler
+ # fonts:
+ # - asset: fonts/Schyler-Regular.ttf
+ # - asset: fonts/Schyler-Italic.ttf
+ # style: italic
+ # - family: Trajan Pro
+ # fonts:
+ # - asset: fonts/TrajanPro.ttf
+ # - asset: fonts/TrajanPro_Bold.ttf
+ # weight: 700
+ #
+ # For details regarding fonts from package dependencies,
+ # see https://flutter.dev/custom-fonts/#from-packages
diff --git a/medicare_doctor/test/widget_test.dart b/medicare_doctor/test/widget_test.dart
new file mode 100644
index 0000000..36d238f
--- /dev/null
+++ b/medicare_doctor/test/widget_test.dart
@@ -0,0 +1,30 @@
+// This is a basic Flutter widget test.
+//
+// To perform an interaction with a widget in your test, use the WidgetTester
+// utility that Flutter provides. For example, you can send tap and scroll
+// gestures. You can also use WidgetTester to find child widgets in the widget
+// tree, read text, and verify that the values of widget properties are correct.
+
+import 'package:flutter/material.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+import 'package:medicare_doctor/main.dart';
+
+void main() {
+ testWidgets('Counter increments smoke test', (WidgetTester tester) async {
+ // Build our app and trigger a frame.
+ await tester.pumpWidget(MedicareD());
+
+ // Verify that our counter starts at 0.
+ expect(find.text('0'), findsOneWidget);
+ expect(find.text('1'), findsNothing);
+
+ // Tap the '+' icon and trigger a frame.
+ await tester.tap(find.byIcon(Icons.add));
+ await tester.pump();
+
+ // Verify that our counter has incremented.
+ expect(find.text('0'), findsNothing);
+ expect(find.text('1'), findsOneWidget);
+ });
+}