|
|
|
@ -47,7 +47,13 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
|
|
|
|
TriageDataDetails? triageDataDetails;
|
|
|
|
TriageDataDetails? triageDataDetails;
|
|
|
|
|
|
|
|
|
|
|
|
// Triage state
|
|
|
|
// Triage state
|
|
|
|
int? _selectedTriageChoiceIndex;
|
|
|
|
int?
|
|
|
|
|
|
|
|
_selectedTriageChoiceIndex; // Deprecated - keeping for backward compatibility
|
|
|
|
|
|
|
|
final Map<String, int> _selectedTriageChoicesByItemId =
|
|
|
|
|
|
|
|
{}; // Map of itemId -> choiceIndex for multi-item questions
|
|
|
|
|
|
|
|
final List<Map<String, String>> _triageEvidenceList =
|
|
|
|
|
|
|
|
[]; // Store triage evidence with proper format
|
|
|
|
|
|
|
|
int _triageQuestionCount = 0; // Track number of triage questions answered
|
|
|
|
|
|
|
|
|
|
|
|
// Selected risk factors tracking
|
|
|
|
// Selected risk factors tracking
|
|
|
|
final Set<String> _selectedRiskFactorIds = {};
|
|
|
|
final Set<String> _selectedRiskFactorIds = {};
|
|
|
|
@ -60,7 +66,8 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
|
|
|
|
|
|
|
|
|
|
|
|
// User Info Flow State
|
|
|
|
// User Info Flow State
|
|
|
|
int _userInfoCurrentPage = 0;
|
|
|
|
int _userInfoCurrentPage = 0;
|
|
|
|
bool _isSinglePageEditMode = false; // Track if editing single page or full flow
|
|
|
|
bool _isSinglePageEditMode =
|
|
|
|
|
|
|
|
false; // Track if editing single page or full flow
|
|
|
|
String? _selectedGender;
|
|
|
|
String? _selectedGender;
|
|
|
|
DateTime? _dateOfBirth;
|
|
|
|
DateTime? _dateOfBirth;
|
|
|
|
int? _selectedAge;
|
|
|
|
int? _selectedAge;
|
|
|
|
@ -100,14 +107,17 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
|
|
|
|
|
|
|
|
|
|
|
|
String? get tooltipOrganId => _tooltipOrganId;
|
|
|
|
String? get tooltipOrganId => _tooltipOrganId;
|
|
|
|
|
|
|
|
|
|
|
|
String get currentSessionAuthToken => symptomsUserDetailsResponseModel?.tokenDetails?.authToken ?? "";
|
|
|
|
String get currentSessionAuthToken =>
|
|
|
|
|
|
|
|
symptomsUserDetailsResponseModel?.tokenDetails?.authToken ?? "";
|
|
|
|
|
|
|
|
|
|
|
|
String get currentSessionId => symptomsUserDetailsResponseModel?.sessionId ?? "";
|
|
|
|
String get currentSessionId =>
|
|
|
|
|
|
|
|
symptomsUserDetailsResponseModel?.sessionId ?? "";
|
|
|
|
|
|
|
|
|
|
|
|
// Triage-related getters
|
|
|
|
// Triage-related getters
|
|
|
|
bool get shouldStopTriage => triageDataDetails?.shouldStop ?? false;
|
|
|
|
bool get shouldStopTriage => triageDataDetails?.shouldStop ?? false;
|
|
|
|
|
|
|
|
|
|
|
|
bool get hasEmergencyEvidence => triageDataDetails?.hasEmergencyEvidence ?? false;
|
|
|
|
bool get hasEmergencyEvidence =>
|
|
|
|
|
|
|
|
triageDataDetails?.hasEmergencyEvidence ?? false;
|
|
|
|
|
|
|
|
|
|
|
|
String? get currentInterviewToken => triageDataDetails?.interviewToken;
|
|
|
|
String? get currentInterviewToken => triageDataDetails?.interviewToken;
|
|
|
|
|
|
|
|
|
|
|
|
@ -117,8 +127,34 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
|
|
|
|
|
|
|
|
|
|
|
|
int? get selectedTriageChoiceIndex => _selectedTriageChoiceIndex;
|
|
|
|
int? get selectedTriageChoiceIndex => _selectedTriageChoiceIndex;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// Get the number of triage questions answered
|
|
|
|
|
|
|
|
int get triageQuestionCount => _triageQuestionCount;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// Get choice index for a specific item
|
|
|
|
|
|
|
|
int? getTriageChoiceForItem(String itemId) {
|
|
|
|
|
|
|
|
return _selectedTriageChoicesByItemId[itemId];
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// Check if all items in current question have been answered
|
|
|
|
|
|
|
|
bool get areAllTriageItemsAnswered {
|
|
|
|
|
|
|
|
if (currentTriageQuestion?.items == null ||
|
|
|
|
|
|
|
|
currentTriageQuestion!.items!.isEmpty) {
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Check if we have an answer for each item
|
|
|
|
|
|
|
|
for (var item in currentTriageQuestion!.items!) {
|
|
|
|
|
|
|
|
if (item.id != null &&
|
|
|
|
|
|
|
|
!_selectedTriageChoicesByItemId.containsKey(item.id)) {
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// Get organs for current view
|
|
|
|
/// Get organs for current view
|
|
|
|
List<OrganModel> get currentOrgans => OrganData.getOrgansForView(_currentView);
|
|
|
|
List<OrganModel> get currentOrgans =>
|
|
|
|
|
|
|
|
OrganData.getOrgansForView(_currentView);
|
|
|
|
|
|
|
|
|
|
|
|
/// Get all selected organs from both views
|
|
|
|
/// Get all selected organs from both views
|
|
|
|
List<OrganModel> get selectedOrgans {
|
|
|
|
List<OrganModel> get selectedOrgans {
|
|
|
|
@ -126,7 +162,9 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
|
|
|
|
...OrganData.frontViewOrgans,
|
|
|
|
...OrganData.frontViewOrgans,
|
|
|
|
...OrganData.backViewOrgans,
|
|
|
|
...OrganData.backViewOrgans,
|
|
|
|
];
|
|
|
|
];
|
|
|
|
return allOrgans.where((organ) => _selectedOrganIds.contains(organ.id)).toList();
|
|
|
|
return allOrgans
|
|
|
|
|
|
|
|
.where((organ) => _selectedOrganIds.contains(organ.id))
|
|
|
|
|
|
|
|
.toList();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// Check if any organs are selected
|
|
|
|
/// Check if any organs are selected
|
|
|
|
@ -143,11 +181,13 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int get totalSelectedSymptomsCount {
|
|
|
|
int get totalSelectedSymptomsCount {
|
|
|
|
return _selectedSymptomsByOrgan.values.fold(0, (sum, symptomIds) => sum + symptomIds.length);
|
|
|
|
return _selectedSymptomsByOrgan.values
|
|
|
|
|
|
|
|
.fold(0, (sum, symptomIds) => sum + symptomIds.length);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool get hasSelectedSymptoms {
|
|
|
|
bool get hasSelectedSymptoms {
|
|
|
|
return _selectedSymptomsByOrgan.values.any((symptomIds) => symptomIds.isNotEmpty);
|
|
|
|
return _selectedSymptomsByOrgan.values
|
|
|
|
|
|
|
|
.any((symptomIds) => symptomIds.isNotEmpty);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// Get risk factors list
|
|
|
|
/// Get risk factors list
|
|
|
|
@ -173,7 +213,8 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void toggleView() {
|
|
|
|
void toggleView() {
|
|
|
|
_currentView = _currentView == BodyView.front ? BodyView.back : BodyView.front;
|
|
|
|
_currentView =
|
|
|
|
|
|
|
|
_currentView == BodyView.front ? BodyView.back : BodyView.front;
|
|
|
|
notifyListeners();
|
|
|
|
notifyListeners();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -276,7 +317,8 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
List<String> organNames = selectedOrgans.map((organ) => organ.name).toList();
|
|
|
|
List<String> organNames =
|
|
|
|
|
|
|
|
selectedOrgans.map((organ) => organ.name).toList();
|
|
|
|
|
|
|
|
|
|
|
|
await getBodySymptomsByName(
|
|
|
|
await getBodySymptomsByName(
|
|
|
|
organNames: organNames,
|
|
|
|
organNames: organNames,
|
|
|
|
@ -326,7 +368,8 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (matchingOrganId != null && _selectedSymptomsByOrgan.containsKey(matchingOrganId)) {
|
|
|
|
if (matchingOrganId != null &&
|
|
|
|
|
|
|
|
_selectedSymptomsByOrgan.containsKey(matchingOrganId)) {
|
|
|
|
final selectedIds = _selectedSymptomsByOrgan[matchingOrganId]!;
|
|
|
|
final selectedIds = _selectedSymptomsByOrgan[matchingOrganId]!;
|
|
|
|
|
|
|
|
|
|
|
|
if (organResult.bodySymptoms != null) {
|
|
|
|
if (organResult.bodySymptoms != null) {
|
|
|
|
@ -377,7 +420,10 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
|
|
|
|
|
|
|
|
|
|
|
|
/// Get all selected risk factors
|
|
|
|
/// Get all selected risk factors
|
|
|
|
List<RiskAndSuggestionsItemModel> getAllSelectedRiskFactors() {
|
|
|
|
List<RiskAndSuggestionsItemModel> getAllSelectedRiskFactors() {
|
|
|
|
return riskFactorsList.where((factor) => factor.id != null && _selectedRiskFactorIds.contains(factor.id)).toList();
|
|
|
|
return riskFactorsList
|
|
|
|
|
|
|
|
.where((factor) =>
|
|
|
|
|
|
|
|
factor.id != null && _selectedRiskFactorIds.contains(factor.id))
|
|
|
|
|
|
|
|
.toList();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// Clear all risk factor selections
|
|
|
|
/// Clear all risk factor selections
|
|
|
|
@ -410,7 +456,8 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Extract symptom IDs
|
|
|
|
// Extract symptom IDs
|
|
|
|
List<String> evidenceIds = selectedSymptoms.where((s) => s.id != null).map((s) => s.id!).toList();
|
|
|
|
List<String> evidenceIds =
|
|
|
|
|
|
|
|
selectedSymptoms.where((s) => s.id != null).map((s) => s.id!).toList();
|
|
|
|
|
|
|
|
|
|
|
|
await getRiskFactors(
|
|
|
|
await getRiskFactors(
|
|
|
|
age: _selectedAge!,
|
|
|
|
age: _selectedAge!,
|
|
|
|
@ -468,8 +515,10 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
|
|
|
|
if (apiResponse.messageStatus == 1 && apiResponse.data != null) {
|
|
|
|
if (apiResponse.messageStatus == 1 && apiResponse.data != null) {
|
|
|
|
riskFactorsResponse = apiResponse.data;
|
|
|
|
riskFactorsResponse = apiResponse.data;
|
|
|
|
|
|
|
|
|
|
|
|
if (riskFactorsResponse != null && riskFactorsResponse!.dataDetails != null) {
|
|
|
|
if (riskFactorsResponse != null &&
|
|
|
|
RiskAndSuggestionsItemModel riskFactorItem = RiskAndSuggestionsItemModel(
|
|
|
|
riskFactorsResponse!.dataDetails != null) {
|
|
|
|
|
|
|
|
RiskAndSuggestionsItemModel riskFactorItem =
|
|
|
|
|
|
|
|
RiskAndSuggestionsItemModel(
|
|
|
|
id: "not_applicable",
|
|
|
|
id: "not_applicable",
|
|
|
|
commonName: "Not Applicable",
|
|
|
|
commonName: "Not Applicable",
|
|
|
|
name: "Not Applicable",
|
|
|
|
name: "Not Applicable",
|
|
|
|
@ -523,7 +572,10 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
|
|
|
|
|
|
|
|
|
|
|
|
/// Get all selected risk factors
|
|
|
|
/// Get all selected risk factors
|
|
|
|
List<RiskAndSuggestionsItemModel> getAllSelectedSuggestions() {
|
|
|
|
List<RiskAndSuggestionsItemModel> getAllSelectedSuggestions() {
|
|
|
|
return suggestionsList.where((factor) => factor.id != null && _selectedSuggestionsIds.contains(factor.id)).toList();
|
|
|
|
return suggestionsList
|
|
|
|
|
|
|
|
.where((factor) =>
|
|
|
|
|
|
|
|
factor.id != null && _selectedSuggestionsIds.contains(factor.id))
|
|
|
|
|
|
|
|
.toList();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// Clear all risk factor selections
|
|
|
|
/// Clear all risk factor selections
|
|
|
|
@ -538,15 +590,20 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
|
|
|
|
|
|
|
|
|
|
|
|
// Add selected symptoms
|
|
|
|
// Add selected symptoms
|
|
|
|
final selectedSymptoms = getAllSelectedSymptoms();
|
|
|
|
final selectedSymptoms = getAllSelectedSymptoms();
|
|
|
|
evidenceIds.addAll(selectedSymptoms.where((s) => s.id != null).map((s) => s.id!));
|
|
|
|
evidenceIds
|
|
|
|
|
|
|
|
.addAll(selectedSymptoms.where((s) => s.id != null).map((s) => s.id!));
|
|
|
|
|
|
|
|
|
|
|
|
// Add selected risk factors (excluding "not_applicable")
|
|
|
|
// Add selected risk factors (excluding "not_applicable")
|
|
|
|
final selectedRiskFactors = getAllSelectedRiskFactors();
|
|
|
|
final selectedRiskFactors = getAllSelectedRiskFactors();
|
|
|
|
evidenceIds.addAll(selectedRiskFactors.where((rf) => rf.id != null && rf.id != "not_applicable").map((rf) => rf.id!));
|
|
|
|
evidenceIds.addAll(selectedRiskFactors
|
|
|
|
|
|
|
|
.where((rf) => rf.id != null && rf.id != "not_applicable")
|
|
|
|
|
|
|
|
.map((rf) => rf.id!));
|
|
|
|
|
|
|
|
|
|
|
|
// Add selected suggestions (excluding "not_applicable")
|
|
|
|
// Add selected suggestions (excluding "not_applicable")
|
|
|
|
final selectedSuggestions = getAllSelectedSuggestions();
|
|
|
|
final selectedSuggestions = getAllSelectedSuggestions();
|
|
|
|
evidenceIds.addAll(selectedSuggestions.where((s) => s.id != null && s.id != "not_applicable").map((s) => s.id!));
|
|
|
|
evidenceIds.addAll(selectedSuggestions
|
|
|
|
|
|
|
|
.where((s) => s.id != null && s.id != "not_applicable")
|
|
|
|
|
|
|
|
.map((s) => s.id!));
|
|
|
|
|
|
|
|
|
|
|
|
return evidenceIds;
|
|
|
|
return evidenceIds;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -575,13 +632,17 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Extract symptom IDs
|
|
|
|
// Extract symptom IDs
|
|
|
|
List<String> evidenceIds = selectedSymptoms.where((s) => s.id != null).map((s) => s.id!).toList();
|
|
|
|
List<String> evidenceIds =
|
|
|
|
|
|
|
|
selectedSymptoms.where((s) => s.id != null).map((s) => s.id!).toList();
|
|
|
|
|
|
|
|
|
|
|
|
// Get all selected symptoms
|
|
|
|
// Get all selected symptoms
|
|
|
|
final selectedRisks = getAllSelectedRiskFactors();
|
|
|
|
final selectedRisks = getAllSelectedRiskFactors();
|
|
|
|
|
|
|
|
|
|
|
|
if (selectedRisks.isNotEmpty) {
|
|
|
|
if (selectedRisks.isNotEmpty) {
|
|
|
|
List<String> evidenceRisksIds = selectedRisks.where((s) => s.id != null && s.id != "not_applicable").map((s) => s.id!).toList();
|
|
|
|
List<String> evidenceRisksIds = selectedRisks
|
|
|
|
|
|
|
|
.where((s) => s.id != null && s.id != "not_applicable")
|
|
|
|
|
|
|
|
.map((s) => s.id!)
|
|
|
|
|
|
|
|
.toList();
|
|
|
|
evidenceIds.addAll(evidenceRisksIds);
|
|
|
|
evidenceIds.addAll(evidenceRisksIds);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -639,8 +700,10 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
|
|
|
|
if (apiResponse.messageStatus == 1 && apiResponse.data != null) {
|
|
|
|
if (apiResponse.messageStatus == 1 && apiResponse.data != null) {
|
|
|
|
suggestionsResponse = apiResponse.data;
|
|
|
|
suggestionsResponse = apiResponse.data;
|
|
|
|
|
|
|
|
|
|
|
|
if (suggestionsResponse != null && suggestionsResponse!.dataDetails != null) {
|
|
|
|
if (suggestionsResponse != null &&
|
|
|
|
RiskAndSuggestionsItemModel riskFactorItem = RiskAndSuggestionsItemModel(
|
|
|
|
suggestionsResponse!.dataDetails != null) {
|
|
|
|
|
|
|
|
RiskAndSuggestionsItemModel riskFactorItem =
|
|
|
|
|
|
|
|
RiskAndSuggestionsItemModel(
|
|
|
|
id: "not_applicable",
|
|
|
|
id: "not_applicable",
|
|
|
|
commonName: "Not Applicable",
|
|
|
|
commonName: "Not Applicable",
|
|
|
|
name: "Not Applicable",
|
|
|
|
name: "Not Applicable",
|
|
|
|
@ -669,6 +732,7 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
|
|
|
|
required int age,
|
|
|
|
required int age,
|
|
|
|
required String sex,
|
|
|
|
required String sex,
|
|
|
|
required List<String> evidenceIds,
|
|
|
|
required List<String> evidenceIds,
|
|
|
|
|
|
|
|
List<Map<String, String>>? triageEvidence,
|
|
|
|
required String language,
|
|
|
|
required String language,
|
|
|
|
Function(TriageDataDetails)? onSuccess,
|
|
|
|
Function(TriageDataDetails)? onSuccess,
|
|
|
|
Function(String)? onError,
|
|
|
|
Function(String)? onError,
|
|
|
|
@ -680,6 +744,7 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
|
|
|
|
age: age,
|
|
|
|
age: age,
|
|
|
|
sex: sex,
|
|
|
|
sex: sex,
|
|
|
|
evidenceIds: evidenceIds,
|
|
|
|
evidenceIds: evidenceIds,
|
|
|
|
|
|
|
|
triageEvidence: triageEvidence,
|
|
|
|
language: language,
|
|
|
|
language: language,
|
|
|
|
sessionId: currentSessionId,
|
|
|
|
sessionId: currentSessionId,
|
|
|
|
userSessionToken: currentSessionAuthToken,
|
|
|
|
userSessionToken: currentSessionAuthToken,
|
|
|
|
@ -755,15 +820,44 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
|
|
|
|
);
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// Select a triage choice option
|
|
|
|
/// Select a triage choice option (for backward compatibility with single-item questions)
|
|
|
|
void selectTriageChoice(int choiceIndex) {
|
|
|
|
void selectTriageChoice(int choiceIndex) {
|
|
|
|
_selectedTriageChoiceIndex = choiceIndex;
|
|
|
|
_selectedTriageChoiceIndex = choiceIndex;
|
|
|
|
notifyListeners();
|
|
|
|
notifyListeners();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// Reset triage choice selection
|
|
|
|
/// Select a choice for a specific item (for multi-item questions)
|
|
|
|
|
|
|
|
void selectTriageChoiceForItem(String itemId, int choiceIndex) {
|
|
|
|
|
|
|
|
_selectedTriageChoicesByItemId[itemId] = choiceIndex;
|
|
|
|
|
|
|
|
notifyListeners();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// Reset triage choice selection and increment question count
|
|
|
|
void resetTriageChoice() {
|
|
|
|
void resetTriageChoice() {
|
|
|
|
_selectedTriageChoiceIndex = null;
|
|
|
|
_selectedTriageChoiceIndex = null;
|
|
|
|
|
|
|
|
_selectedTriageChoicesByItemId.clear();
|
|
|
|
|
|
|
|
_triageQuestionCount++; // Increment question count
|
|
|
|
|
|
|
|
notifyListeners();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// Add triage evidence in the proper format
|
|
|
|
|
|
|
|
void addTriageEvidence(String itemId, String choiceId) {
|
|
|
|
|
|
|
|
_triageEvidenceList.add({
|
|
|
|
|
|
|
|
"id": itemId,
|
|
|
|
|
|
|
|
"choice_id": choiceId,
|
|
|
|
|
|
|
|
"source": "triage",
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
notifyListeners();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// Get all triage evidence
|
|
|
|
|
|
|
|
List<Map<String, String>> getTriageEvidence() {
|
|
|
|
|
|
|
|
return List.from(_triageEvidenceList);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// Clear triage evidence
|
|
|
|
|
|
|
|
void clearTriageEvidence() {
|
|
|
|
|
|
|
|
_triageEvidenceList.clear();
|
|
|
|
notifyListeners();
|
|
|
|
notifyListeners();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -773,6 +867,9 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
|
|
|
|
_selectedSymptomsByOrgan.clear();
|
|
|
|
_selectedSymptomsByOrgan.clear();
|
|
|
|
_selectedRiskFactorIds.clear();
|
|
|
|
_selectedRiskFactorIds.clear();
|
|
|
|
_selectedSuggestionsIds.clear();
|
|
|
|
_selectedSuggestionsIds.clear();
|
|
|
|
|
|
|
|
_triageEvidenceList.clear();
|
|
|
|
|
|
|
|
_selectedTriageChoicesByItemId.clear();
|
|
|
|
|
|
|
|
_triageQuestionCount = 0; // Reset question count
|
|
|
|
bodySymptomResponse = null;
|
|
|
|
bodySymptomResponse = null;
|
|
|
|
riskFactorsResponse = null;
|
|
|
|
riskFactorsResponse = null;
|
|
|
|
suggestionsResponse = null;
|
|
|
|
suggestionsResponse = null;
|
|
|
|
@ -844,7 +941,8 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
|
|
|
|
// Calculate age from date of birth
|
|
|
|
// Calculate age from date of birth
|
|
|
|
final now = DateTime.now();
|
|
|
|
final now = DateTime.now();
|
|
|
|
int age = now.year - dateOfBirth.year;
|
|
|
|
int age = now.year - dateOfBirth.year;
|
|
|
|
if (now.month < dateOfBirth.month || (now.month == dateOfBirth.month && now.day < dateOfBirth.day)) {
|
|
|
|
if (now.month < dateOfBirth.month ||
|
|
|
|
|
|
|
|
(now.month == dateOfBirth.month && now.day < dateOfBirth.day)) {
|
|
|
|
age--;
|
|
|
|
age--;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
_selectedAge = age;
|
|
|
|
_selectedAge = age;
|
|
|
|
@ -891,7 +989,8 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
|
|
|
|
}) async {
|
|
|
|
}) async {
|
|
|
|
isBodySymptomsLoading = true;
|
|
|
|
isBodySymptomsLoading = true;
|
|
|
|
notifyListeners();
|
|
|
|
notifyListeners();
|
|
|
|
final result = await symptomsCheckerRepo.getUserDetails(userName: userName, password: password);
|
|
|
|
final result = await symptomsCheckerRepo.getUserDetails(
|
|
|
|
|
|
|
|
userName: userName, password: password);
|
|
|
|
|
|
|
|
|
|
|
|
result.fold(
|
|
|
|
result.fold(
|
|
|
|
(failure) async {
|
|
|
|
(failure) async {
|
|
|
|
|