banner
liuyuxin

liuyuxin

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

Weekly #2:「成功」不是「永远」

Hi ~ 这里是 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.

我很认同其中的观点,“生命是一个过程,不是一个结果” 的理念。有些东西是美好的,舍弃了也可以是美好的。“永远” 不应该是成功的代名词,人生也不应该囿于一个特定的结果。

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。