开源分享一个 Flutter 混开带 Git 只读功能的阅读器
2020-05-07 本文已影响0人
悟笃笃
1 WReader
一个功能简单、页面简陋、却又实用的带 Git 只读功能的阅读器。提供私有 Git 仓库克隆,分支、标签检出与切换等功能,主要用于阅读 Markdown 笔记与其它文件(支持导出与其它 App 打开)。
支持 Github 、GitLab、Gitblit 或其他 Git 裸仓库等私有仓库的 Clone ,鉴权信息仅保存在本地数据库,仅在 Clone 、Pull 与 Fetch 使用到。支持 https://xxx.git
、ssh://xxx.git
、 git@xxx.git
等格式。
Github 地址 :https://github.com/Bottlezn/wreader
gitee 仓库地址,我会定期更新的 : https://gitee.com/tea_too_tea_too/wreader
最新 Release 版本下载地址:
1.1 功能图示
-
克隆、浏览
克隆 浏览
-
最近阅读与设置页面
最近阅读 设置
1.2 功能列表
- 从远程私人 Git 仓库中 Clone 项目到本地,支持使用密钥对与账户密码检出,暂不支持无鉴权方式的检出。一次 Clone 之后无需在输入鉴权信息。
- 从 Remote 中检出 Branch 或者 tag 到本地 Branch,切换本地分支时不需要网络,因为 WReader 不会自动帮你 Pull。
- 自由 Pull 那些从 远程 Branch 中检出的本地 Branch ,tag 行不通哦。同时带有 Fetch 功能。
- 支持亮暗模式自由切换,无论是在设置页面还是阅读页面都可全局切换亮暗模式。
- 自动转换仓库中的本地图片,笔记中的图片不需要在带有一个外网地址啦。
- 使用 strapdown JS 库与 bootstrap CSS 主题提供较为美观的阅读体验。
- 提供最近阅读功能,在仓库文件列表与阅读记录中均带有搜索功能。
- 也可长按文件使用手机自带 App 打开文件,同时也支持导出文件哦。 导出后会提示导出目录。
- 还提供 国际化环境切换 、 无效仓库清除 、 配置文件导入 等功能。
- 不提供本地编辑功能哦。
1.3 快速使用
建议使用 json 文件导入的方式来 Clone 项目。
- 密钥对导入格式:
authenticationWay
是的值为2,priKey
,pubKey
和priKeyPassword
使用 Base64 编码。其中priKey
必须是BEGIN RSA PRIVATE KEY
开头的,不要使用BEGIN OPENSSH PRIVATE KEY
开头的,WReader 依赖的 JSCH 库不支持该格式。{ "gitUri":"git仓库的uri,支持git与http协议", "targetDir":"clone仓库的目录名称,就是`git clone git@xxx targetDir`中的dir。可以不填写,使用默认值", "authenticationWay":2, "priKey":"使用Base64编码过的私钥字符串内容,必须是这个`BEGIN RSA PRIVATE KEY`开头的", "pubKey":"使用Base64编码过的公钥字符串内容", "priKeyPassword":"使用Base64编码过的私钥密码,私钥没有加密的话传空即可" }
- 账号密码导入格式:
authenticationWay
是的值为1。{ "gitUri":"git仓库的uri,支持git与http协议", "targetDir":"clone仓库的目录名称,就是`git clone git@xxx targetDir`中的dir。可以不填写,使用默认值", "authenticationWay":1, "account": "使用Base64编码过的账号", "pwd": "使用Base64编码过的密码内容" }
1.4 注意事项
- WReader 暂不支持 iOS 设备。因为本人主要做 Android 开发,最近学了几天 iOS 发现搞不定 Objective-Git 的导入与使用。所以源码中的 WReaderHostiOS 只是一个集成了 Flutter Module 的空架子。有兴趣的朋友可以一起参与哦,算是抛砖引玉吧。之后我打算在业余时间努力研究一下 Flutter 调用 C 库 libgit2 的方法,争取在 Android&iOS 双端或更多端中用 Native 代码来实现 Git 的功能。
- 本 App 是本人自发需求,自己设计功能与 UI 、并自我测试的一个 App 。如有幸有很多朋友使用,那在这过程中肯定会有很多问题出现。在 App 的设置页面有日志收集功能,大家遇到问题可以其到该页面找找看。
- 其他尚未发现的问题,欢迎评论指出。我的邮箱:
wdu_udw@163.com
。 - 如果你喜欢 WReader ,欢迎点赞评论支持哦。
2 项目引入
- Clone 项目:
git clone git@github.com:Bottlezn/wreader.git
- 目前 v0.1 版本的 tag 是
v0.1
。切换到该 tag,git chekout -b fromTag/v0.1 v0.1
- 假设根路径是
$ROOT_DIR
,cd $ROOT_DIR/wreader_flutter_module
,在 terminal 中运行flutter pub get flutter create .
- Android 项目
WReaderHostAndroid
直接使用 AndroidStudio 打开即可。 - iOS 项目
WReaderHostiOS
需要在WReaderHostiOS
目录下运行pod install
之后再打开,我的 XCode 版本是 11 。
2.1 大概设计思路
WReader 是我在业余时间一点点设计、开发出来的:
- 绝大部分页面都是使用 Flutter 开发实现,下文不说明的页面均是 Flutter 页面。
- 阅读笔记 与 图片浏览 页面是使用 Android 原生开发的。另外 Android 端的 Git 功能是使用 JGit 库。
- Markdown 文件的解析使用 WebView 加载本地 Html 并搭配 strapdown.js ,将 Markdown 文件解析为 Html格式,再使用 bootstrap 与 jQuery 等 js 库 与 css 来渲染。
- iOS 端建议使用 Objective-Git 或者 libgit2 库来实现的 iOS 端的 Git 功能,关于笔记方面参考 Android 端的 WebView 渲染也 OK 。
3 鸣谢
感谢公司小伙伴: 赟赟小姐姐 与 俊俊小哥哥 给予我的在 H5 与 iOS 上的帮助。
使用到的开源库,٩(๑ᵒ̴̶̷͈᷄ᗨᵒ̴̶̷͈᷅)و棒棒哒
:
flutter 部分:
- fish_redux:阿里闲鱼出品,WReader 将其用于状态管理文档有点少哦,IDEA 的模板生成插件该更新了哦。
- fluro:WReader中用于 Route 管理。
- intl:标准化的库,我主要用来格式化日期。
- json_annotation 、convert 、build_runner 与 json_serializable :JSON 序列化。
- flutter_i18n:国际化
- sqflite:数据库操作。
Android 部分:
- JGit:git 的Java 实现,WReader 的核心功能依赖库。
- glide:图片浏览库。
- slf4j-nop:JGit 依赖的日志库。
- PhotoView:提供图片浏览手势浏览的库。
- gson:JSON 序列化。
- com.amitshekhar.android:debug-db:数据库调试库。
Html 部分:
- strapdown:md 文件的渲染 js 库,核心依赖库。
- jquery:jquery 。
- bootstrap:用到 bootstrap 网站的美化 css 。
iOS 部分:
- FMDB:SQLite 读写
- WHToast:toast
还有一些遗漏的库与热心老哥的分享文章,再次感谢!。