主要合入内容:
- 文件管理器分页加载、排序偏好、桌面表头排序、移动端排序菜单、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:
@@ -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('/')}',
|
||||
),
|
||||
),
|
||||
],
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user