banner
liuyuxin

liuyuxin

想成为独立开发者的在读医学生!
jike
twitter
github
telegram
email

每週 #2:「成功」不是「永遠」

嗨~ 這裡是 liuyuxin,這是我的第二期週報。這週的主要精力放在 MeRead 的更新上,週末則花了很多時間幫女友整理研究生預推免的材料。

我的週報會在每週一早上通過微信公眾號和個人博客更新,微信公眾號請搜索「劉玉新」,博客地址: https://liuyu.xin 。博客支持通過 RSS 訂閱: https://liuyu.xin/feed

以下是正文。

開發:MeRead 迎來大更新#


這週的主要開發工作集中在 MeRead 的迭代上,週四下午發布了 0.6.0 版本的更新。主要更新內容如下:

  • 優化 :將資料庫從 Sqflite 遷移至 Isar
  • 優化 :使用 FlutterToast 代替 SnackBar
  • 功能 :按照訂閱源分組閱讀文章
  • 功能 :記憶側邊欄訂閱源列表展開狀態
  • 功能 :批量刪除訂閱源
  • 功能 :閱讀頁面新增一個「獲取原文」按鈕
  • 功能 :訂閱源編輯頁面可以通過點擊訂閱源地址進行複製
  • 修復 :無法導入擴展名為 .opml 的文件
  • 修復 :閱讀頁面進入網絡鏈接後返回錯誤
  • 修復 :設置全局縮放時頁面狀態未及時更新
  • 其他 :更新部分 UI 界面

歡迎前往 Github 下載更新(別忘了 star 😊):Releases · gvenusleo/MeRead

下面簡單說一下開發過程中我遇到的幾個問題。

為什麼要遷移資料庫#

MeRead 從去年 11 月的第一個版本到兩週前 0.5.0 版本,一直都是借助 Sqflite 使用 SQLite 作為資料庫的,作為 pub 上最受歡迎的資料庫之一,Sqflite 的開發體驗確實不錯。但在接觸了 Isar 資料庫後,我還是決定遷移資料庫。

按照官網的介紹,Isar 是「專門為 Flutter 打造的超高速跨平台資料庫」。具體性能有多好,我還沒有直觀感受。除了 CRUD、索引、關聯、全文檢索等必要的功能外,Isar 吸引我主要是憑藉以下三點:

  • 真正的跨平台:不同於 Sqflite 僅支持移動端和 MacOS,Isar 實現了全平台支持,包括移動端(iOS、Android)、桌面端(Windows、MacOS、Linux)、網頁端(Web)。我是有考慮將來把 MeRead 擴展到桌面端的,早點遷移資料庫,也為將來省下不少麻煩。
  • 更多的數據類型支持:Sqflite 僅支持 intnumStringUint8List 四種數據類型,而 Isar 還支持 boolfloatDateTimeList 以及嵌套的對象和枚舉。
  • 直觀好用的調試工具:Isar 自帶一個名為「Isar Inspector」的調試工具,可以對資料庫進行可視化操作,非常好用。

Isar Inspector

總之,強烈推薦 Flutter 開發的夥伴使用 Isar 資料庫,反正用過之後,我是回不去 Sqflite 了 ……

放棄使用 SnackBar#

一直以來我都不太喜歡 SnackBar 這個組件,我覺得這應該是 Material You 設計規範中最醜的組件了,加上有用戶反饋在 Android 類原生系統上 SnackBar 無法按照設定的顯示 2 秒之後自動消失(這個問題在我自己的 moto X30 上也有),更加堅定了我替換 SnackBar 組件的決心。當然,更換之前還是先找找 Bug 的原因。翻了一下官方文檔,上面明確寫著:

A SnackBar with an action will not time out when TalkBack or VoiceOver are enabled. This is controlled by AccessibilityFeatures.accessibleNavigation.
可能是不同的 Android 系統對 SnackBar 的處理方式不一樣吧。索性直接換到 FlutterToast,還能減少代碼量。

我的代碼沒錯!#

另外修復的一個有意思的 Bug 就是:MeRead 無法導入擴展名為 .opml 的文件。由於我自己的 OPML 文件擴展名是 .xml ,所以一直沒有發現這個問題,直到有用戶反饋。我去看了我的源代碼,有關代碼是這樣寫的:

final result = await FilePicker.platform.pickFiles(
  type: FileType.custom,
  allowedExtensions: ['opml', 'xml'],
);

我很蒙圈,這不清楚寫著支持 .opml.xml 擴展名的文件嗎?為啥 .xml 能行,.opml 就不行了?

於是我又跑到 flutter_file_picker 的去查文檔和 issues ,最終根據 issues#1148 和有關的 wiki ,我得出結論:這是 Android 文件系統的鍋,與我的代碼無關 😌

而我最終的解決方法就是:既然無法指定可選擇的文件擴展名,那就乾脆設定為任選文件後再判斷文件擴展名是否正確。

加個班補個 release#

週一的時候收到一位用戶反饋,自己的 OPML 文件無法導入。由於 MeRead 導入 OPML 文件是後台靜默導入的,這位用戶的 OPML 文件本身也比較大,當時沒怎麼留意,告訴他可能是網絡環境不太好,多等等就行。週六看到這位用戶留言問題依舊沒有解決,還發來了自己的 OPML 文件。我測試了一下,確實無法導入。晚上回到宿舍,打開電腦就開始抓 Bug,很快找到原因:不同來源的 OPML 文件的格式有一些差別,導致 MeRead 在解析文件時有概率出現空安全報錯。找到問題後,兩分鐘修復完。當晚立馬 release 了一個新版。

所以現在 MeRead 的最新版來到了 0.6.1 。除了 OPML 導入問題的修復外,還有兩個更新:

  • 新增 :刪除訂閱源時可以全選和取消全選
  • 優化 :優化了鏈接在應用內打開的方式

閱讀:「成功」不是「永遠」#


週五在即刻刷到下面的帖子:

人生不是來做任務的

立馬回想起很久之前在 Twitter 上刷到的另外一條:

I think a lot about how we as a culture have turned "forever" into the only acceptable definition of success.
Like... if you open a coffee shop and run it for a while and it makes you happy but then stuff gets too expensive and stressful and you want to do something else so you close it, it's a "failed" business. If you write a book or two,then decide that you don't actually want to keep doing that, you're a "failed" writer. If you marry someone, and that marriage is good for a while,and then stops working and you get divorced, it's a "failed" marriage.
The only acceptable "win condition" is "you keep doing that thing forever". A friendship that lasts for a few years but then its time is done and you move on is considered less valuable or not a "real" friendship. A hobby that you do for a while and then are done with is a "phase" - or, alternatively, a "pity" that you don't do that thing any more. A fandom is "dying" because people have had a lot of fun with it but are now moving on to other things.
I just think that something can be good, and also end,and that thing was still good. And it's okay to be sad that it ended, too. But the idea that anything that ends is automatically less than this hypothetical eternal state of success... I don't think that's doing us any good at all.

我很認同其中的觀點,“生命是一個過程,不是一個結果” 的理念。有些東西是美好的,捨棄了也可以是美好的。“永遠” 不應該是成功的代名詞,人生也不應該囿於一個特定的結果。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。