Skip to content

Commit b8b18f4

Browse files
committed
refactore data request
1 parent de65130 commit b8b18f4

6 files changed

Lines changed: 50 additions & 48 deletions

File tree

‎lib/injection.dart‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import 'package:get_it/get_it.dart';
22
import 'package:weather_mvvm/src/data/weather_api.dart';
3-
import 'package:weather_mvvm/src/logic/current_location.dart';
3+
import 'package:weather_mvvm/src/logic/location_manager.dart';
44

55
var injection = GetIt.I;
66

77
void setup() {
88
injection.registerLazySingleton(() => WeatherServices());
9-
injection.registerSingleton(CurrentLocation());
9+
injection.registerSingleton(LocationManager());
1010
}

‎lib/src/data/http_managment.dart‎

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import 'dart:io';
2+
3+
import 'package:http/http.dart' as http;
4+
import 'package:weather_mvvm/src/data/api_state.dart';
5+
6+
class HttpManager {
7+
static Future requestManager(String url) async {
8+
try {
9+
var response = await http.get(Uri.parse(url));
10+
if (response.statusCode == 200) {
11+
return response;
12+
}
13+
if (response.statusCode == 404) {
14+
return Failure(code: 404, failureResponse: 'City Not Fount');
15+
}
16+
return Failure(code: 100, failureResponse: 'Invalid Response');
17+
} on HttpException {
18+
return Failure(code: 101, failureResponse: 'No Internet');
19+
} on FormatException {
20+
return Failure(code: 102, failureResponse: 'Invalid Format');
21+
} on SocketException {
22+
return Failure(code: 102, failureResponse: 'No Internet Connection');
23+
} catch (e) {
24+
return Failure(code: 103, failureResponse: 'Unknown Error');
25+
}
26+
}
27+
}

‎lib/src/data/weather_api.dart‎

Lines changed: 17 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -2,57 +2,32 @@ import 'dart:io';
22

33
import 'package:http/http.dart' as http;
44
import 'package:weather_mvvm/src/data/api_state.dart';
5+
import 'package:weather_mvvm/src/data/http_managment.dart';
56
import 'package:weather_mvvm/src/models/weather_models.dart';
67
import 'package:weather_mvvm/src/utils/constans.dart';
78

89
class WeatherServices {
910
Future getCurrentWeather(String lat, String long) async {
10-
try {
11-
var response = await http.get(Uri.parse(
12-
'https://api.openweathermap.org/data/2.5/weather?lat=$lat&lon=$long&appid=$apiKey'));
13-
if (response.statusCode == 200) {
14-
return Success(
15-
code: 200, successResponse: weatherModelFromJson(response.body));
16-
}
17-
if (response.statusCode == 404) {
18-
return Failure(code: 404, failureResponse: 'City Not Fount');
19-
}
20-
return Failure(code: 100, failureResponse: 'Invalid Response');
21-
} on HttpException {
22-
return Failure(code: 101, failureResponse: 'No Internet');
23-
} on FormatException {
24-
return Failure(code: 102, failureResponse: 'Invalid Format');
25-
} on SocketException {
26-
return Failure(code: 102, failureResponse: 'No Internet Connection');
27-
} catch (e) {
28-
return Failure(code: 103, failureResponse: 'Unknown Error');
11+
var response = await HttpManager.requestManager(
12+
'https://api.openweathermap.org/data/2.5/weather?lat=$lat&lon=$long&appid=$apiKey');
13+
if (response is http.Response) {
14+
return Success(
15+
code: 200, successResponse: weatherModelFromJson(response.body));
16+
}
17+
if (response is Failure) {
18+
return response;
2919
}
3020
}
3121

3222
Future getWeather({required String cityName}) async {
33-
try {
34-
var response = await http.get(
35-
Uri.parse(
36-
'https://api.openweathermap.org/data/2.5/weather?q=$cityName&appid=$apiKey'),
37-
);
38-
if (response.statusCode == 200) {
39-
return Success(
40-
code: 200,
41-
successResponse: weatherModelFromJson(response.body),
42-
);
43-
}
44-
if (response.statusCode == 404) {
45-
return Failure(code: 404, failureResponse: 'City Not Fount');
46-
}
47-
return Failure(code: 100, failureResponse: 'Invalid Response');
48-
} on HttpException {
49-
return Failure(code: 101, failureResponse: 'No Internet');
50-
} on FormatException {
51-
return Failure(code: 102, failureResponse: 'Invalid Format');
52-
} on SocketException {
53-
return Failure(code: 102, failureResponse: 'No Internet Connection');
54-
} catch (e) {
55-
return Failure(code: 103, failureResponse: 'Unknown Error');
23+
var response = await HttpManager.requestManager(
24+
'https://api.openweathermap.org/data/2.5/weather?q=$cityName&appid=$apiKey');
25+
if (response is http.Response) {
26+
return Success(
27+
code: 200, successResponse: weatherModelFromJson(response.body));
28+
}
29+
if (response is Failure) {
30+
return response;
5631
}
5732
}
5833
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import 'package:location/location.dart';
22

3-
class CurrentLocation {
3+
class LocationManager {
44
Location location = Location();
55
LocationData? _locationData;
66

‎lib/src/view_model/weather_view_model.dart‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ import 'package:weather_mvvm/injection.dart';
44
import 'package:weather_mvvm/src/data/api_state.dart';
55
import 'package:weather_mvvm/src/data/weather_api.dart';
66
import 'package:weather_mvvm/src/logic/background_controller.dart';
7-
import 'package:weather_mvvm/src/logic/current_location.dart';
7+
import 'package:weather_mvvm/src/logic/location_manager.dart';
88
import 'package:weather_mvvm/src/logic/validation.dart';
99
import 'package:weather_mvvm/src/models/error_models.dart';
1010
import 'package:weather_mvvm/src/models/weather_models.dart';
1111
import 'package:weather_mvvm/src/utils/constans.dart';
1212

1313
class WeatherViewModel extends GetxController {
14-
final loc = injection.get<CurrentLocation>();
14+
final loc = injection.get<LocationManager>();
1515
late WeatherModel _weatherModel;
1616
ErrorServices? _errorServices;
1717
bool _loading = true;

‎lib/src/views/home_screen.dart‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import 'package:weather_mvvm/src/components/app_loading.dart';
55
import 'package:weather_mvvm/src/components/app_textfield.dart';
66
import 'package:weather_mvvm/src/components/background.dart';
77
import 'package:weather_mvvm/src/logic/background_controller.dart';
8-
import 'package:weather_mvvm/src/logic/current_location.dart';
8+
import 'package:weather_mvvm/src/logic/location_manager.dart';
99
import 'package:weather_mvvm/src/logic/get_image.dart';
1010
import 'package:weather_mvvm/src/logic/to_celsius.dart';
1111
import 'package:weather_mvvm/src/utils/constans.dart';

0 commit comments

Comments
 (0)