diff --git a/Wiki/Home.md b/Wiki/Home.md index 7f6b2b7..46b15fb 100644 --- a/Wiki/Home.md +++ b/Wiki/Home.md @@ -7,10 +7,12 @@ - **影视管理** — 增删改查、影评、海报墙、豆瓣链接爬取 - **书籍管理** — 增删改查、书评、摘抄 - **笔记管理** — Markdown 笔记、标签、图片 +- **EPUB 阅读** — 本地 EPUB 阅读、书摘、高亮 - **数据同步** — 服务端实时同步、WebDAV 同步、自动本地备份 - **回收站** — 软删除 + 恢复/彻底删除 - **标签管理** — 影视类型、书籍类型、笔记标签统一管理 - **统计分析** — 观影/阅读数据统计 +- **布局设置** — 影视墙/书架模式、网格/列表/大图卡片布局 ## 技术栈 @@ -33,6 +35,6 @@ - [图片存储](Image-Storage.md) — 图片路径管理、存储结构 - [同步系统](Sync-System.md) — 服务端同步、WebDAV、自动备份 - [服务端 API](Server-API.md) — Flask 后端、API 端点、激活码机制 -- [页面与路由](Pages-and-Navigation.md) — 页面结构、路由表、过渡动画 -- [主题与 UI](Theme-and-UI.md) — 主题配置、共享组件 -- [用户偏好](User-Preferences.md) — SharedPreferences 配置项 +- [页面与路由](Pages-and-Navigation.md) — 页面结构、路由表、过渡动画、添加按钮规范 +- [主题与 UI](Theme-and-UI.md) — 主题配置、布局设置界面、标签选择面板、共享组件 +- [用户偏好](User-Preferences.md) — SharedPreferences 配置项、布局设置、排序方式 diff --git a/Wiki/Pages-and-Navigation.md b/Wiki/Pages-and-Navigation.md index 0f2f3d9..aa5f50e 100644 --- a/Wiki/Pages-and-Navigation.md +++ b/Wiki/Pages-and-Navigation.md @@ -25,13 +25,13 @@ HomePage | 页面 | 文件 | 说明 | |------|------|------| -| MovieTabPage | `pages/movies/movie_tab_page.dart` | 影视列表(按状态筛选)| +| MovieTabPage | `pages/movies/movie_tab_page.dart` | 影视列表(支持影视墙模式)| | MovieFormPage | `pages/movies/movie_form_page.dart` | 新增/编辑影视 | | MovieDetailPage | `pages/movies/movie_detail_page.dart` | 影视详情 | -| MovieReviewsPage | `pages/movies/movie_reviews_page.dart` | 影评列表 | +| MovieReviewsPage | `pages/movies/movie_reviews_page.dart` | 影评列表(右下角浮动添加按钮)| | MovieReviewFormPage | `pages/movies/movie_review_form_page.dart` | 新增/编辑影评 | | MovieReviewDetailPage | `pages/movies/movie_review_detail_page.dart` | 影评详情 | -| MoviePostersPage | `pages/movies/movie_posters_page.dart` | 海报墙 | +| MoviePostersPage | `pages/movies/movie_posters_page.dart` | 海报墙(右下角浮动添加按钮)| | PosterGalleryPage | `pages/movies/poster_gallery_page.dart` | 海报画廊浏览 | | MovieSharePage | `pages/movies/movie_share_page.dart` | 影视分享 | | DoubanWebViewPage | `pages/movies/douban_webview_page.dart` | 豆瓣 WebView | @@ -40,13 +40,13 @@ HomePage | 页面 | 文件 | 说明 | |------|------|------| -| BookTabPage | `pages/book/book_tab_page.dart` | 书籍列表 | +| BookTabPage | `pages/book/book_tab_page.dart` | 书籍列表(支持书架模式)| | BookFormPage | `pages/book/book_form_page.dart` | 新增/编辑书籍 | | BookDetailPage | `pages/book/book_detail_page.dart` | 书籍详情 | -| BookReviewsPage | `pages/book/book_reviews_page.dart` | 书评列表 | +| BookReviewsPage | `pages/book/book_reviews_page.dart` | 书评列表(右下角浮动添加按钮)| | BookReviewFormPage | `pages/book/book_review_form_page.dart` | 新增/编辑书评 | | BookReviewDetailPage | `pages/book/book_review_detail_page.dart` | 书评详情 | -| BookExcerptsPage | `pages/book/book_excerpts_page.dart` | 摘抄列表 | +| BookExcerptsPage | `pages/book/book_excerpts_page.dart` | 摘抄列表(右下角浮动添加按钮)| | BookExcerptFormPage | `pages/book/book_excerpt_form_page.dart` | 新增/编辑摘抄 | | BookSharePage | `pages/book/book_share_page.dart` | 书籍分享 | @@ -78,6 +78,8 @@ HomePage | WebDAVSyncPage | `pages/sync/webdav_sync_page.dart` | WebDAV 同步 | | MdReaderTabPage | `pages/markdown_reader/md_reader_tab_page.dart` | Markdown 阅读器目录 | | MdViewerPage | `pages/markdown_reader/md_viewer_page.dart` | Markdown 查看器 | +| EpubReaderPage | `pages/epub_reader/epub_reader_page.dart` | EPUB 阅读器 | +| EpubDetailPage | `pages/epub_reader/epub_detail_page.dart` | EPUB 详情(书摘、高亮)| ## 路由 @@ -97,4 +99,15 @@ HomePage 所有路由使用 `SlideUpPageRoute`(`lib/utils/slide_up_page_route.dart`),实现从底部滑入的过渡效果。 +## 添加按钮统一规范 + +为保证界面一致性,以下页面使用 `FloatingActionButton.extended` 作为右下角添加按钮: + +| 页面 | 添加按钮文案 | 图标 | +|------|------------|------| +| BookExcerptsPage | 添加摘抄 | `Icons.add` | +| BookReviewsPage | 添加书评 | `Icons.add` | +| MovieReviewsPage | 添加影评 | `Icons.add` | +| MoviePostersPage | 添加海报 | `Icons.add_photo_alternate` | + [返回首页](Home.md) diff --git a/Wiki/Theme-and-UI.md b/Wiki/Theme-and-UI.md index 95f2247..9ec9b70 100644 --- a/Wiki/Theme-and-UI.md +++ b/Wiki/Theme-and-UI.md @@ -52,6 +52,55 @@ ThemeData( - 字体族:`Inter` - 字重:`w400`(Regular)、`w500`(Medium)、`w600`(Semibold) +## 布局设置界面 + +`lib/pages/profile_page.dart` 中的 `LayoutSettingsPage` — 设置中的布局配置页面。 + +### 界面结构 + +- **分类分组**:影视、阅读、笔记三个模块分别用图标+标题分组 +- **开关卡片**:影视墙模式、书架模式用带图标的卡片+Switch展示 +- **布局选择器**:自定义卡片式选择器,替代原生的 `SegmentedButton` + +### 布局选择器样式 + +```dart +_buildLayoutSelector( + selected: _movieLayout, + options: [ + (0, Icons.grid_view_outlined, '海报网格'), + (1, Icons.view_list_outlined, '列表'), + (2, Icons.crop_landscape_outlined, '大图卡片'), + ], + onChanged: (v) => _setLayout('movie', v), +) +``` + +特点: +- **卡片式布局**:每个选项是圆角卡片(圆角12px) +- **选中状态**:主色填充 + 白色图标文字 +- **未选中状态**:浅灰背景 + 灰色图标文字 +- **动画效果**:`AnimatedContainer` 实现150ms平滑过渡 +- **图标+文字垂直排列**:22px图标 + 12px文字 +- **等宽分布**:`Expanded` 让选项等宽排列 + +### 影视墙/书架模式开关 + +```dart +_buildWallSwitch( + icon: Icons.wallpaper_outlined, + title: '影视墙模式', + subtitle: '显示全部影片,不区分状态', + value: _movieWallMode, + onChanged: (v) => _setWallMode('movie', v), +) +``` + +开关卡片样式: +- 左侧:36px圆角图标容器(主色8%透明度背景) +- 中间:标题+副标题文字 +- 右侧:Switch开关 + ## 共享 Widget | Widget | 文件 | 说明 | @@ -59,14 +108,39 @@ ThemeData( | `MovieListItem` | `widgets/movie_list_item.dart` | 影视列表项 | | `BookListItem` | `widgets/book_list_item.dart` | 书籍列表项 | | `NoteListItem` | `widgets/note_list_item.dart` | 笔记列表项 | -| `MovieStatusBar` | `widgets/movie_status_bar.dart` | 影视状态筛选栏 | -| `BookStatusBar` | `widgets/book_status_bar.dart` | 书籍状态筛选栏 | +| `MovieStatusBar` | `widgets/movie_status_bar.dart` | 影视状态筛选栏(已看/在看/想看)| +| `BookStatusBar` | `widgets/book_status_bar.dart` | 书籍状态筛选栏(已读/在读/想读)| | `AnimatedStarRating` | `widgets/animated_star_rating.dart` | 动画星级评分 | | `BottomNavBar` | `widgets/bottom_nav_bar.dart` | 底部导航栏 | | `CustomDrawer` | `widgets/custom_drawer.dart` | 侧边抽屉菜单 | | `FadeInLocalImage` | `widgets/fade_in_local_image.dart` | 本地图片渐入显示 | | `AppRefreshIndicator` | `widgets/app_refresh_indicator.dart` | 自定义下拉刷新 | | `ShimmerSkeleton` | `widgets/shimmer_skeleton.dart` | 骨架屏加载效果 | +| `TagSidePanel` | `widgets/tag_side_panel.dart` | 标签选择侧边面板 | +| `MasterDetailScaffold` | `widgets/master_detail_scaffold.dart` | 平板双栏布局 | + +## 标签选择面板 + +`TagSidePanel` — 从右侧滑入的标签选择面板。 + +### 特点 + +- **滑入动画**:从右侧250ms滑入,带遮罩层 +- **已选标签**:主色填充的圆角标签,点击移除 +- **全部标签**:可选中/取消选中,选中状态带主色边框 +- **新建标签**:顶部输入框,回车或点击+号添加 +- **保存按钮**:右上角圆角主色按钮,替代原来的关闭图标 + +### 布局对齐 + +已选标签和全部标签均使用 `Wrap` 组件,配置: +```dart +Wrap( + alignment: WrapAlignment.start, + crossAxisAlignment: WrapCrossAlignment.start, +) +``` +确保标签严格左对齐。 ## 系统 UI diff --git a/Wiki/User-Preferences.md b/Wiki/User-Preferences.md index 08efdac..33cf0b9 100644 --- a/Wiki/User-Preferences.md +++ b/Wiki/User-Preferences.md @@ -4,91 +4,65 @@ `lib/utils/user_prefs.dart` — SharedPreferences 单例包装器。 -```dart -class UserPrefs { - static final UserPrefs _instance = UserPrefs._internal(); - factory UserPrefs() => _instance; -} -``` +### 布局设置 -使用前必须调用 `UserPrefs.init()`(在 `main.dart` 中完成)。 +| 偏好项 | 类型 | 默认值 | 说明 | +|--------|------|--------|------| +| `movieLayoutStyle` | int | 0 | 影视布局:0=海报网格, 1=列表, 2=大图卡片 | +| `bookLayoutStyle` | int | 0 | 阅读布局:0=封面网格, 1=列表 | +| `noteLayoutStyle` | int | 0 | 笔记布局:0=列表, 1=瀑布流, 2=时间线 | +| `movieWallMode` | bool | false | 影视墙模式:显示全部影片,不区分状态 | +| `bookshelfMode` | bool | false | 书架模式:显示全部书籍,不区分状态 | -## 配置项列表 +### 排序方式 -### 用户信息 +| 偏好项 | 类型 | 默认值 | 说明 | +|--------|------|--------|------| +| `movieSortMode` | int | 0 | 影视排序:0=更新时间, 1=创建时间, 2=评分 | +| `bookSortMode` | int | 0 | 书籍排序:0=更新时间, 1=创建时间, 2=评分 | +| `noteSortMode` | int | 0 | 笔记排序:0=更新时间, 1=创建时间 | -| 键 | 类型 | 默认值 | 说明 | -|----|------|--------|------| -| `nickname` | String | `'Mook'` | 昵称 | -| `motto` | String | `'好运不会眷顾一无所有之人。'` | 座右铭 | -| `avatarPath` | String? | `null` | 头像本地路径 | +### 主界面标签显示 -### 应用设置 +| 偏好项 | 类型 | 默认值 | 说明 | +|--------|------|--------|------| +| `showMovieTab` | bool | true | 显示影视标签 | +| `showBookTab` | bool | true | 显示阅读标签 | +| `showNoteTab` | bool | true | 显示笔记标签 | +| `showNotePlusTab` | bool | false | 显示 Note Plus 标签 | +| `defaultMainTabIndex` | int | 0 | 默认启动标签 | -| 键 | 类型 | 默认值 | 说明 | -|----|------|--------|------| -| `themeMode` | int | `0` | 0=跟随系统, 1=浅色, 2=深色 | -| `showExactReleaseDate` | bool | `true` | 上映日期显示到日/月 | -| `isFirstLaunch` | bool | `true` | 是否首次启动 | +### 主题设置 -### 主界面显示 +| 偏好项 | 类型 | 默认值 | 说明 | +|--------|------|--------|------| +| `themeMode` | int | 0 | 0=跟随系统, 1=浅色, 2=深色 | +| `colorSchemeIndex` | int | 0 | 配色方案:0=经典, 1=靛蓝, 2=薄荷, 3=琥珀, 4=玫瑰, 5=紫罗兰 | +| `fontFamily` | String | '' | 字体,空字符串=系统默认 | -| 键 | 类型 | 默认值 | 说明 | -|----|------|--------|------| -| `hideBottomNavOnScroll` | bool | `true` | 滚动时隐藏底部导航 | -| `showMovieTab` | bool | `true` | 是否显示观影标签 | -| `showBookTab` | bool | `true` | 是否显示阅读标签 | -| `showNoteTab` | bool | `true` | 是否显示笔记标签 | -| `defaultMainTabIndex` | int | `0` | 默认启动标签(0=影视, 1=阅读, 2=笔记)| +### 侧边栏功能开关 -### 布局样式 +| 偏好项 | 类型 | 默认值 | 说明 | +|--------|------|--------|------| +| `showSidebarHeatmap` | bool | true | 热力图 | +| `showSidebarRecent` | bool | true | 最近添加 | +| `showSidebarEncounter` | bool | true | 随机邂逅 | +| `showSidebarStroll` | bool | true | 漫步 | +| `showSidebarCalendar` | bool | true | 日历 | +| `showSidebarPerson` | bool | true | 人物 | +| `showSidebarTags` | bool | true | 标签 | +| `showSidebarMdReader` | bool | false | Markdown 阅读器 | +| `showSidebarEpub` | bool | true | EPUB 阅读器 | -| 键 | 类型 | 默认值 | 说明 | -|----|------|--------|------| -| `noteLayoutStyle` | int | `0` | 笔记布局(0=列表, 1=瀑布流, 2=时间线)| -| `movieLayoutStyle` | int | `0` | 影视布局(0=海报网格, 1=列表)| -| `bookLayoutStyle` | int | `0` | 阅读布局(0=封面网格, 1=列表)| +### 其他设置 -### Markdown 阅读器 - -| 键 | 类型 | 默认值 | 说明 | -|----|------|--------|------| -| `lastMdFolder` | String? | `null` | 最近选择的目录 | -| `showEmptyDirs` | bool | `true` | 是否显示空目录 | -| `showImageOnlyDirs` | bool | `true` | 是否显示纯图片目录 | - -### 应用图标 - -| 键 | 类型 | 默认值 | 说明 | -|----|------|--------|------| -| `appIconName` | String | `'app_icon'` | 当前应用图标名称 | - -### 用户统计 - -| 键 | 类型 | 默认值 | 说明 | -|----|------|--------|------| -| `deviceId` | String | `''` | 匿名设备标识(首次启动自动生成)| - -### 服务端同步 - -| 键 | 类型 | 默认值 | 说明 | -|----|------|--------|------| -| `syncServerUrl` | String | `''` | 服务器地址 | -| `syncActivationCode` | String | `''` | 激活码 | -| `syncExpiresAt` | String | `''` | 激活码有效期 | -| `syncIsPermanent` | bool | `false` | 是否永久有效 | -| `syncEnabled` | bool | `true` | 实时同步开关 | -| `syncLastEntryId` | int | `0` | 上次同步的 entry ID | - -## 主题模式迁移 - -`UserPrefs.init()` 中包含旧版 `isDarkMode`(布尔值)到新版 `themeMode`(三态值)的自动迁移: - -```dart -if (_prefs!.containsKey('isDarkMode') && !_prefs!.containsKey('themeMode')) { - final oldValue = _prefs!.getBool('isDarkMode') ?? false; - await _prefs!.setInt('themeMode', oldValue ? 2 : 0); -} -``` +| 偏好项 | 类型 | 默认值 | 说明 | +|--------|------|--------|------| +| `hideBottomNavOnScroll` | bool | true | 滚动时隐藏底部导航栏 | +| `showExactReleaseDate` | bool | true | 上映日期显示到日(false=显示到月) | +| `detailPageStyle` | int | 0 | 详情页样式:0=标准, 1=叠层 | +| `epubFontSize` | double | 18.0 | EPUB 阅读器字体大小 | +| `epubViewMode` | int | 0 | EPUB 书架视图:0=宽松, 1=紧凑 | +| `highlightsViewMode` | int | 0 | 摘抄视图:0=瀑布流, 1=列表 | [返回首页](Home.md)