主要合入内容:

- 文件管理器分页加载、排序偏好、桌面表头排序、移动端排序菜单、Ctrl/Cmd+F搜索、Esc 关闭搜索、鼠标右滑返回上级。
- 移动端同步状态页、同步统计卡片、同步任务/累计统计事件、同步页布局更新。
- Android 相册同步默认路径改为 DCIM/Camera,下载路径改用 external_path。
- Rust sync-core 更新:Android 日志依赖、AlbumUpload/AlbumDownload、MirrorWcf 统计修复、Linux FUSE镜像挂载与读写同步支持。

- 依赖更新:external_path、fl_chart、pdfrx 升级,并修了 pdfrx 新版本的deprecated API。
- 新增文件包括:sort_options.dart、sync_page_android.dart、sync_stats_card.dart、platform/fuse.rs、sync_engine/fuse.rs。
This commit is contained in:
2026-06-04 07:11:43 +08:00
parent 5ee6ba1e28
commit b02daf1448
56 changed files with 7589 additions and 1200 deletions
+36 -5
View File
@@ -4,7 +4,7 @@ import 'package:lucide_icons/lucide_icons.dart';
import '../../core/utils/file_utils.dart';
/// 面包屑导航组件
class FileBreadcrumb extends StatelessWidget {
class FileBreadcrumb extends StatefulWidget {
final String currentPath;
final void Function(String path) onPathTap;
@@ -14,9 +14,38 @@ class FileBreadcrumb extends StatelessWidget {
required this.onPathTap,
});
@override
State<FileBreadcrumb> createState() => _FileBreadcrumbState();
}
class _FileBreadcrumbState extends State<FileBreadcrumb> {
final _controller = ScrollController();
@override
void didUpdateWidget(covariant FileBreadcrumb oldWidget) {
super.didUpdateWidget(oldWidget);
if (oldWidget.currentPath != widget.currentPath) {
WidgetsBinding.instance.addPostFrameCallback((_) {
if (_controller.hasClients) {
_controller.animateTo(
_controller.position.maxScrollExtent,
duration: const Duration(milliseconds: 200),
curve: Curves.easeOut,
);
}
});
}
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
final pathParts = currentPath.split('/');
final pathParts = widget.currentPath.split('/');
pathParts.removeWhere((part) => part.isEmpty);
final theme = Theme.of(context);
final colorScheme = theme.colorScheme;
@@ -34,6 +63,7 @@ class FileBreadcrumb extends StatelessWidget {
),
),
child: SingleChildScrollView(
controller: _controller,
scrollDirection: Axis.horizontal,
child: Row(
children: [
@@ -43,7 +73,7 @@ class FileBreadcrumb extends StatelessWidget {
path: '/',
icon: LucideIcons.home,
primaryColor: colorScheme.primary,
onTap: () => onPathTap('/'),
onTap: () => widget.onPathTap('/'),
),
for (int i = 0; i < pathParts.length; i++) ...[
Padding(
@@ -60,8 +90,9 @@ class FileBreadcrumb extends StatelessWidget {
path: '/${pathParts.sublist(0, i + 1).join('/')}',
icon: null,
primaryColor: colorScheme.primary,
onTap: () =>
onPathTap('/${pathParts.sublist(0, i + 1).join('/')}'),
onTap: () => widget.onPathTap(
'/${pathParts.sublist(0, i + 1).join('/')}',
),
),
],
],