Skip to content

DNET_FlutterThirdStep2

nishi_74322014 edited this page Sep 11, 2026 · 1 revision

Flutterのサード・ステップ2

概要

OAuth系認証・認可処理を実装し、序にReduxっぽい仕組みを導入。

詳細

以前のバージョンではAppAuthで認証処理を実装していたが(Flutterのセカンド・ステップの該当節を参照)、
Windowsデスクトップ版を実装するにあたり問題が発生して、自前実装が必要になった。

カスタムURLスキーム

Windowsデスクトップ版でというのがポイント

EXEの位置

以下の辺りにEXEがある。

\flutter_template\build\windows\x64\runner\Debug

レジストリ登録

  • 登録内容
    myapp.reg

    Windows Registry Editor Version 5.00
    
    [HKEY_CLASSES_ROOT\myapp]
    @="URL:myapp Protocol"
    "URL Protocol"=""
    
    [HKEY_CLASSES_ROOT\myapp\shell\open\command]
    @="\"(絶対パスを記入)\FrontendTemplates\UI\XPlat\flutter_template\build\windows\x64\runner\Debug\my_app.exe\" \"%1\""
    
  • 各処理(PowerShell)

    • 登録
      myapp.regをダブルクリック

    • テスト

      start myapp://test
    • 解除

      reg delete "HKEY_CLASSES_ROOT\myapp" /f

ハンドラ

未記載(元 Wiki も見出しのみ)。

インストール

shared_preferences

Flutterでローカルストレージ的な機能を使用する。

flutter pub add shared_preferences

※ 既出だが、再掲。

flutter_secure_storage

Flutterでセキュアなローカルストレージ的な機能を使用する。

flutter pub add flutter_secure_storage

※ 一度、shared_preferences で提案されたコードを置き換える。

crypto

認可リクエストでSHA256が必要になる。

dart pub add crypto

url_launcher

Flutterからブラウザを起動する。

flutter pub add url_launcher

app_links

FlutterからカスタムURLスキームを処理する。

flutter pub add app_links

スクラッチ実装へ移行

共通関数

結局、まるッと移行した(AppAuthからスクラッチ実装に変更したたタメ)。

認証リクエスト

方式としては、Reactと同じ様に、ヘッダーのSignIn要素定義ファイルに処理を実装した。

認証レスポンス

方式としては、カスタムURLスキームなのでmain.dartに処理を実装した。

※ ポイントとしては、

  • Windowsのシングル・インスタンス対応
  • Router・RedirectOfAuthを使用せず
  • トークン取得完了をSignInウィジェットへ通知する処理を追加。

Redux風

通知処理の実装でRedux対応を思い出した。Flutterの選択肢は複数あるが調査の結果、Riverpodを選択。

インストール(flutter_riverpod)

ValueNotifierはプリミティブ型のみだが、NotifierProviderはオブジェクトを対象にできる。

flutter pub add flutter_riverpod

追加の定義

https://github.com/OpenTouryoProject/FrontendTemplates/tree/develop/UI/XPlat/flutter_template/lib/riverpod

処理の変更

参考

移行メモ

  • 「戻る」の並びにある「Flutterのサード・ステップ2」は自ページのため、 その旨を補ってプレーン・テキストとした。
  • 同名の見出し(「インストール」)が衝突するため、括弧で文脈を補って一意にした。
  • 本文の「変更したたタメ」は原文ママ(「変更したタメ」の重複と思われる)。
  • PukiWiki のページ内アンカ(#xxxxxxxx)は GitHub Wiki では再現できないため、 他ページのアンカを指すリンクは「〜(ページ名 の該当節を参照)」の形に置き換えた。
  • 元 Wiki の行頭空白によるプレフォーマット・ブロックは、 フェンス付きコードブロックにした。
  • 本文の無い見出し(「ハンドラ」)は、その旨を明示した。
  • リンク先が未移行のページは、移行先のファイル名を `DNET_○○.md` の形で示し TODO.md に登録した。

Tags: 移行, Flutter, Flutterデスクトップ, カスタムURLスキーム, OAuth, PKCE, Riverpod, Redux, flutter_secure_storage, app_links

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally