Snackbarを実装したので実装例をご紹介します。 Demo 方針 画面遷移時にSnackbarが急に消えるような体験にしたくなかったため、アプリケーション全体で共通のSnackbarWidgetを表示できるようにします。 また、ViewではなくControllerあるいはViewModel側のエ…
Dartを書いていて、nullでない場合という条件式内でも、nullableなオブジェクトはnon-null扱いにならず、泣く泣く ! (Non-null assersion operator) を使って凌いでいました。 例えば下記のように、クラスのnullableなメンバー変数にアクセスするとき、 != n…
毎度おなじみのタイムゾーンの罠にハマったので記録しておきます。 今回サーバーから返却される値は下記の二種類ありました。 2024-11-14T00:00:00.000+09:00 のような ISO 8601 形式 2024-11-14 のような日付のみの情報 これをそのまま DateTime.parse で処…
以前紹介した、外部サービスの投稿をNotion日報へ連携するカスタムAPIの続きです。 kokh.hateblo.jp ZappierでSlackに投稿されたポストをwebhookで受取り、カスタムAPIへのリクエストを通してNotion日報に追加するようにしています。 ここで、webhookで受け…
ユーザーにNotionへのアクセスを許可してもらいたいときに利用する、OAuth認証の実装方法です。 全体の流れ ざっくりこのような流れになります。はユーザー操作です。 1. リダイレクト先のページを作成 2のPublic Integrationを作成するときに必要なページを…
RiverpodやFreezedといったpackageには、アノテーションを使ったコード生成オプションが用意されています。 例えば、 @riverpod String example(Ref ref) { return 'foo'; } この @riverpod の部分がアノテーション。 このままだと当然 Ref の定義が見つから…
最近flutter入門してアプリを作ってみてます。 ネイティブアプリ開発自体はじめてだし、新しい言語を学ぶのは久しぶりなので新鮮です ストレージの種類 さて、flutterの世界で永続化で使用するローカルストレージはこのような区分けになっているようです。 S…
path.resolve(...paths) は、引数に指定されたpathを結合して絶対pathに変換する。 ドキュメントに以下の記述があった。 If, after processing all given path segments, an absolute path has not yet been generated, the current working directory is us…
NotionDatabaseの特定期間内のページを取得して、AIに最適化したテキストに変換(Token削減するため不要な文字を削除するなど)した上で、日報から1ヶ月を振り返るプロンプトを作成した - kokh log で言及したプロンプトでOpenAIにリクエストするコマンドをn…
Notionでタスク管理する際に、Alfredを使っていい感じにタスク追加できるWorkflowを作りました。 github.com (Notion DBのプロパティなど自分仕様になっているので、Githubのみの公開) AlfredのWorkflowを、使い慣れたNode.jsで作るための知見が溜まったの…