Skip to content

Releases: LimoYuan/cloudreve4_flutter

Release 1.4.0+2

Choose a tag to compare

@LimoYuan LimoYuan released this 05 Aug 16:24

Release 1.4.0+2

Bug Fixes

  • 修复无需邮箱验证的站点注册成功却被误判为失败(提示"注册失败: null")
  • 修复 Windows 上github兜底检查更新误报有新版本(已是最新版却提示更新,版本号显示异常)
  • 修复概览页存储容量显示为 0B("我的"页面正常)
  • 修复长时间未打开 app 导致 access_token 过期时,概览页容量无法加载

Release 1.4.0+1

Choose a tag to compare

@LimoYuan LimoYuan released this 13 Jul 14:35

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:按需水合 + 读写挂载
  • 核心特性
    • 三路差异算法(本地 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: 24 padding 避免窄屏边缘贴边

来自: @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 ExternallylaunchUrl(externalApplication)
  • Copy URLClipboard.setData
  • 抽出可复用 widget PdfActionMenu.show(context, file, {entityId}),封装 _resolveUrl / _openExternally / _copyUrl

📝 文本编辑器(新增)

新增基于 re_editor: ^0.9.0 + re_highlight: ^0.0.3 的 VS Code 风格文本编辑器 DocumentEditorPagelib/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=trueentity_type: "version"),脏文件状态实时反映;保存任务 hidden=true 不污染上传任务管理页(详见下文)
  • 重新加载远端:脏文件二次确认后重新拉取
  • PageUp / PageDown 翻页re_editor 0.9.0 内部 moveCursorToPageUp/Down 是空 TODO,自实现:用 _editorKey GlobalKey 读 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 keydown
  • Future.microtask(_toggleFullScreen) 让事件链先派发完,再切换全屏,避免在 keyboard handler 内同步触发原生窗口操作导致状态错乱
  • 不缓存全屏状态,每次直接读 windowManager.isFullScreen(),与系统 / 用户其他途径切换全屏保持同步
  • _toggling 重入守卫
  • 仅 Windows / Linux 启用,在 main.dartDesktopService.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:对应 Cloudreve entity_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_tabStatefulWidget + StreamBuilder + drift watch()
  • 进行中任务用 Consumer(内存),失败 / 已完成任务用 Stream + 分页(首页 20 条,滚动到底部自动加载)
  • 数据库变更时 Stream 自动推送,无需手动刷新

文件夹上传

  • 桌面端 / 移动端支持选择整个文件夹上传,保留本地目录结构
  • 远程文件夹批量并发创建(最大并发 5),文件大小并发批量读取(50 一批)
  • 移除 FileSystemEntity.type 多余调用,直接用 entity is File/Directory 运行时类型判断

上传并发控制

  • UploadService_UploadSemaphore(10),最大 10 个任务同时上传
  • startUploadDirectory 循环改 unawaited,避免串行 await 阻塞

上传断点续传(详见 Bug 修复):

  • 暂停后恢复从断点继续,不再从头重传
  • OneDrive / 本地 / 中转 / 从机策略支持断点续传,S3-like 策略保持原行为

