101 lines
3.1 KiB
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'],
|
|
);
|
|
}
|
|
}
|