一个功能丰富的 Flutter 应用,用于浏览和管理来自 Danbooru 图像服务的图片和视频内容。
- 🔍 搜索功能:支持多标签搜索,直接与 Danbooru API 集成
- 📱 响应式网格视图:3 列网格展示,自动加载缩略图
- 🎞️ 详细页面查看:支持滑动浏览多张图片/视频
- 🎬 视频支持:自动识别并播放视频内容,加载失败时回退到预览图
- 📥 批量下载:支持多选图片批量下载到本地相册
- 📋 链接复制:快速复制选中图片的原图链接
- 内容等级筛选:支持 4 个等级的内容筛选
- 全年龄 (R-0)
- 轻度提示 (R-12)
- 青少年警告 (R-15)
- 成人限制 (R-18)
- 动态搜索:输入标签时自动过滤,支持空搜索展示所有内容
- 下拉刷新:支持下拉刷新以重新加载当前搜索结果
- 多选模式:长按图片进入多选模式
- 点击图片切换选择状态
- 返回按钮智能处理:当在多选状态下,首先退出多选而非直接返回
- 全屏浏览:点击图片进入全屏查看模式
- 支持放大缩小(使用 photo_view)
- 视频内容可在全屏模式播放/暂停
- 自适应加载:优先加载高分辨率图片,加载失败自动回退到预览图
- 视频处理:
- 自动识别视频格式
- 支持在详细页面和全屏页面播放
- 点击可控制播放/暂停
- 图片保存:支持长按保存当前图片到本地相册
- 链接管理:可打开原始来源链接(如果可用)
- 分类标签:展示图片的各类标签
- 作者标签
- 版权标签
- 角色标签
- 通用标签
- 快速搜索:点击任何标签可直接搜索相关内容
- Flutter:跨平台 UI 框架 (3.10.7+)
- Dart:编程语言
| 包名 | 版本 | 用途 |
|---|---|---|
| http | ^1.2.1 | HTTP 请求,API 调用 |
| dio | ^5.4.3 | 高级 HTTP 客户端,文件下载 |
| video_player | ^2.7.0 | 视频播放支持 |
| photo_view | ^0.15.0 | 图片缩放浏览 |
| gal | ^2.1.1 | 相册/图库访问 |
| path_provider | ^2.1.3 | 文件路径管理 |
| url_launcher | ^6.3.0 | 链接打开 |
lib/
├── main.dart # 应用入口,主页面(搜索&网格视图)
├── post_detail_page.dart # 详细页面(PageView 浏览)
├── full_screen_image_page.dart # 全屏浏览页面
└── reusable_image_view.dart # 可复用图片视图组件
表示单个图片/视频内容的数据模型:
class Post {
final int id; // 内容 ID
final String rating; // 内容等级
final String tagString; // 标签字符串
final String? fileUrl; // 原图链接
final String? largeFileUrl; // 大图链接
final String? previewFileUrl; // 预览图链接
final String? tag_string_*; // 分类标签
final String? source; // 原始来源链接
}主页面状态管理:
- 搜索和筛选逻辑
- 列表加载和分页
- 多选模式管理
- API 请求处理
详细页面状态管理:
- 高分辨率图片/视频缓存
- PageView 翻页管理
- 视频控制器生命周期管理
全屏页面状态管理:
- 图片/视频智能加载(优先尝试图片,失败时尝试视频)
- 播放控制
https://danbooru.donmai.us/posts.json
tags:搜索标签(支持 space 分隔和 rating: 前缀)limit:每页加载数量(设为 100)page:页码(从 1 开始)
# 搜索特定标签且等级为全年龄的内容
https://danbooru.donmai.us/posts.json?tags=tag1+tag2+rating:g&limit=100&page=1
# 空搜索(显示所有内容)
https://danbooru.donmai.us/posts.json?tags=&limit=100&page=1
- Flutter SDK (3.10.7+)
- Dart SDK
- Android Studio / Xcode(用于模拟器/设备)
- 网络连接(访问 Danbooru API)
- 克隆项目
- 运行依赖安装:
flutter pub get
- 选择目标设备/模拟器:
flutter devices
- 运行应用:
flutter run
- 在搜索框输入标签(例:
character_name、artist_name) - 点击搜索图标或按 Enter 键
- 应用启动时自动加载一次空搜索
- 点击下方的内容等级筛选按钮(R-0、R-12、R-15、R-18)
- 选中的筛选条件会自动应用到搜索
- 修改筛选条件时自动重新搜索
- 点击网格中的图片进入详细页面
- 在详细页面可左右滑动浏览其他图片
- 点击图片可进入全屏查看模式
- 长按图片可保存到本地相册
- 长按任何图片进入多选模式
- 继续点击图片切换选择状态
- 顶部显示已选择数量
- 使用操作按钮:
- 📥 下载:将选中的图片保存到相册
- 🔗 链接:复制所有选中图片的原图链接
- 按返回键时首先退出多选模式(而非直接返回应用)
- 在网格视图界面向下拉动
- 释放时自动重新加载当前搜索结果
- 如果内容是视频格式,会自动在详细页面和全屏页面识别
- 点击视频区域可播放/暂停
- 加载失败时自动显示预览图
┌─────────────────────────────┐
│ AppBar: Danbooru Viewer │
├─────────────────────────────┤
│ [搜索框..................] 🔍 │
├─────────────────────────────┤
│ ◉全年龄 ◯轻度提示 ◯警告 ◯成人 │
├─────────────────────────────┤
│ ┌─────┬─────┬─────┐ │
│ │ IMG │ IMG │ IMG │ │
│ ├─────┼─────┼─────┤ │
│ │ IMG │ IMG │ IMG │ │
│ ├─────┼─────┼─────┤ │
│ │ IMG │ IMG │ IMG │ │
│ └─────┴─────┴─────┘ │
│ ⭘ 加载中 (3 列网格) │
└─────────────────────────────┘
┌─────────────────────────────┐
│ ◀ Post #12345 │
├─────────────────────────────┤
│ │
│ [大图预览区域] │
│ (可左右滑动浏览) │
│ (点击进入全屏模式) │
│ │
├─────────────────────────────┤
│ 作者: [标签1] [标签2] ... │
│ 版权: [标签1] [标签2] ... │
│ 角色: [标签1] [标签2] ... │
│ 普通: [标签1] [标签2] ... │
└─────────────────────────────┘
- 黑色背景,最大化图片/视频显示
- 支持手势缩放(图片)
- 点击关闭,长按保存
- 需要稳定的互联网连接访问 Danbooru API
- 图片和视频通过网络流式加载,无本地缓存机制
- 图片格式:支持 JPEG、PNG、WebP 等常见格式
- 视频格式:取决于 video_player 支持的格式
- Android:H.264、VP9 等
- iOS:H.264、HEVC 等
- 加载策略:
- 优先加载高分辨率原图
- 原图加载失败时回退到预览图
- 视频识别失败时显示预览图
- 视频控制器在页面销毁时释放
- 缓存的高分辨率 URL 在页面导航时保留
- Android 13+:需要文件访问权限保存图片
- iOS:需要相册访问权限保存图片
- 应用会在需要时动态请求权限
- 添加本地缓存:考虑使用
hive或sqflite缓存搜索历史和已下载图片 - 收藏夹功能:保存喜欢的图片
- 离线模式:支持离线浏览已下载的内容
- 高级搜索:UI 改进的搜索界面,支持高级筛选选项
- 图片懒加载:只加载可见网格区域的图片
- 内存优化:限制同时缓存的高分辨率图片数量
- 网络优化:实现连接池和请求去重
- 搜索历史:记录最近搜索
- 收藏标记:用户可标记喜欢的内容
- 快捷键支持:支持键盘快捷操作
- 深色模式:完整的深色主题支持
⚠️ 无本地缓存机制⚠️ 搜索不支持复杂的高级查询语法(仅支持基本标签)⚠️ 内存中 URL 缓存可能导致大量浏览时内存占用增加
- 添加搜索建议/自动完成
- 实现本地数据库缓存
- 支持用户自定义主题
- 添加通知和订阅功能
- 性能监控和分析
本项目为私有项目。
本项目使用 GitHub Actions 进行自动化构建和发布。详见 工作流指南。
Linux/macOS:
chmod +x scripts/release.sh
./scripts/release.shWindows:
scripts\release.bat脚本会引导你完成整个发布流程。
创建并推送 Git Tag 以自动构建所有平台的 Release 版本:
# 创建版本 Tag
git tag v1.0.0
git push origin v1.0.0构建完成后,会自动在 GitHub Releases 页面创建发布版本,包含以下构建产物:
- 📱 Android APK (支持 arm64、armeabi-v7a、x86_64)
- 🍎 iOS IPA
- 🐧 Linux 可执行程序
- 🪟 Windows 可执行程序
- 🌐 Web 应用(同时部署到 GitHub Pages)
| 工作流 | 触发条件 | 功能 |
|---|---|---|
| CI | Push 到 main/develop 或 PR | 代码分析、测试、Debug 构建 |
| Build Release | 推送 v* Tag |
多平台 Release 构建 |
| Deploy Web | 推送 Tag 或 main 分支 | 部署 Web 版本到 GitHub Pages |
详细信息请参考:
开发于 2026 年 2 月
A: Danbooru API 的响应速度和网络连接有关。首次加载会获取缩略图,然后异步加载高分辨率图片。
A: 在搜索框中输入标签,使用空格分隔。例:tag1 tag2 tag3
A: 可以,使用标签搜索。例:artist:artist_name 或直接输入标签
A: 请确保:
- 该内容确实是视频格式
- 网络连接正常
- 设备支持该视频格式
- 权限已授予(如需要)
A: 检查以下几点:
- 存储权限是否已授予
- 设备存储空间是否充足
- 网络连接是否正常