Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
F
flutter_clx_base
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
openSourceLibrary
flutter_clx_base
Commits
439724fb
提交
439724fb
authored
5月 08, 2023
作者:
张国庆
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修改dio网络请求
上级
402774fd
隐藏空白字符变更
内嵌
并排
正在显示
8 个修改的文件
包含
103 行增加
和
29 行删除
+103
-29
main.dart
example/lib/main.dart
+2
-0
base_list_widget_test.dart
example/lib/sample/base_list_widget_test.dart
+5
-5
dio_utils.dart
example/lib/sample/dio/dio_utils.dart
+2
-3
header_interceptor.dart
example/lib/sample/dio/header_interceptor.dart
+3
-1
dio_widget_test.dart
example/lib/sample/dio_widget_test.dart
+43
-2
pubspec.yaml
example/pubspec.yaml
+1
-1
base_dio.dart
lib/api/base_dio.dart
+25
-17
transformer.dart
lib/api/transformer.dart
+22
-0
没有找到文件。
example/lib/main.dart
浏览文件 @
439724fb
...
@@ -2,9 +2,11 @@ import 'package:flutter/material.dart';
...
@@ -2,9 +2,11 @@ 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/l10n/translations.dart'
;
import
'package:flutter_clx_base_example/l10n/translations.dart'
;
import
'package:flutter_clx_base_example/sample.dart'
;
import
'package:flutter_clx_base_example/sample.dart'
;
import
'package:flutter_clx_base_example/sample/dio/dio_utils.dart'
;
import
'package:flutter_localizations/flutter_localizations.dart'
;
import
'package:flutter_localizations/flutter_localizations.dart'
;
void
main
(
)
{
void
main
(
)
{
DioUtils
.
instance
.
initConfig
();
runApp
(
const
MyApp
());
runApp
(
const
MyApp
());
}
}
...
...
example/lib/sample/base_list_widget_test.dart
浏览文件 @
439724fb
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/widget/base_list_widget.dart'
;
import
'package:flutter_clx_base/widget/base_list_widget.dart'
;
import
'package:rive/rive.dart'
;
//
import 'package:rive/rive.dart';
class
BaseListWidgetTest
extends
StatefulWidget
{
class
BaseListWidgetTest
extends
StatefulWidget
{
const
BaseListWidgetTest
({
super
.
key
});
const
BaseListWidgetTest
({
super
.
key
});
...
@@ -80,10 +80,10 @@ class _BaseListWidgetTestState extends State<BaseListWidgetTest> {
...
@@ -80,10 +80,10 @@ class _BaseListWidgetTestState extends State<BaseListWidgetTest> {
alignment:
Alignment
.
center
,
alignment:
Alignment
.
center
,
width:
double
.
infinity
,
width:
double
.
infinity
,
height:
300
,
height:
300
,
child:
const
RiveAnimation
.
asset
(
//
child: const RiveAnimation.asset(
'assets/rive/highway-truck.riv'
,
//
'assets/rive/highway-truck.riv',
fit:
BoxFit
.
cover
,
//
fit: BoxFit.cover,
),
//
),
),
),
),
),
);
);
...
...
lib/api
/dio_utils.dart
→
example/lib/sample/dio
/dio_utils.dart
浏览文件 @
439724fb
import
'package:flutter_clx_base/api/
header_interceptor
.dart'
;
import
'package:flutter_clx_base/api/
base_dio
.dart'
;
import
'base_dio.dart'
;
import
'header_interceptor.dart'
;
export
'base_dio.dart'
;
class
DioUtils
extends
BaseDio
{
class
DioUtils
extends
BaseDio
{
static
final
DioUtils
_singleton
=
DioUtils
.
_internal
();
static
final
DioUtils
_singleton
=
DioUtils
.
_internal
();
...
...
lib/api
/header_interceptor.dart
→
example/lib/sample/dio
/header_interceptor.dart
浏览文件 @
439724fb
import
'package:dio/dio.dart'
;
import
'package:flutter_clx_base/api/base_dio.dart'
;
class
HeaderInterceptor
extends
InterceptorsWrapper
{
class
HeaderInterceptor
extends
InterceptorsWrapper
{
@override
@override
...
...
example/lib/sample/dio_widget_test.dart
浏览文件 @
439724fb
import
'package:flutter/material.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter_clx_base/api/
dio_utils
.dart'
;
import
'package:flutter_clx_base/api/
base_dio
.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/dio/dio_utils.dart'
;
class
DioWidgetTest
extends
StatefulWidget
{
class
DioWidgetTest
extends
StatefulWidget
{
const
DioWidgetTest
({
super
.
key
});
const
DioWidgetTest
({
super
.
key
});
...
@@ -13,6 +14,8 @@ class _DioWidgetTestState extends State<DioWidgetTest> {
...
@@ -13,6 +14,8 @@ class _DioWidgetTestState extends State<DioWidgetTest> {
static
const
String
getSystemVersionByNumber
=
static
const
String
getSystemVersionByNumber
=
'/user-service/system/version/getSystemVersionByNumber'
;
'/user-service/system/version/getSystemVersionByNumber'
;
String
_result
=
''
;
String
_result
=
''
;
String
_result2
=
''
;
String
_result3
=
''
;
@override
@override
Widget
build
(
BuildContext
context
)
{
Widget
build
(
BuildContext
context
)
{
...
@@ -20,6 +23,8 @@ class _DioWidgetTestState extends State<DioWidgetTest> {
...
@@ -20,6 +23,8 @@ class _DioWidgetTestState extends State<DioWidgetTest> {
title:
'DioWidget'
,
title:
'DioWidget'
,
children:
[
children:
[
Text
(
_result
),
Text
(
_result
),
Text
(
_result2
),
Text
(
_result3
),
TextButton
(
TextButton
(
onPressed:
()
{
onPressed:
()
{
DioUtils
.
instance
.
request
(
DioUtils
.
instance
.
request
(
...
@@ -31,7 +36,43 @@ class _DioWidgetTestState extends State<DioWidgetTest> {
...
@@ -31,7 +36,43 @@ class _DioWidgetTestState extends State<DioWidgetTest> {
},
},
successCallback:
(
res
)
{
successCallback:
(
res
)
{
setState
(()
{
setState
(()
{
_result
=
res
.
toString
();
_result
=
'0000'
;
});
},
errorCallback:
(
code
,
msg
)
{
setState
(()
{
_result
=
msg
!;
});
},
);
DioUtils
.
instance
.
request
(
requestUrl:
getSystemVersionByNumber
,
method:
Method
.
get
,
queryParameters:
{
'versionNumber'
:
21
,
'productNo'
:
1
,
},
successCallback:
(
res
)
{
setState
(()
{
_result2
=
'1111'
;
});
},
errorCallback:
(
code
,
msg
)
{
setState
(()
{
_result
=
msg
!;
});
},
);
DioUtils
.
instance
.
request
(
requestUrl:
getSystemVersionByNumber
,
method:
Method
.
get
,
queryParameters:
{
'versionNumber'
:
22
,
'productNo'
:
1
,
},
successCallback:
(
res
)
{
setState
(()
{
_result3
=
'2222'
;
});
});
},
},
errorCallback:
(
code
,
msg
)
{
errorCallback:
(
code
,
msg
)
{
...
...
example/pubspec.yaml
浏览文件 @
439724fb
...
@@ -30,7 +30,7 @@ dependencies:
...
@@ -30,7 +30,7 @@ dependencies:
# The following adds the Cupertino Icons font to your application.
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons
:
^1.0.2
cupertino_icons
:
^1.0.2
rive
:
^0.10.4
#
rive: ^0.10.4
dev_dependencies
:
dev_dependencies
:
flutter_test
:
flutter_test
:
...
...
lib/api/base_dio.dart
浏览文件 @
439724fb
import
'package:dio/dio.dart'
;
import
'package:dio/dio.dart'
;
import
'package:flutter_clx_base/api/base_entity.dart'
;
import
'package:flutter_clx_base/api/base_entity.dart'
;
import
'package:flutter_clx_base/api/transformer.dart'
;
import
'package:flutter_clx_base/utils/log_utils.dart'
;
import
'package:flutter_clx_base/utils/log_utils.dart'
;
import
'package:flutter_clx_base/utils/toast_util.dart'
;
export
'package:dio/dio.dart'
;
export
'package:dio/dio.dart'
;
abstract
class
BaseDio
{
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
(
final
dio
=
Dio
(
BaseOptions
(
BaseOptions
(
connectTimeout:
const
Duration
(
seconds:
5
),
connectTimeout:
const
Duration
(
seconds:
5
),
...
@@ -24,19 +17,33 @@ abstract class BaseDio {
...
@@ -24,19 +17,33 @@ abstract class BaseDio {
),
),
);
);
//构造方法
//初始化配置dio实例
BaseDio
()
{
void
initConfig
()
{
configDio
();
}
//配置dio实例
void
configDio
()
{
dio
.
options
.
baseUrl
=
getbaseUrl
();
dio
.
options
.
baseUrl
=
getbaseUrl
();
dio
.
options
.
headers
=
setHeaders
();
dio
.
options
.
headers
=
setHeaders
();
// 配置JSON转换器
dio
.
transformer
=
MyTransformer
();
dio
.
interceptors
.
add
(
getHeadersInterceptor
());
dio
.
interceptors
.
add
(
getHeadersInterceptor
());
dio
.
interceptors
.
add
(
LogInterceptor
(
responseBody:
true
));
dio
.
interceptors
.
add
(
LogInterceptor
(
responseBody:
true
));
}
}
String
getbaseUrl
();
// 设置请求头拦截器
Interceptor
getHeadersInterceptor
();
Map
<
String
,
dynamic
>?
setHeaders
()
=>
_setHeaders
();
void
onLoginExpire
()
=>
_onLoginExpire
();
void
onNetSuccess
(
Response
response
,
NetSuccessCallback
successCallback
,
NetErrorCallback
?
errorCallback
)
=>
_onNetSuccess
(
response
,
successCallback
,
errorCallback
);
// 登录过期的处理
void
_onLoginExpire
()
{
ToastUtil
.
showToast
(
"登录过期,请重新登录"
);
}
//设置请求头
//设置请求头
Map
<
String
,
dynamic
>?
_setHeaders
()
{
Map
<
String
,
dynamic
>?
_setHeaders
()
{
return
{
return
{
...
@@ -80,6 +87,7 @@ abstract class BaseDio {
...
@@ -80,6 +87,7 @@ abstract class BaseDio {
BaseEntity
baseEntity
=
BaseEntity
.
fromJson
(
response
.
data
);
BaseEntity
baseEntity
=
BaseEntity
.
fromJson
(
response
.
data
);
if
(
baseEntity
.
code
==
100
||
baseEntity
.
code
==
"100"
)
{
if
(
baseEntity
.
code
==
100
||
baseEntity
.
code
==
"100"
)
{
logger
.
e
(
"登录过期:
${baseEntity.message}
"
);
logger
.
e
(
"登录过期:
${baseEntity.message}
"
);
onLoginExpire
();
return
;
return
;
}
}
...
...
lib/api/transformer.dart
0 → 100644
浏览文件 @
439724fb
import
'dart:convert'
;
import
'package:dio/dio.dart'
;
import
'package:flutter/foundation.dart'
;
/// If the request data is a `List` type, the [BackgroundTransformer] will send data
/// by calling its `toString()` method. However, normally the List object is
/// not expected for request data( mostly need Map ). So we provide a custom
/// [Transformer] that will throw error when request data is a `List` type.
class
MyTransformer
extends
BackgroundTransformer
{
@override
JsonDecodeCallback
get
jsonDecodeCallback
=>
parseJson
;
Map
<
String
,
dynamic
>
_parseAndDecode
(
String
response
)
{
return
jsonDecode
(
response
)
as
Map
<
String
,
dynamic
>;
}
Future
<
Map
<
String
,
dynamic
>>
parseJson
(
String
text
)
{
return
compute
(
_parseAndDecode
,
text
);
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论