Merge branch 'update_flutter_3.24_vida_plus_episode' of http://34.17.52.180/Haroon6138/doctor_app_flutter into update_flutter_3.16.0_merge_vida_plus

# Conflicts:
#	pubspec.yaml
update_flutter_3.16.0_merge_vida_plus
taha.alam 10 months ago
commit 41a6d14077

@ -4,7 +4,42 @@
# This file should be version controlled and should not be manually edited.
version:
revision: 0b8abb4724aa590dd0f429683339b1e045a1594d
channel: stable
revision: "54e66469a933b60ddf175f858f82eaeb97e48c8d"
channel: "stable"
project_type: app
# Tracks metadata for the flutter migrate command
migration:
platforms:
- platform: root
create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
- platform: android
create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
- platform: ios
create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
- platform: linux
create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
- platform: macos
create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
- platform: web
create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
- platform: windows
create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d
# User provided section
# List of Local paths (relative to this file) that should be
# ignored by the migrate tool.
#
# Files that are not part of the templates will be ignored by default.
unmanaged_files:
- 'lib/main.dart'
- 'ios/Runner.xcodeproj/project.pbxproj'

@ -0,0 +1,28 @@
# This file configures the analyzer, which statically analyzes Dart code to
# check for errors, warnings, and lints.
#
# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
# invoked from the command line by running `flutter analyze`.
# The following line activates a set of recommended lints for Flutter apps,
# packages, and plugins designed to encourage good coding practices.
include: package:flutter_lints/flutter.yaml
linter:
# The lint rules applied to this project can be customized in the
# section below to disable rules from the `package:flutter_lints/flutter.yaml`
# included above or to enable additional rules. A list of all available lints
# and their documentation is published at https://dart.dev/lints.
#
# Instead of disabling a lint rule for the entire project in the
# section below, it can also be suppressed for a single line of code
# or a specific dart file by using the `// ignore: name_of_lint` and
# `// ignore_for_file: name_of_lint` syntax on the line or in the file
# producing the lint.
rules:
# avoid_print: false # Uncomment to disable the `avoid_print` rule
# prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
# Additional information about this file can be found at
# https://dart.dev/guides/language/analysis-options

