Files
biz_xfj_cloud/lib/common/models/manage/root_access_models.dart
T
2026-07-30 17:06:17 +08:00

50 lines
1.7 KiB
Dart

/// Android Root 权限的持久化检查状态,枚举名写入本机 sysJson,不能随界面文案调整。
enum RootAccessStatus {
/// 尚未完成过有效检测,包含旧版本配置升级后的默认状态。
unknown,
/// `su -c id` 在超时内成功返回且输出确认当前 UID 为 0。
available,
/// Root 被拒绝、命令不存在、执行超时或返回结果未确认 UID 为 0。
unavailable,
}
/// 单次 Root 检查结果,原生层负责命令执行,Flutter 负责持久化和界面反馈。
class RootAccessCheckResult {
/// 创建一份带检查时间与诊断摘要的 Root 结果。
const RootAccessCheckResult({
required this.status,
required this.checkedAt,
required this.diagnostic,
});
/// 本次检查得出的可用状态。
final RootAccessStatus status;
/// Flutter 收到原生检查结果的本地时间。
final DateTime checkedAt;
/// 可供运维排查的简短摘要,不保存完整命令输出或敏感环境信息。
final String diagnostic;
/// Root 是否已经通过真实命令验证。
bool get available => status == RootAccessStatus.available;
/// 从原生 MethodChannel 结构化结果创建检查记录,未知编码按不可用处理。
factory RootAccessCheckResult.fromMap(Map<dynamic, dynamic>? data) {
final available = data?['available'] == true;
final diagnostic = data?['message']?.toString().trim();
return RootAccessCheckResult(
status:
available ? RootAccessStatus.available : RootAccessStatus.unavailable,
checkedAt: DateTime.now(),
diagnostic: diagnostic?.isNotEmpty == true
? diagnostic!
: available
? '已确认 uid=0'
: '未获得 Root 权限',
);
}
}