diff --git a/lib/src/domain/model/failure/mosque/mosque_failure.dart b/lib/src/domain/model/failure/mosque/mosque_failure.dart new file mode 100644 index 000000000..6a2bfa7dc --- /dev/null +++ b/lib/src/domain/model/failure/mosque/mosque_failure.dart @@ -0,0 +1,17 @@ +abstract class MosqueFailure implements Exception { + final String errorMessage; + final String errorCode; + + const MosqueFailure({ + required this.errorMessage, + required this.errorCode, + }); +} + +class MosqueNotFoundFailure extends MosqueFailure { + const MosqueNotFoundFailure() + : super( + errorMessage: 'Mosque not found', + errorCode: 'MOSQUE_IS_NOT_FOUND', + ); +} diff --git a/lib/src/helpers/Api.dart b/lib/src/helpers/Api.dart index 320b0cbc9..97830e235 100644 --- a/lib/src/helpers/Api.dart +++ b/lib/src/helpers/Api.dart @@ -1,4 +1,5 @@ -import 'dart:math'; +import 'dart:developer'; +import 'dart:math' hide log; import 'package:device_info_plus/device_info_plus.dart'; import 'package:dio/dio.dart'; @@ -19,6 +20,7 @@ import 'package:package_info_plus/package_info_plus.dart'; import 'package:unique_identifier/unique_identifier.dart'; import 'package:xml_parser/xml_parser.dart'; +import '../domain/model/failure/mosque/mosque_failure.dart'; import '../models/hijri_data_config_model.dart'; import '../models/mosque.dart'; import '../models/weather.dart'; @@ -98,11 +100,19 @@ class Api { } static Future getMosque(String id) async { - final response = await dio.get( - '/3.0/mosque/$id/info', - ); - - return Mosque.fromMap(response.data); + try { + final response = await dio.get( + '/3.0/mosque/$id/info', + ); + return Mosque.fromMap(response.data); + } on DioException catch (e) { + // error 404 + if (e.response != null && e.response?.statusCode == 404) { + log('Mosque not found'); + throw MosqueNotFoundFailure(); + } + rethrow; + } } /// re check the mosque config if there are any updated data diff --git a/lib/src/services/mosque_manager.dart b/lib/src/services/mosque_manager.dart index ef1987825..abfd1b259 100644 --- a/lib/src/services/mosque_manager.dart +++ b/lib/src/services/mosque_manager.dart @@ -6,6 +6,7 @@ import 'package:flutter/services.dart'; import 'package:geolocator/geolocator.dart'; import 'package:http/http.dart' as http; import 'package:mawaqit/main.dart'; +import 'package:mawaqit/src/domain/model/failure/mosque/mosque_failure.dart'; import 'package:mawaqit/src/const/constants.dart'; import 'package:mawaqit/src/helpers/Api.dart'; import 'package:mawaqit/src/helpers/PerformanceHelper.dart'; @@ -169,6 +170,12 @@ class MosqueManager extends ChangeNotifier with WeatherMixin, AudioMixin, Mosque /// if getting item returns an error onItemError(e, stack) { + if (e is MosqueFailure) { + mosque = null; + notifyListeners(); + return; + } + logger.e(e, stackTrace: stack); mosque = null;