flutter desktop macos: eventStreamでswiftから色々受け取るぞ
はじめに
プラットフォーム側からflutterへ何かしら送りたいことありますよね。 flutter側の操作契機じゃなくてプラットフォーム側から送る感じの動き。 たとへばflutter側まで伝播してこないキーイベントをswift側で受け取る仕組みを作ってflutterにわたすとかですね。ニッチ。
flutterさんRawKeyboardイベントで半角、かなはkeyupしか検知してくれないのなんで
— kyusuke | apmewj (@8140i2865_3) 2021年10月21日
参考
ベースはここ ios試すならこのまま使えるかも github.com
シンプルなサンプル
macosでのサンプル。とりあえずswift側で配置したNSButtonをクリックしたらflutter側のテキストが変わります、くらいのサンプルを実装した。
- flutter:
eventChannel.receiveBroadcastStream().listen()
- swift:
FlutterStreamHandler
準拠してonListen
でself.eventSink = eventSink
しとけば任意の箇所でeventSink
することでflutter側に渡せる
多分そんなに大変ではないはず
おしまい
本当は参考にある感じでバッテリーとか、多分、位置情報とかプラットフォーム側で取得できてリアルタイムに変更を検知したい某の通知とかに利用するのだろうと思われる。 今回のサンプルなんかは単体で見れば意味不明でflutter使え、みたいな感じだけれども、swiftのライブラリのイベントをflutterに渡したいときなんかは使えるのかなーーー?と思って今回やってみた。まあその場合も該当のライブラリ相当をflutterで実装しろという話ではあるので無理矢理感は無きにしもあらず。