UI 卡顿治理

  • addTask 1000 次 notifyListeners -> addTasks 批量化(1 次 notify + 1 次 DB batch 写入)
  • _updateRuntimeTask notifyListeners 50ms debounce
  • UploadService 维护 _activeCount 计数器 O(1),替代 activeTasks.length O(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 标记:错误拦截器支持 silent404listGroups 404 时放行并 Toast 提示「Pro 专属功能」
  • 凭证过期 (40020):Toast 提示并跳转登录页(不清除账号密码)
  • Token 刷新并发去重:改用 Notify 通知机制
  • 强制直连:新增 DirectHttpClientFactory + 全局 HttpOverrides DIRECT,强制不走系统代理

🐛 Bug 修复 (F...

Read more

Release v1.3.0_3_pr2

Choose a tag to compare

@LimoYuan LimoYuan released this 18 May 18:45

feat: 合并 PR #2 - by@mkw3627-ui

patch:

  • Improve Android upload stability and background progress
  • Improve download progress and resume handling
  • Add same-site account switcher
  • Add store tab and storage products display
  • Improve captcha compatibility
  • Add thumbnail and text preview improvements
  • Polish UI performance for lower-end Android devices

Co-authored-by: @mkw3627-ui mail: mkw3627@gmail.com"

comment:

  • 保留上述核心功能改动
  • 移除了构建相关改动和项目图标
  • Code changes added defects -> 快捷入口新增失效
  • 修复所有警告和过时语法
  • Android arm64 v8a test passed.

fixed:

  • 文件管理器页面AppBar面包屑路径中文路径未urldecode,修复最多5重编码decode
  • 维持 pr #2 的默认4个快捷入口, 保留主分支的原始新增/排序快捷入口, 抽离 QuickAccessProvider 共享状态

feat: (优化 pr #2)验证码预检机制 + 抽离 CaptchaService,登录/注册/忘记密码按需加载验证码

新增文件:

  • login_config_model.dart — LoginConfigModel,解析 GET /site/config/login 响应
  • captcha_service.dart — CaptchaService 单例,抽离了约 200 行验证码逻辑(加载、刷新、Web 验证码跳转、UI 构建、参数获取)

修改文件:

  • auth_service.dart — 新增 getLoginConfig() 方法
  • login_page.dart — 移除内嵌验证码逻辑,改为先调用 getLoginConfig() 预检,仅 loginCaptcha == true 时加载验证码;通过 loginConfig 参数传递给注册/忘记密码页
  • register_page.dart — 添加 loginConfig 参数,regCaptcha == true 时显示验证码并传参
  • forgot_password_page.dart — 添加 loginConfig 参数,forgetCaptcha == true 时显示验证码并传参

Release 1.3.0+2

Choose a tag to compare

@LimoYuan LimoYuan released this 12 May 13:48
fixed: windows cmake 构建异常
  - 当 CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT 异常变为 False 时, cmake BUILD_BUNDLE_DIR 回退到了系统默认路径(C:/Program Files)导致终端权限不足无法正常构建安装
feat: 登录支持两步验证(2FA)
  -  检测账号密码登录响应203状态码弹出验证码输入对话框

Release 1.3.0

Choose a tag to compare

@LimoYuan LimoYuan released this 12 May 12:37

Release 1.3.0+1

Change log


  1. UI 架构重构
  • 底部导航 3-Tab 布局:概览 / 文件管理 / 我的
  • 桌面端 NavigationRail + 文件管理器并排布局,新增 AppShell
  • 全局主题重构:主色调 #3B82F6,细边框 Card,系统原生字体
  • 毛玻璃风格统一:对话框/抽屉/FAB 使用 GlassmorphismContainer
  • 移除 BackdropFilter 消除 Android 卡帧
  1. 概览页(新增)
  • 快捷入口动态网格(2/3列自适应,可配置)
  • 存储用量卡片
  • 最近活动列表(统一图标+文字风格)
  • 搜索入口卡片
  1. 文件管理器大幅增强
  • 列表/网格视图切换 + 网格缩略图
  • 右下角 SpeedDial FAB(搜索/上传/新建文件夹,滚动隐藏)
  • 下拉刷新 + Toast 提示差异
  • 加载超时重试
  • 多选移动/复制操作
  • 文件详情侧边栏(Drawer)+ 更多字段 + 版本管理
  • 搜索改为弹出对话框
  • 增量更新:增删改/上传完成原地更新列表,消除全量刷新
  • 桌面端拖拽上传(desktop_drop)
  • 文件时间时区修复
  1. 视频播放器控制栏完全重写
  • 自定义 VideoControlsOverlay 替代内置控制栏
  • Bilibili 风格:单击显隐、双击暂停、长按 2 倍速、倍速菜单、音量控制
  • 全平台自管全屏(windowManager / SystemChrome),避免 media_kit
    路由重建
  • 桌面端:鼠标悬停弹出控制栏、键盘快捷键、半透明快捷键提示
  • 新增 video_fullscreen.dart,main.dart 监听全屏隐藏标题栏
  1. "我的" Tab(新增)
  • 用户信息卡片 + 管理员 Badge + 存储进度条
  • 快捷功能区(可配置入口)
  • 管理员区域:用户组/用户 增删查
  • AdminService + AdminProvider
  1. 任务页面重构
  • 上传/下载分 Tab 展示,桌面端 DataTable + 移动端 Card
  • 毛玻璃进度条、实时速度显示
  • 任务记录保留天数可配置
  • 设置页增加日志管理
  1. 其他服务改进
  • 下载迁移到 background_downloader(全平台统一)
  • AvatarCacheService:Dio + 本地缓存 + Gravatar 兜底
  • ThumbnailService:文件缩略图服务
  • cache_manager Windows 文件占用异常静默处理
  • 分享页/回收站/WebDAV 页 UI 统一优化

v1.2.1

Choose a tag to compare

@LimoYuan LimoYuan released this 04 May 18:51

fixed: 修复windows平台文件上传40052异常
feat: Windows/Linux平台使用background_downloader替代flutter_downloader下载, 增加下载速度显示
feat: 增加离线下载功能
重构离线下载页面UI, 实现响应式布局与任务详情抽屉
- 响应式布局: 桌面端(>800px)使用DataTable, 移动端使用卡片列表+BottomSheet
- 主题色替换: 所有硬编码颜色改为colorScheme引用, 支持暗色模式
- 任务详情抽屉: 点击任务弹出右侧抽屉,
展示创建/更新时间、状态、处理节点、输入/输出、耗时、重试次数、分片数量、错误信息
- 搜索功能: HeaderBar搜索框支持过滤任务
- Tab计数徽章: 固定宽度徽章防止布局跳动
- 空状态下拉刷新, AnimatedSwitcher状态切换动画
- 对话框响应式尺寸适配, 移除DataTable复选框列
- Model新增: TaskNode、numPieces、retryCount、resumeTime字段;
修复时区(toLocal)和耗时单位(毫秒转秒)
feat: 增加桌面端托盘功能
- 关闭窗口 → 隐藏到系统托盘(非退出)
- 左键点击托盘图标 → 恢复窗口
- 右键点击托盘图标 → 弹出菜单(显示主窗口 / 退出)
- 菜单"退出" → 彻底关闭程序
- 所有桌面代码仅 Windows/Linux 生效,Android 无影响
fixed: 修复linux下托盘增加后无法正常显示主程序window

v1.1.0

Choose a tag to compare

@LimoYuan LimoYuan released this 04 May 12:15
  1. 修复windows下字体fallback非微软雅黑; 释放windows portable绿色免安装可执行文件
  2. 完善设置页面, 增加主题, 用户信息修改, 展示存储容量, 2FA等功能;
  3. 优化文档预览背景风格, 修复视频预览appbar返回按钮黑色和视频渲染层与 Flutter 语义树(Semantics Tree)之间的同步冲突;

v1.0.0

Choose a tag to compare

@LimoYuan LimoYuan released this 26 Apr 09:40

第一个基本可用的构建, 预构建Android和debian包