yx_app_upgrade_flutter/lib/models/install_strategy.dart

101 lines
3.1 KiB
Dart

/// 安装策略枚举
enum InstallStrategy {
/// 系统流程:让系统处理权限检查和用户确认(推荐)
/// 类似主流应用的安装体验,直接弹出"XX正尝试安装应用"对话框
systemFlow,
/// 预检查权限:安装前先检查权限,无权限时返回错误
/// 需要开发者手动处理权限申请流程
preCheckPermission,
/// 智能模式:根据设备和权限状态自动选择最佳策略
/// 有权限时使用预检查,无权限时使用系统流程
smart,
}
/// 安装配置类
class InstallConfig {
/// 安装策略
final InstallStrategy strategy;
/// 是否在权限被拒绝时自动跳转到权限设置页面
final bool autoOpenSettings;
/// 是否显示权限说明对话框
final bool showPermissionRationale;
/// 权限说明对话框的标题
final String? rationaleTitle;
/// 权限说明对话框的内容
final String? rationaleContent;
const InstallConfig({
this.strategy = InstallStrategy.systemFlow,
this.autoOpenSettings = false,
this.showPermissionRationale = false,
this.rationaleTitle,
this.rationaleContent,
});
/// 系统流程配置(推荐)
static const InstallConfig systemFlow = InstallConfig(
strategy: InstallStrategy.systemFlow,
);
/// 预检查权限配置
static const InstallConfig preCheckPermission = InstallConfig(
strategy: InstallStrategy.preCheckPermission,
autoOpenSettings: true,
showPermissionRationale: true,
rationaleTitle: '需要安装权限',
rationaleContent: '为了完成应用更新,需要允许安装未知来源的应用。',
);
/// 智能模式配置
static const InstallConfig smart = InstallConfig(
strategy: InstallStrategy.smart,
autoOpenSettings: true,
showPermissionRationale: true,
rationaleTitle: '需要安装权限',
rationaleContent: '为了完成应用更新,需要允许安装未知来源的应用。',
);
/// 创建自定义配置
InstallConfig copyWith({
InstallStrategy? strategy,
bool? autoOpenSettings,
bool? showPermissionRationale,
String? rationaleTitle,
String? rationaleContent,
}) {
return InstallConfig(
strategy: strategy ?? this.strategy,
autoOpenSettings: autoOpenSettings ?? this.autoOpenSettings,
showPermissionRationale: showPermissionRationale ?? this.showPermissionRationale,
rationaleTitle: rationaleTitle ?? this.rationaleTitle,
rationaleContent: rationaleContent ?? this.rationaleContent,
);
}
Map<String, dynamic> toMap() {
return {
'strategy': strategy.index,
'autoOpenSettings': autoOpenSettings,
'showPermissionRationale': showPermissionRationale,
'rationaleTitle': rationaleTitle,
'rationaleContent': rationaleContent,
};
}
factory InstallConfig.fromMap(Map<String, dynamic> map) {
return InstallConfig(
strategy: InstallStrategy.values[map['strategy'] ?? 0],
autoOpenSettings: map['autoOpenSettings'] ?? false,
showPermissionRationale: map['showPermissionRationale'] ?? false,
rationaleTitle: map['rationaleTitle'],
rationaleContent: map['rationaleContent'],
);
}
}