在打开工程之前,我们必要在Android Studio里的下令行实行以下下令:
cd exampleflutter run 等实行完成之后,我们就可以打开Runner.xcworkspace文件了,这个时间我们发现,多了一个Pods工程。这个工程着实就是插件工程。
我们在Pods工程的Development Pods目次下,找到Project Name的文件夹,不停睁开,末了就看到插件的文件了,我们就是在这个文件下编写代码。
编写插件代码
本文采用的语言是Swift。
找到Swift项目名Plugin.swift这个文件,该文件就是插件的实现文件。
在register方法里,我们注册了一个通道(已经默认注册了),通道名默认就是项目名,该名字在通讯里必须是唯一的,可以修改,一旦修改,必要把dart和android里的名字也一并修改。
在handle方法里,实现Flutter调用原生的API,此中call.method就是方法名,call.arguments就是Flutter转达过来的参数。使用result(返回值)可以把效果返回给Flutter。
当找不到方法名时,可以返回FlutterMethodNotImplemented给Flutter表现该方法还没实现,以此来做版本兼容。
具体实现如下:
public class SwiftNakiriPlugin: NSObject, FlutterPlugin { public static func register(with registrar: FlutterPluginRegistrar) { let channel = FlutterMethodChannel(name: "nakiri", binaryMessenger: registrar.messenger()) let instance = SwiftNakiriPlugin() registrar.addMethodCallDelegate(instance, channel: channel) } public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { if call.method == "stateString" { // 获取网络状态的实现 result(ZTNetworkStateManager.shared.stateString) } else if call.method == "bonusPoints" { // 使用参数的实现 let array = call.arguments as! Array<Int> result(array[0] + array[1]) } else if call.method == "getPlatformVersion" { // 默认的实现 result("iOS " + UIDevice.current.systemVersion) } else { // 找不到方法 result(FlutterMethodNotImplemented) } }}