@ -59,7 +59,7 @@ android {
buildTypes {
release {
// TODO: Add your own signing config for the release build.
signingConfig signingConfigs.release
signingConfig signingConfigs.debug
}
debug {
@ -103,14 +103,17 @@ dependencies {
//openTok
implementation 'com.opentok.android:opentok-android-sdk:2.20.1'
//permissions
implementation 'pub.devrel:easypermissions:0.4.0'
// implementation 'pub.devrel:easypermissions:0.4.0'
implementation project(':easypermissions')
//retrofit
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.6.2'
implementation 'com.squareup.okhttp3:logging-interceptor:4.9.1'
implementation 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
implementation 'com.android.support:multidex:1.0.3'
implementation 'com.google.firebase:firebase-analytics:17.4.1'
}
apply plugin: 'com.google.gms.google-services'

@ -1,12 +1,12 @@
buildscript {
ext.kotlin_version = '1.8.20'
ext.kotlin_version = '2.0.0'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.0.3'
classpath 'com.android.tools.build:gradle:7.1.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.3.3'
}

@ -6,7 +6,7 @@ ext {
SNAPSHOT_REPOSITORY_URL = "https://s01.oss.sonatype.org/content/repositories/snapshots/"
}
apply plugin: 'com.vanniktech.maven.publish'
//apply plugin: 'com.vanniktech.maven.publish'
android {
compileSdkVersion 30

@ -1,4 +1,4 @@
include ':app'
include ':app', ':easypermissions'
def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()

@ -0,0 +1,4 @@
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M10.6249 6.66671C10.6249 6.32153 10.3451 6.04171 9.99992 6.04171C9.65474 6.04171 9.37492 6.32153 9.37492 6.66671V9.37504H6.66659C6.32141 9.37504 6.04159 9.65486 6.04159 10C6.04159 10.3452 6.32141 10.625 6.66659 10.625H9.37492V13.3334C9.37492 13.6786 9.65474 13.9584 9.99992 13.9584C10.3451 13.9584 10.6249 13.6786 10.6249 13.3334V10.625H13.3333C13.6784 10.625 13.9583 10.3452 13.9583 10C13.9583 9.65486 13.6784 9.37504 13.3333 9.37504H10.6249V6.66671Z" fill="#2B353E"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.0476 1.45837H9.95227C8.12669 1.45836 6.69279 1.45835 5.57327 1.60887C4.42606 1.76311 3.51585 2.08564 2.80068 2.8008C2.08551 3.51597 1.76299 4.42618 1.60875 5.57339C1.45823 6.69291 1.45824 8.12681 1.45825 9.9524V10.0477C1.45824 11.8733 1.45823 13.3072 1.60875 14.4267C1.76299 15.5739 2.08551 16.4841 2.80068 17.1993C3.51585 17.9144 4.42606 18.237 5.57327 18.3912C6.69278 18.5417 8.12667 18.5417 9.95225 18.5417H10.0476C11.8731 18.5417 13.3071 18.5417 14.4266 18.3912C15.5738 18.237 16.484 17.9144 17.1992 17.1993C17.9143 16.4841 18.2369 15.5739 18.3911 14.4267C18.5416 13.3072 18.5416 11.8733 18.5416 10.0477V9.9524C18.5416 8.12682 18.5416 6.6929 18.3911 5.57339C18.2369 4.42618 17.9143 3.51597 17.1992 2.8008C16.484 2.08564 15.5738 1.76311 14.4266 1.60887C13.3071 1.45835 11.8732 1.45836 10.0476 1.45837ZM3.68456 3.68469C4.12877 3.24048 4.73123 2.98333 5.73983 2.84772C6.76641 2.7097 8.11627 2.70837 9.99992 2.70837C11.8836 2.70837 13.2334 2.7097 14.26 2.84772C15.2686 2.98333 15.8711 3.24048 16.3153 3.68469C16.7595 4.12889 17.0166 4.73135 17.1522 5.73995C17.2903 6.76654 17.2916 8.1164 17.2916 10C17.2916 11.8837 17.2903 13.2335 17.1522 14.2601C17.0166 15.2687 16.7595 15.8712 16.3153 16.3154C15.8711 16.7596 15.2686 17.0168 14.26 17.1524C13.2334 17.2904 11.8836 17.2917 9.99992 17.2917C8.11627 17.2917 6.76641 17.2904 5.73983 17.1524C4.73123 17.0168 4.12877 16.7596 3.68456 16.3154C3.24036 15.8712 2.9832 15.2687 2.8476 14.2601C2.70958 13.2335 2.70825 11.8837 2.70825 10C2.70825 8.1164 2.70958 6.76654 2.8476 5.73995C2.9832 4.73135 3.24036 4.12889 3.68456 3.68469Z" fill="#2B353E"/>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

@ -0,0 +1,4 @@
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M11.955 2.55763C8.35771 1.59711 4.67798 3.31429 3.05104 6.47547L4.24455 6.54813C4.58909 6.56911 4.85139 6.86542 4.83042 7.20996C4.80944 7.5545 4.51313 7.8168 4.16859 7.79582L2.07682 7.66848C1.87853 7.65641 1.69779 7.55079 1.58993 7.38396C1.48208 7.21713 1.45995 7.00897 1.53034 6.8232C3.14318 2.56627 7.76997 0.146382 12.2775 1.34994C17.0786 2.6319 19.936 7.5428 18.6506 12.3234C17.3654 17.1031 12.4283 19.9315 7.62802 18.6497C4.06206 17.6976 1.57008 14.7447 1.04876 11.3312C0.996642 10.99 1.23101 10.6711 1.57223 10.619C1.91345 10.5669 2.23231 10.8012 2.28443 11.1425C2.73296 14.0794 4.87811 16.6217 7.95049 17.442C12.0909 18.5476 16.339 16.1065 17.4435 11.9988C18.5478 7.89199 16.0946 3.66295 11.955 2.55763Z" fill="#2E303A"/>
<path d="M10.6249 6.66651C10.6249 6.32133 10.3451 6.04151 9.99993 6.04151C9.65475 6.04151 9.37493 6.32133 9.37493 6.66651V9.99984C9.37493 10.1656 9.44077 10.3246 9.55798 10.4418L11.2247 12.1085C11.4687 12.3525 11.8645 12.3525 12.1085 12.1085C12.3526 11.8644 12.3526 11.4686 12.1085 11.2246L10.6249 9.74096V6.66651Z" fill="#2E303A"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

@ -0,0 +1,5 @@
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M7.91667 14.375C7.57149 14.375 7.29167 14.0951 7.29167 13.75L7.29167 8.74996C7.29167 8.40478 7.57149 8.12496 7.91667 8.12496C8.26184 8.12496 8.54167 8.40478 8.54167 8.74996L8.54167 13.75C8.54167 14.0951 8.26184 14.375 7.91667 14.375Z" fill="#D02127"/>
<path d="M12.7083 8.74996C12.7083 8.40478 12.4285 8.12496 12.0833 8.12496C11.7382 8.12496 11.4583 8.40478 11.4583 8.74996V13.75C11.4583 14.0951 11.7382 14.375 12.0833 14.375C12.4285 14.375 12.7083 14.0951 12.7083 13.75V8.74996Z" fill="#D02127"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.0552 1.04163H10.0018C9.58075 1.04161 9.22356 1.04161 8.92715 1.06859C8.61261 1.09722 8.31962 1.15924 8.03631 1.30989C7.92449 1.36934 7.8178 1.43797 7.71732 1.51505C7.46273 1.71036 7.28477 1.95124 7.12826 2.22557C6.98076 2.48408 6.83263 2.80908 6.65799 3.19223L6.30879 3.95829H2.5C2.15482 3.95829 1.875 4.23812 1.875 4.58329C1.875 4.92847 2.15482 5.20829 2.5 5.20829H3.16161L3.63194 12.9992C3.6948 14.0406 3.74469 14.8669 3.84847 15.5271C3.95489 16.204 4.12601 16.7678 4.46926 17.261C4.78326 17.7122 5.18781 18.0931 5.65712 18.3793C6.17013 18.6922 6.74321 18.8291 7.42534 18.8945C8.09048 18.9583 8.91832 18.9583 9.96154 18.9583H10.0263C11.0681 18.9583 11.895 18.9583 12.5593 18.8946C13.2407 18.8293 13.8131 18.6927 14.3258 18.3804C14.7948 18.0947 15.1992 17.7145 15.5133 17.264C15.8567 16.7716 16.0283 16.2087 16.1355 15.5327C16.2401 14.8735 16.2911 14.0483 16.3554 13.0084L16.8376 5.20829H17.5C17.8452 5.20829 18.125 4.92847 18.125 4.58329C18.125 4.23812 17.8452 3.95829 17.5 3.95829H13.7714L13.3618 3.11338C13.1826 2.74382 13.0306 2.43011 12.8809 2.18069C12.722 1.91594 12.5433 1.68392 12.2918 1.4963C12.1924 1.42216 12.0871 1.35621 11.977 1.2991C11.6985 1.15458 11.4117 1.09503 11.1042 1.06752C10.8145 1.04161 10.4658 1.04162 10.0552 1.04163ZM15.5852 5.20829H13.3935C13.3847 5.20848 13.3758 5.20848 13.3669 5.20829H6.72416C6.715 5.2085 6.70582 5.2085 6.69663 5.20829H4.41389L4.87772 12.8916C4.94298 13.9725 4.98992 14.739 5.0833 15.3329C5.1751 15.9169 5.30366 16.2717 5.49526 16.547C5.71011 16.8557 5.9869 17.1163 6.30801 17.3122C6.59437 17.4868 6.95632 17.5938 7.54471 17.6502C8.14321 17.7076 8.91114 17.7083 9.99397 17.7083C11.0754 17.7083 11.8423 17.7076 12.44 17.6503C13.0277 17.594 13.3893 17.4873 13.6754 17.3129C13.9963 17.1174 14.2731 16.8573 14.488 16.5491C14.6796 16.2742 14.8085 15.9199 14.901 15.3368C14.9951 14.7437 15.043 13.9784 15.1098 12.899L15.5852 5.20829ZM12.3822 3.95829H7.68253L7.78421 3.73524C7.97304 3.32098 8.098 3.04828 8.21397 2.84502C8.32406 2.65207 8.40305 2.56445 8.47817 2.50682C8.52384 2.47178 8.57234 2.44059 8.62316 2.41356C8.70676 2.36911 8.81925 2.33358 9.04048 2.31344C9.27353 2.29222 9.5735 2.29163 10.0288 2.29163C10.4729 2.29163 10.7654 2.2922 10.9928 2.31255C11.2087 2.33185 11.319 2.36592 11.4014 2.40866C11.4514 2.43462 11.4992 2.4646 11.5444 2.4983C11.6188 2.55378 11.6976 2.63819 11.8091 2.82399C11.9267 3.01981 12.0547 3.28268 12.2485 3.68236L12.3822 3.95829Z" fill="#D02127"/>
</svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

@ -0,0 +1,4 @@
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.6701 0.495221C12.6572 -0.0918746 13.8747 -0.110273 14.8787 0.447126C15.2952 0.678342 15.675 1.06666 16.24 1.64419L16.3934 1.80091C16.9604 2.37969 17.3398 2.76705 17.5651 3.19051C18.1056 4.20643 18.088 5.43543 17.5183 6.43501C17.2808 6.85167 16.8903 7.22757 16.3071 7.78898L8.29152 15.5093C7.14082 16.618 6.43156 17.3014 5.53412 17.6519C4.63538 18.0029 3.65817 17.9772 2.07716 17.9356L1.67137 17.9249C1.43966 17.9189 1.20543 17.9129 1.01203 17.8806C0.789927 17.8436 0.52612 17.7584 0.317414 17.5215C0.110574 17.2868 0.0574955 17.0159 0.0450756 16.793C0.0340941 16.596 0.0525398 16.3599 0.0710769 16.1227L0.105174 15.685C0.21291 14.2995 0.27877 13.4525 0.613206 12.6828C0.948079 11.912 1.52015 11.2924 2.45354 10.2814L10.3439 1.73254C10.8921 1.13821 11.2606 0.73876 11.6701 0.495221ZM14.2719 1.54C13.6572 1.19868 12.9141 1.20973 12.309 1.56958C12.077 1.70753 11.8391 1.9556 11.1874 2.66174L11.1194 2.73538L15.3547 6.97069L15.3617 6.96398C16.0522 6.29893 16.296 6.05516 16.4323 5.81608C16.7896 5.18915 16.8008 4.41535 16.4615 3.77762C16.3321 3.53437 16.0952 3.28325 15.4243 2.5978C14.7524 1.91149 14.5076 1.67083 14.2719 1.54ZM3.45048 11.0443L10.2709 3.65466L14.4543 7.83799L7.5253 14.5117C6.23985 15.7498 5.71585 16.239 5.07935 16.4876C4.44424 16.7356 3.73726 16.7285 1.97083 16.6823L1.7375 16.6762C1.60457 16.6728 1.49928 16.67 1.40888 16.6652C1.36203 16.6628 1.32351 16.66 1.29159 16.6569C1.29192 16.5567 1.3021 16.415 1.31986 16.187L1.34236 15.8982C1.46224 14.3595 1.5188 13.7353 1.75968 13.1809C2.00008 12.6275 2.41374 12.1675 3.45048 11.0443Z" fill="#2B353E"/>
<path d="M10.6668 16.7083C10.3216 16.7083 10.0418 16.9881 10.0418 17.3333C10.0418 17.6785 10.3216 17.9583 10.6668 17.9583H17.3334C17.6786 17.9583 17.9584 17.6785 17.9584 17.3333C17.9584 16.9881 17.6786 16.7083 17.3334 16.7083H10.6668Z" fill="#2B353E"/>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

@ -0,0 +1,4 @@
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.67 0.495221C12.6572 -0.0918746 13.8747 -0.110273 14.8787 0.447126C15.2951 0.678342 15.675 1.06666 16.24 1.64419L16.3934 1.80091C16.9603 2.37969 17.3398 2.76705 17.5651 3.19051C18.1055 4.20643 18.0879 5.43543 17.5183 6.43501C17.2808 6.85167 16.8903 7.22757 16.307 7.78898L8.29149 15.5093C7.14079 16.618 6.43153 17.3014 5.53409 17.6519C4.63535 18.0029 3.65814 17.9772 2.07713 17.9356L1.67134 17.9249C1.43963 17.9189 1.2054 17.9129 1.012 17.8806C0.789896 17.8436 0.526089 17.7584 0.317383 17.5215C0.110543 17.2868 0.057465 17.0159 0.0450451 16.793C0.0340636 16.596 0.0525093 16.3599 0.0710464 16.1227L0.105143 15.685C0.212879 14.2995 0.27874 13.4525 0.613175 12.6828C0.948048 11.912 1.52012 11.2924 2.45351 10.2814L10.3439 1.73254C10.8921 1.13821 11.2605 0.73876 11.67 0.495221ZM14.2719 1.54C13.6571 1.19868 12.914 1.20973 12.309 1.56958C12.077 1.70753 11.8391 1.9556 11.1874 2.66174L11.1194 2.73538L15.3547 6.97069L15.3617 6.96398C16.0521 6.29893 16.296 6.05516 16.4323 5.81608C16.7896 5.18915 16.8008 4.41535 16.4615 3.77762C16.3321 3.53437 16.0952 3.28325 15.4242 2.5978C14.7524 1.91149 14.5076 1.67083 14.2719 1.54ZM3.45045 11.0443L10.2709 3.65466L14.4542 7.83799L7.52527 14.5117C6.23982 15.7498 5.71582 16.239 5.07932 16.4876C4.44421 16.7356 3.73723 16.7285 1.9708 16.6823L1.73747 16.6762C1.60454 16.6728 1.49925 16.67 1.40885 16.6652C1.362 16.6628 1.32348 16.66 1.29156 16.6569C1.29189 16.5567 1.30207 16.415 1.31983 16.187L1.34233 15.8982C1.46221 14.3595 1.51877 13.7353 1.75964 13.1809C2.00005 12.6275 2.41371 12.1675 3.45045 11.0443Z" fill="#2B353E"/>
<path d="M10.6667 16.7083C10.3216 16.7083 10.0417 16.9881 10.0417 17.3333C10.0417 17.6785 10.3216 17.9583 10.6667 17.9583H17.3334C17.6786 17.9583 17.9584 17.6785 17.9584 17.3333C17.9584 16.9881 17.6786 16.7083 17.3334 16.7083H10.6667Z" fill="#2B353E"/>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

@ -0,0 +1,3 @@
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M2.45441 1.79572C4.93855 0.271943 7.16707 0.879232 8.51335 1.89026C8.73484 2.05659 8.88684 2.17042 9 2.24729C9.11316 2.17042 9.26517 2.05659 9.48665 1.89026C10.8329 0.879232 13.0615 0.271943 15.5456 1.79572C17.2633 2.84936 18.2298 5.05026 17.8907 7.57902C17.5499 10.12 15.9052 12.9938 12.4222 15.5718C12.3931 15.5934 12.3642 15.6148 12.3355 15.636C11.126 16.5318 10.3251 17.125 9 17.125C7.67495 17.125 6.87396 16.5318 5.66447 15.636C5.63581 15.6148 5.60691 15.5934 5.57778 15.5718C2.09478 12.9938 0.450122 10.12 0.109332 7.57902C-0.229821 5.05026 0.736704 2.84936 2.45441 1.79572ZM8.86938 2.32783C8.8667 2.32904 8.86718 2.32865 8.87054 2.3273C8.87011 2.3275 8.86972 2.32768 8.86938 2.32783ZM9.12946 2.32729C9.13282 2.32864 9.1333 2.32904 9.13062 2.32783C9.13028 2.32768 9.12989 2.3275 9.12946 2.32729ZM7.76273 2.88979C6.76562 2.14099 5.09326 1.64347 3.10799 2.86123C1.89289 3.60658 1.0612 5.27264 1.34824 7.41286C1.63365 9.54088 3.0396 12.138 6.32144 14.5671C7.63991 15.543 8.12114 15.875 9 15.875C9.87886 15.875 10.3601 15.543 11.6786 14.5671C14.9604 12.138 16.3664 9.54088 16.6518 7.41286C16.9388 5.27264 16.1071 3.60658 14.892 2.86123C12.9067 1.64347 11.2344 2.14099 10.2373 2.88979L10.2198 2.90288C9.99452 3.0721 9.80098 3.21746 9.64616 3.31882C9.56569 3.3715 9.47659 3.42514 9.38411 3.46693C9.29635 3.50659 9.16153 3.55621 9 3.55621C8.83847 3.55621 8.70365 3.50659 8.61589 3.46693C8.52341 3.42514 8.43431 3.3715 8.35384 3.31882C8.19901 3.21745 8.00546 3.07209 7.78012 2.90285L7.76273 2.88979Z" fill="#459BF1"/>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

@ -0,0 +1,3 @@
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M2.45416 1.79596C4.93831 0.272187 7.16683 0.879476 8.51311 1.89051C8.73459 2.05683 8.8866 2.17067 8.99975 2.24754C9.11292 2.17067 9.26492 2.05683 9.4864 1.89051C10.8327 0.879476 13.0612 0.272187 15.5454 1.79596C17.2631 2.8496 18.2296 5.0505 17.8904 7.57926C17.5496 10.1202 15.905 12.9941 12.422 15.5721C11.2125 16.4678 10.3248 17.1253 8.99976 17.1253C7.67471 17.1253 6.78702 16.4678 5.57754 15.5721C2.09453 12.9941 0.449878 10.1202 0.109088 7.57926C-0.230066 5.0505 0.73646 2.8496 2.45416 1.79596Z" fill="#459BF1"/>
</svg>

After

Width:  |  Height:  |  Size: 628 B

@ -0,0 +1,5 @@
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M9.57578 9.79268C9.5179 9.79175 9.45097 9.79172 9.36841 9.79172C9.02323 9.79172 8.74341 9.5119 8.74341 9.16672C8.74341 8.82155 9.02323 8.54172 9.36841 8.54172L9.39711 8.54172C9.56804 8.54165 9.75287 8.54158 9.90889 8.56255C10.0917 8.58712 10.3251 8.65032 10.5216 8.84682C10.7181 9.04332 10.7813 9.27681 10.8059 9.45958C10.8269 9.61559 10.8268 9.80042 10.8267 9.97135L10.8267 14.1667C10.8267 14.5119 10.5469 14.7917 10.2017 14.7917C9.85656 14.7917 9.57674 14.5119 9.57674 14.1667V10.0001C9.57674 9.91749 9.57671 9.85056 9.57578 9.79268Z" fill="#2B353E"/>
<path d="M9.99341 5.83337C9.53317 5.83337 9.16008 6.20647 9.16008 6.66671C9.16008 7.12695 9.53317 7.50004 9.99341 7.50004H10.0009C10.4611 7.50004 10.8342 7.12695 10.8342 6.66671C10.8342 6.20647 10.4611 5.83337 10.0009 5.83337H9.99341Z" fill="#2B353E"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.95227 1.45837H10.0476C11.8732 1.45836 13.3071 1.45835 14.4266 1.60887C15.5738 1.76311 16.484 2.08564 17.1992 2.8008C17.9143 3.51597 18.2369 4.42618 18.3911 5.57339C18.5416 6.6929 18.5416 8.12679 18.5416 9.95237V10.0477C18.5416 11.8733 18.5416 13.3072 18.3911 14.4267C18.2369 15.5739 17.9143 16.4841 17.1992 17.1993C16.484 17.9144 15.5738 18.237 14.4266 18.3912C13.3071 18.5417 11.8732 18.5417 10.0476 18.5417H9.95228C8.1267 18.5417 6.69278 18.5417 5.57327 18.3912C4.42606 18.237 3.51585 17.9144 2.80068 17.1993C2.08551 16.4841 1.76299 15.5739 1.60875 14.4267C1.45823 13.3072 1.45824 11.8733 1.45825 10.0477V9.9524C1.45824 8.12681 1.45823 6.69291 1.60875 5.57339C1.76299 4.42618 2.08551 3.51597 2.80068 2.8008C3.51585 2.08564 4.42606 1.76311 5.57327 1.60887C6.69279 1.45835 8.12669 1.45836 9.95227 1.45837ZM5.73983 2.84772C4.73123 2.98333 4.12877 3.24048 3.68456 3.68469C3.24036 4.12889 2.9832 4.73135 2.8476 5.73995C2.70958 6.76654 2.70825 8.1164 2.70825 10C2.70825 11.8837 2.70958 13.2335 2.8476 14.2601C2.9832 15.2687 3.24036 15.8712 3.68456 16.3154C4.12877 16.7596 4.73123 17.0168 5.73983 17.1524C6.76641 17.2904 8.11627 17.2917 9.99992 17.2917C11.8836 17.2917 13.2334 17.2904 14.26 17.1524C15.2686 17.0168 15.8711 16.7596 16.3153 16.3154C16.7595 15.8712 17.0166 15.2687 17.1522 14.2601C17.2903 13.2335 17.2916 11.8837 17.2916 10C17.2916 8.1164 17.2903 6.76654 17.1522 5.73995C17.0166 4.73135 16.7595 4.12889 16.3153 3.68469C15.8711 3.24048 15.2686 2.98333 14.26 2.84772C13.2334 2.7097 11.8836 2.70837 9.99992 2.70837C8.11627 2.70837 6.76641 2.7097 5.73983 2.84772Z" fill="#2B353E"/>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

@ -0,0 +1,4 @@
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12.7941 6.92237C13.0273 6.66792 13.0101 6.27257 12.7557 6.03932C12.5012 5.80608 12.1059 5.82327 11.8726 6.07772L7.73038 10.5965L6.10862 8.97477C5.86454 8.73069 5.46881 8.73069 5.22473 8.97477C4.98066 9.21885 4.98066 9.61457 5.22473 9.85865L7.30807 11.942C7.42861 12.0625 7.59316 12.1286 7.76359 12.1249C7.93402 12.1212 8.09554 12.048 8.21073 11.9224L12.7941 6.92237Z" fill="#359846"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.04766 0.458374H8.95236C7.12678 0.458363 5.69288 0.458354 4.57336 0.608869C3.42615 0.763108 2.51594 1.08564 1.80077 1.8008C1.08561 2.51597 0.763077 3.42618 0.608838 4.57339C0.458324 5.69291 0.458333 7.12681 0.458344 8.95239V9.04769C0.458333 10.8733 0.458324 12.3072 0.608838 13.4267C0.763077 14.5739 1.08561 15.4841 1.80077 16.1993C2.51594 16.9144 3.42615 17.237 4.57336 17.3912C5.69287 17.5417 7.12676 17.5417 8.95234 17.5417H9.04765C10.8732 17.5417 12.3071 17.5417 13.4267 17.3912C14.5739 17.237 15.4841 16.9144 16.1992 16.1993C16.9144 15.4841 17.2369 14.5739 17.3912 13.4267C17.5417 12.3072 17.5417 10.8733 17.5417 9.04771V8.9524C17.5417 7.12682 17.5417 5.6929 17.3912 4.57339C17.2369 3.42618 16.9144 2.51597 16.1992 1.8008C15.4841 1.08564 14.5739 0.763108 13.4267 0.608869C12.3071 0.458354 10.8732 0.458363 9.04766 0.458374ZM2.68465 2.68468C3.12886 2.24048 3.73132 1.98333 4.73992 1.84772C5.76651 1.7097 7.11636 1.70837 9.00001 1.70837C10.8837 1.70837 12.2335 1.7097 13.2601 1.84772C14.2687 1.98333 14.8712 2.24048 15.3154 2.68468C15.7596 3.12889 16.0167 3.73135 16.1523 4.73995C16.2903 5.76654 16.2917 7.11639 16.2917 9.00004C16.2917 10.8837 16.2903 12.2335 16.1523 13.2601C16.0167 14.2687 15.7596 14.8712 15.3154 15.3154C14.8712 15.7596 14.2687 16.0168 13.2601 16.1524C12.2335 16.2904 10.8837 16.2917 9.00001 16.2917C7.11636 16.2917 5.76651 16.2904 4.73992 16.1524C3.73132 16.0168 3.12886 15.7596 2.68465 15.3154C2.24045 14.8712 1.98329 14.2687 1.84769 13.2601C1.70967 12.2335 1.70834 10.8837 1.70834 9.00004C1.70834 7.11639 1.70967 5.76654 1.84769 4.73995C1.98329 3.73135 2.24045 3.12889 2.68465 2.68468Z" fill="#359846"/>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

@ -0,0 +1,6 @@
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8.655 0.0416262H7.68289C6.05716 0.0416157 4.77679 0.0416073 3.77632 0.168644C2.75217 0.298686 1.92699 0.571419 1.27355 1.18855C0.615066 1.81045 0.319448 2.60386 0.179402 3.58764C0.0439182 4.53937 0.0439303 5.75446 0.0439456 7.28385V10.7161C0.0439303 12.2454 0.0439182 13.4605 0.179402 14.4123C0.319447 15.3961 0.615064 16.1895 1.27356 16.8114C1.927 17.4285 2.75218 17.7012 3.77632 17.8313C4.77679 17.9583 6.05717 17.9583 7.68291 17.9583H8.16895C8.51412 17.9583 8.79395 17.6785 8.79395 17.3333C8.79395 16.9881 8.51412 16.7083 8.16895 16.7083H7.72778C6.04728 16.7083 4.84633 16.7071 3.93378 16.5912C3.03571 16.4772 2.51212 16.2617 2.13181 15.9026C1.75657 15.5482 1.53532 15.0678 1.41693 14.2361C1.29543 13.3826 1.29395 12.2566 1.29395 10.6666V7.33329C1.29395 5.74327 1.29543 4.61727 1.41693 3.7638C1.53532 2.93216 1.75657 2.45173 2.13183 2.09732C2.51213 1.73814 3.03571 1.52272 3.93378 1.40869C4.84634 1.29281 6.04729 1.29163 7.72778 1.29163H8.61011C10.2906 1.29163 11.4916 1.29281 12.4041 1.40869C13.3022 1.52272 13.8258 1.73814 14.2061 2.09732C14.5813 2.45173 14.8026 2.93216 14.921 3.7638C15.0425 4.61727 15.0439 5.74327 15.0439 7.33329V8.16663C15.0439 8.5118 15.3238 8.79163 15.6689 8.79163C16.0141 8.79163 16.2939 8.5118 16.2939 8.16663V7.28387C16.294 5.75447 16.294 4.53937 16.1585 3.58764C16.0184 2.60385 15.7228 1.81045 15.0643 1.18855C14.4109 0.571419 13.5857 0.298687 12.5616 0.168644C11.5611 0.0416073 10.2807 0.0416157 8.655 0.0416262Z" fill="#449BF1"/>
<path d="M4.83561 4.20829C4.49043 4.20829 4.21061 4.48811 4.21061 4.83329C4.21061 5.17847 4.49043 5.45829 4.83561 5.45829H11.5023C11.8475 5.45829 12.1273 5.17847 12.1273 4.83329C12.1273 4.48811 11.8475 4.20829 11.5023 4.20829H4.83561Z" fill="#449BF1"/>
<path d="M4.21061 8.99996C4.21061 8.65478 4.49043 8.37496 4.83561 8.37496H11.5023C11.8475 8.37496 12.1273 8.65478 12.1273 8.99996C12.1273 9.34514 11.8475 9.62496 11.5023 9.62496H4.83561C4.49043 9.62496 4.21061 9.34514 4.21061 8.99996Z" fill="#449BF1"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.827 10.5902C16.0936 9.85877 14.9051 9.85877 14.1717 10.5902L11.1019 13.6515C10.7762 13.9762 10.5558 14.3913 10.4694 14.8428L10.0711 16.6982C9.91167 17.441 10.5742 18.0942 11.3117 17.9346L13.1822 17.5296C13.6335 17.4436 14.049 17.2243 14.3744 16.8998L17.4078 13.8178C18.14 13.0852 18.1392 11.8988 17.4056 11.1672L16.827 10.5902ZM15.0543 11.4753C15.2999 11.2304 15.6988 11.2304 15.9443 11.4753L16.5229 12.0523C16.7675 12.2962 16.7675 12.691 16.5229 12.9349L13.4899 16.0165C13.341 16.1642 13.1507 16.264 12.9436 16.3026C12.9377 16.3037 12.9317 16.3049 12.9258 16.3062L11.361 16.6449L11.6932 15.0977L11.6964 15.0816C11.735 14.8754 11.8354 14.6853 11.9845 14.5366L15.0543 11.4753Z" fill="#449BF1"/>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

@ -0,0 +1,3 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.0001 30.3333C8.084 30.3333 1.66675 23.916 1.66675 16C1.66675 8.08388 8.084 1.66663 16.0001 1.66663C23.9162 1.66663 30.3334 8.08388 30.3334 16C30.3334 23.916 23.9162 30.3333 16.0001 30.3333ZM3.66675 16C3.66675 22.8115 9.18857 28.3333 16.0001 28.3333C19.0459 28.3333 21.8338 27.2292 23.9854 25.3995L6.60053 8.01462C4.7708 10.1663 3.66675 12.9542 3.66675 16ZM25.3996 23.9853C27.2294 21.8336 28.3334 19.0457 28.3334 16C28.3334 9.18845 22.8116 3.66663 16.0001 3.66663C12.9543 3.66663 10.1664 4.77068 8.01474 6.60041L25.3996 23.9853Z" fill="#ADADAD"/>
</svg>

After

Width:  |  Height:  |  Size: 702 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 412 B

@ -0,0 +1,22 @@
export const icons = {
chatSend: require('./chat-send.png'),
defaultAvatar: require('./default-avatar.png'),
locked: require('./locked.png'),
more: require('./more.png'),
mute: require('./mute.png'),
muted: require('./muted.png'),
shareOn: require('./share-on.png'),
shareOff: require('./share-off.png'),
speakerOn: require('./speaker-on.png'),
speakerOff: require('./speaker-off.png'),
switchCamera: require('./switch-camera.png'),
hamburger: require('./hamburger.png'),
questionBalloon: require('./question-ballon.png'),
talking: require('./talking.png'),
unmute: require('./unmute.png'),
unlocked: require('./unlocked.png'),
videoOn: require('./video-on.png'),
videoOff: require('./video-off.png'),
};
export type IconTypes = keyof typeof icons;

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 567 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 877 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 384 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 634 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

@ -194,6 +194,7 @@
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
C21500C474806845DCE7C12A /* [CP] Embed Pods Frameworks */,
294E280337160E3088FD37C0 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@ -210,7 +211,8 @@
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 1430;
BuildIndependentTargetsInParallel = YES;
LastUpgradeCheck = 1500;
ORGANIZATIONNAME = "The Chromium Authors";
TargetAttributes = {
97C146ED1CF9000F007C117D = {
@ -254,6 +256,24 @@
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
294E280337160E3088FD37C0 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh",
"${PODS_CONFIGURATION_BUILD_DIR}/permission_handler_apple/permission_handler_apple_privacy.bundle",
);
name = "[CP] Copy Pods Resources";
outputPaths = (
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/permission_handler_apple_privacy.bundle",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
showEnvVarsInLog = 0;
};
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
@ -318,7 +338,6 @@
"${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework",
"${BUILT_PRODUCTS_DIR}/DKImagePickerController/DKImagePickerController.framework",
"${BUILT_PRODUCTS_DIR}/DKPhotoGallery/DKPhotoGallery.framework",
"${BUILT_PRODUCTS_DIR}/FMDB/FMDB.framework",
"${BUILT_PRODUCTS_DIR}/FirebaseCore/FirebaseCore.framework",
"${BUILT_PRODUCTS_DIR}/FirebaseCoreInternal/FirebaseCoreInternal.framework",
"${BUILT_PRODUCTS_DIR}/FirebaseInstallations/FirebaseInstallations.framework",
@ -344,7 +363,7 @@
"${BUILT_PRODUCTS_DIR}/local_auth_ios/local_auth_ios.framework",
"${BUILT_PRODUCTS_DIR}/maps_launcher/maps_launcher.framework",
"${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework",
"${BUILT_PRODUCTS_DIR}/path_provider_ios/path_provider_ios.framework",
"${BUILT_PRODUCTS_DIR}/path_provider_foundation/path_provider_foundation.framework",
"${BUILT_PRODUCTS_DIR}/shared_preferences_foundation/shared_preferences_foundation.framework",
"${BUILT_PRODUCTS_DIR}/speech_to_text/speech_to_text.framework",
"${BUILT_PRODUCTS_DIR}/sqflite/sqflite.framework",
@ -356,7 +375,6 @@
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Alamofire.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DKImagePickerController.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DKPhotoGallery.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FMDB.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCore.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCoreInternal.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseInstallations.framework",
@ -382,7 +400,7 @@
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/local_auth_ios.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/maps_launcher.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/nanopb.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/path_provider_ios.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/path_provider_foundation.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/shared_preferences_foundation.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/speech_to_text.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/sqflite.framework",
@ -456,6 +474,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@ -466,6 +485,7 @@
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
@ -474,7 +494,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
@ -539,6 +559,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@ -549,6 +570,7 @@
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
@ -563,7 +585,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@ -594,6 +616,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@ -604,6 +627,7 @@
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
@ -612,10 +636,11 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
@ -637,7 +662,10 @@
);
INFOPLIST_FILE = Runner/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PreviewsEnabled</key>
<false/>
</dict>
</plist>

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1430"
LastUpgradeVersion = "1500"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PreviewsEnabled</key>
<false/>
</dict>
</plist>

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

@ -0,0 +1,12 @@
import Flutter
import UIKit
import XCTest
class RunnerTests: XCTestCase {
func testExample() {
// If you add code to the Runner application, consider adding tests here.
// See https://developer.apple.com/documentation/xctest for more information about using XCTest.
}
}

@ -8,6 +8,7 @@ import 'package:doctor_app_flutter/core/model/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/core/service/NavigationService.dart';
import 'package:doctor_app_flutter/core/viewModel/authentication_view_model.dart';
import 'package:doctor_app_flutter/utils/dr_app_shared_pref.dart';
import 'package:doctor_app_flutter/utils/dr_app_toast_msg.dart';
import 'package:doctor_app_flutter/utils/exception_report.dart';
import 'package:doctor_app_flutter/utils/utils.dart';
import 'package:flutter/cupertino.dart';
@ -24,11 +25,11 @@ class BaseAppClient {
//TODO change the post fun to nun static when you change all service
post(String endPoint,
{Map<String, dynamic>? body,
required Function(dynamic response, int statusCode) onSuccess,
required Function(String error, int statusCode) onFailure,
bool isAllowAny = false,
bool isLiveCare = false,
bool isFallLanguage = false}) async {
required Function(dynamic response, int statusCode) onSuccess,
required Function(String error, int statusCode) onFailure,
bool isAllowAny = false,
bool isLiveCare = false,
bool isFallLanguage = false}) async {
String url;
if (isLiveCare)
url = BASE_URL_LIVE_CARE + endPoint;
@ -45,7 +46,9 @@ class BaseAppClient {
if (body == null || body['DoctorID'] == null) {
body!['DoctorID'] = doctorProfile.doctorID;
}
if (body['DoctorID'] == "") body['DoctorID'] = doctorProfile.doctorID; // changed from null; because create update episode not working
if (body['DoctorID'] == "")
body['DoctorID'] = doctorProfile
.doctorID; // changed from null; because create update episode not working
if (body['EditedBy'] == null) body['EditedBy'] = doctorProfile.doctorID;
if (body['ProjectID'] == null) {
body['ProjectID'] = doctorProfile.projectID;
@ -61,8 +64,8 @@ class BaseAppClient {
body['SetupID'] = body.containsKey('SetupID')
? body['SetupID'] != null
? body['SetupID']
: await sharedPref.getString(DOCTOR_SETUP_ID)
? body['SetupID']
: await sharedPref.getString(DOCTOR_SETUP_ID)
: await sharedPref.getString(DOCTOR_SETUP_ID);
if (body['EditedBy'] == '') {
@ -91,16 +94,21 @@ class BaseAppClient {
body['IsLoginForDoctorApp'] = IS_LOGIN_FOR_DOCTOR_APP;
body['PatientOutSA'] = body['PatientOutSA'] ?? 0; // PATIENT_OUT_SA;
if (body['VidaAuthTokenID'] == null) {
body['VidaAuthTokenID'] = await sharedPref.getString(VIDA_AUTH_TOKEN_ID);
body['VidaAuthTokenID'] =
await sharedPref.getString(VIDA_AUTH_TOKEN_ID);
}
if (body['VidaRefreshTokenID'] == null) {
body['VidaRefreshTokenID'] = await sharedPref.getString(VIDA_REFRESH_TOKEN_ID);
body['VidaRefreshTokenID'] =
await sharedPref.getString(VIDA_REFRESH_TOKEN_ID);
}
int? projectID = await sharedPref.getInt(PROJECT_ID);
if (projectID == 2 || projectID == 3)
body['PatientOutSA'] = true;
else if ((body.containsKey('facilityId') && body['facilityId'] == 2 || body['facilityId'] == 3) || body['ProjectID'] == 2 || body['ProjectID'] == 3)
else if ((body.containsKey('facilityId') && body['facilityId'] == 2 ||
body['facilityId'] == 3) ||
body['ProjectID'] == 2 ||
body['ProjectID'] == 3)
body['PatientOutSA'] = true;
else
body['PatientOutSA'] = false;
@ -127,29 +135,47 @@ class BaseAppClient {
var asd = json.encode(body);
var asd2;
if (await Utils.checkConnection()) {
final response = await http.post(Uri.parse(url), body: json.encode(body), headers: {'Content-Type': 'application/json', 'Accept': 'application/json'});
final response = await http.post(Uri.parse(url),
body: json.encode(body),
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
});
final int statusCode = response.statusCode;
if (statusCode < 200 || statusCode >= 400) {
onFailure(Utils.generateContactAdminMsg(), statusCode);
if(body['DoctorID'] !=null )
postFailureResponse(doctorId:body['DoctorID'], url:url , request: json.encode(body), response: response.body, exception: "$statusCode");
if (body['DoctorID'] != null)
postFailureResponse(
doctorId: body['DoctorID'],
url: url,
request: json.encode(body),
response: response.body,
exception: "$statusCode");
} else {
var parsed = json.decode(response.body.toString());
if (parsed['ErrorType'] == 4) {
helpers.navigateToUpdatePage(parsed['ErrorEndUserMessage'], parsed['AndroidLink'], parsed['IOSLink']);
helpers.navigateToUpdatePage(parsed['ErrorEndUserMessage'],
parsed['AndroidLink'], parsed['IOSLink']);
}
if (parsed['IsAuthenticated'] != null && !parsed['IsAuthenticated']) {
if (body['OTP_SendType'] != null) {
if(parsed['ErrorCode'] =='699'){
onSuccess(parsed, statusCode);
}else {
if(body['DoctorID'] !=null )
postFailureResponse(doctorId:body['DoctorID'], url:url , request: json.encode(body), response: response.body, exception: getError(parsed));
onFailure(getError(parsed), statusCode);
}
if (parsed['ErrorCode'] == '699') {
onSuccess(parsed, statusCode);
} else {
if (body['DoctorID'] != null)
postFailureResponse(
doctorId: body['DoctorID'],
url: url,
request: json.encode(body),
response: response.body,
exception: getError(parsed));
onFailure(getError(parsed), statusCode);
}
} else if (!isAllowAny) {
await Provider.of<AuthenticationViewModel>(AppGlobal.CONTEX, listen: false).logout();
await Provider.of<AuthenticationViewModel>(AppGlobal.CONTEX,
listen: false)
.logout();
//todo nofailure is placed here and but have to handle the response here as well
Utils.showErrorToast('Your session expired Please login again');
locator<NavigationService>().pushNamedAndRemoveUntil(ROOT);
@ -159,18 +185,38 @@ class BaseAppClient {
}
} else if (parsed['MessageStatus'] == 1) {
if (!parsed['IsAuthenticated']) {
if(body['DoctorID'] !=null )
postFailureResponse(doctorId:body['DoctorID'], url:url , request: json.encode(body), response: response.body, exception: getError(parsed));
if (body['DoctorID'] != null)
postFailureResponse(
doctorId: body['DoctorID'],
url: url,
request: json.encode(body),
response: response.body,
exception: getError(parsed));
onFailure(getError(parsed), statusCode);
} else
onSuccess(parsed, statusCode);
} else {
if(body['DoctorID'] !=null )
postFailureResponse(doctorId:body['DoctorID'], url:url , request: json.encode(body), response: response.body, exception: getError(parsed));
onFailure(getError(parsed), statusCode);
final validations = parsed['ValidationErrorsCSI']?['errors']?['Validations'];
if (validations is List && validations.isNotEmpty) {
final error = validations.first['Error'];
if (error != null) {
onFailure(error, statusCode);
return;
}
}
if (body['DoctorID'] != null) {
postFailureResponse(
doctorId: body['DoctorID'],
url: url,
request: json.encode(body),
response: response.body,
exception: getError(parsed));
}
onFailure(getError(parsed), statusCode);
}
}
}
} else {
} else {
onFailure('Please Check The Internet Connection', -1);
}
} catch (e) {
@ -179,202 +225,264 @@ class BaseAppClient {
}
}
postPatient(String endPoint,
{Map<String, dynamic>? body,
required Function(dynamic response, int statusCode) onSuccess,
required Function(String error, int statusCode) onFailure,
PatiantInformtion? patient,
bool isExternal = false}) async {
postPatient(String endPoint,
{Map<String, dynamic>? body,
required Function(dynamic response, int statusCode) onSuccess,
required Function(String error, int statusCode) onFailure,
PatiantInformtion? patient,
bool isExternal = false}) async {
String url = BASE_URL + endPoint;
try {
Map<String, String> headers = {'Content-Type': 'application/json', 'Accept': 'application/json'};
String? token = await sharedPref.getString(TOKEN);
Map<String, dynamic>? profile = await sharedPref.getObj(DOCTOR_PROFILE);
if (profile != null) {
DoctorProfileModel doctorProfile = DoctorProfileModel.fromJson(profile);
if (body!['DoctorID'] == null) {
body['DoctorID'] = doctorProfile.doctorID;
}
}
if (body!['DoctorID'] == 0) {
body['DoctorID'] = null;
}
var languageID = await sharedPref.getStringWithDefaultValue(APP_Language, 'en');
body['SetupID'] = body!.containsKey('SetupID')
? body['SetupID'] != null
? body['SetupID']
: await sharedPref.getString(DOCTOR_SETUP_ID)
: await sharedPref.getString(DOCTOR_SETUP_ID);
body['VersionID'] = VERSION_ID;
body['Channel'] = CHANNEL;
body['LanguageID'] = languageID == 'ar' ? 1 : 2;
body['IPAdress'] = "10.20.10.20";
body['generalid'] = GENERAL_ID;
body['PatientOutSA'] = body.containsKey('PatientOutSA')
? body['PatientOutSA'] != null
? body['PatientOutSA']
: PATIENT_OUT_SA_PATIENT_REQ
: PATIENT_OUT_SA_PATIENT_REQ;
if (body.containsKey('isDentalAllowedBackend')) {
body['isDentalAllowedBackend'] = body.containsKey('isDentalAllowedBackend')
? body['isDentalAllowedBackend'] != null
? body['isDentalAllowedBackend']
: IS_DENTAL_ALLOWED_BACKEND
: IS_DENTAL_ALLOWED_BACKEND;
}
body['DeviceTypeID'] = Platform.isAndroid ? 1 : 2;
body['PatientType'] = body.containsKey('PatientType')
? body['PatientType'] != null
? body['PatientType']
: patient!.patientType != null
? patient.patientType
: PATIENT_TYPE
: PATIENT_TYPE;
body['PatientTypeID'] = body.containsKey('PatientTypeID')
? body['PatientTypeID'] != null
? body['PatientTypeID']
: patient!.patientType != null
? patient.patientType
: PATIENT_TYPE_ID
: PATIENT_TYPE_ID;
body['TokenID'] = body.containsKey('TokenID') ? body['TokenID'] ?? token : token;
body['PatientID'] = body['PatientID'] != null ? body['PatientID'] : patient!.patientId ?? patient.patientMRN;
body['PatientOutSA'] = 0; //user['OutSA']; //TODO change it
body['SessionID'] = SESSION_ID; //getSe
int? projectID = await sharedPref.getInt(PROJECT_ID);
if (projectID == 2 || projectID == 3)
body['PatientOutSA'] = true;
else
body['PatientOutSA'] = false;
// if(!body.containsKey('ProjectID')) {
// if (projectID != null) {
// body['ProjectID'] = 313;
// } else {
// body['ProjectID'] = 0;
// }
// }
// body['DoctorID'] = 24; //3844083
// body['TokenID'] = "@dm!n";
print("URL : $url");
print("Body : ${json.encode(body)}");
var asd = json.encode(body);
var asd2;
if (await Utils.checkConnection()) {
final response = await http.post(Uri.parse(url.trim()), body: json.encode(body), headers: headers);
final int statusCode = response.statusCode;
print("statusCode :$statusCode");
if (statusCode < 200 || statusCode >= 400 || json == null) {
onFailure('Error While Fetching data', statusCode);
} else {
// var parsed = json.decode(response.body.toString());
var parsed = json.decode(utf8.decode(response.bodyBytes));
if (parsed['Response_Message'] != null) {
onSuccess(parsed, statusCode);
} else {
if (parsed['ErrorType'] == 4) {
helpers.navigateToUpdatePage(parsed['ErrorEndUserMessage'], parsed['AndroidLink'], parsed['IOSLink']);
}
if (parsed['IsAuthenticated'] == null) {
if (parsed['isSMSSent'] == true) {
onSuccess(parsed, statusCode);
} else if (parsed['MessageStatus'] == 1) {
onSuccess(parsed, statusCode);
} else if (parsed['Result'] == 'OK') {
onSuccess(parsed, statusCode);
} else {
if (parsed != null) {
onSuccess(parsed, statusCode);
} else {
if(body['DoctorID'] !=null )
postFailureResponse(doctorId:body['DoctorID'], url:url , request: json.encode(body), response: response.body, exception: getError(parsed));
onFailure(getError(parsed), statusCode);
}
}
} else if (parsed['MessageStatus'] == 1 || parsed['SMSLoginRequired'] == true) {
onSuccess(parsed, statusCode);
} else if (parsed['MessageStatus'] == 2 && parsed['IsAuthenticated']) {
if (parsed['SameClinicApptList'] != null) {
onSuccess(parsed, statusCode);
} else {
if (parsed['message'] == null && parsed['ErrorEndUserMessage'] == null) {
if (parsed['ErrorSearchMsg'] == null) {
if(body['DoctorID'] !=null )
postFailureResponse(doctorId:body['DoctorID'], url:url , request: json.encode(body), response: response.body, exception: "Server Error found with no available message");
onFailure("Server Error found with no available message", statusCode);
} else {
if(body['DoctorID'] !=null )
postFailureResponse(doctorId:body['DoctorID'], url:url , request: json.encode(body), response: response.body, exception: parsed['ErrorSearchMsg']);
onFailure(parsed['ErrorSearchMsg'], statusCode);
}
} else {
if(body['DoctorID'] !=null )
postFailureResponse(doctorId:body['DoctorID'], url:url , request: json.encode(body), response: response.body, exception: parsed['message'] ?? parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage']);
onFailure(parsed['message'] ?? parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode);
}
}
} else {
if (parsed['SameClinicApptList'] != null) {
onSuccess(parsed, statusCode);
} else {
if (parsed['message'] != null) {
if(body['DoctorID'] !=null )
postFailureResponse(doctorId:body['DoctorID'], url:url , request: json.encode(body), response: response.body, exception: parsed['message'] );
onFailure(parsed['message'] ?? parsed['message'], statusCode);
} else {
if(body['DoctorID'] !=null )
postFailureResponse(doctorId:body['DoctorID'], url:url , request: json.encode(body), response: response.body, exception: parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage']);
Map<String, String> headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
};
String? token = await sharedPref.getString(TOKEN);
Map<String, dynamic>? profile = await sharedPref.getObj(DOCTOR_PROFILE);
if (profile != null) {
DoctorProfileModel doctorProfile = DoctorProfileModel.fromJson(profile);
if (body!['DoctorID'] == null) {
body['DoctorID'] = doctorProfile.doctorID;
}
}
if (body!['DoctorID'] == 0) {
body['DoctorID'] = null;
}
var languageID =
await sharedPref.getStringWithDefaultValue(APP_Language, 'en');
body['SetupID'] = body!.containsKey('SetupID')
? body['SetupID'] != null
? body['SetupID']
: await sharedPref.getString(DOCTOR_SETUP_ID)
: await sharedPref.getString(DOCTOR_SETUP_ID);
body['VersionID'] = VERSION_ID;
body['Channel'] = CHANNEL;
body['LanguageID'] = languageID == 'ar' ? 1 : 2;
body['IPAdress'] = "10.20.10.20";
body['generalid'] = GENERAL_ID;
body['PatientOutSA'] = body.containsKey('PatientOutSA')
? body['PatientOutSA'] != null
? body['PatientOutSA']
: PATIENT_OUT_SA_PATIENT_REQ
: PATIENT_OUT_SA_PATIENT_REQ;
if (body.containsKey('isDentalAllowedBackend')) {
body['isDentalAllowedBackend'] =
body.containsKey('isDentalAllowedBackend')
? body['isDentalAllowedBackend'] != null
? body['isDentalAllowedBackend']
: IS_DENTAL_ALLOWED_BACKEND
: IS_DENTAL_ALLOWED_BACKEND;
}
onFailure(parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode);
}
}
}
}
}
} else {
onFailure('Please Check The Internet Connection', -1);
}
body['DeviceTypeID'] = Platform.isAndroid ? 1 : 2;
body['PatientType'] = body.containsKey('PatientType')
? body['PatientType'] != null
? body['PatientType']
: patient!.patientType != null
? patient.patientType
: PATIENT_TYPE
: PATIENT_TYPE;
body['PatientTypeID'] = body.containsKey('PatientTypeID')
? body['PatientTypeID'] != null
? body['PatientTypeID']
: patient!.patientType != null
? patient.patientType
: PATIENT_TYPE_ID
: PATIENT_TYPE_ID;
body['TokenID'] =
body.containsKey('TokenID') ? body['TokenID'] ?? token : token;
body['PatientID'] = body['PatientID'] != null
? body['PatientID']
: patient!.patientId ?? patient.patientMRN;
body['PatientOutSA'] = 0; //user['OutSA']; //TODO change it
body['SessionID'] = SESSION_ID; //getSe
int? projectID = await sharedPref.getInt(PROJECT_ID);
if (projectID == 2 || projectID == 3)
body['PatientOutSA'] = true;
else
body['PatientOutSA'] = false;
// if(!body.containsKey('ProjectID')) {
// if (projectID != null) {
// body['ProjectID'] = 313;
// } else {
// body['ProjectID'] = 0;
// }
// }
// body['DoctorID'] = 24; //3844083
// body['TokenID'] = "@dm!n";
print("URL : $url");
print("Body : ${json.encode(body)}");
var asd = json.encode(body);
var asd2;
if (await Utils.checkConnection()) {
final response = await http.post(Uri.parse(url.trim()),
body: json.encode(body), headers: headers);
final int statusCode = response.statusCode;
print("statusCode :$statusCode");
if (statusCode < 200 || statusCode >= 400 || json == null) {
onFailure('Error While Fetching data', statusCode);
} else {
// var parsed = json.decode(response.body.toString());
var parsed = json.decode(utf8.decode(response.bodyBytes));
if (parsed['Response_Message'] != null) {
onSuccess(parsed, statusCode);
} else {
if (parsed['ErrorType'] == 4) {
helpers.navigateToUpdatePage(parsed['ErrorEndUserMessage'],
parsed['AndroidLink'], parsed['IOSLink']);
}
if (parsed['IsAuthenticated'] == null) {
if (parsed['isSMSSent'] == true) {
onSuccess(parsed, statusCode);
} else if (parsed['MessageStatus'] == 1) {
onSuccess(parsed, statusCode);
} else if (parsed['Result'] == 'OK') {
onSuccess(parsed, statusCode);
} else {
if (parsed != null) {
onSuccess(parsed, statusCode);
} else {
if (body['DoctorID'] != null)
postFailureResponse(
doctorId: body['DoctorID'],
url: url,
request: json.encode(body),
response: response.body,
exception: getError(parsed));
onFailure(getError(parsed), statusCode);
}
}
} else if (parsed['MessageStatus'] == 1 ||
parsed['SMSLoginRequired'] == true) {
onSuccess(parsed, statusCode);
} else if (parsed['MessageStatus'] == 2 &&
parsed['IsAuthenticated']) {
if (parsed['SameClinicApptList'] != null) {
onSuccess(parsed, statusCode);
} else {
if (parsed['message'] == null &&
parsed['ErrorEndUserMessage'] == null) {
if (parsed['ErrorSearchMsg'] == null) {
if (body['DoctorID'] != null)
postFailureResponse(
doctorId: body['DoctorID'],
url: url,
request: json.encode(body),
response: response.body,
exception:
"Server Error found with no available message");
onFailure("Server Error found with no available message",
statusCode);
} else {
if (body['DoctorID'] != null)
postFailureResponse(
doctorId: body['DoctorID'],
url: url,
request: json.encode(body),
response: response.body,
exception: parsed['ErrorSearchMsg']);
onFailure(parsed['ErrorSearchMsg'], statusCode);
}
} else {
if (body['DoctorID'] != null)
postFailureResponse(
doctorId: body['DoctorID'],
url: url,
request: json.encode(body),
response: response.body,
exception: parsed['message'] ??
parsed['ErrorEndUserMessage'] ??
parsed['ErrorMessage']);
onFailure(
parsed['message'] ??
parsed['ErrorEndUserMessage'] ??
parsed['ErrorMessage'],
statusCode);
}
}
} else {
if (parsed['SameClinicApptList'] != null) {
onSuccess(parsed, statusCode);
} else {
if (parsed['message'] != null) {
if (body['DoctorID'] != null)
postFailureResponse(
doctorId: body['DoctorID'],
url: url,
request: json.encode(body),
response: response.body,
exception: parsed['message']);
onFailure(parsed['message'] ?? parsed['message'], statusCode);
} else {
if (body['DoctorID'] != null)
postFailureResponse(
doctorId: body['DoctorID'],
url: url,
request: json.encode(body),
response: response.body,
exception: parsed['ErrorEndUserMessage'] ??
parsed['ErrorMessage']);
onFailure(
parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'],
statusCode);
}
}
}
}
}
} else {
onFailure('Please Check The Internet Connection', -1);
}
} catch (e) {
print(e);
onFailure(e.toString(), -1);
print(e);
onFailure(e.toString(), -1);
}
}
}
String getError(parsed) {
String getError(parsed) {
//TODO change this fun
String? error = parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'];
if (parsed["ValidationErrors"] != null) {
error = parsed["ValidationErrors"]["StatusMessage"].toString() + "\n";
if (parsed["ValidationErrors"]["ValidationErrors"] != null && parsed["ValidationErrors"]["ValidationErrors"].length != 0) {
for (var i = 0; i < parsed["ValidationErrors"]["ValidationErrors"].length; i++) {
error = error! + parsed["ValidationErrors"]["ValidationErrors"][i]["Messages"][0] + "\n";
}
}
error = parsed["ValidationErrors"]["StatusMessage"].toString() + "\n";
if (parsed["ValidationErrors"]["ValidationErrors"] != null &&
parsed["ValidationErrors"]["ValidationErrors"].length != 0) {
for (var i = 0;
i < parsed["ValidationErrors"]["ValidationErrors"].length;
i++) {
error = error! +
parsed["ValidationErrors"]["ValidationErrors"][i]["Messages"][0] +
"\n";
}
}
}
if (error == null || error == "null" || error == "null\n") {
return Utils.generateContactAdminMsg();
return Utils.generateContactAdminMsg();
}
return error;
}
}
get({required String endPoint, required Function(dynamic response, int statusCode) onSuccess, required Function(String error, int statusCode) onFailure}) async {
get(
{required String endPoint,
required Function(dynamic response, int statusCode) onSuccess,
required Function(String error, int statusCode) onFailure}) async {
String token = await sharedPref.getString(TOKEN);
String url = DOCTOR_ROTATION + endPoint + '&token=' + token;
print(url);
@ -382,10 +490,10 @@ class BaseAppClient {
final int statusCode = response.statusCode;
if (statusCode < 200 || statusCode >= 400) {
onFailure(Utils.generateContactAdminMsg(), statusCode);
onFailure(Utils.generateContactAdminMsg(), statusCode);
} else {
var parsed = json.decode(response.body.toString());
onSuccess(parsed, statusCode);
var parsed = json.decode(response.body.toString());
onSuccess(parsed, statusCode);
}
}
}
}

@ -7,9 +7,9 @@ const ONLY_DATE = "[0-9/]";
const BASE_URL_LIVE_CARE = 'https://livecare.hmg.com/';
const DOCTOR_ROTATION = 'https://doctorrota.hmg.com/';
// const BASE_URL_LIVE_CARE = 'https://livecareuat.hmg.com/';
const BASE_URL = 'https://hmgwebservices.com/';
// const BASE_URL = 'https://hmgwebservices.com/';
// const BASE_URL = 'https://uat.hmgwebservices.com/';
const BASE_URL = 'https://uat.hmgwebservices.com/';
// const BASE_URL = 'https://webservices.hmg.com/';
@ -285,6 +285,88 @@ const DOCTOR_RADIOLOGY_CRITICAL_FINDINGS = "Services/DoctorApplication.svc/REST/
const ACKNOWLEDGE_RADIOLOGY_CRITICAL_FINDINGS = "Services/DoctorApplication.svc/REST/Acknowledgeradcriticalfindings";
/*vida plus API */
const PATIENT_ALLERGIES = 'Services/DoctorApplication.svc/REST/PatientAllergies';
const SEARCH_ALLERGIES = 'Services/DoctorApplication.svc/REST/SearchAllergies';
const POST_ALLERGIES = 'Services/DoctorApplication.svc/REST/PostAllergies';
const CREATE_HOPI = 'Services/DoctorApplication.svc/REST/CreateHOPI';
const HOPI_DETAILS = 'Services/DoctorApplication.svc/REST/DetailHOPI';
const POST_CHIEF_COMPLAINT_VP = 'Services/DoctorApplication.svc/REST/PostChiefcomplaint';
const SEARCH_CHIEF_COMPLAINT_VP = 'Services/DoctorApplication.svc/REST/SearchChiefcomplaint';
const RESOLVE_ALLERGIES = 'Services/DoctorApplication.svc/REST/ResolveAllergy';
const UPDATE_ALLERGIES = 'Services/DoctorApplication.svc/REST/UpdateAllergy';
const GET_CHIEF_COMPLAINT_VP = 'Services/DoctorApplication.svc/REST/ChiefComplaintDetails';
const SEARCH_DIAGNOSIS = 'Services/DoctorApplication.svc/REST/SearchDiagnosis';
const DIAGNOSIS_TYPE = 'Services/DoctorApplication.svc/REST/DiagnosisType';
const CONDITION_TYPE = 'Services/DoctorApplication.svc/REST/DiagnosisCondition';
const CREATE_DIAGNOSIS = 'Services/DoctorApplication.svc/REST/CreateDiagnosis';
const PREVIOUS_DIAGNOSIS = 'Services/DoctorApplication.svc/REST/DiagnosisPreviousDetails';
const AUDIT_DIAGNOSIS = 'Services/DoctorApplication.svc/REST/DiagnosisAudit';
const REMOVE_DIAGNOSIS = 'Services/DoctorApplication.svc/REST/DiagnosisRemove';
const FAVORITE_DIAGNOSIS = 'Services/DoctorApplication.svc/REST/DiagnosisGetFavourite';
const ADD_TO_FAVORITE_DIAGNOSIS = 'Services/DoctorApplication.svc/REST/DiagnosisAddFavourite';
const MAKE_PREVIOUS_AS_CURRENT_DIAGNOSIS = 'Services/DoctorApplication.svc/REST/ContinuePreviousEpisode';
const SEARCH_PHYSICAL_EXAMINATION = 'Services/DoctorApplication.svc/REST/SearchPhysicalExam';
const GET_GENERAL_SPECIALITY = 'Services/DoctorApplication.svc/REST/GetGeneralSpeciality';
const GET_SPECIALITY_DETAILS = 'Services/DoctorApplication.svc/REST/SearchGeneralSpeciality';
const POST_PHYSICAL_EXAMINATION = 'Services/DoctorApplication.svc/REST/PostPhysicalExam';
const GET_PROGRESS_NOTE_NEW = 'Services/DoctorApplication.svc/REST/GetProgressNote';
const GET_LIST_OF_DIAGNOSIS = 'Services/DoctorApplication.svc/REST/DiagnosisDetailsSearch';
const EDIT_DIAGNOSIS = 'Services/DoctorApplication.svc/REST/EditDiagnosis';
const RESOLVE_DIAGNOSIS = 'Services/DoctorApplication.svc/REST/DiagnosisResolve';
const GET_CLINIC = 'Services/DoctorApplication.svc/REST/GetDoctorClinicsForVidaPlus';
const CONTINUE_EPISODE_VP = 'Services/DoctorApplication.svc/REST/ContinueEpisode';
const UPDATE_CHIEF_COMPLAINT = 'Services/DoctorApplication.svc/REST/UpdateChiefComplaint';
const EPISODE_BY_CHIEF_COMPLAINT = 'Services/DoctorApplication.svc/REST/EpisodeByChiefcomplaint';
const GET_EDIT_ALLERGIES = 'Services/DoctorApplication.svc/REST/GetAllergy';
const GET_HOME_MEDICATION = 'Services/DoctorApplication.svc/REST/GetHomeMedication';
const SEARCH_CURRENT_MEDICATION = 'Services/DoctorApplication.svc/REST/SearchFormulary';
const SEARCH_CURRENT_MEDICATION_DETAILS = 'Services/DoctorApplication.svc/REST/GetFormularyMaster';
const REMOVE_CURRENT_MEDICATION = 'Services/DoctorApplication.svc/REST/DeleteHomeMedication';
const ADD_CURRENT_MEDICATION = 'Services/DoctorApplication.svc/REST/AddHomeMedication';
const CREATE_PROGRESS_NOTE = 'Services/DoctorApplication.svc/REST/PostProgressNote';
const GET_PATIENT_CLINIC = 'Services/DoctorApplication.svc/REST/GetPatientConditionProgress';
var selectedPatientType = 1;
//*********change value to decode json from Dropdown ************

@ -254,6 +254,7 @@ const Map<String, Map<String, String>> localizedValues = {
"beingBad": {"en": "being bad", "ar": "سيء"},
"beingGreat": {"en": "being great", "ar": "رائع"},
"cancel": {"en": "CANCEL", "ar": "الغاء"},
"cancelSmall": {"en": "Cancel", "ar": "الغاء"},
"ok": {"en": "OK", "ar": "موافق"},
"done": {"en": "DONE", "ar": "تأكيد"},
"resumecall": {"en": "Resume call", "ar": "استئناف المكالمة"},
@ -484,6 +485,7 @@ const Map<String, Map<String, String>> localizedValues = {
"ar": "ملاحظات على نوع النظام الغذائي"
},
"save": {"en": "SAVE", "ar": "حفظ"},
"saveSmall": {"en": "Save", "ar": "حفظ"},
"postPlansEstimatedCost": {
"en": "POST PLANS & ESTIMATED COST",
"ar": "خطط ما بعد العملية والتكلفة المقدرة"
@ -677,6 +679,7 @@ const Map<String, Map<String, String>> localizedValues = {
"progressNoteSOAP": {"en": "Progress Note", "ar": "ملاحظة التقدم"},
"addProgressNote": {"en": "Add Progress Note", "ar": "أضف ملاحظة التقدم"},
"createdBy": {"en": "Created By :", "ar": "أضيفت عن طريق: "},
"createdOn": {"en": "Created On :", "ar": "تم إنشاؤه في: "},
"riskScore": {"en": "Risk Score :", "ar": "درجة المخاطر"},
"editedBy": {"en": "Edited By :", "ar": "عدلت من : "},
"currentMedications": {"en": "Current Medications", "ar": "الأدوية الحالية"},
@ -1160,7 +1163,72 @@ const Map<String, Map<String, String>> localizedValues = {
"afterOrderCreation": {"en": "After order created, you cannot modify the principal diagnosis, Do you want to continue?", "ar":"بعد إنشاء الطلب، لا يمكنك تعديل التشخيص الأساسي، هل تريد المتابعة؟"},
"principalCoveredOrNot": {"en": "Principal Diagnosis is not covered for this patient", "ar":"لا يتم تغطية التشخيص الرئيسي لهذا المريض"},
"complexDiagnosis": {"en": "Complex Diagnosis", "ar":"التشخيص المعقد"},
"noComplaintsFound": {"en": "No Chief Complaints added, please add it from the button above", "ar":"لم تتم إضافة شكاوى رئيسية ، يرجى إضافتها من الزر أعلاه"},
"noKnownAllergies": {"en": "No Known Allergies", "ar":"لا يوجد حساسية معروفة"},
"addChiefComplaint": {"en": "Add Chief Complaints*", "ar":"إضافة الشكاوى الرئيسية*"},
"myFavoriteList": {"en": "My Favourite List", "ar":"قائمتي المفضلة"},
"generalList": {"en": "General list", "ar":"قائمة عامة"},
"specialList": {"en": "Special List", "ar":"قائمة خاصة"},
"enterChiefCompliants": {"en": "Enter Chief Compliants", "ar":"أدخل رئيس الامتثال"},
"previousChiefCompaints": {"en": "Previous Chief Compaints", "ar":"رئيس الرسامين السابق"},
"listOfActiveEpisodes": {"en": "List of active episodes , select one to procedd", "ar":"قائمة الحلقات النشطة ، حدد واحدة لتقديمها"},
"select": {"en": "Select", "ar":"اختار"},
"resolve": {"en": "Resolve", "ar":"حسم"},
"audit": {"en": "Audit", "ar":"مراجعه الحسابات"},
"delete": {"en": "Delete", "ar":"حذف"},
"acute": {"en": "Acute", "ar":"شديد"},
"chronic": {"en": "Acute", "ar":"مزمن"},
"subAcute": {"en": "sub-acute", "ar":"شبه الحاد"},
"addDiagnosis": {"en": "Add Diagnosis", "ar":"إضافة تشخيص"},
"showAllDiagnosis": {"en": "Show all diagnosis", "ar":"عرض جميع التشخيصات"},
"makeCurrentDiagnosis": {"en": "Make Current Diagnosis", "ar":"جعل التشخيص الحالي"},
"mappedDiagnosis": {"en": "Mapped Diagnosis", "ar":"التشخيص المعين"},
"previousDiagnosis": {"en": "Previous Diagnosis", "ar":"التشخيص السابق"},
"addNewDiagnosis": {"en": "Add New Diagnosis", "ar":"إضافة تشخيص جديد"},
"currentDiagnosis": {"en": "Current Diagnosis", "ar":"التشخيص الحالي"},
"progressNoteType": {"en": "Progress Note Type", "ar":"نوع ملاحظة التقدم"},
"doctorProgressNote": {"en": "Doctor Progress Note", "ar":"مذكرة تقدم الطبيب"},
"addYourNote": {"en": "Add Your Note", "ar":"أضف ملاحظتك"},
"saveAsDraft": {"en": "Save As Draft", "ar":"حفظ كمسودة"},
"nurseNote": {"en": "Nurse Note", "ar":"ملاحظة الممرضة"},
"patientCondition": {"en": "Patient Condition", "ar":"حالة المريض"},
"examinationPart": {"en": "Examination Part", "ar":"جزء الامتحان"},
"historyOfIllness": {"en": "History of Present Illness*", "ar":"تاريخ المرض الحالي*"},
"historyTakenFrom": {"en": "History taken from", "ar":"التاريخ مأخوذ من"},
"familySpecify": {"en": "Family, Specify", "ar":"العائلة، حدد"},
"otherSpecify": {"en": "Other, Specify", "ar":"أخرى، حدد"},
"physicalExamination": {"en": "Physical Examination", "ar":"الفحص البدني"},
"addPhysicalExamination": {"en": "Add Physical Examination", "ar":"إضافة الفحص البدني"},
"noPhysicalExamination": {"en": "No Physical Examination added, please add it from the button above", "ar":"لم يتم إضافة فحص بدني ، يرجى إضافته من الزر أعلاه"},
"noProgressNote": {"en": "No Diagnosis added, please add it from the button above", "ar":"لم يتم إضافة تشخيص ، يرجى إضافته من الزر أعلاه"},
"mild": {"en": "Mild", "ar":"خفيف"},
"moderate": {"en": "Moderate", "ar":"معتدل"},
"remarksCanNotBeEmpty": {"en": "Remarks Can Not Be Empty", "ar":"لا يمكن أن تكون الملاحظات فارغة"},
"kindlySelectCategory": {"en": "Kindly Select Any Diagnosis Category", "ar":"يرجى اختيار أي فئة تشخيص"},
"noRemarks": {"en": "No Remarks", "ar":"لا ملاحظات"},
"event": {"en": "Event: ", "ar":"حدث: "},
"editDiagnosis": {"en": "Edit Diagnosis ", "ar":"تحرير التشخيص"},
"selectedDiagnosis": {"en": "Kindly Select Diagnosis", "ar":"يرجى اختيار التشخيص: "},
"selectConditionFirst": {"en": "Kindly Select Diagnosis Condition", "ar":"يرجى اختيار حالة التشخيص: "},
"deletedRemarks": {"en": "Deleted Remarks: ", "ar":"ملاحظات محذوفة: "},
"newValue": {"en": "New Value: ", "ar":"قيمة جديدة: "},
"fieldName": {"en": "Field Name: ", "ar":"اسم الحقل: "},
"noChangeRecorded": {"en": "No Change Recorded Unable To Perform Edit", "ar":"لم يتم تسجيل أي تغيير، غير قادر على إجراء التحرير"},
"oldValue": {"en": "Old Value: ", "ar":"القيمة القديمة: "},
"favoriteDiagnosis": {"en": "Favorite Diagnosis", "ar":"التشخيص المفضل"},
"addToFavorite": {"en": "Add To Favorite", "ar":"إضافة إلى المفضلة"},
"noDiagnosisFound": {"en": "No Diagnosis added, please add it from the button above", "ar":"لم يتم إضافة تشخيص ، يرجى إضافته من الزر أعلاه"},
"areYouSureYouWantToDeleteDiagnosis": {
"en": "Are you sure you want to delete diagnosis",
"ar": "هل أنت متأكد من أنك تريد حذف التشخيص"
},
"activate": {"en": "Activate", "ar":"فعل"},
"resolved": {"en": "Resolved", "ar":"تم الحل"},
"diagnosisAlreadyDeleted": {"en": "Diagnosis Already Deleted", "ar":"تم حذف التشخيص بالفعل"},
"diagnosisAlreadyResolved": {"en": "Diagnosis Already Resolved", "ar":"تم حل التشخيص بالفعل"},
"selectReaction": {"en": "Select Reaction", "ar":"حدد رد الفعل"},
"progressNoteCanNotBeEmpty": {"en": "Progress Note Can Not Be Empty", "ar":"ملاحظة التقدم لا يمكن أن تكون فارغة"},
};

@ -0,0 +1,130 @@
class AllergiesListVidaPlus {
int? allergyID;
String? allergyName;
List<AllergyReactionDTOs>? allergyReactionDTOs;
int? allergyRevisionID;
String? allergyTypeCode;
int? allergyTypeID;
String? allergyTypeName;
int? hospitalGroupID;
int? hospitalID;
bool? isActive;
bool? isSnowMedAllergy;
String? snowMedCode;
String? remark;
AllergiesListVidaPlus(
{this.allergyID,
this.allergyName,
this.allergyReactionDTOs,
this.allergyRevisionID,
this.allergyTypeCode,
this.allergyTypeID,
this.allergyTypeName,
this.hospitalGroupID,
this.hospitalID,
this.isActive,
this.isSnowMedAllergy,
this.snowMedCode,
this.remark
});
AllergiesListVidaPlus.fromJson(Map<String, dynamic> json) {
allergyID = json['allergyID'];
allergyName = json['allergyName'];
if (json['allergyReactionDTOs'] != null) {
allergyReactionDTOs = <AllergyReactionDTOs>[];
json['allergyReactionDTOs'].forEach((v) {
allergyReactionDTOs!.add(new AllergyReactionDTOs.fromJson(v));
});
}
allergyRevisionID = json['allergyRevisionID'];
allergyTypeCode = json['allergyTypeCode'];
allergyTypeID = json['allergyTypeID'];
allergyTypeName = json['allergyTypeName'];
hospitalGroupID = json['hospitalGroupID'];
hospitalID = json['hospitalID'];
isActive = json['isActive'];
isSnowMedAllergy = json['isSnowMedAllergy'];
snowMedCode = json['snowMedCode'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['allergyID'] = this.allergyID;
data['allergyName'] = this.allergyName;
if (this.allergyReactionDTOs != null) {
data['allergyReactionDTOs'] =
this.allergyReactionDTOs!.map((v) => v.toJson()).toList();
}
data['allergyRevisionID'] = this.allergyRevisionID;
data['allergyTypeCode'] = this.allergyTypeCode;
data['allergyTypeID'] = this.allergyTypeID;
data['allergyTypeName'] = this.allergyTypeName;
data['hospitalGroupID'] = this.hospitalGroupID;
data['hospitalID'] = this.hospitalID;
data['isActive'] = this.isActive;
data['isSnowMedAllergy'] = this.isSnowMedAllergy;
data['snowMedCode'] = this.snowMedCode;
return data;
}
}
class AllergyReactionDTOs {
int? allergyReactionID;
String? allergyReactionName;
int? allergyReactionRevisionID;
dynamic? hospitalGroupID;
int? hospitalID;
bool? isActive;
bool? isSelected =false;
int? dbCRUDOperation =1;
int? pomrid;
int? patientID;
int? allergyReactionMappingID = 0;
int? severity =1;
AllergyReactionDTOs(
{this.allergyReactionID,
this.allergyReactionName,
this.allergyReactionRevisionID,
this.hospitalGroupID,
this.hospitalID,
this.isActive,
this.isSelected,
this.dbCRUDOperation,
this.pomrid,
this.patientID,
this.allergyReactionMappingID,
this.severity =1
});
AllergyReactionDTOs.fromJson(Map<String, dynamic> json) {
allergyReactionID = json['allergyReactionID'];
allergyReactionName = json['allergyReactionName'];
allergyReactionRevisionID = json['allergyReactionRevisionID'];
hospitalGroupID = json['hospitalGroupID'];
hospitalID = json['hospitalID'];
isActive = json['isActive'];
dbCRUDOperation = json["DbCRUDOperation"];
pomrid = json['pomrid'];
patientID = json['patientID'];
allergyReactionMappingID = json['allergyReactionMappingID'];
severity = json['severity'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['allergyReactionID'] = this.allergyReactionID;
data['allergyReactionName'] = this.allergyReactionName;
data['allergyReactionRevisionID'] = this.allergyReactionRevisionID;
data['hospitalGroupID'] = this.hospitalGroupID;
data['hospitalID'] = this.hospitalID;
data['isActive'] = this.isActive;
data["DbCRUDOperation"] = this.dbCRUDOperation;
data['pomrid'] = this.pomrid;
data['patientID'] = patientID;
data['allergyReactionMappingID'] = this.allergyReactionMappingID;
data['severity'] = this.severity;
return data;
}
}

@ -0,0 +1,128 @@
class PatientAllergiesVidaPlus {
int? allergyID;
String? allergyName;
int? allergyTypeID;
String? allergyTypeName;
int? hospitalGroupID;
int? hospitalID;
bool? isActivePatientsAllergy;
int? patientID;
List<PatientsAllergyReactionsDTOs>? patientsAllergyReactionsDTOs;
int? patientsAllergyRevisionID;
int? pomrID;
String? remark;
PatientAllergiesVidaPlus(
{this.allergyID,
this.allergyName,
this.allergyTypeID,
this.allergyTypeName,
this.hospitalGroupID,
this.hospitalID,
this.isActivePatientsAllergy,
this.patientID,
this.patientsAllergyReactionsDTOs,
this.patientsAllergyRevisionID,
this.pomrID,
this.remark});
PatientAllergiesVidaPlus.fromJson(Map<String, dynamic> json) {
allergyID = json['allergyID'];
allergyName = json['allergyName'];
allergyTypeID = json['allergyTypeID'];
allergyTypeName = json['allergyTypeName'];
hospitalGroupID = json['hospitalGroupID'];
hospitalID = json['hospitalID'];
isActivePatientsAllergy = json['isActivePatientsAllergy'];
patientID = json['patientID'];
if (json['patientsAllergyReactionsDTOs'] != null) {
patientsAllergyReactionsDTOs = <PatientsAllergyReactionsDTOs>[];
json['patientsAllergyReactionsDTOs'].forEach((v) {
patientsAllergyReactionsDTOs!
.add(new PatientsAllergyReactionsDTOs.fromJson(v));
});
}
patientsAllergyRevisionID = json['patientsAllergyRevisionID'];
pomrID = json['pomrID'];
remark = json['remark'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['allergyID'] = this.allergyID;
data['allergyName'] = this.allergyName;
data['allergyTypeID'] = this.allergyTypeID;
data['allergyTypeName'] = this.allergyTypeName;
data['hospitalGroupID'] = this.hospitalGroupID;
data['hospitalID'] = this.hospitalID;
data['isActivePatientsAllergy'] = this.isActivePatientsAllergy;
data['patientID'] = this.patientID;
if (this.patientsAllergyReactionsDTOs != null) {
data['patientsAllergyReactionsDTOs'] =
this.patientsAllergyReactionsDTOs!.map((v) => v.toJson()).toList();
}
data['patientsAllergyRevisionID'] = this.patientsAllergyRevisionID;
data['pomrID'] = this.pomrID;
data['remark'] = this.remark;
return data;
}
}
class PatientsAllergyReactionsDTOs {
int? allergyReactionID;
int? allergyReactionMappingID;
String? allergyReactionName;
int? hospitalGroupID;
int? hospitalID;
bool? isActive;
int? patientID;
int? patientsAllergyReactionRevisionID;
int? pomrId;
int? severity =1;
bool? isSelected =true;
String? reactionSelection ="";
PatientsAllergyReactionsDTOs(
{this.allergyReactionID,
this.allergyReactionMappingID,
this.allergyReactionName,
this.hospitalGroupID,
this.hospitalID,
this.isActive,
this.patientID,
this.patientsAllergyReactionRevisionID,
this.pomrId,
this.severity =1,
this.isSelected,
this.reactionSelection
});
PatientsAllergyReactionsDTOs.fromJson(Map<String, dynamic> json) {
allergyReactionID = json['allergyReactionID'];
allergyReactionMappingID = json['allergyReactionMappingID'];
allergyReactionName = json['allergyReactionName'];
hospitalGroupID = json['hospitalGroupID'];
hospitalID = json['hospitalID'];
isActive = json['isActive'];
patientID = json['patientID'];
patientsAllergyReactionRevisionID =
json['patientsAllergyReactionRevisionID'];
pomrId = json['pomrId'];
severity = json['severity'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['allergyReactionID'] = this.allergyReactionID;
data['allergyReactionMappingID'] = this.allergyReactionMappingID;
data['allergyReactionName'] = this.allergyReactionName;
data['hospitalGroupID'] = this.hospitalGroupID;
data['hospitalID'] = this.hospitalID;
data['isActive'] = this.isActive;
data['patientID'] = this.patientID;
data['patientsAllergyReactionRevisionID'] =
this.patientsAllergyReactionRevisionID;
data['pomrId'] = this.pomrId;
data['severity'] = this.severity;
return data;
}
}

@ -0,0 +1,92 @@
class FavoriteDiseaseDetails {
String? categoryCode;
int? categoryId;
String? chapterCode;
String? codeRange;
String? createdBy;
String? diseaseType;
String? diseases;
String? diseasesCode;
int? diseasesId;
int? favoritesId;
int? hospitalGroupId;
int? hospitalId;
int? icdId;
String? icdSubVersion;
String? icdType;
String? icdVersion;
bool? isDeleted;
String? parentDiseasesCode;
String? problemCode;
String? problemDescription;
int? problemMasterId;
int? problemMasterRevisionId;
String? problemName;
String? problemType;
String? rowVersion;
String? sectionCode;
int? specificationId;
FavoriteDiseaseDetails.fromJson(Map<String, dynamic> json) {
categoryCode = json['CategoryCode'];
categoryId = json['CategoryId'];
chapterCode = json['ChapterCode'];
codeRange = json['CodeRange'];
createdBy = json['CreatedBy'];
diseaseType = json['DiseaseType'];
diseases = json['Diseases'];
diseasesCode = json['DiseasesCode'];
diseasesId = json['DiseasesId'];
favoritesId = json['FavoritesId'];
hospitalGroupId = json['HospitalGroupID'];
hospitalId = json['HospitalID'];
icdId = json['IcdId'];
icdSubVersion = json['IcdSubVersion'];
icdType = json['IcdType'];
icdVersion = json['IcdVersion'];
isDeleted = json['IsDeleted'];
parentDiseasesCode = json['ParentDiseasesCode'];
problemCode = json['ProblemCode'];
problemDescription = json['ProblemDescription'];
problemMasterId = json['ProblemMasterID'];
problemMasterRevisionId = json['ProblemMasterRevisionID'];
problemName = json['ProblemName'];
problemType = json['ProblemType'];
rowVersion = json['RowVersion'];
sectionCode = json['SectionCode'];
specificationId = json['SpecificationId'];
}
// toJson method
Map<String, dynamic> toJson() {
return {
'CategoryCode': categoryCode,
'CategoryId': categoryId,
'ChapterCode': chapterCode,
'CodeRange': codeRange,
'CreatedBy': createdBy,
'DiseaseType': diseaseType,
'Diseases': diseases,
'DiseasesCode': diseasesCode,
'DiseasesId': diseasesId,
'FavoritesId': favoritesId,
'HospitalGroupID': hospitalGroupId,
'HospitalID': hospitalId,
'IcdId': icdId,
'IcdSubVersion': icdSubVersion,
'IcdType': icdType,
'IcdVersion': icdVersion,
'IsDeleted': isDeleted,
'ParentDiseasesCode': parentDiseasesCode,
'ProblemCode': problemCode,
'ProblemDescription': problemDescription,
'ProblemMasterID': problemMasterId,
'ProblemMasterRevisionID': problemMasterRevisionId,
'ProblemName': problemName,
'ProblemType': problemType,
'RowVersion': rowVersion,
'SectionCode': sectionCode,
'SpecificationId': specificationId,
};
}
}

@ -0,0 +1,37 @@
class AuditDiagnosis {
String? approvedBy;
String? approvedOn;
String? createdBy;
String? createdOn;
String? deletedBy;
String? deletedOn;
String? deletedRemarks;
String? diagnosisType;
bool? isEventIdentifiedExternally;
bool? isResolved;
String? modifiedBy;
String? modifiedOn;
int? patientId;
int? patientProblemRevisionId;
String? remarks;
String? status;
AuditDiagnosis.fromJson(Map<String, dynamic> json) {
approvedBy = json['approvedBy'];
approvedOn = json['approvedOn'];
createdBy = json['createdBy'];
createdOn = json['createdOn'];
deletedBy = json['deletedBy'];
deletedOn = json['deletedOn'];
deletedRemarks = json['deletedRemarks'];
diagnosisType = json['diagnosisType'];
isEventIdentifiedExternally = json['isEventIdentifiedExternally'];
isResolved = json['isResolved'];
modifiedBy = json['modifiedBy'];
modifiedOn = json['modifiedOn'];
patientId = json['patientId'];
patientProblemRevisionId = json['patientProblemRevisionId'];
remarks = json['remarks'];
status = json['status'];
}
}

@ -0,0 +1,10 @@
class DiagnosisType {
String? diagnosisType;
String? name;
DiagnosisType.fromJson(Map<String, dynamic> json) {
diagnosisType = json['diagnosisType'] ?? '';
name = json['name'] ?? '';
}
}

@ -0,0 +1,287 @@
class PatientPreviousDiagnosis {
bool? active;
int? admissionId;
int? admissionRequestId;
int? appointmentId;
String? approvedBy;
String? approvedOn;
int? assessmentId;
int? chiefComplainId;
int? clinicGroupId;
int? clinicId;
String? condition;
String? createdBy;
String? createdOn;
String? deletedBy;
String? deletedByDoctorName;
String? deletedOn;
String? deletedRemarks;
String? diagnosisType;
int? doctorId;
int? episodeId;
int? hospitalGroupId;
int? hospitalId;
dynamic icdCodeDetailsDto;
String? icdSubVersion;
String? icdType;
dynamic icdVersion;
String? location;
String? loginUserId;
String? modifiedBy;
String? modifiedOn;
String? module;
String? parentLocation;
int? patientId;
dynamic patientProblemChangeHistories;
int? patientProblemId;
int? patientProblemRevisionId;
int? pomrId;
bool? previousProblem;
int? problemId;
String? problemName;
String? remarks;
bool? resolved;
String? selectedCategoryCode;
String? selectedChapterCode;
String? selectedDisease;
String? selectedIcdCode;
String? selectedSectionCode;
String? status;
List<VisitWisePatientDiagnosis>? visitWisePatientDiagnoses;
bool? visitWiseSelected;
PatientPreviousDiagnosis.fromJson(Map<String, dynamic> json) {
active = json['active'];
admissionId = json['admissionId'];
admissionRequestId = json['admissionRequestId'];
appointmentId = json['appointmentId'];
approvedBy = json['approvedBy'];
approvedOn = json['approvedOn'];
assessmentId = json['assessmentId'];
chiefComplainId = json['chiefComplainId'];
clinicGroupId = json['clinicGroupId'];
clinicId = json['clinicId'];
condition = json['condition'];
createdBy = json['createdBy'];
createdOn = json['createdOn'];
deletedBy = json['deletedBy'];
deletedByDoctorName = json['deletedByDoctorName'];
deletedOn = json['deletedOn'];
deletedRemarks = json['deletedRemarks'];
diagnosisType = json['diagnosisType'];
doctorId = json['doctorId'];
episodeId = json['episodeId'];
hospitalGroupId = json['hospitalGroupId'];
hospitalId = json['hospitalId'];
icdCodeDetailsDto = json['icdCodeDetailsDto'];
icdSubVersion = json['icdSubVersion'];
icdType = json['icdType'];
icdVersion = json['icdVersion'];
location = json['location'];
loginUserId = json['loginUserId'];
modifiedBy = json['modifiedBy'];
modifiedOn = json['modifiedOn'];
module = json['module'];
parentLocation = json['parentLocation'];
patientId = json['patientId'];
patientProblemChangeHistories = json['patientProblemChangeHistories'];
patientProblemId = json['patientProblemId'];
patientProblemRevisionId = json['patientProblemRevisionId'];
pomrId = json['pomrId'];
previousProblem = json['previousProblem'];
problemId = json['problemId'];
problemName = json['problemName'];
remarks = json['remarks'];
resolved = json['resolved'];
selectedCategoryCode = json['selectedCategoryCode'];
selectedChapterCode = json['selectedChapterCode'];
selectedDisease = json['selectedDisease'];
selectedIcdCode = json['selectedIcdCode'];
selectedSectionCode = json['selectedSectionCode'];
status = json['status'];
visitWiseSelected = json['visitWiseSelected'];
if (json['visitWisePatientDiagnoses'] != null) {
visitWisePatientDiagnoses = [];
json['visitWisePatientDiagnoses'].forEach((v) {
visitWisePatientDiagnoses!.add(VisitWisePatientDiagnosis.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
return {
'active': active,
'admissionId': admissionId ?? 0,
'admissionRequestId': admissionRequestId ?? 0,
'appointmentId': appointmentId ?? 0,
'approvedBy': approvedBy,
'approvedOn': approvedOn,
'assessmentId': assessmentId ?? 0,
'chiefComplainId': chiefComplainId ?? 0,
'clinicGroupId': clinicGroupId ?? 0,
'clinicId': clinicId,
'condition': condition,
'createdBy': createdBy,
'createdOn': createdOn,
'deletedBy': deletedBy,
'deletedByDoctorName': deletedByDoctorName,
'deletedOn': deletedOn,
'deletedRemarks': deletedRemarks,
'diagnosisType': diagnosisType,
'doctorId': doctorId,
'episodeId': episodeId ?? 0,
'hospitalGroupId': hospitalGroupId,
'hospitalId': hospitalId,
'icdCodeDetailsDto': icdCodeDetailsDto,
'icdSubVersion': icdSubVersion,
'icdType': icdType,
'icdVersion': icdVersion,
'location': location,
'loginUserId': loginUserId,
'modifiedBy': modifiedBy,
'modifiedOn': modifiedOn,
'module': module,
'parentLocation': parentLocation,
'patientId': patientId,
'patientProblemChangeHistories': patientProblemChangeHistories,
'patientProblemId': patientProblemId,
'patientProblemRevisionId': patientProblemRevisionId,
'pomrId': pomrId,
'previousProblem': previousProblem,
'problemId': problemId,
'problemName': problemName,
'remarks': remarks,
'resolved': resolved,
'selectedCategoryCode': selectedCategoryCode,
'selectedChapterCode': selectedChapterCode,
'selectedDisease': selectedDisease,
'selectedIcdCode': selectedIcdCode,
'selectedSectionCode': selectedSectionCode,
'status': status,
'visitWiseSelected': visitWiseSelected,
'visitWisePatientDiagnoses': visitWisePatientDiagnoses?.map((v) => v.toJson()).toList(),
};
}
}
class VisitWisePatientDiagnosis {
bool? active;
int? admissionId;
int? appointmentId;
String? approvedBy;
String? approvedOn;
int? assessmentId;
int? clinicId;
String? condition;
String? createdBy;
String? createdOn;
String? deletedBy;
String? deletedOn;
String? deletedRemarks;
String? diagnosisType;
int? doctorId;
int? episodeId;
int? hospitalGroupId;
int? hospitalId;
String? icdSubVersion;
String? icdType;
dynamic icdVersion;
bool? isPreviousProblem;
String? location;
String? loginUserId;
String? modifiedBy;
String? modifiedOn;
int? patientDiagnosisId;
int? patientId;
int? patientProblemRevisionId;
int? pomrId;
String? problemName;
String? remarks;
bool? resolved;
bool? selected;
String? selectedDisease;
int? selectedDoctorId;
String? selectedIcdCode;
VisitWisePatientDiagnosis.fromJson(Map<String, dynamic> json) {
active = json['active'];
admissionId = json['admissionId'];
appointmentId = json['appointmentId'];
approvedBy = json['approvedBy'];
approvedOn = json['approvedOn'];
assessmentId = json['assessmentId'];
clinicId = json['clinicId'];
condition = json['condition'];
createdBy = json['createdBy'];
createdOn = json['createdOn'];
deletedBy = json['deletedBy'];
deletedOn = json['deletedOn'];
deletedRemarks = json['deletedRemarks'];
diagnosisType = json['diagnosisType'];
doctorId = json['doctorId'];
episodeId = json['episodeId'];
hospitalGroupId = json['hospitalGroupId'];
hospitalId = json['hospitalId'];
icdSubVersion = json['icdSubVersion'];
icdType = json['icdType'];
icdVersion = json['icdVersion'];
isPreviousProblem = json['isPreviousProblem'];
location = json['location'];
loginUserId = json['loginUserId'];
modifiedBy = json['modifiedBy'];
modifiedOn = json['modifiedOn'];
patientDiagnosisId = json['patientDiagnosisId'];
patientId = json['patientId'];
patientProblemRevisionId = json['patientProblemRevisionId'];
pomrId = json['pomrId'];
problemName = json['problemName'];
remarks = json['remarks'];
resolved = json['resolved'];
selected = json['selected'];
selectedDisease = json['selectedDisease'];
selectedDoctorId = json['selectedDoctorId'];
selectedIcdCode = json['selectedIcdCode'];
}
Map<String, dynamic> toJson() {
return {
'active': active,
'admissionId': admissionId,
'appointmentId': appointmentId,
'approvedBy': approvedBy,
'approvedOn': approvedOn,
'assessmentId': assessmentId,
'clinicId': clinicId,
'condition': condition,
'createdBy': createdBy,
'createdOn': createdOn,
'deletedBy': deletedBy,
'deletedOn': deletedOn,
'deletedRemarks': deletedRemarks,
'diagnosisType': diagnosisType,
'doctorId': doctorId,
'episodeId': episodeId,
'hospitalGroupId': hospitalGroupId,
'hospitalId': hospitalId,
'icdSubVersion': icdSubVersion,
'icdType': icdType,
'icdVersion': icdVersion,
'isPreviousProblem': isPreviousProblem,
'location': location,
'loginUserId': loginUserId,
'modifiedBy': modifiedBy,
'modifiedOn': modifiedOn,
'patientDiagnosisId': patientDiagnosisId,
'patientId': patientId,
'patientProblemRevisionId': patientProblemRevisionId,
'pomrId': pomrId,
'problemName': problemName,
'remarks': remarks,
'resolved': resolved,
'selected': selected,
'selectedDisease': selectedDisease,
'selectedDoctorId': selectedDoctorId,
'selectedIcdCode': selectedIcdCode,
};
}
}

@ -0,0 +1,99 @@
class SearchDiagnosis {
String? category;
String? categoryId;
String? codeRange;
String? diseaseType;
String? diseases;
String? diseasesBCode;
String? diseasesCode;
String? diseasesDataId;
String? diseasesId;
String? diseasesName;
int? hospitalGroupId;
int? hospitalId;
String? icdSubVersion;
String? icdType;
List<String>? icdVersion;
String? icdVersionDisplay;
bool? isDeleted;
String? layerID;
String? parentDiseasesCode;
String? specification;
int? specificationId;
String? specificationNo;
String? selectedIcdCode;
String? selectedCategoryCode;
String? selectedSectionCode;
String? selectedChapterCode;
String? selectedNandaCode;
bool isFavorite = false;
// Default constructor
SearchDiagnosis();
// fromJson constructor
SearchDiagnosis.fromJson(Map<String, dynamic> json) {
category = json['category'];
categoryId = json['categoryId'];
codeRange = json['codeRange'];
diseaseType = json['diseaseType'];
diseases = json['diseases'];
diseasesBCode = json['diseasesBCode'];
diseasesCode = json['diseasesCode'];
diseasesDataId = json['diseasesDataId'];
diseasesId = json['diseasesId'];
diseasesName = json['diseasesName'];
hospitalGroupId = json['hospitalGroupId'];
hospitalId = json['hospitalId'];
icdSubVersion = json['icdSubVersion'];
icdType = json['icdType'];
icdVersion = json['icdVersion'] != null
? List<String>.from(json['icdVersion'])
: null;
icdVersionDisplay = json['icdVersionDisplay'];
isDeleted = json['isDeleted'] == "True";
layerID = json['layerID'];
parentDiseasesCode = json['parentDiseasesCode'];
specification = json['specification'];
specificationId = json['specificationId'];
specificationNo = json['specificationNo'];
selectedIcdCode = json['selectedIcdCode'];
selectedCategoryCode = json['selectedCategoryCode'];
selectedSectionCode = json['selectedSectionCode'];
selectedChapterCode = json['selectedChapterCode'];
selectedNandaCode = json['selectedNandaCode'];
}
// toJson method
Map<String, dynamic> toJson() {
return {
'category': category,
'categoryId': categoryId,
'codeRange': codeRange,
'diseaseType': diseaseType,
'diseases': diseases,
'diseasesBCode': diseasesBCode,
'diseasesCode': diseasesCode,
'diseasesDataId': diseasesDataId,
'diseasesId': diseasesId,
'diseasesName': diseasesName,
'hospitalGroupId': hospitalGroupId,
'hospitalId': hospitalId,
'icdSubVersion': icdSubVersion,
'icdType': icdType,
'icdVersion': icdVersion,
'icdVersionDisplay': icdVersionDisplay,
'isDeleted': isDeleted.toString(),
'layerID': layerID,
'parentDiseasesCode': parentDiseasesCode,
'specification': specification,
'specificationId': specificationId,
'specificationNo': specificationNo,
'selectedIcdCode': selectedIcdCode,
'selectedCategoryCode': selectedCategoryCode,
'selectedSectionCode': selectedSectionCode,
'selectedChapterCode': selectedChapterCode,
'selectedNandaCode': selectedNandaCode,
};
}
}

@ -0,0 +1,249 @@
class EpisodeByChiefComplaintVidaPlus {
int? clinicId;
String? createdOn;
int? doctorId;
int? episodeStatus;
int? hospitalGroupId;
int? hospitalId;
String? modifiedOn;
int? patientEpisodeId;
int? patientId;
List<PatientPomrs>? patientPomrs;
EpisodeByChiefComplaintVidaPlus(
{this.clinicId,
this.createdOn,
this.doctorId,
this.episodeStatus,
this.hospitalGroupId,
this.hospitalId,
this.modifiedOn,
this.patientEpisodeId,
this.patientId,
this.patientPomrs});
EpisodeByChiefComplaintVidaPlus.fromJson(Map<String, dynamic> json) {
clinicId = json['clinicId'];
createdOn = json['createdOn'];
doctorId = json['doctorId'];
episodeStatus = json['episodeStatus'];
hospitalGroupId = json['hospitalGroupId'];
hospitalId = json['hospitalId'];
modifiedOn = json['modifiedOn'];
patientEpisodeId = json['patientEpisodeId'];
patientId = json['patientId'];
if (json['patientPomrs'] != null) {
patientPomrs = <PatientPomrs>[];
json['patientPomrs'].forEach((v) {
patientPomrs!.add(new PatientPomrs.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['clinicId'] = this.clinicId;
data['createdOn'] = this.createdOn;
data['doctorId'] = this.doctorId;
data['episodeStatus'] = this.episodeStatus;
data['hospitalGroupId'] = this.hospitalGroupId;
data['hospitalId'] = this.hospitalId;
data['modifiedOn'] = this.modifiedOn;
data['patientEpisodeId'] = this.patientEpisodeId;
data['patientId'] = this.patientId;
if (this.patientPomrs != null) {
data['patientPomrs'] = this.patientPomrs!.map((v) => v.toJson()).toList();
}
return data;
}
}
class PatientPomrs {
int? appointmentId;
int? chiefComplainTemplateId;
List<ChiefComplains>? chiefComplains;
int? clinicGroupId;
String? createdOn;
int? doctorId;
String? doctorName;
int? episodeId;
bool? fallowUp;
bool? fallowUpRequired;
bool? isReadOnly;
String? modifiedOn;
int? patientId;
int? patientPomrId;
String? pomrSingOn;
int? pomrStatus;
bool? readOnly;
String? seenAtStatus;
String? vprnSeenAtStatus;
PatientPomrs(
{this.appointmentId,
this.chiefComplainTemplateId,
this.chiefComplains,
this.clinicGroupId,
this.createdOn,
this.doctorId,
this.doctorName,
this.episodeId,
this.fallowUp,
this.fallowUpRequired,
this.isReadOnly,
this.modifiedOn,
this.patientId,
this.patientPomrId,
this.pomrSingOn,
this.pomrStatus,
this.readOnly,
this.seenAtStatus,
this.vprnSeenAtStatus});
PatientPomrs.fromJson(Map<String, dynamic> json) {
appointmentId = json['appointmentId'];
chiefComplainTemplateId = json['chiefComplainTemplateId'];
if (json['chiefComplains'] != null) {
chiefComplains = <ChiefComplains>[];
json['chiefComplains'].forEach((v) {
chiefComplains!.add(new ChiefComplains.fromJson(v));
});
}
clinicGroupId = json['clinicGroupId'];
createdOn = json['createdOn'];
doctorId = json['doctorId'];
doctorName = json['doctorName'];
episodeId = json['episodeId'];
fallowUp = json['fallowUp'];
fallowUpRequired = json['fallowUpRequired'];
isReadOnly = json['isReadOnly'];
modifiedOn = json['modifiedOn'];
patientId = json['patientId'];
patientPomrId = json['patientPomrId'];
pomrSingOn = json['pomrSingOn'];
pomrStatus = json['pomrStatus'];
readOnly = json['readOnly'];
seenAtStatus = json['seenAtStatus'];
vprnSeenAtStatus = json['vprnSeenAtStatus'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['appointmentId'] = this.appointmentId;
data['chiefComplainTemplateId'] = this.chiefComplainTemplateId;
if (this.chiefComplains != null) {
data['chiefComplains'] =
this.chiefComplains!.map((v) => v.toJson()).toList();
}
data['clinicGroupId'] = this.clinicGroupId;
data['createdOn'] = this.createdOn;
data['doctorId'] = this.doctorId;
data['doctorName'] = this.doctorName;
data['episodeId'] = this.episodeId;
data['fallowUp'] = this.fallowUp;
data['fallowUpRequired'] = this.fallowUpRequired;
data['isReadOnly'] = this.isReadOnly;
data['modifiedOn'] = this.modifiedOn;
data['patientId'] = this.patientId;
data['patientPomrId'] = this.patientPomrId;
data['pomrSingOn'] = this.pomrSingOn;
data['pomrStatus'] = this.pomrStatus;
data['readOnly'] = this.readOnly;
data['seenAtStatus'] = this.seenAtStatus;
data['vprnSeenAtStatus'] = this.vprnSeenAtStatus;
return data;
}
}
class ChiefComplains {
int? appointmentId;
String? chiefComplain;
int? chiefComplainId;
int? clinicId;
String? createdBy;
int? createdId;
String? createdOn;
int? doctorId;
String? doctorName;
int? episodeId;
int? hospitalGroupId;
int? hospitalId;
String? loginUserId;
String? modifiedBy;
Null? modifiedId;
String? modifiedOn;
int? patientId;
String? patientName;
int? patientPomrId;
int? chiefComplainTemplateId;
ChiefComplains(
{this.appointmentId,
this.chiefComplain,
this.chiefComplainId,
this.clinicId,
this.createdBy,
this.createdId,
this.createdOn,
this.doctorId,
this.doctorName,
this.episodeId,
this.hospitalGroupId,
this.hospitalId,
this.loginUserId,
this.modifiedBy,
this.modifiedId,
this.modifiedOn,
this.patientId,
this.patientName,
this.patientPomrId});
ChiefComplains.fromJson(Map<String, dynamic> json) {
appointmentId = json['appointmentId'];
chiefComplain = json['chiefComplain'];
chiefComplainTemplateId = json['chiefComplainTemplateId'];
chiefComplainId = json['chiefComplainId'];
clinicId = json['clinicId'];
createdBy = json['createdBy'];
createdId = json['createdId'];
createdOn = json['createdOn'];
doctorId = json['doctorId'];
doctorName = json['doctorName'];
episodeId = json['episodeId'];
hospitalGroupId = json['hospitalGroupId'];
hospitalId = json['hospitalId'];
loginUserId = json['loginUserId'];
modifiedBy = json['modifiedBy'];
modifiedId = json['modifiedId'];
modifiedOn = json['modifiedOn'];
patientId = json['patientId'];
patientName = json['patientName'];
patientPomrId = json['patientPomrId'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['appointmentId'] = this.appointmentId;
data['chiefComplain'] = this.chiefComplain;
data['chiefComplainId'] = this.chiefComplainId;
data['clinicId'] = this.clinicId;
data['createdBy'] = this.createdBy;
data['createdId'] = this.createdId;
data['createdOn'] = this.createdOn;
data['doctorId'] = this.doctorId;
data['doctorName'] = this.doctorName;
data['episodeId'] = this.episodeId;
data['hospitalGroupId'] = this.hospitalGroupId;
data['hospitalId'] = this.hospitalId;
data['loginUserId'] = this.loginUserId;
data['modifiedBy'] = this.modifiedBy;
data['chiefComplainTemplateId'] = this.chiefComplainTemplateId;
data['modifiedId'] = this.modifiedId;
data['modifiedOn'] = this.modifiedOn;
data['patientId'] = this.patientId;
data['patientName'] = this.patientName;
data['patientPomrId'] = this.patientPomrId;
return data;
}
}

@ -0,0 +1,68 @@
class GetChiefComplaintVidaPlus {
int? appointmentId;
String? chiefComplain;
int? chiefComplainId;
int? chiefComplainTemplateId;
int? clinicGroupId;
int? clinicId;
int? doctorId;
String? doctorName;
int? episodeId;
int? hospitalGroupId;
int? hospitalId;
String? loginUserId;
int? patientId;
int? patientPomrId;
GetChiefComplaintVidaPlus(
{this.appointmentId,
this.chiefComplain,
this.chiefComplainId,
this.chiefComplainTemplateId,
this.clinicGroupId,
this.clinicId,
this.doctorId,
this.doctorName,
this.episodeId,
this.hospitalGroupId,
this.hospitalId,
this.loginUserId,
this.patientId,
this.patientPomrId});
GetChiefComplaintVidaPlus.fromJson(Map<String, dynamic> json) {
appointmentId = json['appointmentId'];
chiefComplain = json['chiefComplain'];
chiefComplainId = json['chiefComplainId'];
chiefComplainTemplateId = json['chiefComplainTemplateId'];
clinicGroupId = json['clinicGroupId'];
clinicId = json['clinicId'];
doctorId = json['doctorId'];
doctorName = json['doctorName'];
episodeId = json['episodeId'];
hospitalGroupId = json['hospitalGroupId'];
hospitalId = json['hospitalId'];
loginUserId = json['loginUserId'];
patientId = json['patientId'];
patientPomrId = json['patientPomrId'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['appointmentId'] = this.appointmentId;
data['chiefComplain'] = this.chiefComplain;
data['chiefComplainId'] = this.chiefComplainId;
data['chiefComplainTemplateId'] = this.chiefComplainTemplateId;
data['clinicGroupId'] = this.clinicGroupId;
data['clinicId'] = this.clinicId;
data['doctorId'] = this.doctorId;
data['doctorName'] = this.doctorName;
data['episodeId'] = this.episodeId;
data['hospitalGroupId'] = this.hospitalGroupId;
data['hospitalId'] = this.hospitalId;
data['loginUserId'] = this.loginUserId;
data['patientId'] = this.patientId;
data['patientPomrId'] = this.patientPomrId;
return data;
}
}

@ -0,0 +1,40 @@
class SearchChiefComplaint {
String? chiefComplain;
String? chiefComplainCode;
int? chiefComplainId;
String? clinic;
int? hospitalGroupId;
int? hospitalId;
String? nursingGroup;
SearchChiefComplaint(
{this.chiefComplain,
this.chiefComplainCode,
this.chiefComplainId,
this.clinic,
this.hospitalGroupId,
this.hospitalId,
this.nursingGroup});
SearchChiefComplaint.fromJson(Map<String, dynamic> json) {
chiefComplain = json['chiefComplain'];
chiefComplainCode = json['chiefComplainCode'];
chiefComplainId = json['chiefComplainId'];
clinic = json['clinic'];
hospitalGroupId = json['hospitalGroupId'];
hospitalId = json['hospitalId'];
nursingGroup = json['nursingGroup'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['chiefComplain'] = this.chiefComplain;
data['chiefComplainCode'] = this.chiefComplainCode;
data['chiefComplainId'] = this.chiefComplainId;
data['clinic'] = this.clinic;
data['hospitalGroupId'] = this.hospitalGroupId;
data['hospitalId'] = this.hospitalId;
data['nursingGroup'] = this.nursingGroup;
return data;
}
}

@ -0,0 +1,66 @@
class GetHopiDetails {
int? clinicId;
int? doctorId;
int? hospitalGroupId;
int? hospitalId;
String? hpi;
int? hpiId;
bool? isHpiTakenFamily;
bool? isHpiTakenOther;
bool? isHpiTakenPatient;
String? hpiTakenFamilyText;
String? hpiTakenOtherText;
String? loginUserId;
int? patientId;
int? patientPomrId;
GetHopiDetails(
{this.clinicId,
this.doctorId,
this.hospitalGroupId,
this.hospitalId,
this.hpi,
this.hpiId,
this.isHpiTakenFamily,
this.isHpiTakenOther,
this.isHpiTakenPatient,
this.loginUserId,
this.patientId,
this.patientPomrId});
GetHopiDetails.fromJson(Map<String, dynamic> json) {
clinicId = json['clinicId'];
doctorId = json['doctorId'];
hospitalGroupId = json['hospitalGroupId'];
hospitalId = json['hospitalId'];
hpi = json['hpi'];
hpiId = json['hpiId'];
isHpiTakenFamily = json['isHpiTakenFamily'];
isHpiTakenOther = json['isHpiTakenOther'];
isHpiTakenPatient = json['isHpiTakenPatient'];
loginUserId = json['loginUserId'];
patientId = json['patientId'];
patientPomrId = json['patientPomrId'];
hpiTakenFamilyText = json['hpiTakenFamilyText'];
hpiTakenOtherText = json['hpiTakenOtherText'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['clinicId'] = this.clinicId;
data['doctorId'] = this.doctorId;
data['hospitalGroupId'] = this.hospitalGroupId;
data['hospitalId'] = this.hospitalId;
data['hpi'] = this.hpi;
data['hpiId'] = this.hpiId;
data['isHpiTakenFamily'] = this.isHpiTakenFamily;
data['isHpiTakenOther'] = this.isHpiTakenOther;
data['isHpiTakenPatient'] = this.isHpiTakenPatient;
data['loginUserId'] = this.loginUserId;
data['patientId'] = this.patientId;
data['patientPomrId'] = this.patientPomrId;
data['hpiTakenFamilyText'] = this.hpiTakenFamilyText;
data['hpiTakenOtherText'] = this.hpiTakenOtherText;
return data;
}
}

@ -0,0 +1,156 @@
class GetHomeMedicationList {
List? personalizationEntity;
int? appointmentId;
int? clinicGroupId;
int? clinicId;
String? createdTime;
String? doseQuantity;
String? formularyName;
String? frequencyId;
String? frequencyString;
String? genericFormularyId;
String? homeMedFrom;
int? hospitalGroupId;
int? hospitalId;
String? id;
bool? isActive;
bool? isEHRIPReconciled;
bool? isEHROPReconciled;
bool? isERIPReconciled;
bool? isFreeText;
bool? isReconciled;
bool? isUnknownDetail;
String? lastUpdatedTime;
int? patientId;
int? patientPomrId;
String? prescribeTypeAlias;
int? prescribedItemId;
String? prescribedItemName;
String? remarks;
String? routeId;
String? routeString;
String? rowVersion;
String? sentence;
String? strengthId;
String? strengthString;
GetHomeMedicationList(
{this.personalizationEntity,
this.appointmentId,
this.clinicGroupId,
this.clinicId,
this.createdTime,
this.doseQuantity,
this.formularyName,
this.frequencyId,
this.frequencyString,
this.genericFormularyId,
this.homeMedFrom,
this.hospitalGroupId,
this.hospitalId,
this.id,
this.isActive,
this.isEHRIPReconciled,
this.isEHROPReconciled,
this.isERIPReconciled,
this.isFreeText,
this.isReconciled,
this.isUnknownDetail,
this.lastUpdatedTime,
this.patientId,
this.patientPomrId,
this.prescribeTypeAlias,
this.prescribedItemId,
this.prescribedItemName,
this.remarks,
this.routeId,
this.routeString,
this.rowVersion,
this.sentence,
this.strengthId,
this.strengthString});
GetHomeMedicationList.fromJson(Map<String, dynamic> json) {
if (json['PersonalizationEntity'] != null) {
personalizationEntity = [];
json['PersonalizationEntity'].forEach((v) {
personalizationEntity!.add( v.fromJson(v));
});
}
appointmentId = json['appointmentId'];
clinicGroupId = json['clinicGroupId'];
clinicId = json['clinicId'];
createdTime = json['createdTime'];
doseQuantity = json['doseQuantity'];
formularyName = json['formularyName'];
frequencyId = json['frequencyId'];
frequencyString = json['frequencyString'];
genericFormularyId = json['genericFormularyId'];
homeMedFrom = json['homeMedFrom'];
hospitalGroupId = json['hospitalGroupId'];
hospitalId = json['hospitalId'];
id = json['id'];
isActive = json['isActive'];
isEHRIPReconciled = json['isEHRIPReconciled'];
isEHROPReconciled = json['isEHROPReconciled'];
isERIPReconciled = json['isERIPReconciled'];
isFreeText = json['isFreeText'];
isReconciled = json['isReconciled'];
isUnknownDetail = json['isUnknownDetail'];
lastUpdatedTime = json['lastUpdatedTime'];
patientId = json['patientId'];
patientPomrId = json['patientPomrId'];
prescribeTypeAlias = json['prescribeTypeAlias'];
prescribedItemId = json['prescribedItemId'];
prescribedItemName = json['prescribedItemName'];
remarks = json['remarks'];
routeId = json['routeId'];
routeString = json['routeString'];
rowVersion = json['rowVersion'];
sentence = json['sentence'];
strengthId = json['strengthId'];
strengthString = json['strengthString'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.personalizationEntity != null) {
data['PersonalizationEntity'] =
this.personalizationEntity!.map((v) => v.toJson()).toList();
}
data['appointmentId'] = this.appointmentId;
data['clinicGroupId'] = this.clinicGroupId;
data['clinicId'] = this.clinicId;
data['createdTime'] = this.createdTime;
data['doseQuantity'] = this.doseQuantity;
data['formularyName'] = this.formularyName;
data['frequencyId'] = this.frequencyId;
data['frequencyString'] = this.frequencyString;
data['genericFormularyId'] = this.genericFormularyId;
data['homeMedFrom'] = this.homeMedFrom;
data['hospitalGroupId'] = this.hospitalGroupId;
data['hospitalId'] = this.hospitalId;
data['id'] = this.id;
data['isActive'] = this.isActive;
data['isEHRIPReconciled'] = this.isEHRIPReconciled;
data['isEHROPReconciled'] = this.isEHROPReconciled;
data['isERIPReconciled'] = this.isERIPReconciled;
data['isFreeText'] = this.isFreeText;
data['isReconciled'] = this.isReconciled;
data['isUnknownDetail'] = this.isUnknownDetail;
data['lastUpdatedTime'] = this.lastUpdatedTime;
data['patientId'] = this.patientId;
data['patientPomrId'] = this.patientPomrId;
data['prescribeTypeAlias'] = this.prescribeTypeAlias;
data['prescribedItemId'] = this.prescribedItemId;
data['prescribedItemName'] = this.prescribedItemName;
data['remarks'] = this.remarks;
data['routeId'] = this.routeId;
data['routeString'] = this.routeString;
data['rowVersion'] = this.rowVersion;
data['sentence'] = this.sentence;
data['strengthId'] = this.strengthId;
data['strengthString'] = this.strengthString;
return data;
}
}

@ -0,0 +1,40 @@
class GetSearchCurrentMedication {
String? formularyName;
String? genericFormularyCode;
String? genericFormularyId;
int? hospitalGroupId;
int? hospitalId;
String? itemType;
bool? outOfStock;
GetSearchCurrentMedication(
{this.formularyName,
this.genericFormularyCode,
this.genericFormularyId,
this.hospitalGroupId,
this.hospitalId,
this.itemType,
this.outOfStock});
GetSearchCurrentMedication.fromJson(Map<String, dynamic> json) {
formularyName = json['formularyName'];
genericFormularyCode = json['genericFormularyCode'];
genericFormularyId = json['genericFormularyId'];
hospitalGroupId = json['hospitalGroupId'];
hospitalId = json['hospitalId'];
itemType = json['itemType'];
outOfStock = json['outOfStock'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['formularyName'] = this.formularyName;
data['genericFormularyCode'] = this.genericFormularyCode;
data['genericFormularyId'] = this.genericFormularyId;
data['hospitalGroupId'] = this.hospitalGroupId;
data['hospitalId'] = this.hospitalId;
data['itemType'] = this.itemType;
data['outOfStock'] = this.outOfStock;
return data;
}
}

@ -0,0 +1,108 @@
class GetSearchCurrentMedicationDetails {
List<GenericItemFrequencyDetailsEntity>? genericItemFrequencyDetailsEntity;
List<GenericItemRouteDetailsEntity>? genericItemRouteDetailsEntity;
List<ItemStrengthDetailsDto>? itemStrengthDetailsDto;
int? patientTypeId;
GetSearchCurrentMedicationDetails({this.genericItemFrequencyDetailsEntity, this.genericItemRouteDetailsEntity, this.itemStrengthDetailsDto, this.patientTypeId});
GetSearchCurrentMedicationDetails.fromJson(Map<String, dynamic> json) {
if (json['genericItemFrequencyDetailsEntity'] != null) {
genericItemFrequencyDetailsEntity = <GenericItemFrequencyDetailsEntity>[];
json['genericItemFrequencyDetailsEntity'].forEach((v) { genericItemFrequencyDetailsEntity!.add(new GenericItemFrequencyDetailsEntity.fromJson(v)); });
}
if (json['genericItemRouteDetailsEntity'] != null) {
genericItemRouteDetailsEntity = <GenericItemRouteDetailsEntity>[];
json['genericItemRouteDetailsEntity'].forEach((v) { genericItemRouteDetailsEntity!.add(new GenericItemRouteDetailsEntity.fromJson(v)); });
}
if (json['itemStrengthDetailsDto'] != null) {
itemStrengthDetailsDto = <ItemStrengthDetailsDto>[];
json['itemStrengthDetailsDto'].forEach((v) { itemStrengthDetailsDto!.add(new ItemStrengthDetailsDto.fromJson(v)); });
}
patientTypeId = json['patientTypeId'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.genericItemFrequencyDetailsEntity != null) {
data['genericItemFrequencyDetailsEntity'] = this.genericItemFrequencyDetailsEntity!.map((v) => v.toJson()).toList();
}
if (this.genericItemRouteDetailsEntity != null) {
data['genericItemRouteDetailsEntity'] = this.genericItemRouteDetailsEntity!.map((v) => v.toJson()).toList();
}
if (this.itemStrengthDetailsDto != null) {
data['itemStrengthDetailsDto'] = this.itemStrengthDetailsDto!.map((v) => v.toJson()).toList();
}
data['patientTypeId'] = this.patientTypeId;
return data;
}
}
class GenericItemFrequencyDetailsEntity {
bool? Default;
String? frequency;
int? frequencyId;
int? interval;
GenericItemFrequencyDetailsEntity({this.Default, this.frequency, this.frequencyId, this.interval});
GenericItemFrequencyDetailsEntity.fromJson(Map<String, dynamic> json) {
Default = json['Default'];
frequency = json['Frequency'];
frequencyId = json['FrequencyId'];
interval = json['Interval'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['Default'] = this.Default;
data['Frequency'] = this.frequency;
data['FrequencyId'] = this.frequencyId;
data['Interval'] = this.interval;
return data;
}
}
class GenericItemRouteDetailsEntity {
bool? Default;
String? route;
int? routeId;
GenericItemRouteDetailsEntity({this.Default, this.route, this.routeId});
GenericItemRouteDetailsEntity.fromJson(Map<String, dynamic> json) {
Default = json['default'];
route = json['route'];
routeId = json['routeId'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['default'] = this.Default;
data['route'] = this.route;
data['routeId'] = this.routeId;
return data;
}
}
class ItemStrengthDetailsDto {
bool? Default;
String? strength;
int? strengthId;
ItemStrengthDetailsDto({this.Default, this.strength, this.strengthId});
ItemStrengthDetailsDto.fromJson(Map<String, dynamic> json) {
Default = json['default'];
strength = json['strength'];
strengthId = json['strengthId'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['default'] = this.Default;
data['strength'] = this.strength;
data['strengthId'] = this.strengthId;
return data;
}
}

@ -0,0 +1,96 @@
import 'package:flutter/material.dart';
class Condition {
String? conditionCode;
String? conditionName;
Condition();
Condition.fromJson(Map<String, dynamic> json) {
conditionCode = json['conditionCode'];
conditionName = json['conditionName'];
}
Map<String, dynamic> toJson() {
return {
'conditionCode': conditionCode,
'conditionName': conditionName,
};
}
}
class Category {
int? categoryId;
String? code;
String? codeAlias;
List<Condition>? conditionsList;
String? description;
String? descriptionAlias;
int? id;
bool? isActive;
bool? isBuiltin;
String? languageCode;
String? name;
String? nameAlias;
int? rowVersion;
int? specialityId;
String? specialityName;
List<dynamic>? translationValues;
bool isSelected = false;
TextEditingController remarksController = TextEditingController();
int selectedCondition = -1;
String selectedConditionName = "";
String? pomrId;
int? paitientId;
int? userID;
bool isExpanded = false;
Category();
Category.fromJson(Map<String, dynamic> json,int? specialityId, String specialityName, String? pomrId, int paitientId, int userID) {
categoryId = json['categoryId'];
code = json['code'];
codeAlias = json['codeAlias'];
if (json['conditionsList'] != null) {
conditionsList = <Condition>[];
json['conditionsList'].forEach((v) {
conditionsList!.add(Condition.fromJson(v));
});
}
if(conditionsList?.isNotEmpty == true) selectedCondition = int.parse(conditionsList?.first.conditionName ??'-1');
description = json['description'];
descriptionAlias = json['descriptionAlias'];
id = json['id'];
isActive = json['isActive'];
isBuiltin = json['isBuiltin'];
languageCode = json['languageCode'];
name = json['name'];
nameAlias = json['nameAlias'];
rowVersion = json['rowVersion'];
translationValues = json['translationValues'];
this.specialityName = specialityName;
this.specialityId = specialityId;
this.pomrId = pomrId;
this.paitientId = paitientId;
this.userID = userID;
}
Map<String, dynamic> toJson() {
return {
'categoryId': categoryId,
'code': code,
'codeAlias': codeAlias,
'conditionsList': conditionsList?.map((v) => v.toJson()).toList(),
'description': description,
'descriptionAlias': descriptionAlias,
'id': id,
'isActive': isActive,
'isBuiltin': isBuiltin,
'languageCode': languageCode,
'name': name,
'nameAlias': nameAlias,
'rowVersion': rowVersion,
'translationValues': translationValues,
};
}
}

@ -0,0 +1,74 @@
import 'package:doctor_app_flutter/core/model/SOAP/physical_exam/Category.dart';
class CreatePhysicalExamination {
bool? isChecked; // it will be told
bool? selected; // same as above
String? pomrid; // paitient
int? patientID; // paitint
bool? isClinicPhysicalExamination; // it will be told
dynamic? physicalExaminationSystemID; // category id
String? physicalExaminationDescription; // name of the category
int? specialityID; // id of the specialitiy id
dynamic selectedOptions; // it will also be told but it could be sent as null
bool? isMandatory; // it will also be checked default value is false
String? specialityDescription; // name of the speciality
int? physicalExaminationCondition; // condition selected
String? loginUserId; // doctor id
String? remark;
CreatePhysicalExamination();
CreatePhysicalExamination.fromJson(Map<String, dynamic> json) {
isChecked = json['isChecked'];
selected = json['selected'];
pomrid = json['pomrid'];
patientID = json['patientID'];
isClinicPhysicalExamination = json['isClinicPhysicalExamination'];
physicalExaminationSystemID = json['physicalExaminationSystemID'];
physicalExaminationDescription = json['physicalExaminationDescription'];
specialityID = json['specialityID'];
selectedOptions = json['selectedOptions'];
isMandatory = json['isMandatory'];
specialityDescription = json['specialityDescription'];
physicalExaminationCondition = json['physicalExaminationCondition'];
loginUserId = json['loginUserId'];
remark = json['remark'];
}
Map<String, dynamic> toJson() {
return {
'isChecked': isChecked,
'selected': selected,
'pomrid': pomrid,
'patientID': patientID,
'isClinicPhysicalExamination': isClinicPhysicalExamination,
'physicalExaminationSystemID': physicalExaminationSystemID,
'physicalExaminationDescription': physicalExaminationDescription,
'specialityID': specialityID,
'selectedOptions': selectedOptions,
'isMandatory': isMandatory,
'specialityDescription': specialityDescription,
'physicalExaminationCondition': physicalExaminationCondition,
'loginUserId': loginUserId,
'remark': remark,
};
}
}
extension ConvertCategoryToCreatePhysicalExamination on Category {
CreatePhysicalExamination createPhysicalExaminationFromCategory() =>
CreatePhysicalExamination()
..isChecked = true
..physicalExaminationDescription = this.name
..physicalExaminationSystemID = this.id
..physicalExaminationCondition = this.selectedCondition
..remark = this.remarksController.text
..selected = false
..specialityID = this.specialityId
..patientID = this.paitientId
..pomrid = this.pomrId
..loginUserId = this.userID?.toString()
..isMandatory = false
..specialityDescription = this.specialityName
..isClinicPhysicalExamination = true;
}

@ -0,0 +1,24 @@
class GeneralSpeciality {
int? id;
bool? isActive;
String? name;
int? rowVersion;
bool isSelected = false;
GeneralSpeciality();
GeneralSpeciality.fromJson(Map<String, dynamic> json) {
id = json['id'];
isActive = json['isActive'];
name = json['name'];
rowVersion = json['rowVersion'];
}
Map<String, dynamic> toJson() {
return {
'id': id,
'isActive': isActive,
'name': name,
'rowVersion': rowVersion,
};
}
}

@ -0,0 +1,97 @@
class PatientPhysicalExamination {
int? patientPhysicalExaminationRevisionID;
int? patientPhysicalExaminationID;
int? patientID;
int? physicalExaminationSystemID;
String? physicalExaminationDescription;
int? physicalExaminationCondition;
String? remark;
int? assessmentId;
String? userType;
int? specialtyID;
String? specialityDescription;
String? loginUserId;
bool? isMandatory;
String? examinationType;
dynamic additionalParams; // Use dynamic for null or varied types
int? hospitalGroupID;
int? hospitalID;
int? dbCRUDOperation;
bool? isActive;
int? createdBy;
String? createdOn;
int? modifiedBy;
String? modifiedOn;
int? approvedBy;
String? approvedOn;
String? rowVersion;
String? pomrid;
// Default constructor
PatientPhysicalExamination();
// fromJson constructor
PatientPhysicalExamination.fromJson(Map<String, dynamic> json) {
patientPhysicalExaminationRevisionID =
json['patientPhysicalExaminationRevisionID'];
patientPhysicalExaminationID = json['patientPhysicalExaminationID'];
patientID = json['patientID'];
physicalExaminationSystemID = json['physicalExaminationSystemID'];
physicalExaminationDescription = json['physicalExaminationDescription'];
physicalExaminationCondition = json['physicalExaminationCondition'];
remark = json['remark'];
assessmentId = json['assessmentId'];
userType = json['userType'];
specialtyID = json['specialtyID'];
specialityDescription = json['specialityDescription'];
loginUserId = json['loginUserId'];
isMandatory = json['isMandatory'];
examinationType = json['examinationType'];
additionalParams = json['additionalParams'];
hospitalGroupID = json['hospitalGroupID'];
hospitalID = json['hospitalID'];
dbCRUDOperation = json['dbCRUDOperation'];
isActive = json['isActive'];
createdBy = json['createdBy'];
createdOn = json['createdOn'];
modifiedBy = json['modifiedBy'];
modifiedOn = json['modifiedOn'];
approvedBy = json['approvedBy'];
approvedOn = json['approvedOn'];
rowVersion = json['rowVersion'];
pomrid = json['pomrid'];
}
// toJson method
Map<String, dynamic> toJson() {
return {
'patientPhysicalExaminationRevisionID': patientPhysicalExaminationRevisionID,
'patientPhysicalExaminationID': patientPhysicalExaminationID,
'patientID': patientID,
'physicalExaminationSystemID': physicalExaminationSystemID,
'physicalExaminationDescription': physicalExaminationDescription,
'physicalExaminationCondition': physicalExaminationCondition,
'remark': remark,
'assessmentId': assessmentId,
'userType': userType,
'specialtyID': specialtyID,
'specialityDescription': specialityDescription,
'loginUserId': loginUserId,
'isMandatory': isMandatory,
'examinationType': examinationType,
'additionalParams': additionalParams,
'hospitalGroupID': hospitalGroupID,
'hospitalID': hospitalID,
'dbCRUDOperation': dbCRUDOperation,
'isActive': isActive,
'createdBy': createdBy,
'createdOn': createdOn,
'modifiedBy': modifiedBy,
'modifiedOn': modifiedOn,
'approvedBy': approvedBy,
'approvedOn': approvedOn,
'rowVersion': rowVersion,
'pomrid': pomrid,
};
}
}

@ -0,0 +1,55 @@
@deprecated
class PostPhysicalExaminationModel {
bool? isChecked;
bool? selected;
int? pomrid;
int? patientID;
bool? isClinicPhysicalExamination;
int? physicalExaminationSystemID;
String? physicalExaminationDescription;
int? specialityID;
dynamic selectedOptions;
bool? isMandatory;
String? specialityDescription;
int? physicalExaminationCondition;
String? loginUserId;
String? remark;
PostPhysicalExaminationModel();
PostPhysicalExaminationModel.fromJson(Map<String, dynamic> json) {
isChecked = json['isChecked'];
selected = json['selected'];
pomrid = json['pomrid'];
patientID = json['patientID'];
isClinicPhysicalExamination = json['isClinicPhysicalExamination'];
physicalExaminationSystemID = json['physicalExaminationSystemID'];
physicalExaminationDescription = json['physicalExaminationDescription'];
specialityID = json['specialityID'];
selectedOptions = json['selectedOptions'];
isMandatory = json['isMandatory'];
specialityDescription = json['specialityDescription'];
physicalExaminationCondition = json['physicalExaminationCondition'];
loginUserId = json['loginUserId'];
remark = json['remark'];
}
Map<String, dynamic> toJson() {
return {
'isChecked': isChecked,
'selected': selected,
'pomrid': pomrid,
'patientID': patientID,
'isClinicPhysicalExamination': isClinicPhysicalExamination,
'physicalExaminationSystemID': physicalExaminationSystemID,
'physicalExaminationDescription': physicalExaminationDescription,
'specialityID': specialityID,
'selectedOptions': selectedOptions,
'isMandatory': isMandatory,
'specialityDescription': specialityDescription,
'physicalExaminationCondition': physicalExaminationCondition,
'loginUserId': loginUserId,
'remark': remark,
};
}
}

@ -0,0 +1,35 @@
class SOAPClinic {
int? clinicGroupID;
String? clinicGroupName;
int? clinicID;
String? clinicNameArabic;
String? clinicNameEnglish;
SOAPClinic({
this.clinicGroupID,
this.clinicGroupName,
this.clinicID,
this.clinicNameArabic,
this.clinicNameEnglish,
});
factory SOAPClinic.fromJson(Map<String, dynamic> json) {
return SOAPClinic(
clinicGroupID: json['clinicGroupID'],
clinicGroupName: json['clinicGroupName'],
clinicID: json['clinicID'],
clinicNameArabic: json['clinicNameArabic'],
clinicNameEnglish: json['clinicNameEnglish'],
);
}
Map<String, dynamic> toJson() {
return {
'clinicGroupID': clinicGroupID,
'clinicGroupName': clinicGroupName,
'clinicID': clinicID,
'clinicNameArabic': clinicNameArabic,
'clinicNameEnglish': clinicNameEnglish,
};
}
}

@ -0,0 +1,11 @@
class PatientCondition{
String? code;
int? id;
String? name;
PatientCondition.fromJson(Map<dynamic, dynamic> json){
name = json['name'] ?? '';
id = json['id'] ?? -1;
code = json['code'] ?? '';
}
}

@ -0,0 +1,85 @@
class ProgressNote {
int? clinicGroupId;
int? clinicId;
int? createdById;
String? createdOn;
int? employeeId;
int? hospitalGroupId;
int? hospitalId;
String? loginUserId;
String? manualDate;
String? modifiedOn;
String? patientCondition;
String? patientConditionName;
int? patientId;
int? patientPomrId;
String? progressNote;
int? progressNoteId;
String? progressNotesTypes;
String? progressNotesTypesName;
String? speciality;
String? specialityName;
int? subCategoryId;
String? userFullName;
int? userId;
String? userType;
ProgressNote();
ProgressNote.fromJson(Map<String, dynamic> json) {
clinicGroupId = json['clinicGroupId'];
clinicId = json['clinicId'];
createdById = json['createdById'];
createdOn = json['createdOn'];
employeeId = json['employeeId'];
hospitalGroupId = json['hospitalGroupId'];
hospitalId = json['hospitalId'];
loginUserId = json['loginUserId'];
manualDate = json['manualDate'];
modifiedOn = json['modifiedOn'];
patientCondition = json['patientCondition'];
patientConditionName = json['patientConditionName'];
patientId = json['patientId'];
patientPomrId = json['patientPomrId'];
progressNote = json['progressNote'];
progressNoteId = json['progressNoteId'];
progressNotesTypes = json['progressNotesTypes'];
progressNotesTypesName = json['progressNotesTypesName'];
speciality = json['speciality'];
specialityName = json['specialityName'];
subCategoryId = json['subCategoryId'];
userFullName = json['userFullName'];
userId = json['userId'];
userType = json['userType'];
}
// toJson method
Map<String, dynamic> toJson() {
return {
'clinicGroupId': clinicGroupId,
'clinicId': clinicId,
'createdById': createdById,
'createdOn': createdOn,
'employeeId': employeeId,
'hospitalGroupId': hospitalGroupId,
'hospitalId': hospitalId,
'loginUserId': loginUserId,
'manualDate': manualDate,
'modifiedOn': modifiedOn,
'patientCondition': patientCondition,
'patientConditionName': patientConditionName,
'patientId': patientId,
'patientPomrId': patientPomrId,
'progressNote': progressNote,
'progressNoteId': progressNoteId,
'progressNotesTypes': progressNotesTypes,
'progressNotesTypesName': progressNotesTypesName,
'speciality': speciality,
'specialityName': specialityName,
'subCategoryId': subCategoryId,
'userFullName': userFullName,
'userId': userId,
'userType': userType,
};
}
}

@ -79,7 +79,7 @@ class PatiantInformtion {
int? status;
int? vcId;
String? voipToken;
String? pomrId;
PatiantInformtion(
{this.patientDetails,
this.projectId,
@ -155,7 +155,9 @@ class PatiantInformtion {
this.vcId,
this.voipToken,
this.admissionDateWithDateTimeForm,
this.appointmentDateWithDateTimeForm});
this.appointmentDateWithDateTimeForm,
this.pomrId
});
PatiantInformtion.fromJson(Map<String, dynamic> json) {
{
@ -262,6 +264,7 @@ class PatiantInformtion {
consultationNotes = json['ConsultationNotes'];
patientStatus = json['PatientStatus'];
voipToken = json['VoipToken'];
pomrId = json['pomrId'];
admissionDateWithDateTimeForm = json["AdmissionDate"] != null
? AppDateUtils.convertStringToDate(json["AdmissionDate"])
: json["admissionDate"] != null
@ -340,7 +343,7 @@ class PatiantInformtion {
data['ProjectID'] = this.projectId;
data['VC_ID'] = this.vcId;
data['VoipToken'] = this.voipToken;
data['pomrId'] = this.pomrId;
data["DateofBirth"] = this.dateofBirth;
data["dob"] = this.dateofBirth;
data['DateOfBirth'] = this.dateofBirth;

@ -214,4 +214,6 @@ class LookupService extends BaseService {
break;
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -70,7 +70,8 @@ class MyApp extends StatelessWidget {
//buttonColor: HexColor('#D02127'),
fontFamily: 'Poppins',
dividerColor: Colors.grey[350],
backgroundColor: Color.fromRGBO(255, 255, 255, 1),
// backgroundColor: Color.fromRGBO(255, 255, 255, 1),
useMaterial3: false),
navigatorKey: locator<NavigationService>().navigatorKey,
navigatorObservers: [

@ -26,6 +26,8 @@ import 'package:doctor_app_flutter/screens/patients/profile/prescriptions/in_pat
import 'package:doctor_app_flutter/screens/patients/profile/radiology/radiology_home_page.dart';
import 'package:doctor_app_flutter/screens/patients/profile/referral/refer_details/refer-patient-screen-in-patient.dart';
import 'package:doctor_app_flutter/screens/patients/profile/soap_update/update_soap_index.dart';
import 'package:doctor_app_flutter/screens/patients/profile/soap_update_vida_plus/subjective/chief_complaint/AddChiefComplaints.dart';
import 'package:doctor_app_flutter/screens/patients/profile/soap_update_vida_plus/update_soap_index_vida_plus.dart';
import 'package:doctor_app_flutter/screens/patients/profile/vte_assessment/vte_assessment_screen.dart';
import 'package:doctor_app_flutter/screens/prescription/new_prescriptions_page.dart';
import 'package:doctor_app_flutter/screens/prescription/old_prescriptions_page.dart';
@ -59,6 +61,7 @@ const String PATIENT_INSURANCE_APPROVALS_NEW = 'patients/patient_insurance_appro
const String VITAL_SIGN_DETAILS = 'patients/vital-sign-details';
const String CREATE_EPISODE = 'patients/create-episode';
const String UPDATE_EPISODE = 'patients/update-episode';
const String UPDATE_EPISODE_VIDA_PLUS = 'patients/update-episode-vida-plus';
const String PATIENT_ADMISSION_REQUEST = 'patients/admission-request';
const String PATIENT_ADMISSION_REQUEST_2 = 'patients/admission-request-second';
const String PATIENT_ADMISSION_REQUEST_3 = 'patients/admission-request-third';
@ -120,6 +123,9 @@ var routes = {
UPDATE_EPISODE: (_) => UpdateSoapIndex(
isUpdate: true,
),
UPDATE_EPISODE_VIDA_PLUS: (_) => UpdateSoapIndexVidaPlus(
isUpdate: true,
),
IN_PATIENT_PRESCRIPTIONS_DETAILS: (_) => InpatientPrescriptionDetailsScreen(),
ADD_SICKLEAVE: (_) => PatientSickLeaveScreen(),
ORDER_PRESCRIPTION_OLD: (_) => OldPrescriptionsPage(),

@ -430,6 +430,7 @@ class _VerificationMethodsScreenState extends State<VerificationMethodsScreen> {
type,
authenticationViewModel.loggedUser != null ? authenticationViewModel.loggedUser!.mobileNumber : authenticationViewModel.user!.mobile,
(value) {
showDialog(
context: context,
builder: (BuildContext context) {

@ -337,7 +337,7 @@ class _DoctorReplayChatState extends State<DoctorReplayChat> {
child: Image.asset(
widget
.previousModel
.doctorProfile
.doctorProfile
!.gender ==
0
? 'assets/images/male_avatar.png'

@ -52,7 +52,9 @@ class _AddPatientSickLeaveScreenState extends State<AddPatientSickLeaveScreen> {
showDatePicker(
context: context,
initialDate: currentDate ?? DateTime.now(),
firstDate: DateTime(DateTime.now().year - 1),
firstDate: AppDateUtils.convertStringToDate(
widget!.patient!.arrivedOn!,
),
lastDate: DateTime(DateTime.now().year + 1),
).then((pickedDate) {
if (pickedDate == null) {

@ -9,6 +9,7 @@ class PatientSearchHeader extends StatelessWidget implements PreferredSizeWidget
@override
Widget build(BuildContext context) {
return Container(
height: 120,
padding: EdgeInsets.only(left: 0, right: 5, bottom: 5, top: 5),
decoration: BoxDecoration(
color: Colors.white,

@ -290,8 +290,22 @@ class _PatientProfileScreenState extends State<PatientProfileScreen> with Single
eventCategory: "Patient Profile ",
eventAction: "Update Episode",
);
//todo change the navigator to vida plus screen
if ((isFromLiveCare && patient.appointmentNo != null && patient.appointmentNo != 0) || patient.patientStatusType == 43 || isInpatient) {
Navigator.of(context).pushNamed(UPDATE_EPISODE, arguments: {'patient': patient});
if(Utils.isVidaPlusProject(
projectViewModel,
patient.projectId!,
)){
Navigator.of(context).pushNamed(
UPDATE_EPISODE_VIDA_PLUS, arguments: {
'patient': patient
});
}else {
Navigator.of(context).pushNamed(
UPDATE_EPISODE, arguments: {
'patient': patient
});
}
}
}),
],
@ -407,7 +421,18 @@ class _PatientProfileScreenState extends State<PatientProfileScreen> with Single
Utils.showErrorToast(model.error);
} else {
patient.episodeNo = model.episodeID;
Navigator.of(context).pushNamed(CREATE_EPISODE, arguments: {'patient': patient});
if(Utils.isVidaPlusProject(
Provider.of<ProjectViewModel>(context),
patient.projectId!,
)){
Navigator.of(context).pushNamed(
UPDATE_EPISODE_VIDA_PLUS, arguments: {
'patient': patient
});
}else {
Navigator.of(context).pushNamed(
CREATE_EPISODE, arguments: {'patient': patient});
}
}
}
}

@ -6,8 +6,9 @@ class BottomSheetTitle extends StatelessWidget implements PreferredSizeWidget {
BottomSheetTitle({
Key? key,
this.title = '',
this.isClose =true
}) : super(key: key);
bool isClose;
final String title;
double headerHeight = SizeConfig.heightMultiplier! * 15;
@ -41,7 +42,7 @@ class BottomSheetTitle extends StatelessWidget implements PreferredSizeWidget {
onTap: () {
Navigator.pop(context);
},
child: Icon(DoctorApp.close_1, size: SizeConfig.getTextMultiplierBasedOnWidth() * 5, color: Color(0xFF2B353E)))
child: isClose ? Icon(DoctorApp.close_1, size: SizeConfig.getTextMultiplierBasedOnWidth() * 5, color: Color(0xFF2B353E)) :SizedBox())
],
),
],

@ -209,52 +209,49 @@ class StepsWidget extends StatelessWidget {
Positioned(
top: circleTop,
right: 0,
child: InkWell(
onTap: () => index >= 3 ? changeCurrentTab!(4) : null,
child: Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Container(
width: circleHeight,
height: circleHeight,
decoration: BoxDecoration(
border: index == 3
? Border.all(color: Color(0xFFCC9B14), width: 2)
: index > 3
? null
: Border.all(color: Color(0xFFCCCCCC), width: 0.75),
shape: BoxShape.circle,
color: index == 3
? Color(0xFFCC9B14)
: index > 3
? AppGlobal.appGreenColor
: Color(0xFFCCCCCC),
),
child: Center(
child: Icon(
FontAwesomeIcons.check,
size: 20,
color: Colors.white,
)),
),
SizedBox(
height: 5,
),
Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
StepDetailsWidget(
stepLabel: "Plan",
marginLeft: 30,
),
StatusLabel(
selectedStepId: index,
stepId: 3,
),
],
child: Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Container(
width: circleHeight,
height: circleHeight,
decoration: BoxDecoration(
border: index == 3
? Border.all(color: Color(0xFFCC9B14), width: 2)
: index > 3
? null
: Border.all(color: Color(0xFFCCCCCC), width: 0.75),
shape: BoxShape.circle,
color: index == 3
? Color(0xFFCC9B14)
: index > 3
? AppGlobal.appGreenColor
: Color(0xFFCCCCCC),
),
],
),
child: Center(
child: Icon(
FontAwesomeIcons.check,
size: 20,
color: Colors.white,
)),
),
SizedBox(
height: 5,
),
Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
StepDetailsWidget(
stepLabel: "Plan",
marginLeft: 30,
),
StatusLabel(
selectedStepId: index,
stepId: 3,
),
],
),
],
),
),
],

@ -206,9 +206,7 @@ class _UpdateSubjectivePageState extends State<UpdateSubjectivePage> implements
},
child: Column(
children: [
UpdateAllergiesWidget(
myAllergiesList: myAllergiesList,
),
UpdateAllergiesWidget(),
SizedBox(
height: 30,
),

@ -0,0 +1,104 @@
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/enum/view_state.dart';
import 'package:doctor_app_flutter/core/model/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/core/viewModel/SOAP_view_model.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/screens/patients/patient_search/patient_search_header.dart';
import 'package:doctor_app_flutter/screens/patients/profile/soap_update_vida_plus/assessment/widget/enter_diagnosis.dart';
import 'package:doctor_app_flutter/screens/patients/profile/soap_update_vida_plus/assessment/widget/favotite_diagnosis.dart';
import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/buttons/app_buttons_widget.dart';
import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';
class AddDiagnosis extends StatefulWidget {
final PatiantInformtion patientInfo;
const AddDiagnosis({super.key, required this.patientInfo});
@override
State<AddDiagnosis> createState() => _AddDiagnosisState();
}
class _AddDiagnosisState extends State<AddDiagnosis>
with SingleTickerProviderStateMixin {
TabController? _tabController;
bool isLoading = true;
@override
void initState() {
_tabController = new TabController(length: 2, vsync: this);
super.initState();
}
@override
Widget build(BuildContext context) {
return BaseView<SOAPViewModel>(
onModelReady: (model) {
WidgetsBinding.instance.addPostFrameCallback((_) {
model.getConditionAndType(widget.patientInfo);
model.favoriteDiagnosis(widget.patientInfo);
setState(() {
isLoading = false;
});
});
},
builder: (_, model, w) => AppScaffold(
isLoading: model.state == ViewState.BusyLocal ,
isShowAppBar: true,
appBar: PatientSearchHeader(
title: TranslationBase.of(context).addDiagnosis),
backgroundColor: Colors.white,
body: Column(
children: [
SizedBox(
height: 56,
child: TabBar(
indicatorColor: Color(0xFFD02127),
unselectedLabelColor: Color(0xFF6D6D6D),
labelColor: Color(0xFF2B353E),
controller: _tabController,
tabs: [
Tab(
child: Text(
TranslationBase.of(context).mappedDiagnosis,
style:TextStyle(
color: Color(0xFF6D6D6D),
fontSize: 14,
fontWeight: FontWeight.w600,
letterSpacing: -0.56,
)
),
),
Tab(
child: Text(
TranslationBase.of(context).favoriteDiagnosis,
style: TextStyle(color: Color(0xFF6D6D6D),
fontSize: 14,
fontWeight: FontWeight.w600,
letterSpacing: -0.56,)
),
),
],
),
),
Expanded(
child: TabBarView(
controller: _tabController,
children: [
EnterDiagnosis(
patientInfo: widget.patientInfo,
),
FavoriteDiagnosis(
patientInfo: widget.patientInfo,
),
],
),
),
],
),
));
}
}

@ -0,0 +1,228 @@
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/enum/master_lookup_key.dart';
import 'package:doctor_app_flutter/core/enum/view_state.dart';
import 'package:doctor_app_flutter/core/model/SOAP/master_key_model.dart';
import 'package:doctor_app_flutter/core/model/SOAP/selected_items/my_selected_assement.dart';
import 'package:doctor_app_flutter/core/model/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/core/viewModel/SOAP_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/screens/patients/profile/soap_update/assessment/assessment_call_back.dart';
import 'package:doctor_app_flutter/screens/patients/profile/soap_update/shared_soap_widgets/SOAP_open_items.dart';
import 'package:doctor_app_flutter/screens/patients/profile/soap_update/shared_soap_widgets/SOAP_step_header.dart';
import 'package:doctor_app_flutter/screens/patients/profile/soap_update/shared_soap_widgets/expandable_SOAP_widget.dart';
import 'package:doctor_app_flutter/screens/patients/profile/soap_update/shared_soap_widgets/remark_text.dart';
import 'package:doctor_app_flutter/screens/patients/profile/soap_update/soap_utils.dart';
import 'package:doctor_app_flutter/utils/date-utils.dart';
import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart';
import 'package:doctor_app_flutter/utils/utils.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../../soap_update/assessment/add_assessment_details.dart';
import 'widget/current_diagnosis.dart';
import 'widget/previous_diagnosis.dart';
// ignore: must_be_immutable
class UpdateAssessmentPage extends StatefulWidget {
final Function changePageViewIndex;
final PatiantInformtion patientInfo;
final Function changeLoadingState;
final int currentIndex;
UpdateAssessmentPage(
{Key? key,
required this.changePageViewIndex,
required this.patientInfo,
required this.changeLoadingState,
required this.currentIndex});
@override
_UpdateAssessmentPageState createState() => _UpdateAssessmentPageState();
}
class _UpdateAssessmentPageState extends State<UpdateAssessmentPage>
with SingleTickerProviderStateMixin
implements AssessmentCallBack {
bool isAssessmentExpand = false;
List<MySelectedAssessment> mySelectedAssessmentList = [];
bool isPrescriptionOrder = false;
TabController? _tabController;
@override
void initState() {
_tabController = new TabController(length: 2, vsync: this);
super.initState();
}
@override
Widget build(BuildContext context) {
ProjectViewModel projectViewModel = Provider.of(context);
return BaseView<SOAPViewModel>(
onModelReady: (model) async {
model.setAssessmentCallBack(this);
mySelectedAssessmentList.clear();
WidgetsBinding.instance.addPostFrameCallback((_) async {
widget.changeLoadingState(true);
model.getConditionAndType(widget.patientInfo);
model.getPreviousPatientDetails(widget.patientInfo);
model.getCurrentDiagnosisList(widget.patientInfo);
widget.changeLoadingState(false);
//todo handle get diagnosis list
});
},
builder: (_, model, w) => AppScaffold(
isShowAppBar: false,
isLoading: model.state == ViewState.BusyLocal,
backgroundColor: Theme.of(context).scaffoldBackgroundColor,
body: SingleChildScrollView(
physics: ScrollPhysics(),
child: Container(
color: Theme.of(context).scaffoldBackgroundColor,
child: Center(
child: FractionallySizedBox(
widthFactor: 0.9,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
SOAPStepHeader(
currentIndex: widget.currentIndex,
changePageViewIndex: widget.changePageViewIndex,
patientInfo: widget.patientInfo,
),
ExpandableSOAPWidget(
headerTitle: TranslationBase.of(context).assessment,
onTap: () {
setState(() {
isAssessmentExpand = !isAssessmentExpand;
});
},
child: Column(children: [
SizedBox(
height: 10,
),
SizedBox(
height: 64,
child: TabBar(
indicatorColor: Color(0xFFD02127),
unselectedLabelColor: Color(0xFF6D6D6D),
labelColor: Color(0xFF2B353E),
tabs: [
Tab(
child: Text(
TranslationBase.of(context)
.currentDiagnosis,
style: TextStyle(
color: Color(0xFF6D6D6D),
fontSize: 14,
fontWeight: FontWeight.w600,
letterSpacing: -0.56,)
),
),
Tab(
child: Text(
TranslationBase.of(context)
.previousDiagnosis,
style: TextStyle(
color: Color(0xFF6D6D6D),
fontSize: 14,
fontWeight: FontWeight.w600,
letterSpacing: -0.56,)
)
)
],
controller: _tabController,
),
),
SizedBox(
height: 300,
child: TabBarView(
controller: _tabController,
children: [
CurrentDiagnosis(
patientInfo: widget.patientInfo,
model: model,
currentDiagnosisItems: model.diagnosisList,
),
PreviousDiagnosis(
diagnosisItems: model.patientPreviousDiagnosis,
patientInfo: widget.patientInfo,
)
],
),
)
]),
isExpanded: isAssessmentExpand,
),
SizedBox(
height: 130,
),
],
),
),
),
),
),
),
);
}
openAssessmentDialog(BuildContext context,
{MySelectedAssessment? assessment,
bool isUpdate = false,
required SOAPViewModel model}) {
if (assessment == null) {
assessment = SoapUtils.generateMySelectedAssessment(
remark: '', appointmentNo: widget.patientInfo.appointmentNo);
}
showModalBottomSheet(
backgroundColor: Colors.white,
isScrollControlled: true,
context: context,
builder: (context) {
return AddAssessmentDetails(
mySelectedAssessment: assessment!,
patientInfo: widget.patientInfo,
isUpdate: isUpdate,
mySelectedAssessmentList: mySelectedAssessmentList,
addSelectedAssessment: (MySelectedAssessment mySelectedAssessment,
bool isUpdate) async {
setState(() {
if (!isUpdate)
mySelectedAssessmentList.add(mySelectedAssessment);
});
});
});
}
@override
nextFunction(model) {
if (mySelectedAssessmentList.isEmpty) {
Utils.showErrorToast(TranslationBase.of(context).assessmentErrorMsg);
} else if (!checkPrimaryDiagnosis()) {
Utils.showErrorToast(TranslationBase.of(context).onePrimaryDiagnosis);
} else {
widget.changeLoadingState(true);
widget.changePageViewIndex(3);
}
}
bool checkPrimaryDiagnosis() {
ProjectViewModel projectViewModel =
Provider.of<ProjectViewModel>(context, listen: false);
bool isVidaPlus = Utils.isVidaPlusProject(
projectViewModel, widget.patientInfo.projectId!);
List<MySelectedAssessment> type = mySelectedAssessmentList
.where((element) =>
(element.selectedDiagnosisType!.id == 2 && isVidaPlus == false) ||
(element.selectedDiagnosisType!.code == '3' && isVidaPlus == true))
.toList();
return type.isEmpty ? false : true;
}
}

@ -0,0 +1,94 @@
import 'package:doctor_app_flutter/core/model/SOAP/assessment/audit_diagnosis.dart';
import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
class AuditItem extends StatelessWidget {
final AuditDiagnosis auditDiagnosis;
const AuditItem({super.key, required this.auditDiagnosis});
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
AppText(
auditDiagnosis.createdBy ?? '',
fontWeight: FontWeight.w600,
fontSize: 12,
color: Color(0xFF2B353E),
),
AppText(
getDate(auditDiagnosis.createdOn?.isNotEmpty== true ? auditDiagnosis.createdOn ?? '' : auditDiagnosis.modifiedOn??''),
fontWeight: FontWeight.w600,
fontSize: 10,
color: Color(0xFF2B353E),
),
],
),
SizedBox(height: 4,),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
AppText(
"${TranslationBase.of(context).diagnosis}: ${auditDiagnosis.diagnosisType}",
fontWeight: FontWeight.w600,
fontSize: 12,
color: Color(0xFF2B353E),
),
AppText(
getTime(auditDiagnosis.createdOn?.isNotEmpty== true ? auditDiagnosis.createdOn ?? '' : auditDiagnosis.modifiedOn??''),
fontWeight: FontWeight.w600,
fontSize: 10,
color: Color(0xFF2B353E),
),
],
),
SizedBox(
height: 4,
),
Visibility(
visible: auditDiagnosis.deletedRemarks?.isEmpty == true,
child: AppText(
//todo handle the item after the discussion from the vidapro team this is temporary
"${TranslationBase.of(context).remarks}: ${auditDiagnosis.remarks?.isNotEmpty == true? auditDiagnosis.remarks : TranslationBase.of(context).noRemarks}",
fontWeight: FontWeight.w600,
fontSize: 12,
color: Color(0xFF2B353E),
),
),
Visibility(
visible: auditDiagnosis.deletedRemarks?.isNotEmpty == true,
child: AppText(
//todo handle the item after the discussion from the vidapro team this is temporary
"${TranslationBase.of(context).deletedRemarks}${auditDiagnosis.deletedRemarks}",
fontWeight: FontWeight.w600,
fontSize: 12,
color: Color(0xFF2B353E),
),
),
],
),
);
}
String getDate(String dateTime) {
if (dateTime.isEmpty) return '';
DateTime now = DateTime.now();
return DateFormat('dd MMM yyyy').format(now);
}
String getTime(String dateTime) {
if (dateTime.isEmpty) return '';
DateTime now = DateTime.now();
return DateFormat('hh:mm a').format(now);
}
}

@ -0,0 +1,62 @@
import 'package:doctor_app_flutter/core/model/SOAP/assessment/audit_diagnosis.dart';
import 'package:doctor_app_flutter/screens/patients/profile/soap_update_vida_plus/assessment/widget/audit_item.dart';
import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:flutter/material.dart';
class AuditListBottomSheet extends StatelessWidget {
final List<AuditDiagnosis> auditList;
const AuditListBottomSheet({super.key, required this.auditList});
@override
Widget build(BuildContext context) {
return SizedBox(
height: (auditList.length>1)?MediaQuery.sizeOf(context).height*.41:MediaQuery.sizeOf(context).height*.28,
child: Material(
color: Color(0xFFF7F7F7),
shape: RoundedRectangleBorder(borderRadius: BorderRadius.only(topLeft: Radius.circular(20), topRight: Radius.circular(20))),
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 20.0, vertical: 32),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AppText(
TranslationBase.of(context).audit,
fontWeight: FontWeight.w700,
fontSize: 24,
color: Color(0xFF2B353E),
),
SizedBox(
height: 16,
),
SizedBox(
height: (auditList.length>1)?MediaQuery.sizeOf(context).height*.25:MediaQuery.sizeOf(context).height*.12,
child: Material(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10)),
color: Colors.white,
child: Column(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Expanded(
child: ListView.separated(
itemCount: auditList.length,
itemBuilder: (context, index) => AuditItem(
auditDiagnosis: auditList[index],
),
separatorBuilder: (_, __) => Divider(),
))
],
),
),
)
],
),
),
),
);
}
}

@ -0,0 +1,324 @@
import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/core/model/SOAP/assessment/audit_diagnosis.dart';
import 'package:doctor_app_flutter/core/model/SOAP/assessment/patient_previous_diagnosis.dart';
import 'package:doctor_app_flutter/core/model/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/core/viewModel/SOAP_view_model.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/screens/patients/profile/soap_update_vida_plus/assessment/add_diagnosis.dart';
import 'package:doctor_app_flutter/screens/patients/profile/soap_update_vida_plus/assessment/widget/audit_list_bottom_sheet.dart';
import 'package:doctor_app_flutter/screens/patients/profile/soap_update_vida_plus/assessment/widget/edit_diagnosis.dart';
import 'package:doctor_app_flutter/screens/patients/profile/soap_update_vida_plus/assessment/widget/empty_diagnosis.dart';
import 'package:doctor_app_flutter/screens/patients/profile/soap_update_vida_plus/subjective/chief_complaint/widgets/add_soap_item.dart';
import 'package:doctor_app_flutter/screens/patients/profile/soap_update_vida_plus/widgets/SoapDetailItem.dart';
import 'package:doctor_app_flutter/utils/dr_app_toast_msg.dart';
import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/buttons/app_buttons_widget.dart';
import 'package:doctor_app_flutter/widgets/transitions/fade_page.dart';
import 'package:flutter/material.dart';
import '../../../../../../widgets/shared/text_fields/app-textfield-custom.dart';
class CurrentDiagnosis extends StatefulWidget {
final PatiantInformtion patientInfo;
final List<PatientPreviousDiagnosis> currentDiagnosisItems;
final SOAPViewModel model;
const CurrentDiagnosis(
{super.key,
required this.currentDiagnosisItems,
required this.patientInfo,
required this.model});
@override
State<CurrentDiagnosis> createState() => _CurrentDiagnosisState();
}
class _CurrentDiagnosisState extends State<CurrentDiagnosis> {
TextEditingController deleteController = TextEditingController();
@override
Widget build(BuildContext context) {
return BaseView<SOAPViewModel>(
onModelReady: (model) async {},
builder: (_, model, w) {
if (model.showAudit) {
WidgetsBinding.instance.addPostFrameCallback((_) {
showAuditBottomSheet(context, model.auditDiagnosislist,
model.toggleShowBottomSheetValue);
model.toggleShowBottomSheetValue(false);
});
}
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12),
child: Column(
mainAxisSize: MainAxisSize.max,
children: [
SizedBox(
height: 10,
),
AddSoapItem(
title: TranslationBase.of(context).addNewDiagnosis,
onAddSoapItemClicked: () async {
bool result = await Navigator.push(
context,
FadePage(
page: AddDiagnosis(
patientInfo: widget.patientInfo,
)));
if (result) {
model.getCurrentDiagnosisList(widget.patientInfo);
}
}),
SizedBox(
height: 16,
),
Divider(),
SizedBox(
height: 16,
),
if (widget.currentDiagnosisItems.isEmpty) ...{
Center(
child: EmptyDiagnosis(),
),
} else ...{
Flexible(
child: ListView.separated(
itemBuilder: (_, index) {
return SoapDetailItem(
title: widget.currentDiagnosisItems[index]
.selectedDisease ??
'',
status:
widget.currentDiagnosisItems[index].status ??
'',
condition: model.getConditionValue(widget
.currentDiagnosisItems[index]
.condition ??
'') ??
'',
type: model.getDiagnosisTypeValue(widget
.currentDiagnosisItems[index]
.diagnosisType ??
'') ??
'',
remarks:
widget.currentDiagnosisItems[index].remarks ??
'',
onSoapDetailActionClicked: (action) async {
switch (action) {
case SoapDetailItemActions.AUDIT:
model.getAuditOfDiagnosis(
widget.patientInfo,
widget.currentDiagnosisItems[index]
.patientProblemRevisionId
?.toString() ??
'');
break;
case SoapDetailItemActions.EDIT:
if (widget.currentDiagnosisItems[index]
.status ==
"Deleted") {
DrAppToastMsg.showErrorToast(
TranslationBase.of(context)
.diagnosisAlreadyDeleted);
return;
}
if (widget.currentDiagnosisItems[index]
.resolved ==
true) {
DrAppToastMsg.showErrorToast(
TranslationBase.of(context)
.diagnosisAlreadyResolved);
return;
}
bool result = await Navigator.push(
context,
FadePage(
page: EditDiagnosis(
patientInfo: widget.patientInfo,
diagnosis: widget
.currentDiagnosisItems[index],
)));
if (result) {
model.getCurrentDiagnosisList(
widget.patientInfo);
}
break;
case SoapDetailItemActions.RESOLVE:
if (widget.currentDiagnosisItems[index]
.status ==
"Deleted") {
DrAppToastMsg.showErrorToast(
TranslationBase.of(context)
.diagnosisAlreadyDeleted);
return;
}
if (widget.currentDiagnosisItems[index]
.resolved ==
true) {
DrAppToastMsg.showErrorToast(
TranslationBase.of(context)
.diagnosisAlreadyResolved);
return;
}
bool result = await model.resolveDiagnosis(
widget.currentDiagnosisItems[index],
widget.patientInfo);
if (result) {
model.getCurrentDiagnosisList(
widget.patientInfo);
}
break;
case SoapDetailItemActions.REMOVE:
if (widget.currentDiagnosisItems[index]
.status ==
"Deleted") {
DrAppToastMsg.showErrorToast(
TranslationBase.of(context)
.diagnosisAlreadyDeleted);
return;
}
if (widget.currentDiagnosisItems[index]
.resolved ==
true) {
DrAppToastMsg.showErrorToast(
TranslationBase.of(context)
.diagnosisAlreadyResolved);
return;
}
showConfirmationDialog(context,
"${TranslationBase.of(context).delete} ${TranslationBase.of(context).diagnosis}",
(remarks) {
widget.model.removeDiagnosis(
widget.patientInfo,
widget.currentDiagnosisItems[index],
remarks);
});
case SoapDetailItemActions.CHANGE_STATUS:
// TODO: Handle this case.
default:
}
},
);
},
separatorBuilder: (_, index) => Divider(),
itemCount: widget.currentDiagnosisItems.length))
}
],
),
);
});
}
showConfirmationDialog(
BuildContext context, String message, Function(String) okFunction) {
return showDialog(
context: context,
barrierDismissible: true, // user must tap button!
builder: (_) {
return Container(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
AlertDialog(
title: null,
content: Container(
child: Column(
children: [
AppText(message),
SizedBox(
height: 8,
),
AppText(
TranslationBase.of(context)
.areYouSureYouWantToDeleteDiagnosis,
textAlign: TextAlign.center,
),
SizedBox(
height: 8,
),
AppTextFieldCustom(
hintText: TranslationBase.of(context).remarks,
controller: deleteController,
maxLines: 25,
minLines: 3,
hasBorder: true,
onChanged: (value) {},
inputType: TextInputType.multiline,
onClick: () {},
onFieldSubmitted: () {},
),
],
),
),
actions: [
Row(
children: [
Expanded(
child: AppButton(
onPressed: () {
Navigator.of(context).pop();
},
title: TranslationBase.of(context).cancel,
fontColor: Colors.black,
color: Color(0xffEAEAEA),
),
),
SizedBox(
width: 8,
),
Expanded(
child: AppButton(
onPressed: () {
if (deleteController.text.isEmpty) {
DrAppToastMsg.showErrorToast(
TranslationBase.of(context)
.remarksCanNotBeEmpty);
return;
;
}
okFunction(deleteController.text);
Navigator.of(context).pop();
},
title: TranslationBase.of(context).delete,
fontColor: Colors.white,
color: Colors.red[600],
),
),
],
),
],
),
],
),
);
}).then((value) {
deleteController.clear();
});
}
void showAuditBottomSheet(
BuildContext context,
List<AuditDiagnosis> diagnosis,
void Function(bool status) toggleShowBottomSheetValue,
) {
showModalBottomSheet(
isDismissible: true,
context: context,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(20), topRight: Radius.circular(20))),
builder: (_) {
return AuditListBottomSheet(
auditList: diagnosis,
);
},
).then((value) => toggleShowBottomSheetValue(false));
}
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save