You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
2.0 KiB
63 lines
2.0 KiB
import 'package:get/get.dart'; |
|
import 'package:dio/dio.dart'; |
|
import 'package:flutter/foundation.dart'; // 导入 debugPrint |
|
import 'package:get_storage/get_storage.dart'; |
|
import 'package:problem_check_system/data/providers/connectivity_provider.dart'; |
|
import 'package:problem_check_system/data/providers/local_database.dart'; |
|
|
|
class InitialBinding implements Bindings { |
|
@override |
|
void dependencies() { |
|
// 全局注册 GetStorage 实例 - 也改为使用 put 确保立即创建 |
|
Get.put<GetStorage>(GetStorage(), permanent: true); |
|
// 全局注册 Dio 实例 - 使用 put 而不是 lazyPut,并设置为永久 |
|
Get.put<Dio>(createDioInstance()); |
|
// |
|
Get.put<LocalDatabase>(LocalDatabase()); |
|
Get.put<ConnectivityProvider>(ConnectivityProvider()); |
|
} |
|
|
|
// 提取创建 Dio 实例的逻辑到单独的方法 |
|
Dio createDioInstance() { |
|
final dio = Dio( |
|
BaseOptions( |
|
baseUrl: 'https://xhdev.anxincloud.cn', // 替换为你的服务器地址 |
|
connectTimeout: const Duration(seconds: 15), |
|
receiveTimeout: const Duration(seconds: 15), |
|
), |
|
); |
|
|
|
// 添加日志拦截器,仅在调试模式下打印日志 |
|
if (kDebugMode) { |
|
dio.interceptors.add( |
|
LogInterceptor( |
|
requestBody: true, |
|
responseBody: true, |
|
logPrint: (o) => debugPrint(o.toString()), |
|
), |
|
); |
|
} |
|
|
|
// 添加认证拦截器 |
|
dio.interceptors.add( |
|
InterceptorsWrapper( |
|
onRequest: (options, handler) { |
|
final token = ""; //todo 获取token |
|
if (token != null && token.isNotEmpty) { |
|
options.headers['Authorization'] = 'Bearer $token'; |
|
} |
|
return handler.next(options); |
|
}, |
|
onError: (DioException e, handler) { |
|
if (e.response?.statusCode == 401) { |
|
// 如果收到 401 Unauthorized 错误,跳转回登录页 |
|
Get.offAllNamed('/login'); |
|
} |
|
return handler.next(e); |
|
}, |
|
), |
|
); |
|
|
|
return dio; |
|
} |
|
}
|
|
|