分享一個(gè) Flutter 混開帶 Git 只讀功能的閱讀器 WReader

1 WReader

一個(gè)功能簡(jiǎn)單、頁面簡(jiǎn)陋、卻又實(shí)用的帶 Git 只讀功能的閱讀器悲关。提供私有 Git 倉庫克隆,分支娄柳、標(biāo)簽檢出與切換等功能寓辱,主要用于閱讀 Markdown 筆記與其它文件(支持導(dǎo)出與其它 App 打開)。
支持 Github 赤拒、GitLab讶舰、Gitblit 或其他 Git 裸倉庫等私有倉庫的 Clone ,鑒權(quán)信息僅保存在本地?cái)?shù)據(jù)庫需了,僅在 Clone 跳昼、Pull 與 Fetch 使用到。支持 https://xxx.git 肋乍、ssh://xxx.git 鹅颊、 git@xxx.git 等格式(可使用 https://gitee.com/tea_too_tea_too/WReaderDemo.git 該倉庫進(jìn)行測(cè)試,該倉庫是 public 倉庫墓造,無需鑒權(quán)信息)堪伍。

WReader

Github 地址 :https://github.com/Bottlezn/wreader
gitee 倉庫地址,我會(huì)定期更新的 : https://gitee.com/tea_too_tea_too/wreader

最新 Release 版本下載地址:

1.1 功能圖示

  • 克隆觅闽、瀏覽
    克隆
    瀏覽
  • 最近閱讀與設(shè)置頁面
    最近閱讀
    設(shè)置

1.2 功能列表

  1. 從遠(yuǎn)程 Git 倉庫中 Clone 項(xiàng)目到本地帝雇,支持使用密鑰對(duì)與賬戶密碼檢出,v0.4 版本之后支持 https:// 協(xié)議無鑒權(quán)信息檢出蛉拙,一次 Clone 之后無需在輸入鑒權(quán)信息( 可使用 https://gitee.com/tea_too_tea_too/WReaderDemo.git 該倉庫進(jìn)行測(cè)試尸闸,該倉庫是 public 倉庫,無需鑒權(quán)信息。 )吮廉。
  2. 從 Remote 中檢出 Branch 或者 tag 到本地 Branch苞尝,切換本地分支時(shí)不需要網(wǎng)絡(luò),因?yàn)?WReader 不會(huì)自動(dòng)幫你 Pull宦芦。
  3. 自由 Pull 那些從 遠(yuǎn)程 Branch 中檢出的本地 Branch 宙址,tag 行不通哦。同時(shí)帶有 Fetch 功能调卑。
  4. 支持亮暗模式自由切換抡砂,無論是在設(shè)置頁面還是閱讀頁面都可全局切換亮暗模式。
  5. 自動(dòng)轉(zhuǎn)換倉庫中的本地圖片恬涧,筆記中的圖片不需要在帶有一個(gè)外網(wǎng)地址啦注益。
  6. 使用 strapdown JS 庫與 bootstrap CSS 主題提供較為美觀的閱讀體驗(yàn)。
  7. 提供最近閱讀功能气破,在倉庫文件列表與閱讀記錄中均帶有搜索功能聊浅。
  8. 也可長(zhǎng)按文件使用手機(jī)自帶 App 打開文件,同時(shí)也支持導(dǎo)出文件哦现使。 導(dǎo)出后會(huì)提示導(dǎo)出目錄低匙。
  9. 還提供 國(guó)際化環(huán)境切換 、 無效倉庫清除 碳锈、 配置文件導(dǎo)入 等功能顽冶。
  10. 不提供本地編輯功能哦。

1.3 快速使用

