初始化

This commit is contained in:
谢宇宁
2026-09-15 15:44:13 +07:00
commit a23ba685e9
1065 changed files with 101122 additions and 0 deletions
+118
View File
@@ -0,0 +1,118 @@
// ignore_for_file: constant_identifier_names, deprecated_member_use
import 'dart:io';
import 'package:dio/dio.dart';
import 'package:dio/io.dart';
import 'package:hgdj/tools_base/debug_log.dart';
import 'package:hgdj/tools_base/net/http_manager.dart';
import '../../config/address.dart';
import '../../hj_utils/light_model.dart';
import '../../hj_utils/store_keys.dart';
import '../../hj_utils/text_util.dart';
// import 'client_api.dart';
import '../../track_event_manager/device_service.dart';
/// 连接超时15秒
const int CONNECT_TIME_OUT = 15 * 1000;
final netManager = NetManager();
class NetManager {
static bool _inited = false;
init(String baseUrl) {
httpManager.init(baseUrl);
_inited = true;
}
reset() {
netManager.init(Address.baseApiPath ?? "");
}
static bool get isInited => _inited;
Future<String> getToken() async {
// 优先读内存(每次启动自动登录后 setToken 已写入),
// 兜底再读 lightKViOS release 包若 MMKV 异常,至少内存 token 能保证可用
var token = Address.token ?? '';
if (token.isEmpty) {
token = (await lightKV.getString(StoreKeys.NET_TOKEN)) ?? '';
if (token.isNotEmpty) {
Address.token = token;
}
}
return token;
}
Future setToken(String? token) async {
// 该key不共享,不放全局变量
Address.token = token;
return lightKV.setString(StoreKeys.NET_TOKEN, token);
}
/// 获取 UA:优先命中 KV 缓存。
Future<String> userAgent() => DeviceInfoService.getCachedUserAgent();
/// 强制重新生成并写回缓存(扫码登录、设备切换等场景)。
Future<String> refreshUserAgent() => DeviceInfoService.getCachedUserAgent(
deviceId: DeviceInfoService.deviceId);
/// 清除ua
Future clearUserAgent() => DeviceInfoService.clearCachedUserAgent();
/// 服务器时间
DateTime? _serverTime;
/// 服务器时间和本地时间的差值
int _diffTimeInSeconds = 0;
/// 获取上一次服务器返回的时间
DateTime? getServerTime() {
if (null != _serverTime) {
return _serverTime;
} else {
return DateTime.now();
}
}
/// 设置服务器时间
void setServerTime(String? serverTimeS) {
if (TextUtil.isNotEmpty(serverTimeS)) {
_serverTime = DateTime.parse(serverTimeS!);
_diffTimeInSeconds = DateTime.now().difference(_serverTime!).inSeconds;
debugLog(
"============>server diff from local in seconds:$_diffTimeInSeconds");
}
}
/// 获取修复后的本地时间,应该是和服务器时间是同步的
DateTime getFixedCurTime() {
return DateTime.now().add(Duration(seconds: -_diffTimeInSeconds));
}
}
Dio createDio({BaseOptions? options}) {
final defaultOptions = BaseOptions(
connectTimeout: const Duration(seconds: 15),
receiveTimeout: const Duration(seconds: 15),
// dio 原生会加上 request header:accept-encoding gzip,导致部分请求失败
// headers: {HttpHeaders.acceptEncodingHeader: "*"},
validateStatus: (int? status) => (status ?? 600) < 600,
);
options ??= defaultOptions;
options.headers[HttpHeaders.acceptEncodingHeader] = "*";
var dio = Dio(options);
var adapter = DefaultHttpClientAdapter();
// var adapter = DefaultHttpClientAdapter();
adapter.onHttpClientCreate = (client) {
client.badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
return client;
};
dio.httpClientAdapter = adapter;
return dio;
}