banner
liuyuxin

liuyuxin

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

週刊#2:「成功」は「永遠」ではありません

こんにちは〜、ここは liuyuxin です、これは私の第二期の週報です。今週は主にMeReadの更新に注力し、週末は彼女の大学院の推薦状の資料整理に多くの時間を費やしました。

私の週報は毎週月曜日の朝に WeChat 公式アカウントと個人ブログで更新されます。WeChat 公式アカウントは「刘玉新」と検索してください。ブログのアドレスは:https://liuyu.xin です。ブログは RSS フィードで購読することもできます:https://liuyu.xin/feed。

以下は本文です。

開発:MeRead が大幅な更新を迎える#


今週の主な開発作業は MeRead のイテレーションに集中し、木曜日の午後に 0.6.0 バージョンの更新をリリースしました。主な更新内容は以下の通りです:

  • 最適化:データベースを Sqflite から Isar に移行
  • 最適化:SnackBar の代わりに FlutterToast を使用
  • 機能:購読ソースごとに記事をグループ化して読む
  • 機能:サイドバーの購読ソースリストの展開状態を記憶する
  • 機能:複数の購読ソースを一括削除する
  • 機能:読み込みページに「元の記事を取得する」ボタンを追加
  • 機能:購読ソース編集ページで購読ソースのアドレスをクリックしてコピーできるようにする
  • 修正:拡張子が「.opml」のファイルをインポートできない問題を修正
  • 修正:読み込みページでリンクにアクセスした後にエラーが発生する問題を修正
  • 修正:グローバルなズーム設定時にページの状態が適切に更新されない問題を修正
  • その他:一部の UI インターフェースを更新

最新の更新をダウンロードするためには、Github にアクセスしてください(スターを忘れずに😊):Releases · gvenusleo/MeRead

以下に、開発プロセスで私が遭遇したいくつかの問題について簡単に説明します。

なぜデータベースを移行する必要があるのか#

MeRead は、昨年 11 月の最初のバージョンから 2 週間前の 0.5.0 バージョンまで、データベースとして SQLite を使用するためにSqfliteを利用していました。Sqflite は、pub で最も人気のあるデータベースの 1 つとして、開発体験が本当に良いです。しかし、Isarデータベースに触れた後、私はデータベースを移行することにしました。

公式サイトによると、Isar は「Flutter のために作られた超高速なクロスプラットフォームデータベース」です。具体的なパフォーマンスはまだ直感的にはわかりません。CRUD、インデックス、関連、全文検索などの必要な機能に加えて、Isar の魅力は次の 3 つです:

  • 本当のクロスプラットフォーム:Sqflite がモバイルと MacOS のみをサポートするのに対して、Isar はモバイル(iOS、Android)、デスクトップ(Windows、MacOS、Linux)、Web のような全プラットフォームをサポートしています。私は将来的に MeRead をデスクトップに拡張することを考えているので、データベースを早めに移行することで、将来的に多くのトラブルを回避できます。
  • さらなるデータ型のサポート:Sqflite はintnumStringUint8Listの 4 つのデータ型のみをサポートしていますが、Isar はboolfloatDateTimeList、ネストされたオブジェクトや列挙型など、さらに多くのデータ型をサポートしています。
  • 直感的で使いやすいデバッグツール:Isar には「Isar Inspector」というデバッグツールが付属しており、データベースを視覚的に操作することができます。非常に便利です。

Isar Inspector

要するに、Flutter 開発者には Isar データベースを強くお勧めします。一度使ってみると、Sqflite には戻れなくなります......

SnackBar の使用をやめる#

私はずっと SnackBar コンポーネントが好きではありませんでした。これはおそらく Material You デザインガイドラインで最も醜いコンポーネントだと思いますし、ユーザーフィードバックによると、Android のネイティブシステム上では SnackBar が設定した 2 秒後に自動的に消えないことがあります(私自身の moto X30 でも同じ問題があります)。これが SnackBar コンポーネントを置き換える決意を固めました。もちろん、置き換える前にバグの原因を探しました。公式ドキュメントを見てみると、明確に書かれています:

A SnackBar with an action will not time out when TalkBack or VoiceOver are enabled. This is controlled by AccessibilityFeatures.accessibleNavigation.
おそらく、異なる Android システムが SnackBar の処理方法を異なると考えられます。とりあえず FlutterToast に切り替えることにしました。さらに、コードの量も減らすことができます。

私のコードには問題はありません!#

もう 1 つ修正した興味深いバグは、MeRead が拡張子が「.opml」のファイルをインポートできない問題です。私自身の OPML ファイルの拡張子は「.xml」なので、この問題に気づいていませんでしたが、ユーザーからのフィードバックがありました。ソースコードを見てみると、次のように書かれています:

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

私は困惑しました。これは「.opml」と「.xml」の拡張子をサポートしていると明確に書かれているではありませんか?なぜ「.xml」は動作するのに、「.opml」は動作しないのでしょうか?

そこで、私はflutter_file_pickerのドキュメントと問題を調べ、最終的にissues#1148と関連するwikiに基づいて結論を出しました:これは Android のファイルシステムの問題です。私のコードとは関係ありません 😌

最終的な解決策は、選択可能なファイルの拡張子を指定できない場合は、任意のファイルを選択した後に拡張子が正しいかどうかを判断することです。

リリースのために追加の作業#

月曜日に、ユーザーからのフィードバックで、自分の OPML ファイルをインポートできないという問題が報告されました。MeRead はバックグラウンドで静かに OPML ファイルをインポートするため、このユーザーの OPML ファイル自体もかなり大きかったため、当時はあまり注意を払っていませんでした。そのユーザーには、ネットワーク環境があまり良くないため、もう少し待ってみてくださいと伝えました。土曜日に、このユーザーから問題がまだ解決されていないというメッセージを受け取りました。さらに、そのユーザーから自分の OPML ファイルも送られてきました。私はテストしてみましたが、確かにインポートできませんでした。夜に寮に戻り、すぐにバグを見つけるためにコンピュータを開きました。すぐに原因を見つけました:異なるソースの OPML ファイルの形式にはいくつかの違いがあり、MeRead はファイルを解析する際にヌルセーフのエラーが発生する可能性があります。問題を見つけた後、2 分で修正しました。その夜、新しいバージョンをすぐにリリースしました。

したがって、MeRead の最新バージョンは 0.6.1 になりました。OPML インポートの問題の修正以外にも、次の 2 つの更新があります:

  • 追加:購読ソースを削除する際に、すべてを選択または選択解除できるようになりました
  • 最適化:アプリ内でリンクを開く方法を最適化しました

読書:「成功」は「永遠」ではない#


金曜日に次の投稿を即座に見つけました:

人生不是来做任务的

すぐに、以前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.

私はその中の視点に非常に共感しています。「人生は結果ではなくプロセスです」という考え方です。何かは素晴らしいものであり、それを捨てることも素晴らしいものです。「永遠」は成功の代名詞ではなく、人生は特定の結果に囚われるべきではありません。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。