Refactoring

pull/113/head
faizatflutter 5 months ago
parent 2ffd4cc1ae
commit 9410ad9b60

@ -66,7 +66,6 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
/// Get count of selected organs
int get selectedOrgansCount => _selectedOrganIds.length;
/// Get organ symptoms from API response
List<OrganSymptomResult> get organSymptomsResults {
if (bodySymptomResponse?.dataDetails?.result == null) {
return [];
@ -74,19 +73,15 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
return bodySymptomResponse!.dataDetails!.result ?? [];
}
/// Get total selected symptoms count across all organs
int get totalSelectedSymptomsCount {
return _selectedSymptomsByOrgan.values.fold(0, (sum, symptomIds) => sum + symptomIds.length);
}
/// Check if at least one symptom is selected
bool get hasSelectedSymptoms {
return _selectedSymptomsByOrgan.values.any((symptomIds) => symptomIds.isNotEmpty);
}
// Methods
/// Toggle between front and back body view
void toggleView() {
_currentView = _currentView == BodyView.front ? BodyView.back : BodyView.front;
notifyListeners();
@ -97,7 +92,6 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
notifyListeners();
}
/// Toggle organ selection (add if not selected, remove if selected)
void toggleOrganSelection(String organId) {
if (_selectedOrganIds.contains(organId)) {
_selectedOrganIds.remove(organId);
@ -111,12 +105,9 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
notifyListeners();
}
/// Show tooltip for an organ
void _showTooltip(String organId) {
// Cancel any existing timer
_tooltipTimer?.cancel();
// Set the tooltip organ
_tooltipOrganId = organId;
notifyListeners();
@ -134,46 +125,38 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
notifyListeners();
}
/// Remove a specific organ from selection
void removeOrgan(String organId) {
_selectedOrganIds.remove(organId);
notifyListeners();
}
/// Clear all selected organs
void clearAllSelections() {
_selectedOrganIds.clear();
notifyListeners();
}
/// Toggle bottom sheet expanded/collapsed state
void toggleBottomSheet() {
_isBottomSheetExpanded = !_isBottomSheetExpanded;
notifyListeners();
}
/// Set bottom sheet expanded state
void setBottomSheetExpanded(bool isExpanded) {
_isBottomSheetExpanded = isExpanded;
notifyListeners();
}
/// Validate if at least one organ is selected
bool validateSelection() {
return _selectedOrganIds.isNotEmpty;
}
/// Get selected organ IDs as a list
List<String> getSelectedOrganIds() {
return _selectedOrganIds.toList();
}
/// Get selected organ names as a list
List<String> getSelectedOrganNames() {
return selectedOrgans.map((organ) => organ.description).toList();
}
/// Initialize symptoms from API based on selected organs
Future<void> initializeSymptomGroups({
Function()? onSuccess,
Function(String)? onError,
@ -185,14 +168,11 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
return;
}
// Get the 'name' field from selected organs to send to API
List<String> organNames = selectedOrgans.map((organ) => organ.name).toList();
// Fetch symptoms from API
await getBodySymptomsByName(
organNames: organNames,
onSuccess: (response) {
// API response is already stored in bodySymptomResponse
if (onSuccess != null) {
onSuccess();
}
@ -205,7 +185,6 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
);
}
/// Toggle symptom selection for a specific organ
void toggleSymptomSelection(String organId, String symptomId) {
if (!_selectedSymptomsByOrgan.containsKey(organId)) {
_selectedSymptomsByOrgan[organId] = {};
@ -219,12 +198,10 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
notifyListeners();
}
/// Check if a symptom is selected
bool isSymptomSelected(String organId, String symptomId) {
return _selectedSymptomsByOrgan[organId]?.contains(symptomId) ?? false;
}
/// Get all selected symptoms across all organs (using API models)
List<BodySymptom> getAllSelectedSymptoms() {
List<BodySymptom> allSymptoms = [];
@ -233,7 +210,6 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
}
for (var organResult in bodySymptomResponse!.dataDetails!.result!) {
// Find matching organ ID
String? matchingOrganId;
for (var organ in selectedOrgans) {
if (organ.name == organResult.name) {
@ -258,13 +234,11 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
return allSymptoms;
}
/// Clear all symptom selections
void clearAllSymptomSelections() {
_selectedSymptomsByOrgan.clear();
notifyListeners();
}
/// Reset the view model to initial state
void reset() {
_currentView = BodyView.front;
_selectedOrganIds.clear();
@ -276,7 +250,6 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
notifyListeners();
}
/// Fetch body symptoms by organ names from API
Future<void> getBodySymptomsByName({
required List<String> organNames,
Function(BodySymptomResponseModel)? onSuccess,
@ -290,7 +263,6 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
);
result.fold(
// Handle failure
(failure) async {
isBodySymptomsLoading = false;
notifyListeners();
@ -299,7 +271,6 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
onError(failure.toString());
}
},
// Handle success
(apiResponse) {
isBodySymptomsLoading = false;
if (apiResponse.messageStatus == 1 && apiResponse.data != null) {

@ -123,7 +123,6 @@ class _SymptomsSelectorScreenState extends State<SymptomsSelectorScreen> {
),
if (!viewModel.isBodySymptomsLoading) ...[
_buildStickyBottomCard(context, viewModel),
],
],
);

Loading…
Cancel
Save