import 'package:flutter/services.dart'; /// 安装进度事件(原生 PackageInstaller 会话回调经 EventChannel 回传) class InstallEvent { /// progress / finished / failed final String event; /// event=progress 时的安装进度 0-100 final int progress; /// event=finished 时是否安装成功 final bool? success; /// event=failed 时的错误描述 final String? error; const InstallEvent({ required this.event, this.progress = 0, this.success, this.error, }); } /// App 内安装 APK:原生侧 PackageInstaller 会话安装(InstallerChannel.kt) class ApkInstaller { static const _method = MethodChannel('observer/installer'); static const _progress = EventChannel('observer/installer/progress'); /// 提交安装。返回 installing(已进入安装流程)/ permission_required /// (未允许「安装未知应用」,原生侧已拉起系统设置页)。 static Future install(String path) => _method.invokeMethod('install', {'path': path}).then( (v) => v ?? 'installing', ); /// 安装进度流:progress(0-100) → finished(success) / failed(error) static Stream progress() { return _progress.receiveBroadcastStream().map((e) { final m = e as Map; return InstallEvent( event: m['event'] as String? ?? '', progress: (m['progress'] as num?)?.toInt() ?? 0, success: m['success'] as bool?, error: m['error'] as String?, ); }); } }