1.优化补足了首页下拉刷新中对获取场站接口的加入,确保能够实时获取数据并渲染。

2.优化修改了tcp重连机制,具体操作:断开重连时候不再建立新链接 而是将旧链接重置,并重新发送数据。
3.大面积的给项目中的各个页面 手动接入了多语言的支持。同时也调整了相应带来的问题英文长度较大影响原有的样式的问题,已解决了对应的样式不和谐问题。保证了外观的统一性。
4.给项目中的主要操作加了几个核心的操作比如远程遥控和路径规划添加了双层的保护,设置里安全模式,即在此期间对服务器推送的重复登录操作后的自动退出登录做一个拦截 保证操作的安全性。
This commit is contained in:
2026-07-02 16:04:30 +08:00
parent d5a83c1221
commit 0db64a96e7
69 changed files with 5018 additions and 1532 deletions

View File

@@ -17,7 +17,6 @@ class DeviceHttpDatasourceImpl implements DeviceHttpDatasource {
final UserStorage _userStorage; // 🔥 新增字段
final ILoggerService _logger = GetIt.I<ILoggerService>();
// 🔥 修改构造函数,注入 UserStorage
DeviceHttpDatasourceImpl(this.dio, this._userStorage);
@@ -32,22 +31,41 @@ class DeviceHttpDatasourceImpl implements DeviceHttpDatasource {
Future<int> bindDevice(String deviceId, String deviceAlias) async {
final logger = GetIt.I<ILoggerService>() as SentryLoggerImpl;
logger.logWithLevel('用户点击bindDevice方法开始触发', level: 'INFO');
logger.logWithLevel('用户点击bindDevice方法API 请求开始', level: 'INFO', data: {'url': 'https://serviceri.satabot.com/iot/device/bindDevice'});
var response = await dio.post(HttpApiConsts.bindDevice, data: {'deviceId': deviceId, 'deviceAlias': deviceAlias});
logger.logWithLevel(
'用户点击bindDevice方法API 请求开始',
level: 'INFO',
data: {'url': 'https://serviceri.satabot.com/iot/device/bindDevice'},
);
var response = await dio.post(
HttpApiConsts.bindDevice,
data: {'deviceId': deviceId, 'deviceAlias': deviceAlias},
);
logger.logWithLevel(
'请求详细参数',
level: 'DEBUG',
data: {'url': 'https://serviceri.satabot.com/iot/device/bindDevice', 'deviceId': deviceId, 'deviceAlias': deviceAlias},
data: {
'url': 'https://serviceri.satabot.com/iot/device/bindDevice',
'deviceId': deviceId,
'deviceAlias': deviceAlias,
},
);
if (response.statusCode != 200) {
logger.logWithLevel('API 响应失败', level: 'ERROR', data: {'statusCode': response.statusCode, 'data': response.data});
logger.logWithLevel(
'API 响应失败',
level: 'ERROR',
data: {'statusCode': response.statusCode, 'data': response.data},
);
throw Exception('网络请求失败:${response.statusCode}');
}
final responseData = response.data;
if (responseData['code'] != 200 || responseData['data'] != true) {
logger.logWithLevel('API 响应失败', level: 'ERROR', data: {'statusCode': response.statusCode, 'data': response.data});
logger.logWithLevel(
'API 响应失败',
level: 'ERROR',
data: {'statusCode': response.statusCode, 'data': response.data},
);
throw Exception(responseData['msg'] ?? '业务异常');
}
@@ -70,6 +88,7 @@ class DeviceHttpDatasourceImpl implements DeviceHttpDatasource {
),
);
if (response.statusCode != 200) {
print('>>> [getUserDevices] 🚨🚨🚨 状态码异常 ${response.statusCode},触发自动退出登录!时间: ${DateTime.now()}');
await sl<AuthCubit>().logout();
throw Exception('网络请求失败:${response.statusCode}');
}
@@ -77,6 +96,7 @@ class DeviceHttpDatasourceImpl implements DeviceHttpDatasource {
final responseData = response.data;
if (responseData['code'] != 200) {
print('>>> [getUserDevices] 🚨🚨🚨 业务码异常 code=${responseData['code']},触发自动退出登录!时间: ${DateTime.now()}');
await sl<AuthCubit>().logout();
throw Exception(responseData['msg'] ?? '业务异常');
}
@@ -96,10 +116,14 @@ class DeviceHttpDatasourceImpl implements DeviceHttpDatasource {
Future<int> switchDevice(String platform, String deviceId) async {
final logger = GetIt.I<ILoggerService>() as SentryLoggerImpl;
final token = await _getToken();
// print('用户点击switchDevice方法开始触发: $token');
// print('用户点击switchDevice方法开始触发: $token');
_logger.logWithLevel('用户点击switchDevice方法开始触发', level: 'DEBUG');
logger.logWithLevel('用户点击switchDevice方法开始触发', level: 'DEBUG');
logger.logWithLevel('用户点击switchDevice方法API 请求开始', level: 'INFO', data: {'url': 'https://serviceri.satabot.com/iot/device/switchDevice'});
// logger.logWithLevel('用户点击switchDevice方法开始触发', level: 'DEBUG');
logger.logWithLevel(
'用户点击switchDevice方法API 请求开始',
level: 'INFO',
data: {'url': 'https://serviceri.satabot.com/iot/device/switchDevice'},
);
var response = await dio.post(
HttpApiConsts.switchDevice,
data: {'platform': platform, 'deviceId': deviceId},
@@ -113,17 +137,33 @@ class DeviceHttpDatasourceImpl implements DeviceHttpDatasource {
logger.logWithLevel(
'请求详细参数',
level: 'DEBUG',
data: {'url': 'https://serviceri.satabot.com/iot/device/switchDevice', 'platform': platform, 'deviceId': deviceId},
data: {
'url': 'https://serviceri.satabot.com/iot/device/switchDevice',
'platform': platform,
'deviceId': deviceId,
},
);
if (response.statusCode != 200) {
logger.logWithLevel('API 请求失败', level: 'ERROR', data: {'statusCode': response.statusCode, 'data': response.data});
logger.logWithLevel(
'API 请求失败',
level: 'ERROR',
data: {'statusCode': response.statusCode, 'data': response.data},
);
throw Exception('网络请求失败:${response.statusCode}');
}
final responseData = response.data;
logger.logWithLevel('API 响应成功', level: 'INFO', data: {'statusCode': response.statusCode, 'data': response.data});
logger.logWithLevel(
'API 响应成功',
level: 'INFO',
data: {'statusCode': response.statusCode, 'data': response.data},
);
if (responseData['code'] != 200) {
logger.logWithLevel('API 响应失败', level: 'ERROR', data: {'statusCode': response.statusCode, 'data': response.data});
logger.logWithLevel(
'API 响应失败',
level: 'ERROR',
data: {'statusCode': response.statusCode, 'data': response.data},
);
throw Exception(responseData['msg'] ?? '业务异常');
}
return 1;
@@ -131,7 +171,10 @@ class DeviceHttpDatasourceImpl implements DeviceHttpDatasource {
@override
Future<int> unbindDevice(String deviceId, String deviceName) async {
final response = await dio.post('/forward/device/unbind', data: {"deviceId": deviceId, "deviceName": deviceName});
final response = await dio.post(
'/forward/device/unbind',
data: {"deviceId": deviceId, "deviceName": deviceName},
);
final data = response.data;
@@ -147,7 +190,10 @@ class DeviceHttpDatasourceImpl implements DeviceHttpDatasource {
}
Future<int> updateDeviceName(String deviceId, String deviceName) async {
final response = await dio.post('/forward/device/updateDeviceAlias', data: {"deviceId": deviceId, "deviceAlias": deviceName});
final response = await dio.post(
'/forward/device/updateDeviceAlias',
data: {"deviceId": deviceId, "deviceAlias": deviceName},
);
final data = response.data;
@@ -169,7 +215,14 @@ class DeviceHttpDatasourceImpl implements DeviceHttpDatasource {
try {
// 发起 GET 请求
logger.logWithLevel('用户点击getDeviceLocation方法开始触发', level: 'INFO');
logger.logWithLevel('请求详细参数', level: 'DEBUG', data: {'url': 'https://serviceri.satabot.com/iot/device/userDevice', 'tenantName': deviceame});
logger.logWithLevel(
'请求详细参数',
level: 'DEBUG',
data: {
'url': 'https://serviceri.satabot.com/iot/device/userDevice',
'tenantName': deviceame,
},
);
final response = await dio.get(
'https://serviceri.satabot.com/iot/device/userDevice',
queryParameters: {'tenantName': deviceame},
@@ -184,12 +237,27 @@ class DeviceHttpDatasourceImpl implements DeviceHttpDatasource {
// 检查响应状态码
if (response.statusCode == 200) {
final data = response.data;
logger.logWithLevel('API 响应接收', level: 'DEBUG', data: {'statusCode': response.statusCode, 'data': response.data});
logger.logWithLevel(
'API 响应接收',
level: 'DEBUG',
data: {'statusCode': response.statusCode, 'data': response.data},
);
if (data['code'] == 200) {
//return data['data']; // 返回设备数据
final locationData = data['data']; // 假设数据结构,测试时候如有不妥就修改结果的实例化
logger.logWithLevel('成功获取设备位置', level: 'INFO', data: {'lat': locationData['latitude'], 'lng': locationData['longitude']});
return DeviceLocationEntity(deviceName: locationData['deviceName'], latitude: locationData['latitude'], longitude: locationData['longitude']);
logger.logWithLevel(
'成功获取设备位置',
level: 'INFO',
data: {
'lat': locationData['latitude'],
'lng': locationData['longitude'],
},
);
return DeviceLocationEntity(
deviceName: locationData['deviceName'],
latitude: locationData['latitude'],
longitude: locationData['longitude'],
);
} else {
logger.logWithLevel(data['msg'] ?? '业务异常', level: 'ERROR');
throw Exception(data['msg'] ?? '业务异常');