
音视频直播移动开发【免费下载链接】pure_live纯粹直播:哔哩哔哩/虎牙/斗鱼/快手/抖音/网易cc/YY直播/Twitch直播/SOOP直播/M38自定义源应有尽有。项目地址https://gitcode.com/gh_mirrors/pur/pure_live点击查看免费下载本文基于 pure_live 仓库中的缓存与数据页面审计文档docs/CACHE_DATA_SETTINGS_SCOPE_AUDIT_2026_09_11.md深入解析缓存与数据设置页在验收组 A2-01 下暴露的存储范围越权、并发竞态与窄屏布局问题以及对应的CacheStoragePolicy范围收紧、共享 Future 事务模型和 320×480 布局修复方案。读完本文你将理解为什么清空缓存绝不能触碰录制成品、下载字体与 IPTV 数据库以及如何在 Flutter 中实现可失败传播、可并发去重的缓存清理链路。一、审计背景与验收基线本次审计属于验收组A2-01缓存与数据二级页及其确认弹窗基线提交为f0aa3850e3700716bd90cf6597b55323f1241269。为保证界面在极端配置下仍可用审计采用固定布局矩阵平台与窗口Windows320×480语言英文文字缩放3.0 倍覆盖内容缓存大小、两个操作入口刷新缩略图、清空缓存、取消和确认按钮存储范围审查覆盖以下六类目录与缓存存储对象用途是否属于临时缓存RECORDS默认录制成品目录否持久用户数据DOWNLOADS已下载字体、升级包否持久用户数据IPTV_CACHE播放列表数据库、用户导入、EPG 与同步状态否持久用户数据IMAGE_CACHE缩略图临时目录是EMOJI_CACHE表情文件临时目录是flutter_cache_manager编码图片缓存网络图片磁盘缓存是上述目录常量在 lib/core/platform/app_path_manager.dart 中集中定义dirImageCache IMAGE_CACHE、dirEmojiCache EMOJI_CACHE、dirRecords RECORDS、dirDownload DOWNLOADS、dirIptvCache IPTV_CACHE另有fontDirectoryName fonts规范字体目录。所有权判断是本次审计的核心线索只有后三类临时目录才有资格出现在缓存与数据页面中。二、修改前的问题复现与根因分析2.1 窄屏 ListTile 断言尾部件挤压标题区修改前页面在固定矩阵中稳定触发ListTile断言缓存数值与刷新图标作为自然宽度尾部占满 256 像素卡片正文宽度导致标题区失去布局空间。在 3.0 倍文字缩放下长数字、图标与标题无法共存于一行的直接后果就是断言失败、入口不可点击。2.2 更严重的范围错误清空动作越权删除持久数据继续审查操作语义和目录调用后确认了比布局更严重的存储范围错误页面把清空本地所有缓存直接映射到RECORDS、DOWNLOADS、IPTV_CACHE和图片目录并对这些根目录执行递归删除。RECORDS是默认录制成品目录DOWNLOADS持有已下载字体和升级包IPTV_CACHE持有播放列表数据库、用户导入、EPG 与同步状态。三者都是可感知的持久用户数据不属于临时缓存——用户点击清空缓存却可能连带删除自己录制的直播文件与收藏的 IPTV 频道。2.3 文案错用标题与说明自相矛盾页面误用了录制中心的clear_all_cache/confirm_clear_cache文案。仓库翻译文件中的历史键位印证了这一点clear_all_cache的正文是清空录制文件目录assets/translations/zh.json而该键下还残留着clear_all_cache_meida_desc 清空本地所有缓存的旧描述。结果页面上标题显示清空录制文件目录说明却声称清空本地所有缓存与实际混合删除范围互相矛盾。2.4 失败伪装与过早成功任一目录删除失败后控制器仍把缓存大小强制写成 0页面照常显示成功用户无法感知清理不完整。重复缩略图刷新时后一次调用会提前返回复用未完成的旧 Future 或直接短路产生过早的成功提示掩盖真实执行状态。三、修订方案范围收紧、并发收敛与失败传播3.1 新增单一CacheStoragePolicy明确临时目录所有权修订引入唯一权威的缓存范围定义lib/core/config/cache_controller.dartabstract final class CacheStoragePolicy { static const localDirectoryNames String[AppPathManager.dirImageCache, AppPathManager.dirEmojiCache]; }本页只管理IMAGE_CACHE、EMOJI_CACHE与编码图片缓存录制、下载、字体和 IPTV 数据既不参与大小统计也不进入删除列表。默认目录解析由 lib/core/config/cache_controller.dart 中的_defaultCacheDirectories完成它在两个临时目录之外追加了AppImageCacheManager.cacheDirectory()——即flutter_cache_manager以pureLiveImagesV2为 key 的磁盘缓存目录lib/core/network/image_cache_manager.dart配置stalePeriod30 分钟、maxNrOfCacheObjects320。3.2 后台 isolate 扫描与根路径去重缓存大小扫描继续在后台 isolate执行_scanCacheSize将解析出的目录绝对路径交给compute(_measureDirectoryBytes, ...)在主 isolate 之外递归累加文件字节数lib/core/config/cache_controller.dart、#L282-L291。扫描前先经_uniqueDirectories去重——以绝对路径为键、Windows/macOS 上忽略大小写lib/core/config/cache_controller.dart避免同一目录被重复统计或重复删除。清空后重新实测剩余大小不再把失败结果伪装成 0。3.3 共享 Future 的并发事务模型CacheController用三个可空的 Future 字段表达进行中任务lib/core/config/cache_controller.dartFuturedouble? _cacheSizeScan; FutureCacheClearResult? _cacheClearOperation; Futurevoid? _imageRefreshOperation;重复清空/刷新等待同一 FutureclearCache()、refreshImageCache()、getCacheSize()入口都先检查对应字段非空则直接复用从根上杜绝后一次调用提前返回的竞态。清空观察先前扫描失败_clearCache()在动手前会await正在进行的扫描与缩略图刷新即便其失败也先记录日志、继续执行本次独立清空操作lib/core/config/cache_controller.dart。定时刷新异常被完整观察周期定时器触发的_refreshImagesInBackground对异常做debugPrint兜底不静默吞掉lib/core/config/cache_controller.dart。忙碌状态统一暴露isBusy isScanning || isClearing || isRefreshingImageslib/core/config/cache_controller.dart页面据此禁用并发入口。缩略图定时刷新由 lib/core/config/refresh_config_controller.dart 的两个 Hive 持久化键驱动autoRefreshThumbnails默认 false与thumbnailRefreshInterval默认 30 分钟归一化区间 5–360 分钟。CacheController.onInit用两个Worker监听其变化并重排Timer.periodiclib/core/config/cache_controller.dart。3.4CacheClearResult把失败显式带回 UI清空操作返回结构化结果lib/core/config/cache_controller.dartclass CacheClearResult { const CacheClearResult({required this.remainingSizeMB, required this.failedOperations}); final double remainingSizeMB; final int failedOperations; bool get succeeded failedOperations 0; }路径解析失败、编码图片缓存后端清理失败、PaintingBinding.instance.imageCache内存缓存清理失败、任一单目录清理失败都会使failedOperations递增并记录日志随后_scanCacheSize重新实测剩余大小作为remainingSizeMBlib/core/config/cache_controller.dart。页面依据result.succeeded决定提示缓存已清除还是部分缓存文件正在使用剩余缓存{size} MB失败态。3.5 页面双语文案与忙碌禁用页面使用独立的双语缓存文案明确列出保留的数据类型clear_local_cache_desc删除临时缩略图和表情文件保留录制、下载、字体和 IPTV 数据assets/translations/zh.jsonconfirm_clear_local_cache_desc将删除临时缩略图和表情文件录制、下载、字体和 IPTV 数据会完整保留。assets/translations/zh.json英文侧对应Clear Local Cache/Clear Local Cache?及Recordings, downloads, fonts, and IPTV data are keptassets/translations/en.json页面实现位于 lib/features/settings/pages/cache_data_settings_page.dart当前缓存大小、刷新缩略图、清空本地缓存三个入口在isBusy期间onTap置空并显示行内CircularProgressIndicator确认弹窗使用AlertDialog(scrollable: true)取消与确认按钮最小尺寸均为 48×48清空按钮以colorScheme.error突出危险语义#L51-L105。3.6 窄屏布局修复缓存大小尾部改为Wrapspacing: 8、runSpacing: 4数值与刷新图标在窄屏自动换行堆叠不再以自然宽度撑爆卡片数值文本内部可换行lib/features/settings/pages/cache_data_settings_page.dart#L168-L187。确认弹窗整体可滚动scrollable: true、insetPadding收窄、内容ConstrainedBox(maxWidth: 420)。验证结论320×480 / 3.0 倍英文下所有入口和操作均可点击。3.7 录制中心保持独立CacheService录制中心仍使用独立的CacheServicelib/domains/recorder/data/services/cache_service.dart与缓存页完全解耦仅管理PureLiveRecords专属子目录目录内写入所有权标记.pure_live_recording_root清空时保留标记文件clearAll#L155-L177。protectDirectory/releaseDirectory以引用计数保护正在录制的房间目录isDirectoryProtected防止清理动作波及进行中的录制或合并任务#L108-L128。enforceLimit基于单次递归快照按最旧优先回收活跃输出参与计数但绝不入选删除#L201-L229。原录制文案clear_all_cache 清空录制文件目录与保护规则保持不变录制页仍通过CacheService.to.clearAll()等接口操作lib/domains/recorder/presentation/pages/record_settings/record_settings_page.dart。两个控制器各自独立CacheController由 lib/app/bootstrap/initial_services.dart 以Get.lazyPut注册页面经SettingsService.to.cachelib/core/config/settings_service.dart访问。四、验证结果与质量记录最终统一质量记录为local-artifacts/build-records/20260911T072026671Z-quality-focused.json验证结论37/37 PASS覆盖缓存范围、并发、失败注入缓存页面布局与确认弹窗设置生命周期刷新配置录制目录保护以及本地化契约等测试类别。全库flutter analyze执行一次No issues found。仓库完整性审计错误为0已知告警 2质量任务结束时重型进程为0实际 ADB 命令为0。本批未读取或删除本机真实应用数据未操作手机、构建候选、修改版本或发布 3.2.0。五、当前边界与后续验证A2-01 保持RUN状态。本批闭环的是确定性的缓存页面与临时目录所有权以下场景继续由最终候选验证Android 系统缓存目录真实锁文件低存储状态升级覆盖后的数据保留这意味着本次审计在哪些目录可以被清空上已给出确定性结论而平台侧系统缓存与升级场景的数据保留仍需在最终发布候选上做运行时确认。六、关键源码导航审计文档docs/CACHE_DATA_SETTINGS_SCOPE_AUDIT_2026_09_11.md控制器与范围策略lib/core/config/cache_controller.dart目录常量与解析lib/core/platform/app_path_manager.dart页面实现lib/features/settings/pages/cache_data_settings_page.dart编码图片缓存lib/core/network/image_cache_manager.dart录制中心独立服务lib/domains/recorder/data/services/cache_service.dart刷新配置lib/core/config/refresh_config_controller.dart中英文案assets/translations/zh.json、assets/translations/en.json/DSMLtool_calls赞分享音视频直播移动开发【免费下载链接】pure_live纯粹直播:哔哩哔哩/虎牙/斗鱼/快手/抖音/网易cc/YY直播/Twitch直播/SOOP直播/M38自定义源应有尽有。项目地址https://gitcode.com/gh_mirrors/pur/pure_live点击查看免费下载相关推荐Pure Live 共用列表页布局审计提示区、状态页与分页栏的边界修复实录Pure Live 共用列表页布局审计提示区、状态页与分页栏的边界修复实录 本文围绕 pure_live 仓库中的共用列表页组件 BasePageView 与音视频直播移动开发LiteDB 内存生命周期所有权审计缓存帧、事务、游标与流的资源归还有效性验证LiteDB 内存生命周期所有权审计缓存帧、事务、游标与流的资源归还有效性验证 本指南以仓库中 docs/memory lifecycle audit.md嵌入式数据库文档数据库Easydict 应用本地路径管理AppPathManager 目录布局、所有权与迁移设计Easydict 应用本地路径管理AppPathManager 目录布局、所有权与迁移设计 Easydict 将应用日志、OCR 调试图片、音频缓存、MDic桌面应用AI 应用上一篇3分钟上手KMS_VL_ALL_AIO一套脚本搞定Windows与Office全系列激活难题下一篇艾尔登法环存档迁移工具EldenRingSaveCopier角色换存档只需3次点击免费开源创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考