FlutterのiOS API呼び出し

Flutter7日目。

iOS連携

iOS側の機能を呼び出す際には DartObjective-C もしくは Swift と連携をする必要がある。 Flutterではチャンネルのキーワードを決めることで必要な連絡を取れるようになっている。

今回はその中でも Dart から連絡を入れる場合。 とはいえ結局は6日目にあげたリンク Writing custom platform-specific code with platform channels の実際どうするの?話に尽きる。

チャンネルとは?

要は文字列。

Dart では

const MethodChannel('samples.flutter.io/battery');

と書いてあるもの。

Objective-C では

methodChannelWithName:@"samples.flutter.io/battery"

文字列が同じ。

関数の呼び出し方

つまりは Dart 側。

MethodChannel methodChannel;
final int result = await methodChannel.invokeMethod('getBatteryLevel', ['Hello', 'World']);

これで引数が渡せる。

引数の取り方

Objective-C の場合

引数無しは上記リンクで。 引数有りの場合

NSArray* arguments = call.arguments;
NSString* word = arguments[0];

ってやると引数に渡した文字列が取れる。 int を渡したなら int で受け取りましょう。

Swift の場合

let arguments = call.arguments as! Array;
let word = arguments[0] as! String;

で受け取りましょう。 Swiftでargumentsの定義にとんでも id がどうこうと見えるだけで結局どうしたらよいかわからんかった。

おまけ

id とは? Objective-C にある型で、C でいう void* のようなものっぽい。 Swiftではこれが Any となるっぽい。as! や as? に関しては Swift のキャストについて調べてみてね。