1
/
5

Flutterでネイティブコードを呼び出してみよう【株式会社ライトコード】

※弊社のエンジニア記事になります。

はじめに

iOS、Androidの両方に対応できて便利なFlutterですが、Flutterの仕様、OSの仕様でさまざまな問題が起こることがあります。

そんな時に役立つ解決策の一つがネイティブコードを呼び出しiOS、Androidそれぞれで解決してしまう作戦です。この記事ではコードの呼び出し方を実際の使用例を交えて解説します。

Flutter側での実装

Flutter側はMethodChannelクラスを使用して呼び出しを行います。

  Future<String> _getHelloWorld() async {
    const MethodChannel channel = MethodChannel("Channel");
    String? resultText = await channel.invokeMethod("getHelloWorld");
    return resultText ?? "null";
  }

MethodChannelのインスタンスを作成し、invokeMethod処理を呼び出します。それぞれの引数としてString型を要求されます。後ほどネイティブコード側での識別に使うため分かりやすい値を入れておくといいでしょう。

invokeMethodの返却値はここではStringを指定しています。ネイティブコード側で返却できるのはStringの他Boolean、Int、Doubleなど特定の型に限られています。

また、List型を返すinvokeListMethod、Map型を返すinvokeMapMethodも用意されています。必要に応じて使いましょう。

Swift側の実装

Flutterプロジェクト内の「ios/Runner」フォルダ内、「AppDelegate.swift」ファイルを編集します。Xcodeで行うとやりやすいと思います。

    override func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
        GeneratedPluginRegistrant.register(with: self)
        
        let controller: FlutterViewController = window?.rootViewController as! FlutterViewController
        let methodChannel = FlutterMethodChannel(name: "Channel",binaryMessenger: controller as! FlutterBinaryMessenger)
        methodChannel.setMethodCallHandler({
            (call:FlutterMethodCall, result:FlutterResult) -> Void in
            switch call.method {
            case "getHelloWorld" :
                result("Hello from Swift!")
            default :
                result(nil)
            }
          })
        
        return super.application(application, didFinishLaunchingWithOptions: launchOptions)
    }

FlutterMethodChannelには先ほどFlutter側で定義したチャンネル名(ここでは"Channel")を指定します。

また、setMethodCallHandlerのcall.methodにはFlutter側のinvokeMethodに指定した値(ここでは"getHelloWorld")が入っています。ここでは複数のメソッドを呼び出すことを想定しswitch文で分岐しています。

Flutter側に値を返すにはresult()を使用します。ここでは"Hello from Swift!"の文字列を返しています。先述の通り返却できる型に制限があるので気をつけましょう。


iOS Simuratorで起動すると、Swiftで実装したコードが呼び出されているのがわかります。

Kotlin側の実装

Android側での呼び出しを行うには、「MainActivity.kt」を編集します。

記事の続きはこちら!

https://rightcode.co.jp/blog/information-technology/flutter-native-code

【2024年卒】新卒採用エントリー開始しました!

特設ページはこちら:https://rightcode.co.jp/recruit/entry-2024

インターン募集!未経験ok、チャレンジ精神ある方求む

ゲームプランナー:https://rightcode.co.jp/recruit/intern-game-planner

メディア運営:https://rightcode.co.jp/recruit/intern-media

社長と一杯飲みながらお話しませんか?(転職者向け)

特設ページはこちら: https://rightcode.co.jp/gohan-sake-president-talk

もっとワクワクする仕事をしたいあなたへ

現在、ライトコードでは「WEBエンジニア」「スマホアプリエンジニア」「ゲームエンジニア」、「デザイナー」「WEBディレクター」「エンジニアリングマネージャー」「営業」などを積極採用中です!

有名WEBサービスやアプリの受託開発などの企画、開発案件が目白押しの状況です。

  • もっと大きなことに挑戦したい!
  • エンジニアとしてもっと成長したい!
  • モダンな技術に触れたい!

現状に満足していない方は、まずは、エンジニアとしても第一線を走り続ける弊社代表と気軽にお話してみませんか?

ネット上では、ちょっとユルそうな会社に感じると思いますが(笑)、
実は技術力に定評があり、沢山の実績を残している会社ということをお伝えしたいと思っております。

  • ライトコードの魅力を知っていただきたい!
  • 社風や文化なども知っていただきたい!
  • 技術に対して熱意のある方に入社していただきたい!

一度、【Wantedly内の弊社ページ】や【コーポレートサイト】をのぞいてみてください。

【コーポレートサイト】https://rightcode.co.jp/

【採用募集】https://rightcode.co.jp/recruit(こちらからの応募がスムーズ)

【wantedlyぺージ】https://www.wantedly.com/companies/rightcode

Invitation from 株式会社ライトコード
If this story triggered your interest, have a chat with the team?
株式会社ライトコード's job postings

Weekly ranking

Show other rankings
Like Hiroyuki Choshi's Story
Let Hiroyuki Choshi's company know you're interested in their content