Files
flutterApp/lib/features/v2/home/data/datasources/site_datasource_impl.dart
Songzex 0db64a96e7 1.优化补足了首页下拉刷新中对获取场站接口的加入,确保能够实时获取数据并渲染。
2.优化修改了tcp重连机制,具体操作:断开重连时候不再建立新链接 而是将旧链接重置,并重新发送数据。
3.大面积的给项目中的各个页面 手动接入了多语言的支持。同时也调整了相应带来的问题英文长度较大影响原有的样式的问题,已解决了对应的样式不和谐问题。保证了外观的统一性。
4.给项目中的主要操作加了几个核心的操作比如远程遥控和路径规划添加了双层的保护,设置里安全模式,即在此期间对服务器推送的重复登录操作后的自动退出登录做一个拦截 保证操作的安全性。
2026-07-02 16:04:30 +08:00

76 lines
2.6 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'package:dio/dio.dart';
import 'package:get_it/get_it.dart';
import 'package:maibu_satabot_v2/core/app/app_user_cubit.dart';
import 'package:maibu_satabot_v2/core/consts/http_api_consts.dart';
import 'package:maibu_satabot_v2/core/storage/user_storage.dart';
import 'package:maibu_satabot_v2/features/v2/home/data/datasources/site_datasource.dart';
import 'package:maibu_satabot_v2/features/v2/home/domain/entities/site_entity.dart';
class SiteDataSourceImpl implements SiteDataSource {
final Dio dio;
final UserStorage _userStorage;
final AppUserCubit _appUserCubit;
SiteDataSourceImpl(this.dio, this._userStorage, this._appUserCubit);
@override
Future<List<SiteEntity>> getSiteList(int orgId) async {
print('🔍 [SiteDataSource] 开始获取 Token...');
print('🔍 [SiteDataSource] AppUserCubit 当前用户: ${_appUserCubit.state.user?.username}');
// 优先从全局状态获取 Token(更快更可靠)
var token = _appUserCubit.state.user?.token;
print('🔍 [SiteDataSource] 从 AppUserCubit 获取的 Token: ${token != null ? "${token.substring(0, 20)}..." : "null"}');
// 如果全局状态没有,再从本地存储获取
if (token == null) {
print('⚠️ [SiteDataSource] AppUserCubit 没有 Token,尝试从本地存储获取...');
final user = await _userStorage.getUser();
token = user?.token;
print('🔍 [SiteDataSource] 从本地存储获取的 Token: ${token != null ? "${token.substring(0, 20)}..." : "null"}');
}
print('🔑 [SiteDataSource] 获取到的 Token: ${token != null ? "${token.substring(0, 20)}..." : "null"}');
// 构建查询参数:orgId 为 0 时不传递
final queryParams = <String, dynamic>{
'pageNum': 1,
'pageSize': 9999,
};
if (orgId != 0) {
queryParams['orgId'] = orgId;
}
final response = await dio.get(
HttpApiConsts.getSiteList,
queryParameters: queryParams,
options: Options(
headers: {
'Authorization': token != null ? 'Bearer $token' : '',
},
),
);
if (response.statusCode != 200) {
throw Exception('网络请求失败: ${response.statusCode}');
}
final responseData = response.data;
if (responseData['code'] != 200) {
throw Exception(responseData['msg'] ?? '业务异常');
}
final List<dynamic> rows = responseData['rows'] ?? [];
print('📤 [SiteDataSource] 接口返回原始数据:');
for (var i = 0; i < rows.length && i < 3; i++) {
print(' 场站$i: ${rows[i]}');
}
return rows.map((item) => SiteEntity.fromJson(item)).toList();
}
}