import 'package:get/get.dart'; import 'package:get_storage/get_storage.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'; // 提供一个静态的 'to' 方法,方便全局访问 static StorageService get to => Get.find(); // Service 初始化 Future init() async { _box = GetStorage(); return this; } /// --- Getter 方法,用于读取状态 --- /// 判断是否已登录 (通过检查 token 是否存在且不为空) bool get isLoggedIn => _box .read(_tokenKey) ?.isNotEmpty ?? false; /// 获取 Token String? get token => _box.read(_tokenKey); /// 获取 UserId String? get userId => _box.read(_userIdKey); /// 获取 Name String? get name => _box.read(_nameKey); /// 获取 Phone String? get phone => _box.read(_phoneKey); /// 获取 ID Card String? get idCard => _box.read(_idCardKey); ///获取当前登录渠道 /// 从存储中读取字符串,并转换为枚举类型 LoginChannel get loginChannel { final channelString = _box.read(_channelKey); if (channelString == 'station') { return LoginChannel.station; } else if (channelString == 'driver') { return LoginChannel.driver; } return LoginChannel.none; } /// --- 操作方法 --- /// 保存用户信息 /// @param channel - 登录渠道,station 或 driver 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); // 保存新增的字段,如果为 null, GetStorage 会移除该键 await _box.write(_nameKey, name); await _box.write(_phoneKey, phone); await _box.write(_idCardKey, idCard); } ///删除用户信息,增加删除渠道信息 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); } }