flutter desktop macos: eventStreamでswiftから色々受け取るぞ

はじめに

プラットフォーム側からflutterへ何かしら送りたいことありますよね。 flutter側の操作契機じゃなくてプラットフォーム側から送る感じの動き。 たとへばflutter側まで伝播してこないキーイベントをswift側で受け取る仕組みを作ってflutterにわたすとかですね。ニッチ。

参考

ベースはここ ios試すならこのまま使えるかも github.com

シンプルなサンプル

macosでのサンプル。とりあえずswift側で配置したNSButtonをクリックしたらflutter側のテキストが変わります、くらいのサンプルを実装した。

github.com

  • flutter: eventChannel.receiveBroadcastStream().listen()
  • swift: FlutterStreamHandler 準拠して onListenself.eventSink = eventSink しとけば任意の箇所で eventSink することでflutter側に渡せる

多分そんなに大変ではないはず

f:id:Qsk:20211103210704g:plain

おしまい

本当は参考にある感じでバッテリーとか、多分、位置情報とかプラットフォーム側で取得できてリアルタイムに変更を検知したい某の通知とかに利用するのだろうと思われる。 今回のサンプルなんかは単体で見れば意味不明でflutter使え、みたいな感じだけれども、swiftのライブラリのイベントをflutterに渡したいときなんかは使えるのかなーーー?と思って今回やってみた。まあその場合も該当のライブラリ相当をflutterで実装しろという話ではあるので無理矢理感は無きにしもあらず。