/// 安装策略枚举 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 toMap() { return { 'strategy': strategy.index, 'autoOpenSettings': autoOpenSettings, 'showPermissionRationale': showPermissionRationale, 'rationaleTitle': rationaleTitle, 'rationaleContent': rationaleContent, }; } factory InstallConfig.fromMap(Map map) { return InstallConfig( strategy: InstallStrategy.values[map['strategy'] ?? 0], autoOpenSettings: map['autoOpenSettings'] ?? false, showPermissionRationale: map['showPermissionRationale'] ?? false, rationaleTitle: map['rationaleTitle'], rationaleContent: map['rationaleContent'], ); } }