Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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+
}

‎lib/core/init/network/ICoreDio.dart‎

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+
}

‎lib/core/init/network/core_dio.dart‎

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)

AltStyle によって変換されたページ (->オリジナル) /