提交 439724fb authored 作者: 张国庆's avatar 张国庆

修改dio网络请求
上级 402774fd
...@@ -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());
} }
......
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,
), // ),
), ),
), ),
); );
......
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();
......
import 'package:dio/dio.dart';
import 'package:flutter_clx_base/api/base_dio.dart';
class HeaderInterceptor extends InterceptorsWrapper { class HeaderInterceptor extends InterceptorsWrapper {
@override @override
......
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) {
......
...@@ -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:
......
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;
} }
......
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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论