Files
ln-ios/ln_jq_app/lib/storage_service.dart
2025-11-12 18:02:04 +08:00

99 lines
2.8 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: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<StorageService> init() async {
_box = GetStorage();
return this;
}
/// --- Getter 方法,用于读取状态 ---
/// 判断是否已登录 (通过检查 token 是否存在且不为空)
bool get isLoggedIn =>
_box
.read<String?>(_tokenKey)
?.isNotEmpty ?? false;
/// 获取 Token
String? get token => _box.read<String?>(_tokenKey);
/// 获取 UserId
String? get userId => _box.read<String?>(_userIdKey);
/// 获取 Name
String? get name => _box.read<String?>(_nameKey);
/// 获取 Phone
String? get phone => _box.read<String?>(_phoneKey);
/// 获取 ID Card
String? get idCard => _box.read<String?>(_idCardKey);
///获取当前登录渠道
/// 从存储中读取字符串,并转换为枚举类型
LoginChannel get loginChannel {
final channelString = _box.read<String?>(_channelKey);
if (channelString == 'station') {
return LoginChannel.station;
} else if (channelString == 'driver') {
return LoginChannel.driver;
}
return LoginChannel.none;
}
/// --- 操作方法 ---
/// 保存用户信息
/// @param channel - 登录渠道station 或 driver
Future<void> 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<void> 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);
}
}