This commit is contained in:
DelLevin-Home
2026-06-25 02:11:11 +08:00
parent 5b7823cb78
commit 00e948e580
4 changed files with 65 additions and 33 deletions

View File

@@ -8,16 +8,16 @@ http://docmost.iletter.top/share/ropwljpyvn/p/mook-note-lHmPTswdDC
## 应用预览
| 影视列表 | 书籍列表 | 笔记界面 |
|:---:|:---:|:---:|
| <img src="proj-img/Screenshot_1781866410.png" width="240"> | <img src="proj-img/Screenshot_1781866427.png" width="240"> | <img src="proj-img/Screenshot_1781866432.png" width="240"> |
| 影视列表 | 书籍列表 | 笔记界面 |
| :------------------------------------------------------------: | :------------------------------------------------------------: | :------------------------------------------------------------: |
| `<img src="proj-img/Screenshot_1781866410.png" width="240">` | `<img src="proj-img/Screenshot_1781866427.png" width="240">` | `<img src="proj-img/Screenshot_1781866432.png" width="240">` |
更多预览图片请到**应用功能详情预览**里面查看
## 功能特性
### 影视管理
- 影视增删改查,支持海报、导演、演员、类型等信息录入
- 影评撰写与管理,支持星级评分
- 影视海报墙浏览(瀑布流布局)
@@ -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 |
| 本地数据库 | SQLitesqflite |
## 项目结构
@@ -145,18 +148,21 @@ flutter build appbundle --release
## 应用功能详情预览
| 数据统计 | 侧边栏 | 我的界面 |
|:---:|:---:|:---:|
| <img src="proj-img/Screenshot_1781866461.png" width="240" > | <img src="proj-img/Screenshot_1781866436.png" width="240"> | <img src="./assets/README/Screenshot_1781866417.png" width="240"> |
| 数据统计 | 侧边栏 | 我的界面 |
| :-------------------------------------------------------------: | :------------------------------------------------------------: | :-------------------------------------------------------------------: |
| `<img src="proj-img/Screenshot_1781866461.png" width="240" >` | `<img src="proj-img/Screenshot_1781866436.png" width="240">` | `<img src="./assets/README/Screenshot_1781866417.png" width="240">` |
| 详情界面1 | 详情界面2 | 编辑笔记 |
| :------------------------------------------: | :------------------------------------------: | :------------------------------------------: |
| `<img src="proj-img/xq1.png" width="240">` | `<img src="proj-img/xq2.png" width="240">` | `<img src="proj-img/bj1.png" width="240">` |
| 详情界面1 | 详情界面2 | 编辑笔记 |
|:---:|:---:|:---:|
| <img src="proj-img/xq1.png" width="240"> | <img src="proj-img/xq2.png" width="240"> | <img src="proj-img/bj1.png" width="240"> |
| 分享界面1 | 分享界面2 | 预览笔记 |
| :------------------------------------------: | :------------------------------------------: | :------------------------------------------: |
| `<img src="proj-img/fx1.png" width="240">` | `<img src="proj-img/fx2.png" width="240">` | `<img src="proj-img/bj2.png" width="240">` |
| 分享界面1 | 分享界面2 | 预览笔记 |
|:---:|:---:|:---:|
| <img src="proj-img/fx1.png" width="240"> | <img src="proj-img/fx2.png" width="240"> | <img src="proj-img/bj2.png" width="240"> |
## 数据对接
数据已对接6w+影视基础数据以及300w+书籍基础信息,如需对接接口,或技术交流请联系作者。
## 开源协议

View File

@@ -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)),
),
),
),
],
);
}

View File

@@ -123,7 +123,7 @@ class _OnlineSearchPageState extends State<OnlineSearchPage> {
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<OnlineSearchPage> {
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<OnlineSearchPage> {
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<OnlineSearchPage> {
return;
}
}
} catch (_) {}
} catch (e) {
if (mounted) {
final msg = e.toString().contains('TimeoutException') ? '搜索超时,请稍后重试' : '搜索失败,请检查网络';
ToastUtil.show(context, msg);
}
}
if (mounted) {
setState(() {

View File

@@ -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';
}