1
1
import 'dart:convert' ;
2
+ import 'dart:typed_data' ;
2
3
import 'dart:ui' ;
3
4
4
5
import 'package:connectivity/connectivity.dart' ;
@@ -70,7 +71,6 @@ class NsgDataProvider extends GetxController {
70
71
} else if (method == 'POST' ) {
71
72
response = await _dio.post (url, data: params);
72
73
}
73
-
74
74
if (debug) {
75
75
print ('HTTP STATUS: ${response .statusCode }' );
76
76
print (response.data);
@@ -88,6 +88,52 @@ class NsgDataProvider extends GetxController {
88
88
}
89
89
}
90
90
91
+ Future <Either <NsgApiError , Image >> imageRequest ({
92
+ final String function,
93
+ final Map <String , dynamic > params,
94
+ final Map <String , String > headers,
95
+ final String url,
96
+ final int timeout = 15000 ,
97
+ final bool debug = false ,
98
+ final String method = 'GET' ,
99
+ }) async {
100
+ final _dio = Dio (BaseOptions (
101
+ headers: headers,
102
+ method: method,
103
+ responseType: ResponseType .json,
104
+ contentType: 'application/json' ,
105
+ connectTimeout: timeout,
106
+ receiveTimeout: timeout,
107
+ ));
108
+
109
+ Response <Uint8List > response;
110
+
111
+ try {
112
+ if (method == 'GET' ) {
113
+ response = await _dio.get <Uint8List >(url,
114
+ queryParameters: params,
115
+ options: Options (responseType: ResponseType .bytes));
116
+ } else if (method == 'POST' ) {
117
+ response = await _dio.post <Uint8List >(url,
118
+ data: params, options: Options (responseType: ResponseType .bytes));
119
+ }
120
+ if (debug) {
121
+ print ('HTTP STATUS: ${response .statusCode }' );
122
+ //print(response.data);
123
+ }
124
+
125
+ return Right (Image .memory (response.data));
126
+ } on DioError catch (e) {
127
+ print ('dio error. function: $function , error: ${e .error ??= '' }' );
128
+ return Left (NsgApiError (
129
+ code: 1 , message: 'Internet connection error' , errorType: e.type));
130
+ } catch (e) {
131
+ print (2 );
132
+ print ('network error. function: $function , error: $e ' );
133
+ return Left (NsgApiError (code: 0 , message: '$e ' ));
134
+ }
135
+ }
136
+
91
137
Future <bool > internetConnected () async {
92
138
return await Connectivity ().checkConnectivity () != ConnectivityResult .none;
93
139
}
@@ -101,90 +147,111 @@ class NsgDataProvider extends GetxController {
101
147
return result;
102
148
} else {
103
149
var result = await _checkToken ();
104
- result.fold ((error) async {
150
+
151
+ result.fold ((error) {
105
152
if (error.errorType == null ) {
106
- if (error.code == 401 ) {
107
- var result = await _anonymousLogin ();
108
- return result;
153
+ if (error.code != 401 ) {
154
+ return Left (error);
109
155
}
156
+ } else {
110
157
return Left (error);
111
158
}
112
- return Left (error);
113
159
}, (b) {
114
160
return Right (true );
115
161
});
162
+ result = await _anonymousLogin ();
163
+ return result;
116
164
}
117
165
}
118
166
return Right (true );
119
167
}
120
168
121
- Future <Image > getCaptcha () async {
122
- var response = await http
169
+ Future <Either <NsgApiError , Image >> getCaptcha () async {
170
+ var response = await imageRequest (
171
+ debug: isDebug,
172
+ function: 'GetCaptcha' ,
173
+ url: '${serverUri }/${authorizationApi }/GetCaptcha' ,
174
+ method: 'GET' ,
175
+ headers: _getAuthorizationHeader ());
176
+
177
+ return response.fold ((error) => Left (error), (data) {
178
+ return Right (data);
179
+ });
180
+
181
+ /*var response = await http
123
182
.get('${serverUri}/${authorizationApi}/GetCaptcha',
124
183
headers: _getAuthorizationHeader())
125
184
.catchError((e) {
126
185
return;
127
186
});
128
187
if (response.statusCode == 200) {
129
- return Image . memory (response.bodyBytes) ;
188
+ return;
130
189
} else {
131
190
return null;
132
- }
191
+ }*/
133
192
}
134
193
135
- Future <int > phoneLoginRequestSMS (
194
+ Future <Either < NsgApiError , bool > > phoneLoginRequestSMS (
136
195
String phoneNumber, String securityCode) async {
137
196
this .phoneNumber = phoneNumber;
138
197
var login = NsgPhoneLoginModel ();
139
198
login.phoneNumber = phoneNumber;
140
199
login.securityCode = securityCode;
141
200
var s = login.toJson ();
142
201
143
- var response = await http
144
- .post ('${serverUri }/${authorizationApi }/PhoneLoginRequestSMS' ,
145
- headers: _getAuthorizationHeader (), body: s)
146
- .catchError ((e) {
147
- return 1 ;
148
- });
149
- if (response.statusCode == 200 ) {
150
- var loginResponse = NsgLoginResponse .fromJson (
151
- json.decode (response.body) as Map <String , dynamic >);
202
+ var response = await baseRequest (
203
+ debug: isDebug,
204
+ function: 'PhoneLoginRequestSMS' ,
205
+ headers: _getAuthorizationHeader (),
206
+ url: '${serverUri }/${authorizationApi }/PhoneLoginRequestSMS' ,
207
+ method: 'POST' ,
208
+ params: s);
209
+
210
+ return response.fold ((error) => Left (error), (data) {
211
+ var loginResponse = NsgLoginResponse .fromJson (data);
152
212
if (loginResponse.errorCode == 0 ) {
153
213
smsRequestedTime = DateTime .now ();
214
+ return Right (true );
215
+ } else {
216
+ return Left (NsgApiError (
217
+ code: loginResponse.errorCode, message: 'Error sms request' ));
154
218
}
155
- return loginResponse.errorCode ?? 5000 ;
156
- }
157
- return 6000 ;
219
+ });
158
220
}
159
221
160
- Future <int > phoneLogin (String phoneNumber, String securityCode) async {
222
+ Future <Either <NsgApiError , bool >> phoneLogin (
223
+ String phoneNumber, String securityCode) async {
161
224
this .phoneNumber = phoneNumber;
162
225
var login = NsgPhoneLoginModel ();
163
226
login.phoneNumber = phoneNumber;
164
227
login.securityCode = securityCode;
165
228
var s = login.toJson ();
166
229
167
- var response = await http
168
- .post ('${serverUri }/${authorizationApi }/PhoneLogin' ,
169
- headers: _getAuthorizationHeader (), body: s)
170
- .catchError ((e) {
171
- return 1 ;
172
- });
173
- if (response.statusCode == 200 ) {
174
- var loginResponse = NsgLoginResponse .fromJson (
175
- json.decode (response.body) as Map <String , dynamic >);
230
+ var response = await baseRequest (
231
+ debug: isDebug,
232
+ function: 'PhoneLogin' ,
233
+ headers: _getAuthorizationHeader (),
234
+ url: '${serverUri }/${authorizationApi }/PhoneLogin' ,
235
+ method: 'POST' ,
236
+ params: s);
237
+
238
+ Left <NsgApiError , bool > left;
239
+ response.fold ((e) => left = Left <NsgApiError , bool >(e), (data) {
240
+ var loginResponse = NsgLoginResponse .fromJson (data);
176
241
if (loginResponse.errorCode == 0 ) {
177
242
token = loginResponse.token;
178
243
isAnonymous = loginResponse.isAnonymous;
179
- if (! isAnonymous) {
180
- if (name == '' || name == null ) name = authorizationApi;
181
- var _prefs = await SharedPreferences .getInstance ();
182
- await _prefs.setString (name, token);
183
- }
244
+ } else {
245
+ left = Left <NsgApiError , bool >(NsgApiError (
246
+ code: loginResponse.errorCode, message: 'Error sms request' ));
184
247
}
185
- return loginResponse.errorCode ?? 5000 ;
248
+ });
249
+ if (response.isRight && ! isAnonymous) {
250
+ if (name == '' || name == null ) name = authorizationApi;
251
+ var _prefs = await SharedPreferences .getInstance ();
252
+ await _prefs.setString (name, token);
186
253
}
187
- return 6000 ;
254
+ return response. fold ((e) => left, (data) => Right ( true )) ;
188
255
}
189
256
190
257
Future logout () async {
0 commit comments