Merge pull request '完成提交' (#1) from no_need_install_unknown_application_permissions into master

Reviewed-on: wangyang/app_upgrade_plugin#1
This commit is contained in:
wangyang 2025-09-19 13:50:44 +08:00
commit b9721f93c7
2 changed files with 51 additions and 18 deletions

View File

@ -311,6 +311,7 @@ class _MyHomePageState extends State<MyHomePage> {
autoDownload: true, autoDownload: true,
autoInstall: false, autoInstall: false,
installTimeout: 60, installTimeout: 60,
requireInstallPermission: false, //
customToast: (message) { customToast: (message) {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar( SnackBar(
@ -321,12 +322,25 @@ class _MyHomePageState extends State<MyHomePage> {
}, },
)); ));
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('已配置自定义设置')), const SnackBar(content: Text('已配置自定义设置(无权限模式)')),
); );
}, },
icon: const Icon(Icons.settings), icon: const Icon(Icons.settings),
label: const Text('自定义配置'), label: const Text('自定义配置'),
), ),
const SizedBox(height: 8),
ElevatedButton.icon(
onPressed: _isLoading
? null
: () {
AppUpgradeSimple.instance.configure(UpgradeConfig.withPermission);
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('已启用权限模式')),
);
},
icon: const Icon(Icons.security),
label: const Text('启用权限模式'),
),
], ],
), ),
), ),

View File

@ -124,6 +124,9 @@ class UpgradeConfig {
/// Toast显示函数 /// Toast显示函数
final void Function(String message)? customToast; final void Function(String message)? customToast;
/// false
final bool requireInstallPermission;
const UpgradeConfig({ const UpgradeConfig({
this.showNoUpdateToast = true, this.showNoUpdateToast = true,
this.autoDownload = false, this.autoDownload = false,
@ -133,18 +136,21 @@ class UpgradeConfig {
this.installTimeout = 45, this.installTimeout = 45,
this.enableDebugLog = true, this.enableDebugLog = true,
this.customToast, this.customToast,
this.requireInstallPermission = false, //
}); });
/// ///
static const UpgradeConfig auto = UpgradeConfig( static const UpgradeConfig auto = UpgradeConfig(
autoDownload: true, autoDownload: true,
autoInstall: true, autoInstall: true,
requireInstallPermission: false,
); );
/// ///
static const UpgradeConfig silent = UpgradeConfig( static const UpgradeConfig silent = UpgradeConfig(
showNoUpdateToast: false, showNoUpdateToast: false,
enableDebugLog: false, enableDebugLog: false,
requireInstallPermission: false,
); );
/// + /// +
@ -152,6 +158,7 @@ class UpgradeConfig {
enableDebugLog: true, enableDebugLog: true,
installTimeout: 30, installTimeout: 30,
connectionTimeout: 10, connectionTimeout: 10,
requireInstallPermission: false,
); );
/// + /// +
@ -160,6 +167,12 @@ class UpgradeConfig {
enableDebugLog: false, enableDebugLog: false,
installTimeout: 60, installTimeout: 60,
connectionTimeout: 30, connectionTimeout: 30,
requireInstallPermission: false,
);
///
static const UpgradeConfig withPermission = UpgradeConfig(
requireInstallPermission: true,
); );
} }
@ -591,16 +604,22 @@ mixin _UpgradeDialogLogic<T extends StatefulWidget> on State<T> {
_statusText = '准备安装...'; _statusText = '准备安装...';
}); });
final hasPermission = await PermissionHelper.checkAndRequestInstallPermission(context: context); //
if (!hasPermission) { if (config.requireInstallPermission) {
if (mounted) { debugPrint('🔐 检查安装权限(配置要求)');
setState(() { final hasPermission = await PermissionHelper.checkAndRequestInstallPermission(context: context);
_isInstalling = false; if (!hasPermission) {
_statusText = '权限被拒绝'; if (mounted) {
}); setState(() {
showToast('未授予安装权限,无法完成更新'); _isInstalling = false;
_statusText = '权限被拒绝';
});
showToast('未授予安装权限,无法完成更新');
}
return;
} }
return; } else {
debugPrint('🚀 跳过权限检查,直接安装(配置默认)');
} }
if (mounted) { if (mounted) {
@ -619,7 +638,7 @@ mixin _UpgradeDialogLogic<T extends StatefulWidget> on State<T> {
_isWaitingForInstallation = true; _isWaitingForInstallation = true;
_statusText = '请完成安装'; _statusText = '请完成安装';
}); });
showToast('请在系统弹窗中完成安装,完成后点击下方确认按钮'); showToast('请在系统弹窗中完成安装');
// //
_startInstallationTimeoutCheck(); _startInstallationTimeoutCheck();
@ -748,8 +767,8 @@ mixin _UpgradeDialogLogic<T extends StatefulWidget> on State<T> {
return; return;
} }
// //
if (_statusText == '权限被拒绝') { if (_statusText == '权限被拒绝' && config.requireInstallPermission) {
final hasPermission = await PermissionHelper.checkAndRequestInstallPermission(context: context); final hasPermission = await PermissionHelper.checkAndRequestInstallPermission(context: context);
if (!hasPermission) { if (!hasPermission) {
showToast('仍未获得安装权限,请在设置中手动开启'); showToast('仍未获得安装权限,请在设置中手动开启');
@ -1394,7 +1413,7 @@ mixin _UpgradeDialogLogic<T extends StatefulWidget> on State<T> {
/// ///
IconData _getRetryButtonIcon() { IconData _getRetryButtonIcon() {
if (_statusText == '权限被拒绝') { if (_statusText == '权限被拒绝' && config.requireInstallPermission) {
return Icons.settings; return Icons.settings;
} else if (_statusText == '安装失败' || } else if (_statusText == '安装失败' ||
_statusText == '安装异常' || _statusText == '安装异常' ||
@ -1414,7 +1433,7 @@ mixin _UpgradeDialogLogic<T extends StatefulWidget> on State<T> {
/// ///
String _getRetryButtonText() { String _getRetryButtonText() {
if (_statusText == '权限被拒绝') { if (_statusText == '权限被拒绝' && config.requireInstallPermission) {
return '设置'; return '设置';
} else if (_statusText == '安装失败' || } else if (_statusText == '安装失败' ||
_statusText == '安装异常' || _statusText == '安装异常' ||
@ -1452,7 +1471,7 @@ mixin _UpgradeDialogLogic<T extends StatefulWidget> on State<T> {
return _statusText == '安装被取消' || return _statusText == '安装被取消' ||
_statusText == '安装失败' || _statusText == '安装失败' ||
_statusText == '安装异常' || _statusText == '安装异常' ||
_statusText == '权限被拒绝' || (_statusText == '权限被拒绝' && config.requireInstallPermission) ||
_statusText == '安装超时' || _statusText == '安装超时' ||
_statusText == '检测失败' || _statusText == '检测失败' ||
_statusText == '等待安装中' || _statusText == '等待安装中' ||
@ -1480,7 +1499,7 @@ mixin _UpgradeDialogLogic<T extends StatefulWidget> on State<T> {
case '安装被取消': case '安装被取消':
return '点击重新安装'; return '点击重新安装';
case '权限被拒绝': case '权限被拒绝':
return '点击打开设置'; return config.requireInstallPermission ? '点击打开设置' : '点击重试';
case '安装超时': case '安装超时':
return '点击重新尝试'; return '点击重新尝试';
default: default: