feat: 新增全局确认弹窗、多页面UI优化与网络日志开关
1. 新增全局二次确认弹窗组件confirm_box,支持自定义参数并对标小程序实现
2. 优化班级板块多处UI:
- 修复point_rank_view中Web端字体溢出问题,使用FittedBox自适应缩放
- 重构class_update_widgets的PostCard,新增卡片背景控制开关并替换光晕实现
- 优化class_update_view的在线同学栏与头像组布局,支持动态计算展示数量
- 调整my_update_detail_page的评论区结构,修复评论高亮与删除浮层定位问题
3. 为dio_client新增网络日志总开关,可按需开启请求响应打印
4. 修复多处代码格式与注释细节问题
This commit is contained in:
@@ -37,31 +37,32 @@ import 'package:talker_dio_logger/talker_dio_logger.dart';
|
||||
/// 5. Android 真机请求网络必须加 INTERNET 权限(本工程 Manifest 已加)。
|
||||
/// ============================================================
|
||||
class DioClient {
|
||||
/// 网络日志总开关:true = 控制台打印请求/响应数据,false = 静默
|
||||
static const bool enableNetworkLog = false;
|
||||
|
||||
// ---------- 1. 单例:整个 App 只有一个 Dio ----------
|
||||
DioClient._()
|
||||
: _dio = Dio(
|
||||
BaseOptions(
|
||||
// 正式环境接口:统一从 ApiConfig 取,换环境只改 api_config.dart
|
||||
baseUrl: ApiConfig.baseUrl,
|
||||
connectTimeout: const Duration(seconds: 10), // 连接超时
|
||||
sendTimeout: const Duration(seconds: 10), // 发送超时
|
||||
receiveTimeout: const Duration(seconds: 10), // 接收超时
|
||||
headers: {
|
||||
'Content-Type': 'application/json; charset=utf-8',
|
||||
},
|
||||
),
|
||||
) {
|
||||
_dio.interceptors.add(
|
||||
TalkerDioLogger(
|
||||
talker: talker,
|
||||
settings: const TalkerDioLoggerSettings(
|
||||
printResponseTime: true,
|
||||
hiddenHeaders: <String>{
|
||||
'authorization',
|
||||
},
|
||||
: _dio = Dio(
|
||||
BaseOptions(
|
||||
// 正式环境接口:统一从 ApiConfig 取,换环境只改 api_config.dart
|
||||
baseUrl: ApiConfig.baseUrl,
|
||||
connectTimeout: const Duration(seconds: 10), // 连接超时
|
||||
sendTimeout: const Duration(seconds: 10), // 发送超时
|
||||
receiveTimeout: const Duration(seconds: 10), // 接收超时
|
||||
headers: {'Content-Type': 'application/json; charset=utf-8'},
|
||||
),
|
||||
),
|
||||
);
|
||||
) {
|
||||
if (enableNetworkLog) {
|
||||
_dio.interceptors.add(
|
||||
TalkerDioLogger(
|
||||
talker: talker,
|
||||
settings: const TalkerDioLoggerSettings(
|
||||
printResponseTime: true,
|
||||
hiddenHeaders: <String>{'authorization'},
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
_dio.interceptors.add(_buildInterceptors());
|
||||
}
|
||||
|
||||
@@ -89,21 +90,26 @@ class DioClient {
|
||||
onRequest: (options, handler) {
|
||||
// OSS 直传会带自己的 authorization 头(OSS4-HMAC-SHA256 签名),
|
||||
// 任何形式存在 authorization 都不再加 Bearer,否则会覆盖 OSS 签名
|
||||
final hasAuth = options.headers['Authorization'] != null ||
|
||||
final hasAuth =
|
||||
options.headers['Authorization'] != null ||
|
||||
options.headers['authorization'] != null;
|
||||
if (accessToken != null && !hasAuth) {
|
||||
options.headers['Authorization'] = 'Bearer $accessToken';
|
||||
}
|
||||
debugPrint('▶ 【请求】${options.method} ${options.uri}');
|
||||
if (enableNetworkLog) {
|
||||
debugPrint('▶ 【请求】${options.method} ${options.uri}');
|
||||
}
|
||||
handler.next(options); // 放行
|
||||
},
|
||||
|
||||
// ② 收到响应后:打印日志
|
||||
onResponse: (response, handler) {
|
||||
debugPrint(
|
||||
'◀ 【响应】${response.statusCode} '
|
||||
'${response.requestOptions.method} ${response.requestOptions.uri}',
|
||||
);
|
||||
if (enableNetworkLog) {
|
||||
debugPrint(
|
||||
'◀ 【响应】${response.statusCode} '
|
||||
'${response.requestOptions.method} ${response.requestOptions.uri}',
|
||||
);
|
||||
}
|
||||
handler.next(response); // 放行
|
||||
},
|
||||
|
||||
@@ -143,10 +149,8 @@ class DioClient {
|
||||
final message = switch (e.type) {
|
||||
DioExceptionType.connectionTimeout ||
|
||||
DioExceptionType.sendTimeout ||
|
||||
DioExceptionType.receiveTimeout =>
|
||||
'网络连接超时,请稍后重试',
|
||||
DioExceptionType.badResponse =>
|
||||
'服务器开小差了(${e.response?.statusCode})',
|
||||
DioExceptionType.receiveTimeout => '网络连接超时,请稍后重试',
|
||||
DioExceptionType.badResponse => '服务器开小差了(${e.response?.statusCode})',
|
||||
DioExceptionType.cancel => '请求已取消',
|
||||
DioExceptionType.connectionError => '网络异常,请检查网络连接',
|
||||
_ => '未知错误(${e.type.name})',
|
||||
@@ -262,8 +266,7 @@ class DioClient {
|
||||
DioExceptionType.connectionError ||
|
||||
DioExceptionType.connectionTimeout ||
|
||||
DioExceptionType.sendTimeout ||
|
||||
DioExceptionType.receiveTimeout =>
|
||||
true,
|
||||
DioExceptionType.receiveTimeout => true,
|
||||
_ => false,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user