import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; import 'package:ln_jq_app/common/model/vehicle_info.dart'; /// 定义登录渠道的枚举类型 enum LoginChannel { station, // 站点 driver, // 司机 none, // 未登录或未知 } class StorageService extends GetxService { late final GetStorage _box; // --- 定义存储时使用的键名 (Key) --- static const String _tokenKey = 'user_token'; static const String _userIdKey = 'user_id'; static const String _channelKey = 'login_channel'; static const String _nameKey = 'user_name'; static const String _phoneKey = 'user_phone'; static const String _idCardKey = 'user_id_card'; // 车辆信息的键名 static const String _vehicleInfoKey = 'vehicle_info'; // 提供一个静态的 'to' 方法,方便全局访问 static StorageService get to => Get.find(); // Service 初始化 Future init() async { _box = GetStorage(); return this; } /// --- Getter 方法,用于读取状态 --- bool get isLoggedIn => _box.read(_tokenKey)?.isNotEmpty ?? false; String? get token => _box.read(_tokenKey); String? get userId => _box.read(_userIdKey); String? get name => _box.read(_nameKey); String? get phone => _box.read(_phoneKey); String? get idCard => _box.read(_idCardKey); /// 判断是否已有车辆信息缓存 bool get hasVehicleInfo => _box.hasData(_vehicleInfoKey); /// 获取已缓存的车辆信息 VehicleInfo? get vehicleInfo { final vehicleJson = _box.read(_vehicleInfoKey); if (vehicleJson != null) { // 使用我们之前创建的辅助函数来解析 return vehicleInfoFromJson(vehicleJson); } return null; } ///获取当前登录渠道 LoginChannel get loginChannel { final channelString = _box.read(_channelKey); if (channelString == 'station') { return LoginChannel.station; } else if (channelString == 'driver') { return LoginChannel.driver; } return LoginChannel.none; } /// --- 操作方法 --- Future saveLoginInfo({ required String token, required String userId, required String channel, String? name, String? phone, String? idCard, }) async { await _box.write(_tokenKey, token); await _box.write(_userIdKey, userId); await _box.write(_channelKey, channel); await _box.write(_nameKey, name); await _box.write(_phoneKey, phone); await _box.write(_idCardKey, idCard); } /// 保存车辆信息 Future saveVehicleInfo(VehicleInfo data) async { // 使用辅助函数将对象转换为 JSON 字符串并保存 await _box.write(_vehicleInfoKey, vehicleInfoToJson(data)); } /// 清除车辆信息 Future clearVehicleInfo() async { await _box.remove(_vehicleInfoKey); } /// 删除用户信息 (登出) Future clearLoginInfo() async { await _box.remove(_tokenKey); await _box.remove(_userIdKey); await _box.remove(_channelKey); await _box.remove(_nameKey); await _box.remove(_phoneKey); await _box.remove(_idCardKey); // 登出时一并清除车辆信息 await clearVehicleInfo(); } }