flutter desktop macosで複数ウィンドウだすぞー

表題の通りのことをしようと思ってたんだけど、いまいち使いづらいだけのモノになりそうな気がしたのでちょっとコードだけ整理して一旦ここで供養としておこうと思う。

21.10.02時点でflutterはレンダリングエンジンの都合で複数ウィンドウに対応していないっぽいんですけど、各プラットフォーム側でゴニョゴニョすればそれっぽいのが出来るみたいだったので試してた macosで実現できればいいかなって気持ちだったのでwinとlinuxはやってない やってる内容は↓の方のコピペ

github.com

やったこと

github.com

ソースはこちら 前述のリポジトリを参考に

  • null safetyにする
  • window毎に別デザインな内容を表示する
  • 今回は起動中に減ったり増やしたりする気はなかったので起動時に任意の数表示

あたりを対応

f:id:Qsk:20211003170201g:plain

↑こんな感じの動き。サンプルでそれぞれ同じようなウィンドウだけど一応別画面として実装は出来る

中身

表示しているのはplugin経由のウィンドウで、flutterがデフォルトで表示するウィンドウは Visible At Launch のチェックを外しているので常に非表示状態 f:id:Qsk:20211002132645p:plain

なので結局自前のウィンドウを表示している感じ。 MainFlutterWindow.dart を利用していない感じがなんともな〜という感じである。

課題感

  • これで状態持ち出したらどうなるのかな〜という話
    • ウィンドウ間で状態を共有したいならチャンネル経由であれこれが必要そうな気がするけどめーちゃくちゃ複雑になりそう
  • ホットリロードが動かない
    • 各々のウィンドウ自体をリロードできないのでリロードするとすべてのウィンドウが最後に表示したウィンドウになっちゃう
    • 修正したら再起動だぜ!時間がかかる

上述なお話でこれをアプリに取り入れるのはまあまあ辛いな〜〜と思ったので中止した。でもそれなりに頑張ったのでここにメモしておくことにした。よろしくお願い致します。

雑感

  • 複数ウィンドウはflutterのバージョンアップを待ち
  • 表示を切り替えたいなら単一ウィンドウの中身を分けるのが良さそう