flutter desktop macosで複数ウィンドウだすぞー
表題の通りのことをしようと思ってたんだけど、いまいち使いづらいだけのモノになりそうな気がしたのでちょっとコードだけ整理して一旦ここで供養としておこうと思う。
flutter desktopで複数ウィンドウ開くためのアレコレをしてみたけど使いづらい感じのサムシングという感じに落ち着いてしまった
— kyusuke (@8140i2865_3) 2021年9月29日
21.10.02時点でflutterはレンダリングエンジンの都合で複数ウィンドウに対応していないっぽいんですけど、各プラットフォーム側でゴニョゴニョすればそれっぽいのが出来るみたいだったので試してた macosで実現できればいいかなって気持ちだったのでwinとlinuxはやってない やってる内容は↓の方のコピペ
To celebrate @FlutterDev beating @reactnative on @github on wanted to show you a cool way to manage multiple windows in Flutter. Creating new one, Resizing a child, Closing a window, and communicating between them! pic.twitter.com/LzXXfvqyN2
— Rody Davis (@rodydavis) 2020年1月7日
Here is the source: https://t.co/eNXIkkvNd9
— Rody Davis (@rodydavis) 2020年1月7日
やったこと
ソースはこちら 前述のリポジトリを参考に
- null safetyにする
- window毎に別デザインな内容を表示する
- 今回は起動中に減ったり増やしたりする気はなかったので起動時に任意の数表示
あたりを対応
↑こんな感じの動き。サンプルでそれぞれ同じようなウィンドウだけど一応別画面として実装は出来る
中身
表示しているのはplugin経由のウィンドウで、flutterがデフォルトで表示するウィンドウは Visible At Launch
のチェックを外しているので常に非表示状態
なので結局自前のウィンドウを表示している感じ。 MainFlutterWindow.dart
を利用していない感じがなんともな〜という感じである。
課題感
- これで状態持ち出したらどうなるのかな〜という話
- ウィンドウ間で状態を共有したいならチャンネル経由であれこれが必要そうな気がするけどめーちゃくちゃ複雑になりそう
- ホットリロードが動かない
- 各々のウィンドウ自体をリロードできないのでリロードするとすべてのウィンドウが最後に表示したウィンドウになっちゃう
- 修正したら再起動だぜ!時間がかかる
上述なお話でこれをアプリに取り入れるのはまあまあ辛いな〜〜と思ったので中止した。でもそれなりに頑張ったのでここにメモしておくことにした。よろしくお願い致します。
雑感
- 複数ウィンドウはflutterのバージョンアップを待ち
- 表示を切り替えたいなら単一ウィンドウの中身を分けるのが良さそう