Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
F
flutter_clx_base
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
openSourceLibrary
flutter_clx_base
Commits
e0db3382
提交
e0db3382
authored
5月 06, 2023
作者:
张国庆
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
网络请求dio
上级
6c817aa7
显示空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
219 行增加
和
1 行删除
+219
-1
sample.dart
example/lib/sample.dart
+5
-0
dio_widget_test.dart
example/lib/sample/dio_widget_test.dart
+48
-0
base_dio.dart
lib/api/base_dio.dart
+114
-0
base_entity.dart
lib/api/base_entity.dart
+19
-0
dio_utils.dart
lib/api/dio_utils.dart
+22
-0
header_interceptor.dart
lib/api/header_interceptor.dart
+10
-0
pubspec.yaml
pubspec.yaml
+1
-1
没有找到文件。
example/lib/sample.dart
浏览文件 @
e0db3382
import
'package:flutter/material.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter_clx_base/flutter_clx_base.dart'
;
import
'package:flutter_clx_base/flutter_clx_base.dart'
;
import
'package:flutter_clx_base_example/sample/base_list_widget_test.dart'
;
import
'package:flutter_clx_base_example/sample/base_list_widget_test.dart'
;
import
'package:flutter_clx_base_example/sample/dio_widget_test.dart'
;
class
Sample
extends
StatelessWidget
{
class
Sample
extends
StatelessWidget
{
const
Sample
({
super
.
key
});
const
Sample
({
super
.
key
});
...
@@ -14,6 +15,10 @@ class Sample extends StatelessWidget {
...
@@ -14,6 +15,10 @@ class Sample extends StatelessWidget {
fullWidthButton:
true
,
fullWidthButton:
true
,
onPressed:
()
=>
Get
.
to
(
const
BaseListWidgetTest
()),
onPressed:
()
=>
Get
.
to
(
const
BaseListWidgetTest
()),
text:
'列表'
),
text:
'列表'
),
GFButton
(
fullWidthButton:
true
,
onPressed:
()
=>
Get
.
to
(
const
DioWidgetTest
()),
text:
'dio'
),
],
],
);
);
}
}
...
...
example/lib/sample/dio_widget_test.dart
0 → 100644
浏览文件 @
e0db3382
import
'package:flutter/material.dart'
;
import
'package:flutter_clx_base/api/dio_utils.dart'
;
import
'package:flutter_clx_base/flutter_clx_base.dart'
;
class
DioWidgetTest
extends
StatefulWidget
{
const
DioWidgetTest
({
super
.
key
});
@override
State
<
DioWidgetTest
>
createState
()
=>
_DioWidgetTestState
();
}
class
_DioWidgetTestState
extends
State
<
DioWidgetTest
>
{
static
const
String
getSystemVersionByNumber
=
'/user-service/system/version/getSystemVersionByNumber'
;
String
_result
=
''
;
@override
Widget
build
(
BuildContext
context
)
{
return
MyScaffold
(
title:
'DioWidget'
,
children:
[
Text
(
_result
),
TextButton
(
onPressed:
()
{
DioUtils
.
instance
.
request
(
requestUrl:
getSystemVersionByNumber
,
method:
Method
.
get
,
queryParameters:
{
'versionNumber'
:
20
,
'productNo'
:
1
,
},
successCallback:
(
res
)
{
setState
(()
{
_result
=
res
.
toString
();
});
},
errorCallback:
(
code
,
msg
)
{
setState
(()
{
_result
=
msg
!;
});
},
);
},
child:
const
Text
(
'dio请求'
)),
],
);
}
}
lib/api/base_dio.dart
0 → 100644
浏览文件 @
e0db3382
import
'package:dio/dio.dart'
;
import
'package:flutter_clx_base/api/base_entity.dart'
;
import
'package:flutter_clx_base/utils/log_utils.dart'
;
export
'package:dio/dio.dart'
;
abstract
class
BaseDio
{
String
getbaseUrl
();
// 设置请求头拦截器
Interceptor
getHeadersInterceptor
();
Map
<
String
,
dynamic
>?
setHeaders
()
=>
_setHeaders
();
void
onNetSuccess
(
Response
response
,
NetSuccessCallback
successCallback
,
NetErrorCallback
?
errorCallback
)
=>
_onNetSuccess
(
response
,
successCallback
,
errorCallback
);
final
dio
=
Dio
(
BaseOptions
(
connectTimeout:
const
Duration
(
seconds:
5
),
receiveTimeout:
const
Duration
(
seconds:
10
),
contentType:
Headers
.
jsonContentType
,
// Transform the response data to a String encoded with UTF8.
// The default value is [ResponseType.JSON].
),
);
//构造方法
BaseDio
()
{
configDio
();
}
//配置dio实例
void
configDio
()
{
dio
.
options
.
baseUrl
=
getbaseUrl
();
dio
.
options
.
headers
=
setHeaders
();
dio
.
interceptors
.
add
(
getHeadersInterceptor
());
dio
.
interceptors
.
add
(
LogInterceptor
(
responseBody:
true
));
}
//设置请求头
Map
<
String
,
dynamic
>?
_setHeaders
()
{
return
{
'Content-Type'
:
'application/json;charset=UTF-8'
,
};
}
// 构建网络请求
void
request
({
required
String
requestUrl
,
required
Method
method
,
Options
?
options
,
Map
<
String
,
dynamic
>?
queryParameters
,
Map
<
String
,
dynamic
>?
data
,
required
NetSuccessCallback
successCallback
,
NetErrorCallback
?
errorCallback
,
})
async
{
try
{
final
Response
response
=
await
dio
.
request
(
requestUrl
,
queryParameters:
queryParameters
,
data:
data
,
options:
_checkOptions
(
method
.
value
,
options
),
);
onNetSuccess
(
response
,
successCallback
,
errorCallback
);
}
on
DioError
catch
(
e
)
{
if
(
e
.
response
!=
null
)
{
logger
.
e
(
"请求错误:
${e.response!.statusCode}
${e.response!.requestOptions.path}
"
);
}
else
{
// Something happened in setting up or sending the request that triggered an Error
logger
.
e
(
"请求错误:
${e.message}
"
);
}
errorCallback
?.
call
(
500
,
"服务器请求错误"
);
}
}
// 处理网络请求成功逻辑
void
_onNetSuccess
(
Response
response
,
NetSuccessCallback
successCallback
,
NetErrorCallback
?
errorCallback
)
{
BaseEntity
baseEntity
=
BaseEntity
.
fromJson
(
response
.
data
);
if
(
baseEntity
.
code
==
100
||
baseEntity
.
code
==
"100"
)
{
logger
.
e
(
"登录过期:
${baseEntity.message}
"
);
return
;
}
if
(
baseEntity
.
code
==
0
)
{
successCallback
.
call
(
baseEntity
.
data
);
}
else
{
logger
.
e
(
"请求错误:
${baseEntity.code}
${baseEntity.message}
"
);
errorCallback
?.
call
(
baseEntity
.
code
,
baseEntity
.
message
);
}
}
}
Options
_checkOptions
(
String
method
,
Options
?
options
)
{
options
??=
Options
();
options
.
method
=
method
;
return
options
;
}
typedef
NetSuccessCallback
=
Function
(
dynamic
data
);
typedef
NetErrorCallback
=
Function
(
dynamic
code
,
String
?
msg
);
enum
Method
{
get
,
post
,
put
,
patch
,
delete
,
}
extension
MethodExtension
on
Method
{
String
get
value
=>
[
'GET'
,
'POST'
,
'PUT'
,
'PATCH'
,
'DELETE'
][
index
];
}
lib/api/base_entity.dart
0 → 100644
浏览文件 @
e0db3382
class
BaseEntity
{
BaseEntity
(
this
.
code
,
this
.
message
,
this
.
data
,
{
this
.
total
=
0
,
this
.
amount
=
0.0
,
this
.
pageNum
=
0
});
BaseEntity
.
fromJson
(
Map
<
String
,
dynamic
>
json
)
{
code
=
json
[
'code'
];
message
=
json
[
'msg'
]
as
String
;
data
=
json
[
'data'
];
total
=
json
[
'total'
];
amount
=
json
[
'amount'
];
pageNum
=
json
[
'pageNum'
];
}
dynamic
code
;
late
String
message
;
dynamic
data
;
dynamic
total
;
dynamic
amount
;
dynamic
pageNum
;
}
lib/api/dio_utils.dart
0 → 100644
浏览文件 @
e0db3382
import
'package:flutter_clx_base/api/header_interceptor.dart'
;
import
'base_dio.dart'
;
export
'base_dio.dart'
;
class
DioUtils
extends
BaseDio
{
static
final
DioUtils
_singleton
=
DioUtils
.
_internal
();
static
DioUtils
get
instance
=>
_singleton
;
DioUtils
.
_internal
();
@override
String
getbaseUrl
()
{
return
"https://api.clxkj.cn:8088"
;
}
@override
Interceptor
getHeadersInterceptor
()
{
return
HeaderInterceptor
();
}
}
lib/api/header_interceptor.dart
0 → 100644
浏览文件 @
e0db3382
import
'package:dio/dio.dart'
;
class
HeaderInterceptor
extends
InterceptorsWrapper
{
@override
onRequest
(
RequestOptions
options
,
handler
)
async
{
options
.
headers
[
"osType"
]
=
"APP"
;
return
super
.
onRequest
(
options
,
handler
);
}
}
pubspec.yaml
浏览文件 @
e0db3382
...
@@ -11,7 +11,7 @@ dependencies:
...
@@ -11,7 +11,7 @@ dependencies:
flutter
:
flutter
:
sdk
:
flutter
sdk
:
flutter
# dio https://pub.dev/packages/dio
# dio https://pub.dev/packages/dio
dio
:
^
4.0.6
dio
:
^
5.1.1
# 时间选择器 https://pub.dev/packages/flutter_cupertino_datetime_picker
# 时间选择器 https://pub.dev/packages/flutter_cupertino_datetime_picker
flutter_cupertino_datetime_picker
:
^3.0.0
flutter_cupertino_datetime_picker
:
^3.0.0
# 键盘工具类 https://pub.dev/packages/keyboard_actions
# 键盘工具类 https://pub.dev/packages/keyboard_actions
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论