Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
N
netrain_flutter_app
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
邹志胜
netrain_flutter_app
Commits
3115d7c5
Commit
3115d7c5
authored
Jul 08, 2021
by
“Icebear”
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
完成网络库代码
parent
c53ccd34
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
85 additions
and
346 deletions
+85
-346
LoginApi.dart
netrain_flutter_app/lib/zhangfeng/LoginApi.dart
+14
-0
LoginPage.dart
netrain_flutter_app/lib/zhangfeng/LoginPage.dart
+2
-2
Api.dart
netrain_flutter_app/lib/zhangfeng/Network/Api.dart
+0
-11
BaseHttpModel.dart
netrain_flutter_app/lib/zhangfeng/Network/BaseHttpModel.dart
+23
-0
BaseHttpModel.g.dart
...in_flutter_app/lib/zhangfeng/Network/BaseHttpModel.g.dart
+22
-0
Code.dart
netrain_flutter_app/lib/zhangfeng/Network/Code.dart
+0
-20
DataHelper.dart
netrain_flutter_app/lib/zhangfeng/Network/DataHelper.dart
+0
-26
DioLogInterceptor.dart
..._flutter_app/lib/zhangfeng/Network/DioLogInterceptor.dart
+0
-140
HttpManager.dart
netrain_flutter_app/lib/zhangfeng/Network/HttpManager.dart
+21
-87
Loading.dart
netrain_flutter_app/lib/zhangfeng/Network/Loading.dart
+0
-11
ResponseInterceptor.dart
...lutter_app/lib/zhangfeng/Network/ResponseInterceptor.dart
+0
-40
ResultData.dart
netrain_flutter_app/lib/zhangfeng/Network/ResultData.dart
+0
-8
pubspec.yaml
netrain_flutter_app/pubspec.yaml
+3
-1
No files found.
netrain_flutter_app/lib/zhangfeng/LoginApi.dart
0 → 100644
View file @
3115d7c5
import
'Network/HttpManager.dart'
;
import
'Network/BaseHttpModel.dart'
;
import
'Network/UrlPath.dart'
;
/// 所有接口类
class
LoginApi
{
///示例请求
static
loginRequest
(
Map
<
String
,
dynamic
>
param
)
{
return
HttpManager
.
getInstance
().
request
(
UrlPath
.
baseUrl
+
'auth/oauth/token'
,
parameters:
param
,
onResult:
(
data
,
errorMsg
){
BaseHttpModel
httpModel
=
data
;
print
(
httpModel
.
data
);
});
}
}
netrain_flutter_app/lib/zhangfeng/LoginPage.dart
View file @
3115d7c5
import
'package:flutter/material.dart'
;
import
'package:flutter/material.dart'
;
import
'package:fluttertoast/fluttertoast.dart'
;
import
'package:fluttertoast/fluttertoast.dart'
;
import
'
Network/
Api.dart'
;
import
'
Login
Api.dart'
;
class
LoginRequestPage
extends
StatefulWidget
{
class
LoginRequestPage
extends
StatefulWidget
{
...
@@ -20,7 +20,7 @@ class _LoginState extends State<LoginRequestPage> {
...
@@ -20,7 +20,7 @@ class _LoginState extends State<LoginRequestPage> {
map
[
'client_id'
]
=
'app'
;
map
[
'client_id'
]
=
'app'
;
map
[
'client_secret'
]
=
'123456'
;
map
[
'client_secret'
]
=
'123456'
;
map
[
'platform'
]
=
'0'
;
map
[
'platform'
]
=
'0'
;
Api
.
r
equest
(
map
);
LoginApi
.
loginR
equest
(
map
);
}
}
@override
@override
...
...
netrain_flutter_app/lib/zhangfeng/Network/Api.dart
deleted
100644 → 0
View file @
c53ccd34
import
'HttpManager.dart'
;
import
'UrlPath.dart'
;
/// 所有接口类
class
Api
{
///示例请求
static
request
(
Map
<
String
,
dynamic
>
param
)
{
return
HttpManager
.
getInstance
().
get
(
UrlPath
.
baseUrl
+
'auth/oauth/token'
,
params:
param
);
}
}
netrain_flutter_app/lib/zhangfeng/Network/BaseHttpModel.dart
0 → 100644
View file @
3115d7c5
import
'package:json_annotation/json_annotation.dart'
;
part
'BaseHttpModel.g.dart'
;
@JsonSerializable
()
class
BaseHttpModel
{
final
data
;
final
code
;
final
msg
;
BaseHttpModel
(
this
.
data
,
this
.
code
,
this
.
msg
);
factory
BaseHttpModel
.
fromJson
(
Map
<
String
,
dynamic
>
json
)
=>
_$BaseHttpModelFromJson
(
json
);
Map
<
String
,
dynamic
>
toJson
()
=>
_$BaseHttpModelToJson
(
this
);
bool
isSuccess
(){
return
this
.
code
==
200
;
}
String
errorMsg
()
{
return
this
.
msg
.
length
>
0
?
this
.
msg
:
'网络有误,请稍后再试'
;
}
}
netrain_flutter_app/lib/zhangfeng/Network/BaseHttpModel.g.dart
0 → 100644
View file @
3115d7c5
// GENERATED CODE - DO NOT MODIFY BY HAND
part of
'BaseHttpModel.dart'
;
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
BaseHttpModel
_$BaseHttpModelFromJson
(
Map
<
String
,
dynamic
>
json
)
{
return
BaseHttpModel
(
json
[
'data'
],
json
[
'code'
],
json
[
'msg'
],
);
}
Map
<
String
,
dynamic
>
_$BaseHttpModelToJson
(
BaseHttpModel
instance
)
=>
<
String
,
dynamic
>{
'data'
:
instance
.
data
,
'code'
:
instance
.
code
,
'msg'
:
instance
.
msg
,
};
netrain_flutter_app/lib/zhangfeng/Network/Code.dart
deleted
100644 → 0
View file @
c53ccd34
///错误编码
class
Code
{
///网络错误
static
const
NETWORK_ERROR
=
-
1
;
///网络超时
static
const
NETWORK_TIMEOUT
=
-
2
;
///网络返回数据格式化一次
static
const
NETWORK_JSON_EXCEPTION
=
-
3
;
static
const
SUCCESS
=
200
;
static
errorHandleFunction
(
code
,
message
,
noTip
)
{
if
(
noTip
)
{
return
message
;
}
return
message
;
}
}
netrain_flutter_app/lib/zhangfeng/Network/DataHelper.dart
deleted
100644 → 0
View file @
c53ccd34
import
'dart:collection'
;
import
'dart:convert'
;
import
'package:crypto/crypto.dart'
;
import
'package:convert/convert.dart'
;
///参数加密工具
class
DataHelper
{
static
encryptParams
(
Map
<
String
,
dynamic
>
map
)
{
var
buffer
=
StringBuffer
();
map
.
forEach
((
key
,
value
)
{
buffer
.
write
(
key
);
buffer
.
write
(
value
);
});
buffer
.
write
(
"SERECT"
);
var
sign
=
string2MD5
(
buffer
.
toString
());
print
(
"sign--->"
+
sign
);
return
sign
;
}
static
string2MD5
(
String
data
)
{
var
content
=
new
Utf8Encoder
().
convert
(
data
);
var
digest
=
md5
.
convert
(
content
);
return
hex
.
encode
(
digest
.
bytes
);
}
}
netrain_flutter_app/lib/zhangfeng/Network/DioLogInterceptor.dart
deleted
100644 → 0
View file @
c53ccd34
import
'package:dio/dio.dart'
;
///日志拦截器
class
DioLogInterceptor
extends
Interceptor
{
///请求前
@override
void
onRequest
(
RequestOptions
options
,
RequestInterceptorHandler
handler
)
{
String
requestStr
=
"
\n
==================== REQUEST ====================
\n
"
"- URL:
\n
${options.baseUrl + options.path}
\n
"
"- METHOD:
${options.method}
\n
"
;
requestStr
+=
"- HEADER:
\n
${options.headers.mapToStructureString()}
\n
"
;
final
data
=
options
.
data
;
if
(
data
!=
null
)
{
if
(
data
is
Map
)
requestStr
+=
"- BODY:
\n
${data.mapToStructureString()}
\n
"
;
else
if
(
data
is
FormData
)
{
final
formDataMap
=
Map
()
..
addEntries
(
data
.
fields
)
..
addEntries
(
data
.
files
);
requestStr
+=
"- BODY:
\n
${formDataMap.mapToStructureString()}
\n
"
;
}
else
requestStr
+=
"- BODY:
\n
${data.toString()}
\n
"
;
}
print
(
requestStr
);
handler
.
next
(
options
);
}
///出错前
@override
void
onError
(
DioError
err
,
ErrorInterceptorHandler
handler
)
{
String
errorStr
=
"
\n
==================== RESPONSE ====================
\n
"
"- URL:
\n
${err.requestOptions.baseUrl + err.requestOptions.path}
\n
"
"- METHOD:
${err.requestOptions.method}
\n
"
;
errorStr
+=
"- HEADER:
\n
${err.response.headers.map.mapToStructureString()}
\n
"
;
if
(
err
.
response
!=
null
&&
err
.
response
.
data
!=
null
)
{
print
(
'╔
${err.type.toString()}
'
);
errorStr
+=
"- ERROR:
\n
${_parseResponse(err.response)}
\n
"
;
}
else
{
errorStr
+=
"- ERRORTYPE:
${err.type}
\n
"
;
errorStr
+=
"- MSG:
${err.message}
\n
"
;
}
print
(
errorStr
);
handler
.
next
(
err
);
}
///响应前
@override
void
onResponse
(
Response
response
,
ResponseInterceptorHandler
handler
)
{
String
responseStr
=
"
\n
==================== RESPONSE ====================
\n
"
"- URL:
\n
${response.requestOptions.uri}
\n
"
;
responseStr
+=
"- HEADER:
\n
{"
;
response
.
headers
.
forEach
(
(
key
,
list
)
=>
responseStr
+=
"
\n
"
+
"
\"
$key
\"
:
\"
$list
\"
,"
);
responseStr
+=
"
\n
}
\n
"
;
responseStr
+=
"- STATUS:
${response.statusCode}
\n
"
;
if
(
response
.
data
!=
null
)
{
responseStr
+=
"- BODY:
\n
${_parseResponse(response)}
"
;
}
printWrapped
(
responseStr
);
handler
.
next
(
response
);
}
void
printWrapped
(
String
text
)
{
final
pattern
=
new
RegExp
(
'.{1,800}'
);
// 800 is the size of each chunk
pattern
.
allMatches
(
text
).
forEach
((
match
)
=>
print
(
match
.
group
(
0
)));
}
String
_parseResponse
(
Response
response
)
{
String
responseStr
=
""
;
var
data
=
response
.
data
;
if
(
data
is
Map
)
responseStr
+=
data
.
mapToStructureString
();
else
if
(
data
is
List
)
responseStr
+=
data
.
listToStructureString
();
else
responseStr
+=
response
.
data
.
toString
();
return
responseStr
;
}
}
///Map拓展,MAp转字符串输出
extension
Map2StringEx
on
Map
{
String
mapToStructureString
({
int
indentation
=
2
})
{
String
result
=
""
;
String
indentationStr
=
" "
*
indentation
;
if
(
true
)
{
result
+=
"{"
;
this
.
forEach
((
key
,
value
)
{
if
(
value
is
Map
)
{
var
temp
=
value
.
mapToStructureString
(
indentation:
indentation
+
2
);
result
+=
"
\n
$indentationStr
"
+
"
\"
$key
\"
:
$temp
,"
;
}
else
if
(
value
is
List
)
{
result
+=
"
\n
$indentationStr
"
+
"
\"
$key
\"
:
${value.listToStructureString(indentation: indentation + 2)}
,"
;
}
else
{
result
+=
"
\n
$indentationStr
"
+
"
\"
$key
\"
:
\"
$value
\"
,"
;
}
});
result
=
result
.
substring
(
0
,
result
.
length
-
1
);
result
+=
indentation
==
2
?
"
\n
}"
:
"
\n
${" " * (indentation - 1)}
}"
;
}
return
result
;
}
}
///List拓展,List转字符串输出
extension
List2StringEx
on
List
{
String
listToStructureString
({
int
indentation
=
2
})
{
String
result
=
""
;
String
indentationStr
=
" "
*
indentation
;
if
(
true
)
{
result
+=
"
$indentationStr
["
;
this
.
forEach
((
value
)
{
if
(
value
is
Map
)
{
var
temp
=
value
.
mapToStructureString
(
indentation:
indentation
+
2
);
result
+=
"
\n
$indentationStr
"
+
"
\"
$temp
\"
,"
;
}
else
if
(
value
is
List
)
{
result
+=
value
.
listToStructureString
(
indentation:
indentation
+
2
);
}
else
{
result
+=
"
\n
$indentationStr
"
+
"
\"
$value
\"
,"
;
}
});
result
=
result
.
substring
(
0
,
result
.
length
-
1
);
result
+=
"
\n
$indentationStr
]"
;
}
return
result
;
}
}
netrain_flutter_app/lib/zhangfeng/Network/HttpManager.dart
View file @
3115d7c5
import
'dart:collection'
;
import
'package:dio/dio.dart'
;
import
'package:dio/dio.dart'
;
import
'Code.dart'
;
import
'package:netrain_flutter_app/zhangfeng/Network/BaseHttpModel.dart'
;
import
'DioLogInterceptor.dart'
;
import
'BaseHttpModel.dart'
;
import
'Loading.dart'
;
import
'ResponseInterceptor.dart'
;
import
'ResultData.dart'
;
import
'UrlPath.dart'
;
import
'UrlPath.dart'
;
import
'
DataHelper.dart
'
;
import
'
dart:core
'
;
class
HttpManager
{
class
HttpManager
{
static
HttpManager
_instance
=
HttpManager
.
_internal
();
static
HttpManager
_instance
=
HttpManager
.
_internal
();
Dio
_dio
;
Dio
_dio
;
static
const
CODE_SUCCESS
=
200
;
static
const
CODE_TIME_OUT
=
-
1
;
static
const
CONNECT_TIMEOUT
=
15000
;
factory
HttpManager
()
=>
_instance
;
factory
HttpManager
()
=>
_instance
;
///通用全局单例,第一次使用时初始化
///通用全局单例,第一次使用时初始化
HttpManager
.
_internal
({
String
baseUrl
})
{
HttpManager
.
_internal
({
String
baseUrl
})
{
if
(
null
==
_dio
)
{
if
(
null
==
_dio
)
{
_dio
=
new
Dio
(
new
BaseOptions
(
_dio
=
new
Dio
(
new
BaseOptions
(
baseUrl:
UrlPath
.
baseUrl
,
connectTimeout:
CONNECT_TIMEOUT
));
baseUrl:
UrlPath
.
baseUrl
,
connectTimeout:
15000
,
headers:
new
HashMap
<
String
,
String
>()));
_dio
.
interceptors
.
add
(
new
DioLogInterceptor
());
_dio
.
interceptors
.
add
(
new
ResponseInterceptors
());
}
}
}
}
...
@@ -53,84 +46,25 @@ class HttpManager {
...
@@ -53,84 +46,25 @@ class HttpManager {
return
this
;
return
this
;
}
}
///通用的GET请求
request
(
String
url
,
get
(
api
,
{
params
,
withLoading
=
true
})
async
{
{
parameters
,
if
(
withLoading
)
{
method
=
'GET'
,
Loading
.
show
();
Function
(
BaseHttpModel
t
,
String
errorMsg
)
onResult
})
async
{
parameters
=
parameters
??
{};
if
(
onResult
==
null
){
return
;
}
}
Response
response
;
// params["platform"] = "android";
// params["system"] = "1.0.0";
// params["channel"] = "App";
// params["time"] = new DateTime.now().millisecondsSinceEpoch.toString();
// params["sign"] = DataHelper.encryptParams(params);
try
{
try
{
response
=
await
_dio
.
get
(
api
,
queryParameters:
params
);
Response
response
=
await
_dio
.
request
(
url
,
if
(
withLoading
)
{
queryParameters:
parameters
,
options:
new
Options
(
method:
method
));
Loading
.
dismiss
();
BaseHttpModel
httpModel
=
BaseHttpModel
.
fromJson
(
response
.
data
);
if
(
httpModel
.
isSuccess
()
==
true
)
{
onResult
(
httpModel
,
null
);
}
else
{
onResult
(
httpModel
,
httpModel
.
errorMsg
());
}
}
}
on
DioError
catch
(
e
)
{
}
on
DioError
catch
(
e
)
{
if
(
withLoading
)
{
onResult
(
null
,
e
.
message
);
Loading
.
dismiss
();
}
return
resultError
(
e
);
}
if
(
response
.
data
is
DioError
)
{
return
resultError
(
response
.
data
[
'code'
]);
}
}
return
response
.
data
;
}
///通用的POST请求
post
(
api
,
{
params
,
withLoading
=
true
})
async
{
if
(
withLoading
)
{
Loading
.
show
();
}
Response
response
;
// params["platform"] = "android";
// params["system"] = "1.0.0";
// params["channel"] = "App";
// params["time"] = new DateTime.now().millisecondsSinceEpoch.toString();
// params["sign"] = DataHelper.encryptParams(params);
try
{
response
=
await
_dio
.
post
(
api
,
data:
params
);
if
(
withLoading
)
{
Loading
.
dismiss
();
}
}
on
DioError
catch
(
e
)
{
if
(
withLoading
)
{
Loading
.
dismiss
();
}
return
resultError
(
e
);
}
if
(
response
.
data
is
DioError
)
{
return
resultError
(
response
.
data
[
'code'
]);
}
return
response
.
data
;
}
}
ResultData
resultError
(
DioError
e
)
{
Response
errorResponse
;
if
(
e
.
response
!=
null
)
{
errorResponse
=
e
.
response
;
}
else
{
errorResponse
=
new
Response
(
statusCode:
666
);
}
if
(
e
.
type
==
DioErrorType
.
connectTimeout
||
e
.
type
==
DioErrorType
.
receiveTimeout
)
{
errorResponse
.
statusCode
=
Code
.
NETWORK_TIMEOUT
;
}
}
return
new
ResultData
(
null
,
false
,-
1
,
errorResponse
.
statusMessage
);
}
}
netrain_flutter_app/lib/zhangfeng/Network/Loading.dart
deleted
100644 → 0
View file @
c53ccd34
import
'package:flutter_easyloading/flutter_easyloading.dart'
;
class
Loading
{
static
show
()
{
EasyLoading
.
show
();
}
static
dismiss
()
{
EasyLoading
.
dismiss
();
}
}
netrain_flutter_app/lib/zhangfeng/Network/ResponseInterceptor.dart
deleted
100644 → 0
View file @
c53ccd34
import
'package:dio/dio.dart'
;
import
'ResultData.dart'
;
/// 数据初步处理
class
ResponseInterceptors
extends
InterceptorsWrapper
{
@override
void
onResponse
(
Response
response
,
ResponseInterceptorHandler
handler
)
{
RequestOptions
option
=
response
.
requestOptions
;
try
{
if
(
option
.
contentType
!=
null
&&
option
.
contentType
.
contains
(
"text"
))
{
response
.
data
=
ResultData
(
response
.
data
,
true
,
0
,
''
);
handler
.
next
(
response
);
}
///一般只需要处理200的情况,300、400、500保留错误信息,外层为http协议定义的响应码
if
(
response
.
statusCode
==
200
||
response
.
statusCode
==
201
)
{
///内层需要根据公司实际返回结构解析,一般会有code,data,msg字段
int
code
=
response
.
data
[
"code"
];
String
msg
=
response
.
data
[
"msg"
];
if
(
code
==
0
)
{
response
.
data
=
ResultData
(
response
.
data
,
true
,
code
,
msg
);
handler
.
next
(
response
);
}
else
{
response
.
data
=
ResultData
(
response
.
data
,
false
,
code
,
msg
);
handler
.
next
(
response
);
}
}
}
catch
(
e
)
{
print
(
"ResponseError===="
+
e
.
toString
()
+
"****"
+
option
.
path
);
response
.
data
=
ResultData
(
response
.
data
,
false
,
-
1
,
'网络有误'
);
handler
.
next
(
response
);
}
response
.
data
=
ResultData
(
response
.
data
,
false
,
-
1
,
'网络有误'
);
handler
.
next
(
response
);
}
}
netrain_flutter_app/lib/zhangfeng/Network/ResultData.dart
deleted
100644 → 0
View file @
c53ccd34
class
ResultData
{
var
data
;
bool
isSuccess
;
int
code
;
var
msg
;
ResultData
(
this
.
data
,
this
.
isSuccess
,
this
.
code
,
this
.
msg
);
}
netrain_flutter_app/pubspec.yaml
View file @
3115d7c5
...
@@ -34,7 +34,7 @@ dependencies:
...
@@ -34,7 +34,7 @@ dependencies:
http
:
0.13.3
http
:
0.13.3
mqtt_client
:
^9.3.2
mqtt_client
:
^9.3.2
flutter_easyrefresh
:
^2.2.1
#下拉刷新
flutter_easyrefresh
:
^2.2.1
#下拉刷新
json_annotation
:
^
4.0
.1
#json解析
json_annotation
:
^
3.1
.1
#json解析
flutter_easyloading
:
^3.0.0
#简单的加载loading
flutter_easyloading
:
^3.0.0
#简单的加载loading
dio
:
^4.0.0
#网络库
dio
:
^4.0.0
#网络库
convert
:
^3.0.1
#转码器
convert
:
^3.0.1
#转码器
...
@@ -43,6 +43,8 @@ dependencies:
...
@@ -43,6 +43,8 @@ dependencies:
dev_dependencies
:
dev_dependencies
:
flutter_test
:
flutter_test
:
sdk
:
flutter
sdk
:
flutter
build_runner
:
^1.0.0
json_serializable
:
^3.5.1
# For information on the generic Dart part of this file, see the
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec
# following page: https://dart.dev/tools/pub/pubspec
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment