flutter-建立本地flutter-plugin

直接上干貨

一.iOS

1.引入所需要的sdk(我們這里以數(shù)美sdk為例),使用swift編碼,在橋接文件需要
#import "SmAntiFraud.h"
2.Runner目錄下建立文件SwiftTestFlutterPlugin.swift ( 我們這里使用的channel name為 local_plugin)
import Foundation
public class SwiftTestFlutterPlugin: NSObject, FlutterPlugin {
  public static func register(with registrar: FlutterPluginRegistrar) {
    let channel = FlutterMethodChannel(name: "local_plugin", binaryMessenger: registrar.messenger())
    let instance = SwiftTestFlutterPlugin()
    registrar.addMethodCallDelegate(instance, channel: channel)
  }

  public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
    result(SmAntiFraud.shareInstance()?.getDeviceId() ?? "")
  }
}
3.AppDelegate中引用SwiftTestFlutterPlugin
image.png
4.flutter項(xiàng)目中調(diào)用
MethodChannel _channel =
                              MethodChannel('local_plugin');
                          String shumeiID =
                              await _channel.invokeMethod("local_plugin");
                          print(shumeiID);

二.android

1.android-app-libs下引入所需要的sdk,并提供初始化及使用方法;這里我們使用kotlin
2.main-kotlin-com-example-包名文件夾下,建立插件 channel name 設(shè)置為:local_plugin
package com.example.android_app_flutter//(注意包名文件夾)
import android.os.Build
import io.flutter.embedding.engine.plugins.FlutterPlugin
import io.flutter.embedding.engine.plugins.FlutterPlugin.FlutterPluginBinding
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugin.common.MethodChannel.MethodCallHandler

/** TestFlutterPlugin  */
class TestFlutterPlugin : FlutterPlugin, MethodCallHandler {
    /// The MethodChannel that will the communication between Flutter and native Android
    ///
    /// This local reference serves to register the plugin with the Flutter Engine and unregister it
    /// when the Flutter Engine is detached from the Activity
    private var channel: MethodChannel? = null
    override fun onAttachedToEngine(flutterPluginBinding: FlutterPluginBinding) {
        channel = MethodChannel(flutterPluginBinding.binaryMessenger, "local_plugin")
        channel!!.setMethodCallHandler(this)
    }

    override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) {
        val smDeviceId = SmManager.getInstance().getDeviceId()
        result.success("Android $smDeviceId")

    }

    override fun onDetachedFromEngine(binding: FlutterPluginBinding) {
        channel!!.setMethodCallHandler(null)
    }
}
3.MainActivity中引入插件
package com.example.android_app_flutter

import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine

class MainActivity: FlutterActivity() {
 override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        super.configureFlutterEngine(flutterEngine)
        flutterEngine.plugins.add(TestFlutterPlugin())
    }
}
4.如果插件需要事先初始化,建立TestAppApplication,在oncreate中初始化.此文件也需要在AndroidManifest.xml中指定
image.png
package com.example.android_app_flutter

import android.app.Application
import io.flutter.app.FlutterApplication

class TestAppApplication : FlutterApplication() {
    override fun onCreate() {
        super.onCreate()
        SmManager.getInstance().init(this)

    }
}
5.flutter中使用方式同上
對(duì)您有幫助的話, 歡迎點(diǎn)點(diǎn)小心心~
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容