Skip to content

Commit 146f11b

Browse files
authored
Merge pull request #6 from VB10/feature/core-network
2 parents 6df296c + 43db53d commit 146f11b

File tree

12 files changed

+142
-37
lines changed

12 files changed

+142
-37
lines changed

lib/core/base/model/base_error.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
class BaseError {
1+
import 'package:fluttermvvmtemplate/core/init/network/IResponseModel.dart';
2+
3+
class BaseError extends IErrorModel {
24
final String message;
35

46
BaseError(this.message);
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
import 'package:flutter/material.dart';
2+
import 'package:fluttermvvmtemplate/core/init/network/ICoreDio.dart';
3+
import 'package:fluttermvvmtemplate/core/init/network/network_manager.dart';
24

35
abstract class BaseViewModel {
46
BuildContext context;
57

8+
ICoreDio coreDio = NetworkManager.instance.coreDio;
69
void setContext(BuildContext context);
710
void init();
811
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
enum HttpTypes { GET, POST }
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import '../constants/enums/http_request_enum.dart';
2+
3+
extension NetworkTypeExtension on HttpTypes {
4+
String get rawValue {
5+
switch (this) {
6+
case HttpTypes.GET:
7+
return "GET";
8+
case HttpTypes.POST:
9+
return "POST";
10+
default:
11+
throw "ERROR TYPE";
12+
}
13+
}
14+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:fluttermvvmtemplate/core/init/network/IResponseModel.dart';
3+
4+
import '../../base/model/base_model.dart';
5+
import '../../constants/enums/http_request_enum.dart';
6+
7+
abstract class ICoreDio {
8+
Future<IResponseModel<R>> fetch<R, T extends BaseModel>(String path,
9+
{@required HttpTypes type,
10+
@required T parseModel,
11+
dynamic data,
12+
Map<String, dynamic> queryParameters,
13+
void Function(int, int) onReceiveProgress});
14+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
abstract class IResponseModel<T> {
2+
T data;
3+
IErrorModel error;
4+
}
5+
6+
abstract class IErrorModel<T> {
7+
void statusCode() {}
8+
}
9+
10+
class ResponseModel<T> extends IResponseModel<T> {
11+
final T data;
12+
final IErrorModel error;
13+
14+
ResponseModel({this.data, this.error});
15+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import 'dart:io';
2+
3+
import 'package:dio/adapter.dart';
4+
import 'package:dio/dio.dart';
5+
import 'package:flutter/material.dart';
6+
7+
import '../../base/model/base_error.dart';
8+
import '../../base/model/base_model.dart';
9+
import '../../constants/enums/http_request_enum.dart';
10+
import '../../extension/network_exntension.dart';
11+
import 'ICoreDio.dart';
12+
import 'IResponseModel.dart';
13+
14+
part "./network_core/core_operations.dart";
15+
16+
class CoreDio with DioMixin implements Dio, ICoreDio {
17+
final BaseOptions options;
18+
19+
CoreDio(this.options) {
20+
this.options = options;
21+
this.interceptors.add(InterceptorsWrapper());
22+
this.httpClientAdapter = DefaultHttpClientAdapter();
23+
}
24+
25+
Future<IResponseModel<R>> fetch<R, T extends BaseModel>(String path,
26+
{@required HttpTypes type,
27+
@required T parseModel,
28+
dynamic data,
29+
Map<String, dynamic> queryParameters,
30+
void Function(int, int) onReceiveProgress}) async {
31+
final response = await request(path, data: data, options: Options(method: type.rawValue));
32+
switch (response.statusCode) {
33+
case HttpStatus.ok:
34+
case HttpStatus.accepted:
35+
final model = _responseParser<R>(parseModel, _responseParser);
36+
return ResponseModel<R>(data: model);
37+
default:
38+
return ResponseModel(error: BaseError("message"));
39+
}
40+
}
41+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
part of "../core_dio.dart";
2+
3+
extension _CoreDioOperations on CoreDio {
4+
R _responseParser<R>(BaseModel model, dynamic data) {
5+
if (data is List) {
6+
return data.map((e) => model.fromJson(e)).toList() as R;
7+
} else if (data is Map) {
8+
return model.fromJson(data) as R;
9+
}
10+
return data as R;
11+
}
12+
}
Lines changed: 16 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import 'dart:io';
22

33
import 'package:dio/dio.dart';
4+
import 'package:fluttermvvmtemplate/core/init/network/ICoreDio.dart';
45

56
import '../../base/model/base_error.dart';
67
import '../../base/model/base_model.dart';
78
import '../../constants/enums/locale_keys_enum.dart';
89
import '../cache/locale_manager.dart';
10+
import 'core_dio.dart';
911

1012
class NetworkManager {
1113
static NetworkManager _instance;
@@ -14,42 +16,24 @@ class NetworkManager {
1416
return _instance;
1517
}
1618

19+
ICoreDio coreDio;
20+
1721
NetworkManager._init() {
1822
final baseOptions = BaseOptions(
1923
baseUrl: "https://jsonplaceholder.typicode.com/",
2024
headers: {"val": LocaleManager.instance.getStringValue(PreferencesKeys.TOKEN)},
2125
);
22-
_dio = Dio(baseOptions);
23-
24-
_dio.interceptors.add(InterceptorsWrapper(
25-
onRequest: (options) {
26-
options.path += "veli";
27-
},
28-
// onResponse: (e) {
29-
// return e.data;
30-
// },
31-
onError: (e) {
32-
return BaseError(e.message);
33-
},
34-
));
35-
}
36-
37-
Dio _dio;
38-
39-
Future dioGet<T extends BaseModel>(String path, T model) async {
40-
final response = await _dio.get(path);
41-
42-
switch (response.statusCode) {
43-
case HttpStatus.ok:
44-
final responeBody = response.data;
45-
if (responeBody is List) {
46-
return responeBody.map((e) => model.fromJson(e)).toList();
47-
} else if (responeBody is Map) {
48-
return model.fromJson(responeBody);
49-
}
50-
return responeBody;
51-
break;
52-
default:
53-
}
26+
// _dio = Dio(baseOptions);
27+
28+
coreDio = CoreDio(baseOptions);
29+
30+
// _dio.interceptors.add(InterceptorsWrapper(
31+
// onRequest: (options) {
32+
// options.path += "veli";
33+
// },
34+
// onError: (e) {
35+
// return BaseError(e.message);
36+
// },
37+
// ));
5438
}
5539
}

lib/core/init/notifier/theme_notifer.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'package:flutter/material.dart';
2-
import 'package:izmirtarih/core/constants/enums/app_theme_enum.dart';
3-
import 'package:izmirtarih/core/init/theme/app_theme_light.dart';
2+
3+
import '../../constants/enums/app_theme_enum.dart';
4+
import '../theme/app_theme_light.dart';
45

56
class ThemeNotifier extends ChangeNotifier {
67
ThemeData _currentTheme = AppThemeLight.instance.theme;

0 commit comments

Comments
 (0)