diff --git a/README.md b/README.md
index 1e1fca4..798e354 100644
--- a/README.md
+++ b/README.md
@@ -8,16 +8,16 @@ http://docmost.iletter.top/share/ropwljpyvn/p/mook-note-lHmPTswdDC
## 应用预览
-| 影视列表 | 书籍列表 | 笔记界面 |
-|:---:|:---:|:---:|
-|
|
|
|
-
+| 影视列表 | 书籍列表 | 笔记界面 |
+| :------------------------------------------------------------: | :------------------------------------------------------------: | :------------------------------------------------------------: |
+| `
` | `
` | `
` |
更多预览图片请到**应用功能详情预览**里面查看
## 功能特性
### 影视管理
+
- 影视增删改查,支持海报、导演、演员、类型等信息录入
- 影评撰写与管理,支持星级评分
- 影视海报墙浏览(瀑布流布局)
@@ -26,6 +26,7 @@ http://docmost.iletter.top/share/ropwljpyvn/p/mook-note-lHmPTswdDC
- 影视状态筛选(想看 / 在看 / 已看)
### 书籍管理
+
- 书籍增删改查,支持封面、作者、出版社等信息
- 书评撰写与管理
- 书摘 / 摘录记录
@@ -33,11 +34,13 @@ http://docmost.iletter.top/share/ropwljpyvn/p/mook-note-lHmPTswdDC
- 书籍状态筛选
### 笔记管理
+
- 笔记增删改查,支持 Markdown 编辑与实时渲染
- 笔记分享卡片
- Markdown 阅读器支持暗色模式与字体大小调节
### 通用功能
+
- 全局搜索(影视 / 书籍 / 笔记)
- 标签管理与分类
- 数据统计与可视化图表(月度趋势 / 类型分布)
@@ -51,11 +54,11 @@ http://docmost.iletter.top/share/ropwljpyvn/p/mook-note-lHmPTswdDC
## 技术栈
-| 类别 | 技术 |
-|------|------|
-| 框架 | Flutter 3.5+ |
-| 语言 | Dart |
-| 状态管理 | Provider |
+| 类别 | 技术 |
+| ---------- | ----------------- |
+| 框架 | Flutter 3.5+ |
+| 语言 | Dart |
+| 状态管理 | Provider |
| 本地数据库 | SQLite(sqflite) |
## 项目结构
@@ -145,18 +148,21 @@ flutter build appbundle --release
## 应用功能详情预览
-| 数据统计 | 侧边栏 | 我的界面 |
-|:---:|:---:|:---:|
-|
|
|
|
+| 数据统计 | 侧边栏 | 我的界面 |
+| :-------------------------------------------------------------: | :------------------------------------------------------------: | :-------------------------------------------------------------------: |
+| `
` | `
` | `
` |
+| 详情界面1 | 详情界面2 | 编辑笔记 |
+| :------------------------------------------: | :------------------------------------------: | :------------------------------------------: |
+| `
` | `
` | `
` |
-| 详情界面1 | 详情界面2 | 编辑笔记 |
-|:---:|:---:|:---:|
-|
|
|
|
+| 分享界面1 | 分享界面2 | 预览笔记 |
+| :------------------------------------------: | :------------------------------------------: | :------------------------------------------: |
+| `
` | `
` | `
` |
-| 分享界面1 | 分享界面2 | 预览笔记 |
-|:---:|:---:|:---:|
-|
|
|
|
+## 数据对接
+
+数据已对接6w+影视基础数据,以及300w+书籍基础信息,如需对接接口,或技术交流请联系作者。
## 开源协议
diff --git a/lib/pages/enhanced_search_settings_page.dart b/lib/pages/enhanced_search_settings_page.dart
index a9d91e9..f66f0af 100644
--- a/lib/pages/enhanced_search_settings_page.dart
+++ b/lib/pages/enhanced_search_settings_page.dart
@@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import '../utils/user_prefs.dart';
import '../utils/server_config.dart';
+import 'legal_page.dart';
/// 增强搜索设置页面
class EnhancedSearchSettingsPage extends StatefulWidget {
@@ -392,19 +393,33 @@ class _EnhancedSearchSettingsPageState
}
Widget _buildSaveButton(ColorScheme colors) {
- return GestureDetector(
- onTap: _saveAndVerify,
- child: Container(
- width: double.infinity,
- padding: const EdgeInsets.symmetric(vertical: 12),
- decoration: BoxDecoration(
- color: colors.primary,
- borderRadius: BorderRadius.circular(10),
+ return Column(
+ crossAxisAlignment: CrossAxisAlignment.stretch,
+ children: [
+ GestureDetector(
+ onTap: _saveAndVerify,
+ child: Container(
+ width: double.infinity,
+ padding: const EdgeInsets.symmetric(vertical: 12),
+ decoration: BoxDecoration(
+ color: colors.primary,
+ borderRadius: BorderRadius.circular(10),
+ ),
+ child: Center(
+ child: Text('保存并验证', style: TextStyle(fontSize: 14, fontWeight: FontWeight.w500, color: colors.onPrimary)),
+ ),
+ ),
),
- child: Center(
- child: Text('保存并验证', style: TextStyle(fontSize: 14, fontWeight: FontWeight.w500, color: colors.onPrimary)),
+ const SizedBox(height: 8),
+ Align(
+ alignment: Alignment.centerRight,
+ child: GestureDetector(
+ onTap: () => Navigator.push(context, MaterialPageRoute(
+ builder: (_) => const LegalPage(slug: 'token_doc', title: '获取Token'))),
+ child: Text('点击获取 Token', style: TextStyle(fontSize: 12, color: colors.primary)),
+ ),
),
- ),
+ ],
);
}
diff --git a/lib/pages/online_search_page.dart b/lib/pages/online_search_page.dart
index d973ec0..2fbf979 100644
--- a/lib/pages/online_search_page.dart
+++ b/lib/pages/online_search_page.dart
@@ -123,7 +123,7 @@ class _OnlineSearchPageState extends State {
final url =
'${ServerConfig.vipBaseUrl}/api/movie/list?movieName=${Uri.encodeComponent(keyword)}&token=$token&page=$page';
final resp =
- await http.get(Uri.parse(url)).timeout(const Duration(seconds: 10));
+ await http.get(Uri.parse(url)).timeout(const Duration(seconds: 20));
if (!mounted) return;
if (resp.statusCode == 200) {
@@ -156,7 +156,12 @@ class _OnlineSearchPageState extends State {
return;
}
}
- } catch (_) {}
+ } catch (e) {
+ if (mounted) {
+ final msg = e.toString().contains('TimeoutException') ? '搜索超时,请稍后重试' : '搜索失败,请检查网络';
+ ToastUtil.show(context, msg);
+ }
+ }
if (mounted) {
setState(() {
@@ -186,7 +191,7 @@ class _OnlineSearchPageState extends State {
final url =
'${ServerConfig.vipBaseUrl}/api/book/list?title=${Uri.encodeComponent(keyword)}&token=$token&page=$page';
final resp =
- await http.get(Uri.parse(url)).timeout(const Duration(seconds: 10));
+ await http.get(Uri.parse(url)).timeout(const Duration(seconds: 20));
if (!mounted) return;
if (resp.statusCode == 200) {
@@ -219,7 +224,12 @@ class _OnlineSearchPageState extends State {
return;
}
}
- } catch (_) {}
+ } catch (e) {
+ if (mounted) {
+ final msg = e.toString().contains('TimeoutException') ? '搜索超时,请稍后重试' : '搜索失败,请检查网络';
+ ToastUtil.show(context, msg);
+ }
+ }
if (mounted) {
setState(() {
diff --git a/lib/utils/server_config.dart b/lib/utils/server_config.dart
index c1dde62..8af8637 100644
--- a/lib/utils/server_config.dart
+++ b/lib/utils/server_config.dart
@@ -11,6 +11,7 @@ class ServerConfig {
static final String apiBase = '$baseUrl/api';
static final String vipBaseUrl = kDebugMode
+ // ? 'http://vipapi.mooknote.iletter.top'
? 'http://192.168.31.48:8081'
: 'http://vipapi.mooknote.iletter.top';
}