Release 1.4.0+1
Cloudreve4 Flutter v1.4.0 Release Notes
发布日期: 2026-07-11
上一版本: v1.3.0_3_pr2
🎉 重磅更新
本次更新自 v1.3.0_3_pr2 以来累计大量提交,新增了 Rust 高性能同步引擎、Windows Cloud Filter / Linux FUSE 镜像挂载、QR 码扫码登录、桌面端深度增强、桌面端同步向导、文件管理器 UI 大重写 + 分页排序、PDF 预览菜单、品牌定制构建、应用内自动更新、上传/下载任务持久化迁移 drift + 分页加载等大量重磅功能,并修复了海量 Bug。
✨ 新功能 (Features)
🦀 Rust 同步引擎 (Sync Core)
全新引入基于 Rust 编写的高性能文件同步引擎 sync-core,通过 flutter_rust_bridge (FRB) 与 Dart 层通信,提供双向同步能力。
- 多种同步模式
- 全量同步 (Full):双向同步,支持 6 种冲突策略 (
keep_both/keep_local/keep_remote/newest_wins/largest_wins/manual) - 仅上传 (UploadOnly):本地→远程单向
- 仅下载 (DownloadOnly):远程→本地单向
- 相册同步 (AlbumUpload / AlbumDownload):Android 专属,备份 DCIM/Camera
- 镜像同步 - Windows Cloud Filter (MirrorWcf):占位符 + 按需水合
- 镜像挂载 - Linux FUSE:按需水合 + 读写挂载
- 全量同步 (Full):双向同步,支持 6 种冲突策略 (
- 核心特性
- 三路差异算法(本地 vs 远程 vs DB)
- SSE 远程事件订阅 + notify 本地文件监听 + 500ms 事件防抖
- 上传/下载分块写入降低内存占用,Semaphore 并发控制 + 带宽限速
- 同步配置热更新(冲突策略/并发数/Token 实时推送)
- 同步状态/配置持久化,启动自动恢复
- 完整事件统计与任务列表展示(含失败计数)
- 支持暂停 / 恢复 / 停止 / 强制重新同步 / 重置同步(清空 DB + 本地目录,绝不碰远程)
- 同步日志级别热修改(Trace/Debug/Info/Warn/Error),输出到独立
sync_core/logs/
- 软暂停 / 恢复机制
pause_token区分用户暂停与停止;resume 后台重跑差异扫描- 下载 / 上传可中断:
shutdown_token+pause_token接入,新增stream_to_file_cancellable续传 WorkerStatus新增Paused变体
🔄 同步向导 / 入口
- 桌面端同步向导:
desktop_sync_wizard_page,含软强制门禁(首次进入 / 未配置时引导完成) - 移动端同步入口:
mobile_sync_entry_page,与桌面端共享配置语义
🪟 Windows Cloud Filter API (CFApi) 镜像同步
Windows 专属——通过 CFApi 创建占位符,文件按需从云端水合下载。
- 仅同步元数据,本地零空间占用
- 双击/读取时自动水合下载
- 两种删除策略:仅删本地(保留远程) / 同步删除远程
- 完整的 WorkerPool 集成,水合/占位符/删除等操作均纳入统计
🐧 Linux FUSE 读写挂载
Linux 专属——基于 FUSE 实现的镜像挂载文件系统。
- 按需水合,文件读取时从云端下载
- 支持读写挂载:本地创建/写入/删除/重命名自动同步到云端
WriteBuffer:小文件内存缓冲,大文件 (>256MB) 落临时文件后流式上传- 优雅卸载与初始同步注册所有远程文件为 inode
🔐 QR 码扫码登录
- X25519 + AES-GCM 加密中继
- 桌面端展示二维码,移动端扫码授权
- 站点品牌自动获取(站点名/描述/favicon)
- 健康探测:
createSession之前先调QrLoginService.healthCheck(relayBaseUrl)(6s timeout),relay 不可达或ok != true直接停在 loading 之前 - 探测失败设
_qrRelayUnavailable=true并展示部署方案超链接,桌面端 / 移动端等价实现 - 移动端错误占位区文案外加
horizontal: 24padding 避免窄屏边缘贴边
来自:
@mkw2233推荐走她的一键式打包器, 独立部署请见
🖥️ 桌面端深度增强
- 登录页:≥760px 自动切换双面板布局
- 概览页:入场动画 + 存储卡过冲回弹进度动画 + 四区段最近活动表格
- 文件管理器:桌面首页概览面板 + 分类 Tab + 操作栏 + 下载目标选择
- 与我共享:独立浏览页
TransferredFilesPage - 悬浮窗:桌面悬浮上传窗口 (FloatingUploadService + Bridge)
- 系统设置:上传后关机、开机自启动
- 剪贴板分享链接自动检测:
ShareClipboardWatcher - 桌面端 WebView 验证码:使用
flutter_inappwebview,Windows 支持长按按钮 WebView2 代理设置(WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS环境变量) - 桌面端拖拽上传:Windows/Linux 支持
desktop_drop
@mkw2233多项优化和功能增强
🏷️ 品牌定制构建
- 新增
BrandConfig,支持锁定服务器地址的定制版构建 - 编译开关:
MKW_BRANDED_BUILD/MKW_LOCK_SERVER/MKW_FIXED_SERVER_* - mkw_packager 代码生成入口:brand / qr / server / update / mobile_splash 6 套配置一键生成
📦 应用内自动更新(PR-7)
新增 AppUpdateService + AppUpdateDialog,无需手动下载覆盖:
- Windows:下载 ZIP 到临时目录,通过小程序实现关闭主程序后自动覆盖更新
- Android:通过 MethodChannel 调系统安装器 + 未知来源权限引导
依赖打包器扩展, github 兜底
📱 移动端启动预加载(PR-7)
新增 MobileStartupPreloadService,移动端启动时预加载关键资源,减少首屏白屏时间。
⚠️ 错误友好化(PR-7)
新增 UserFriendlyError,统一错误转换(替代裸 toString()),支持 login / upload / folder / download 场景,把后端错误码翻译成用户可读的中文提示。
📂 文件管理器增强
- UI 大重写:
files_page/file_grid_item/file_list_item/selection_toolbar/file_menu_helper/file_breadcrumb全部重写 - 分页加载:滚动到底部自动加载下一页(全平台)
- 排序功能:按名称/大小/修改时间/创建时间,升序/降序
- 桌面端表头点击切换,移动端 PopupMenuButton
- 排序偏好持久化
- 键盘快捷键:Ctrl+F / Cmd+F 呼出搜索,Esc 关闭
- 鼠标右滑返回:右→左快速滑动 (>150px, 500ms 内) 返回上一级
- 文件夹打包下载:列表/网格/多选均支持,展示「服务端打包中」异步状态
- 新增 DownloadStatus.archiving:紫色 archive 图标 + 不确定进度条 + 可取消
- 桌面端面包屑修复:中文路径正确 URL decode
📄 PDF 预览菜单
文件管理器 / 分类页 / 转存浏览页 / 历史版本 四处 PDF 入口统一弹出 PdfActionMenu 三选项:
- 原生预览:push
pdfPreview路由,PdfViewer.uri+PdfViewerSizeDelegateProviderLegacy,保留文本选择 + 高亮 + entityId 历史版本支持 - Open Externally:
launchUrl(externalApplication) - Copy URL:
Clipboard.setData - 抽出可复用 widget
PdfActionMenu.show(context, file, {entityId}),封装_resolveUrl/_openExternally/_copyUrl
📝 文本编辑器(新增)
新增基于 re_editor: ^0.9.0 + re_highlight: ^0.0.3 的 VS Code 风格文本编辑器 DocumentEditorPage(lib/presentation/pages/preview/document_editor_page.dart,~1500 行)。
入口:
- 文件管理器点击 文本 / Markdown 文件改为弹出
TextActionMenu(仿PdfActionMenu),二选一:预览 / 编辑器 - 新建文件成功后弹「打开编辑器?」对话框,确认则跳转编辑器并预填空内容
- 新建文件遇到
40004 ObjectExisted时拉取已存在文件信息,弹「文件已存在,是否直接打开编辑器」
核心能力:
- 语法高亮:30+ 文件扩展名映射到 re_highlight 语言(Dart / JS / TS / Python / Rust / Go / Java / C / C++ / C# / Kotlin / Swift / Ruby / PHP / Bash / SQL / YAML / JSON / XML / HTML / CSS / SCSS / Less / Markdown 等)
- 多主题:Atom One Dark / Atom One Light / Monokai Sublime + 跟随系统,主题选择持久化(
StorageKeys.editorTheme) - 视图选项:显示行号 / 自动换行 / 代码折叠 切换
- 字号调整:Ctrl+= / Ctrl+- / Ctrl+0(重置默认 14px),数字键盘等价键位
- 编辑:撤销 / 重做 / 剪切 / 复制 / 粘贴 / 全选
- 查找替换:仿 VSCode 顶部面板(Ctrl+F 查找、Ctrl+Alt+F 替换、Esc 关闭)
- 保存上传:保存走覆盖上传(
UploadTaskModel.overwrite=true→entity_type: "version"),脏文件状态实时反映;保存任务hidden=true不污染上传任务管理页(详见下文) - 重新加载远端:脏文件二次确认后重新拉取
- PageUp / PageDown 翻页:
re_editor 0.9.0内部moveCursorToPageUp/Down是空 TODO,自实现:用_editorKeyGlobalKey 读 viewport 高度推算 pageLines,clamp 到 codeLines 范围后CodeLineSelection.collapsed+makeCursorVisible
全局快捷键:
- F9:显示全部快捷键弹窗(
_shortcutsDialogOpen防止重复按 F9 弹出多个对话框) - F11:切换全屏(应用级注册,进程整个生命周期都生效,详见下条)
- F12:隐藏 / 显示 AppBar(避开 Windows F10 触发系统菜单
WM_SYSCOMMAND/SC_KEYMENU的副作用) - 状态栏右侧主题名单击循环切换主题(
MouseRegion(SystemMouseCursors.click)+GestureDetector+Tooltip("点击切换主题"))
响应式布局(断点 width >= 800):
- 宽屏:AppBar 显示 File / Edit / View 三个独立菜单按钮(图标+文字)+ 独立保存按钮;状态栏完整(状态 / 行列号 / 行数·字符数 / 语言 / 主题 / 字号)
- 窄屏:AppBar 收成单个汉堡
Icons.menu聚合三组菜单(PopupMenuDivider 分隔)+ 保存按钮;状态栏精简(状态 /行:列/ 主题 / 字号),修复窄屏端RenderFlex overflowed by 2.9 pixels - 公共部分抽出:
_fileMenuItems/_editMenuItems/_viewMenuItems三个PopupMenuEntry列表 +_handleMenuAction(value)统一 switch 分发
🎹 全局快捷键服务(新增)
新增 GlobalShortcutsService (lib/services/global_shortcuts_service.dart),进程级注册一次后整个应用生命周期内响应。
HardwareKeyboard.instance.addHandler拦截 F11 keydownFuture.microtask(_toggleFullScreen)让事件链先派发完,再切换全屏,避免在 keyboard handler 内同步触发原生窗口操作导致状态错乱- 不缓存全屏状态,每次直接读
windowManager.isFullScreen(),与系统 / 用户其他途径切换全屏保持同步 _toggling重入守卫- 仅 Windows / Linux 启用,在
main.dart中DesktopService.initialize()之后注册
🙈 隐藏上传任务(编辑器保存不污染上传任务管理页, 不走content接口)
UploadTaskModel 新增两个字段:
hidden:编辑器保存调用上传服务时设为true,避免同一文件保存 N 次堆出 N 条任务、且重启后仍存在UploadService.allTasks/activeTasks过滤 hidden_saveTasks不持久化 hidden(_tasks.values.where((t) => !t.hidden))_syncForegroundNotification不计入 hidden(前台通知)- 终态(
completed/failed/cancelled)后_purgeHiddenTaskIfTerminal主动从_tasks移除并清理_cancelTokens/_progressControllers/_speedTrackers
overwrite:对应 Cloudreveentity_type: "version",已有同名文件当作新版本写入而不是直接报 ObjectExisted(编辑器保存默认开启)UploadManagerProvider.startUpload新增overwrite/hidden命名参数 + 返回List<String>task id 列表(调用方可监听任务状态)
🎨 同步页面 UI
- 桌面端同步页:左右双卡片(渐变状态卡 + 饼图统计卡)
- 移动端同步详情页
SyncPageAndroid:顶部渐变卡片 + 同步摘要 + 任务卡片列表 SyncStatsCard:饼图(上传/下载/重命名/移动/冲突/失败明细),添加「同步数据概览」标题- MirrorWcf 操作统计修复:水合/占位符/删除/重命名/移动均记录 task_item
🎬 Tab 切换动画
- AppShell tab 切换 320ms 淡入 + 4% 方向性滑入(前进右滑、后退左滑)
- 保留 IndexedStack + AutomaticKeepAliveClient 状态保持
📋 分享功能重写
- 重写分享页 (
shares_page +694) + 功能增强 + 强化错误提示 - 合并 PR-5 分享链接 / 公告弹窗 / 剪贴板检测 / 分类页多选增强 / V4 分享面板
- 应用设置 → 分享链接:新增「清空分享链接弹窗记录」入口(带二次确认)
ShareClipboardWatcher.ignoredKey/lastOpenedKey提升为 widget 级 public 常量- 新增
ShareClipboardWatcher.clearFingerprintCache()静态方法,清理后下次复制原本被忽略 / 打开过的分享链接,剪贴板监听会重新弹提示
📥 下载增强
- 进行中和等待中的下载任务增加取消按钮
- 删除下载任务可选「同时删除本地文件」
- Android 公共目录路径改用
external_path动态获取(不再硬编码/storage/emulated/0/)
📤 上传/下载任务管理(文件夹上传重构优化持久化方式)
任务持久化迁移到 drift + SQLite:
- 新增
task_database.dart(drift 表定义 + DAO),替代 SharedPreferences 全量序列化方案 - 启动只加载未完成任务(通常 < 100 条),
NativeDatabase.createInBackground把 IO 移到后台 isolate,彻底解决大量历史任务启动卡几十秒的问题 - 进度更新 500ms 节流写库,状态变更即时落库;崩溃恢复时任务状态正确恢复
- 旧版 SharedPreferences 任务启动时自动迁移到 drift,迁移后清除旧 key
分页加载:
upload_tasks_tab/download_tasks_tab改StatefulWidget+StreamBuilder+ driftwatch()- 进行中任务用
Consumer(内存),失败 / 已完成任务用 Stream + 分页(首页 20 条,滚动到底部自动加载) - 数据库变更时 Stream 自动推送,无需手动刷新
文件夹上传:
- 桌面端 / 移动端支持选择整个文件夹上传,保留本地目录结构
- 远程文件夹批量并发创建(最大并发 5),文件大小并发批量读取(50 一批)
- 移除
FileSystemEntity.type多余调用,直接用entity is File/Directory运行时类型判断
上传并发控制:
UploadService加_UploadSemaphore(10),最大 10 个任务同时上传startUploadDirectory循环改unawaited,避免串行 await 阻塞
上传断点续传(详见 Bug 修复):
- 暂停后恢复从断点继续,不再从头重传
- OneDrive / 本地 / 中转 / 从机策略支持断点续传,S3-like 策略保持原行为
UI 卡顿治理:
addTask1000 次notifyListeners->addTasks批量化(1 次 notify + 1 次 DB batch 写入)_updateRuntimeTasknotifyListeners50ms debounceUploadService维护_activeCount计数器 O(1),替代activeTasks.lengthO(n) 遍历- 导航栏 / tasks_page 角标改用
activeCount FloatingUploadBridge改用allTasksIterable,避免每次创建 1000 元素 List 的 GC 压力upload_progress_item/download_progress_item移除BackdropFilter+ClipRRect(移动端离屏渲染导致首次 paint 慢)
🌐 网络与认证
- client_id 全层共享:Dart 生成持久化、ApiService 自动附加
X-Cr-Client-Id、Rust 统一使用 - 404 silent 标记:错误拦截器支持
silent404,listGroups404 时放行并 Toast 提示「Pro 专属功能」 - 凭证过期 (40020):Toast 提示并跳转登录页(不清除账号密码)
- Token 刷新并发去重:改用 Notify 通知机制
- 强制直连:新增
DirectHttpClientFactory+ 全局HttpOverrides DIRECT,强制不走系统代理
🐛 Bug 修复 (Fixes)
同步引擎
- 修复 SSE 事件流完全无法工作的 6 个 bug(跨 chunk 行缓冲 / token 刷新 / URI 硬编码 / 多行 data / move 事件 / 零日志)
- 修复 SSE 事件回环(Rust API 请求附加
X-Cr-Client-Id) - 修复 rename 事件处理(远程 rename→本地重命名,本地 rename→调用 API 远程重命名)
- 修复 rename + scanDirs 重复 Worker
- 修复 SSE 路径计算丢失目录层级、远程操作自触发抑制
- 修复同步引擎死锁 + 无日志 + 无进度(OnceCell 替代 Mutex / tracing 初始化 / 后台 spawn / 状态轮询)
- 修复同步引擎 tokio 运行时阻塞调用 panic(spawn_blocking 包装 DB 初始化)
- 修复 SyncProvider 未注册导致导航崩溃
- 修复覆盖上传(entity_type=version)+ URL 解码文件名 + 跳过元数据文件 + hash 对比避免无变化上传
- 修复 API 文件列表字段名 (objects→files)、uri 从 path 推导、upsert_sync_root 避免外键破坏
- 修复 Windows 重命名重试增强(10 次,1s~10s 递增)
- 修复文件夹递归创建 + 路径反斜杠规范化
- 修复 KeepBoth 策略:重命名本地后下载远程版本到原位置
- 修复删除文件夹时递归清理数据库映射(LIKE dir/% 清理所有子文件)
- 修复根目录空条目(walkdir strip_prefix 后 relative_path 为空,跳过)
- 修复冲突判断逻辑:远程 API 不返回 hash,改为「有 hash 比 hash,无 hash 比 size」
- 修复删除文件遇 40073 锁冲突时自动解锁重试
- 修复 MirrorWcf 操作统计始终为 0
- 修复同步配置热更新和传输并发/带宽限制
- 忽略 Android 回收站
.trashed-文件,避免远程重命名错误 - 改进 sync-core 网络错误信息(区分连接失败/超时/解码失败,附带 URL 和底层错误链)
- FsScanner 跳过以
.开头的隐藏目录/文件(.tmfs, .mediaTrash 等)
FUSE
- 修复挂载路径(直接挂载到 local_root,移除
.cloudreve_fuse子目录) - 修复优雅卸载(dispose_sync_engine / sync_shutdown 调用 cleanup_fuse)
- 修复初始同步文件水合(注册所有远程文件为 FUSE inode)
- 修复 register_sync_event_sink 在非 Tokio 线程 panic
文件管理器
- 右键菜单失效:
_loadFolders三处setState都未检查mounted,对话框先关闭、异步listFiles后返回时 State 已 dispose 触发崩溃;同时移除MouseRegion + onExit包裹(鼠标越过边界提前关闭菜单),右键菜单除选择按钮外全部失效问题修复 - 菜单贴底被截断:新增
flipUp逻辑,下方空间不足时以底边界为基点向上展开;底边界优先取面包屑顶端(fileMenuBottomBoundaryKeyGlobalKey + RenderBox),其次取视口底;极端窄屏下ConstrainedBox(maxHeight)+SingleChildScrollView兜底滚动 - Ctrl+F 搜索跳转后被滚回:新增
_isAutoScrollingToHighlight标志屏蔽_onScrollForSummaryCollapse,列表 / 网格分支抽出_scheduleHighlightJump:先同步折叠 summary,等AnimatedSize收缩完成 (660ms) 再jumpTo,依赖FileListItem.isHighlighted边框闪烁动画提供视觉反馈- 根因:summary 改为始终挂载后,进入子目录默认展开,
animateTo滚动越过 96px 触发 listener 折叠 →AnimatedSize620ms 收缩 → ListView viewport 增大、maxScrollExtent减小 → 滚动位置被 clamp 回更小的值,呈现"滑回"
- 根因:summary 改为始终挂载后,进入子目录默认展开,
分享
- 概览页「最近分享的文件 → 查看更多」:从误跳
TasksPage改为正确跳转RouteNames.share(SharesPage);其他卡片路由保持不变 - 转存识别 Pro 专属:捕获到
ServerException且code == 40081并且 message 包含Not supported action时,弹出 Pro 版本提示;其他错误仍走原转存失败:$e - 编辑分享 Dialog 文件名被遮:第一个「文件名」
TextField的 floating label 上半部分被裁掉 —shares_page.dart:735内层SingleChildScrollView加EdgeInsets.only(top: 6)
上传
- 任务页「清除已完成/失败」按钮在重启后失效:drift 持久化迁移后
_tasks内存里只有 active 任务,completed/failed/cancelled 任务只在 db 里。clearCompletedTasks/clearFailedTasks仍遍历内存找目标任务,重启后内存为空导致 db 行删不掉。改为先调deleteUploadTasksByStatus/deleteDownloadTasksByStatus批量 SQL 删除,driftwatch()自动推送 db 变更到 StreamBuilder,UI 立即刷新。 - 暂停上传后恢复从头重传:
retryUpload暂停恢复走这个方法,但只有 OneDrive 保留uploadedBytes/uploadedChunks,非 OneDrive 全部重置为 0 且 session 被删除;startUpload复用 session 的条件只允许 OneDrive;_uploadMultipart的resumeStart = 0只对 OneDrive 查询nextExpectedRanges。三处联动导致非 OneDrive 永远从 index 0 开始。修复:retryUpload区分暂停恢复和失败重试,暂停恢复 + 可续传策略(OneDrive/本地/中转/从机)保留 session + 进度;startUpload扩展 session 复用条件;_uploadMultipart加else if让本地/中转/从机策略用task.uploadedBytes作为resumeStart。S3-like 策略的 complete 需要所有 parts 的 ETag,跳过分片会导致 complete 失败,保持原行为。
跨平台
- 修复 Linux 无
XDG_DOWNLOAD_DIR环境变量导致获取默认本地同步目录异常 - Windows/Linux WebView 兼容性(webview_flutter → InAppWebView)
- 桌面端概览页文件管理器面包屑中文路径未 URL decode
- Windows WebView2 验证状态刷新 + Turnstile 进度提示
- Windows MSBuild 找不到 nuget.exe 的问题(NuGet 搜索路径辅助)
- 桌面端验证码长按代理找回:UI 重写期间被误删,已恢复
captcha_service.dart新增_isDesktopgetter +_proxyConfig字段OutlinedButton.icon加回onLongPress(仅 Windows 才不为 null)- 长按弹出
_showProxyDialog:地址 / 端口 / 清除 / 取消 / 确定 openCaptchaChallenge透传proxyConfig给CaptchaChallengePagecaptcha_challenge_page.dart补回CaptchaProxyConfig类、_applyWebView2Proxy/_clearWebView2Proxy、_proxyEnvSet标志,dispose 时按需清理WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS环境变量
其他
- 修复桌面端下载默认路径不生效
- 修复账号切换后 Provider 状态未重置
- 修复概览页切换时存储容量不刷新
- 修复权限编辑 BottomSheet 小屏溢出
- 修复应用日志级别 UI overflow
- 添加 Android
largeHeap="true"修复大分片上传 OOM(100MB 应用闪退, 服务端不要设置太大分片) - 上传进度显示可读文件大小替代原始字节数
- 升级
pdfrx: ^2.2.24 → ^2.4.1 - ShareDio LogInterceptor 日志降级为 trace
- 宽屏端用户 / 用户组对话框铺满全屏:
_StyledDialog与_StyledConfirmDialog内层包ConstrainedBox(创建:maxWidth: 420,删除:maxWidth: 380)
♻️ 重构 (Refactor)
- 文件管理器 UI 大重写:
files_page/file_grid_item/file_list_item/selection_toolbar/file_menu_helper/file_breadcrumb - 分享页重写 (
shares_page +694) - 应用骨架重写 (
app_shell +335) + 路由调整 - 回收站 / 概览存储卡 / 登录桌面端增强
- 登录页 / 文件管理 / 对话框 / 设置页共享组件提取:消除大量重复代码
- sync-core 大文件拆分:拆分为目录模块,优化代码组织
- 跨平台编译:增加
#![cfg(target_os = xxx)],各自平台只编译自己的部分 - 同步事件处理完整重构:notify-debouncer-full 自动配对 rename,本地 rename/move/delete 走 API
- 同步页面布局调整:状态文字占顶部整行、左圆右统计、下方饼图、最底部任务列表
- 同步模式重构:全量 / 仅上传 / 仅下载 + 同步 Tab 页 + 远程目录 FolderPicker + maxWorkers 配置
- 任务持久化从 SharedPreferences 迁移到 drift/SQLite:详见「上传/下载任务管理」
- 桌面端标题栏站点品牌缓存从 SharedPreferences 迁移到文件系统:二进制数据(站点 logo / favicon)不再走 SharedPreferences,避免 base64 序列化膨胀
- 移动端登录页移除私有图床 logo:删除写死的
https://xxxx.com/*.webp,改用本地 assetapp_logo.png,logo 三级回落变为:站点 logo bytes -> 当前站 favicon -> 本地app_logo.png,不再依赖任何外部私有资源
📦 依赖升级 / 新增
| 依赖 | 版本 | 用途 |
|---|---|---|
flutter_inappwebview |
^6.2.0-beta.3 | 桌面端验证码等需要用到 WebView (Windows/Linux统一) |
external_path |
^2.2.0 | Android 公共目录动态获取 |
pdfrx |
^2.4.1 (升级自 2.2.24) | PDF 预览 |
re_editor |
^0.9.0 | 文本编辑器核心 |
re_highlight |
^0.0.3 | 编辑器语法高亮(30+ 语言) |
drift |
^2.21.0 | 任务持久化 ORM(类型安全 SQL) |
drift_flutter |
^0.2.4 | drift 桌面端集成(含 sqlite3_flutter_libs + path_provider) |
sqlite3_flutter_libs |
^0.5.28 | 全平台原生 SQLite 二进制(Win/Linux/macOS/Android/iOS) |
enough_convert |
^0.0.1 | 纯 Dart GBK/GB18030 文本解码 |
dev_dependencies:
| 依赖 | 版本 | 用途 |
|---|---|---|
drift_dev |
^2.21.0 | drift 代码生成 |
Rust 侧依赖 (workspace native/):
flutter_rust_bridge- Dart↔Rust 桥接tokio/tracing/notify-debouncer-full/reqwest/rusqlite/walkdirwindows(CFApi, featurewindows-cfapi)fuser(Linux FUSE, featurelinux-fuse)jni/android_logger(Android, featureandroid-media)
⚠️ 重大变更 (Breaking Changes)
SyncMode枚举重构:删除Selective,新增UploadOnly/DownloadOnly/MirrorWcf/AlbumUpload/AlbumDownload- 数据库迁移:sync-core 数据库和日志移至应用数据目录
SyncConfig:删除selective_dirs,新增max_workers
🙏 致谢
感谢 @mkw3627-ui 对本项目的重要贡献—大量桌面端 UI 增强、QR 登录、悬浮窗、分享链接检测、Desktop 文件管理器ui布局增强, 同步向导等均源自其 PR
完整 commit 历史:git log v1.3.0_3_pr2..v1.4.0