建議使用 json 文件導(dǎo)入的方式來 Clone 項(xiàng)目售碳。

  • 密鑰對(duì)導(dǎo)入格式:authenticationWay 是的值為2强重,priKey , pubKeypriKeyPassword 使用 Base64 編碼。其中 priKey 必須是 BEGIN RSA PRIVATE KEY 開頭的贸人,不要使用 BEGIN OPENSSH PRIVATE KEY 開頭的间景,WReader 依賴的 JSCH 庫不支持該格式。
    {
        "gitUri":"git倉庫的uri艺智,支持git與http協(xié)議",
        "targetDir":"clone倉庫的目錄名稱倘要,就是`git clone git@xxx targetDir`中的dir∈穑可以不填寫封拧,使用默認(rèn)值",
        "authenticationWay":2,
        "priKey":"使用Base64編碼過的私鑰字符串內(nèi)容,必須是這個(gè)`BEGIN RSA PRIVATE KEY`開頭的",
        "pubKey":"使用Base64編碼過的公鑰字符串內(nèi)容",
        "priKeyPassword":"使用Base64編碼過的私鑰密碼夭问,私鑰沒有加密的話傳空即可"
    }
    
  • 賬號(hào)密碼導(dǎo)入格式: authenticationWay 是的值為1泽西。
    {
        "gitUri":"git倉庫的uri,支持git與http協(xié)議",
        "targetDir":"clone倉庫的目錄名稱缰趋,就是`git clone git@xxx targetDir`中的dir捧杉∩录可以不填寫,使用默認(rèn)值",
        "authenticationWay":1,
        "account": "使用Base64編碼過的賬號(hào)", 
        "pwd": "使用Base64編碼過的密碼內(nèi)容"
    }
    

1.4 注意事項(xiàng)

  1. WReader 暫不支持 iOS 設(shè)備糠溜。因?yàn)楸救酥饕?Android 開發(fā)淳玩,最近學(xué)了幾天 iOS 發(fā)現(xiàn)搞不定 Objective-Git 的導(dǎo)入與使用直撤。所以源碼中的 WReaderHostiOS 只是一個(gè)集成了 Flutter Module 的空架子非竿。有興趣的朋友可以一起參與哦,算是拋磚引玉吧谋竖。之后我打算在業(yè)余時(shí)間努力研究一下 Flutter 調(diào)用 C 庫 libgit2 的方法红柱,爭(zhēng)取在 Android&iOS 雙端或更多端中用 Native 代碼來實(shí)現(xiàn) Git 的功能。
  2. 本 App 是本人自發(fā)需求蓖乘,自己設(shè)計(jì)功能與 UI 锤悄、并自我測(cè)試的一個(gè) App 。如有幸有很多朋友使用嘉抒,那在這過程中肯定會(huì)有很多問題出現(xiàn)零聚。在 App 的設(shè)置頁面有日志收集功能,大家遇到問題可以其到該頁面找找看些侍。
  3. 其他尚未發(fā)現(xiàn)的問題隶症,歡迎評(píng)論指出。我的郵箱:wdu_udw@163.com 岗宣。
  4. 如果你喜歡 WReader 蚂会,歡迎點(diǎn)贊評(píng)論支持哦。

2 項(xiàng)目引入

  1. Clone 項(xiàng)目:git clone git@github.com:Bottlezn/wreader.git
  2. 目前 v0.1 版本的 tag 是 v0.1耗式。切換到該 tag胁住,git chekout -b fromTag/v0.1 v0.1
  3. 假設(shè)根路徑是 $ROOT_DIRcd $ROOT_DIR/wreader_flutter_module ,在 terminal 中運(yùn)行
    flutter pub get
    flutter create .
    
  4. Android 項(xiàng)目 WReaderHostAndroid 直接使用 AndroidStudio 打開即可刊咳。
  5. iOS 項(xiàng)目 WReaderHostiOS 需要在 WReaderHostiOS 目錄下運(yùn)行 pod install之后再打開彪见,我的 XCode 版本是 11 。

2.1 大概設(shè)計(jì)思路

