Refactoring

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

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

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

Loading…
Cancel
Save