Thunder
一个使用 Flutter 构建的开源、跨平台(iOS & Android)Lemmy 客户端
功能 • 路线图 • 贡献指南 • 翻译 • 从源码构建 • 约定
你好!只是想告诉你,这个仓库目前是我在边学习 Dart 和 Flutter 边构建有趣事物的个人副项目。
欢迎为本项目做出贡献,事实上,这里甚至强烈鼓励大家参与!由于我只能利用业余时间处理这个项目,因此来自社区的每一份贡献都弥足珍贵。如果你是一名开发者,请随时着手解决现有的任何问题。
你的热情、贡献和想法将受到极大的赞赏!让我们携手让这个项目大放异彩。🚀 💻
Releases
Android
通用版本可正式通过 Google Play Store、IzzyOnDroid 或 GitHub releases 获取。
预发布版本可在相应版本下的 Releases 部分获取。你也可以使用 Obtainium。
iOS
通用版本可正式通过 App Store 或 GitHub releases 获取。
预发布版本可通过 TestFlight 获取。另一种方式是下载 Releases 部分中对应的 IPA 文件,并通过 AltStore 进行安装。
Features
Thunder 目前正处于活跃 alpha 开发阶段,在此阶段可能并非所有功能都已完全实现。因此,不同版本之间可能会出现重大的破坏性变更。
以下是 Thunder 当前支持的功能的非详尽列表:
🏡 社区与用户
- 浏览信息流(全部 / 本地 / 已订阅)
- 查看、订阅、收藏和屏蔽社区
- 查看用户帖子/评论,并屏蔽不需要的用户
🌎 实例
- 查看实例信息和版本
- 屏蔽不需要的实例(在支持的实例上)
🔎 搜索
- 显示当前实例上的热门社区
- 搜索社区、用户、帖子和评论
- 应用高级搜索过滤器(排序、信息流、社区、创建者)
🗒️ 帖子与评论
- 创建和编辑帖子和评论
- 投票、保存和分享帖子和评论
- 自定义帖子和评论的滑动操作
- 基于关键词过滤帖子
🔑 账户
- 查看个人资料信息(帖子/评论/已保存)
- 查看通知,包括回复、提及和私信
- 同步的账户设置(显示已读帖子、评论分数、机器人账户)
- 支持多账户,以及不同实例上的访客账户
🎨 自定义
- 支持 Material You 主题(在适用设备上)
- 支持浅色/深色/OLED/系统模式,以及预设强调色
- 自定义内容字体缩放
- 自定义并预览帖子/评论外观(紧凑/卡片)
🎉 附加功能
- 导入和导出应用设置
- 新 GitHub 发布的内置更新通知
- 通过社区翻译支持多语言(Weblate)
路线图
当前的重点是继续扩展 Thunder 的通用功能和稳定性。这包括但不限于:
- 通过 Weblate 持续改进本地化和语言支持
- 改进审核/管理功能
- 改进嵌入内容(视频、图片等)
- 改进推送通知功能
贡献
欢迎贡献,但请遵守我们的社区行为准则!
要贡献潜在的功能或错误修复:
- Fork this repository, and clone with submodules:
git clone --recurse-submodules -j8 git@github.com:thunder-app/thunder.git - Base the feature or fix off the
developbranch. This is to allow for pre-release versions without affecting the main general releases. - Apply any changes and/or additions based off an existing issue (or create a new issue for the feature/fix you are working on)
- Create a pull request to have your changes reviewed and merged
翻译
对翻译 Thunder 感兴趣吗?我们使用 Weblate 进行众包翻译,因此任何人都可以创建账户并做出贡献!
从源码构建
安装 Flutter 及相关依赖
Thunder 使用 Flutter 开发,旨在同时支持 iOS 和 Android。目前可能支持其他平台,但尚未得到保证(Linux、Windows、MacOS)
要从源代码构建应用程序,需要执行几个步骤。
- 设置并安装 Flutter。有关更多信息,请访问 https://docs.flutter.dev/get-started/install。
- 使用
flutter channel stable确保你处于 Flutter 的stable通道。 - 克隆此仓库并使用
flutter pub get获取依赖项。 - 运行
flutter gen-l10n以生成本地化文件。 - 可选:使用
dart scripts/build.dart运行构建脚本,这将同时构建 iOS 和 Android 的发布版本。此步骤仅在你想构建应用的发布版本时才需要。
使用 Docker 构建
或者,你可以跳过先决条件设置,并通过 docker 使用单个命令构建 Android 应用程序:
./scripts/docker-build-android.sh
使用 Docker 进行开发
你也可以通过 Docker 容器运行 Android 的本地开发环境,包括连接到主机上的 ADB。
./scripts/docker-dev-android.sh
故障排除
Could not determine the dependencies of task ':unifiedpush_android:compileReleaseKotlin'.
> Cannot find a Java installation on your machine matching this tasks requirements: {languageVersion=8, vendor=any, implementation=vendor-specific}
> No locally installed toolchains match and toolchain download repositories have not been configured.
解决方案:请确保您的机器上已安装有效的 Java 8。
数据库
Thunder 使用 Drift(SQLite 的封装)来存储有关用户账户、收藏等的信息。如果您恰好正在处理涉及更新数据库架构的贡献,可以按照以下步骤操作。
- 在
lib\src\core\database\tables.dart中添加任何新的表或列 - 在
lib\src\core\database\database.dart中递增架构版本 - 运行
dart run drift_dev make-migrations以生成正确的迁移逻辑和测试。这将自动创建新的架构版本。 - 在
lib\src\core\database\database.dart中实现迁移逻辑 - 运行 build_runner 重新生成文件:
dart run build_runner build
约定
虽然没有必须遵循的具体约定,但请尽量遵循最佳实践。
欢迎提出任何建议以改进应用代码质量和架构!