WReader 是我在業(yè)余時(shí)間一點(diǎn)點(diǎn)設(shè)計(jì)娱挨、開發(fā)出來的:

  1. 絕大部分頁面都是使用 Flutter 開發(fā)實(shí)現(xiàn)余指,下文不說明的頁面均是 Flutter 頁面。
  2. 閱讀筆記 與 圖片瀏覽 頁面是使用 Android 原生開發(fā)的让蕾。另外 Android 端的 Git 功能是使用 JGit 庫浪规。
  3. Markdown 文件的解析使用 WebView 加載本地 Html 并搭配 strapdown.js ,將 Markdown 文件解析為 Html格式探孝,再使用 bootstrap 與 jQuery 等 js 庫 與 css 來渲染笋婿。
  4. iOS 端建議使用 Objective-Git 或者 libgit2 庫來實(shí)現(xiàn)的 iOS 端的 Git 功能,關(guān)于筆記方面參考 Android 端的 WebView 渲染也 OK 顿颅。

3 鳴謝

感謝公司小伙伴: 赟赟小姐姐俊俊小哥哥 給予我的在 H5 與 iOS 上的幫助缸濒。

使用到的開源庫,?(??????????????)?棒棒噠

flutter 部分:

  • fish_redux:阿里閑魚出品,WReader 將其用于狀態(tài)管理有點(diǎn)少哦庇配,IDEA 的模板生成插件該更新了哦斩跌。
  • fluro:WReader中用于 Route 管理。
  • intl:標(biāo)準(zhǔn)化的庫捞慌,我主要用來格式化日期耀鸦。
  • json_annotation 、convert 啸澡、build_runner 與 json_serializable :JSON 序列化袖订。
  • flutter_i18n:國(guó)際化
  • sqflite:數(shù)據(jù)庫操作。

Android 部分:

  • JGit:git 的Java 實(shí)現(xiàn)嗅虏,WReader 的核心功能依賴庫洛姑。
  • glide:圖片瀏覽庫。
  • slf4j-nop:JGit 依賴的日志庫皮服。
  • PhotoView:提供圖片瀏覽手勢(shì)瀏覽的庫楞艾。
  • gson:JSON 序列化。
  • com.amitshekhar.android:debug-db:數(shù)據(jù)庫調(diào)試庫龄广。

Html 部分:

  • strapdown:md 文件的渲染 js 庫硫眯,核心依賴庫。
  • jquery:jquery 蜀细。
  • bootstrap:用到 bootstrap 網(wǎng)站的美化 css 舟铜。

iOS 部分:

  • FMDB:SQLite 讀寫
  • WHToast:toast

還有一些遺漏的庫與熱心老哥的分享文章,再次感謝奠衔!谆刨。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市归斤,隨后出現(xiàn)的幾起案子痊夭,更是在濱河造成了極大的恐慌,老刑警劉巖脏里,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件她我,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡迫横,警方通過查閱死者的電腦和手機(jī)番舆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來矾踱,“玉大人恨狈,你說我怎么就攤上這事∏航玻” “怎么了禾怠?”我有些...
    開封第一講書人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵返奉,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我吗氏,道長(zhǎng)芽偏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任弦讽,我火速辦了婚禮污尉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘坦袍。我一直安慰自己十厢,他們只是感情好等太,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開白布捂齐。 她就那樣靜靜地躺著,像睡著了一般缩抡。 火紅的嫁衣襯著肌膚如雪奠宜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,696評(píng)論 1 312
  • 那天瞻想,我揣著相機(jī)與錄音压真,去河邊找鬼。 笑死蘑险,一個(gè)胖子當(dāng)著我的面吹牛滴肿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播佃迄,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼泼差,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了呵俏?” 一聲冷哼從身側(cè)響起堆缘,我...
    開封第一講書人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎普碎,沒想到半個(gè)月后吼肥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡麻车,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年缀皱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片动猬。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡啤斗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出枣察,到底是詐尸還是另有隱情争占,我是刑警寧澤燃逻,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站臂痕,受9級(jí)特大地震影響伯襟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜握童,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一姆怪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧澡绩,春花似錦稽揭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至步鉴,卻和暖如春揪胃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背氛琢。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工喊递, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人阳似。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓骚勘,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親撮奏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子俏讹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361