fluteer创建插件Plugin和Android原生的交互

马肤
这是懒羊羊

上一篇文章写了flutter和Android原生交互的三种方式 今天再加上通过plugin和Android原生交互的方法

首先 创建一个flutter插件 

这里选择创建plugin 然后我们命名就叫my_plugin 创建完成之后插件目录是这样的

其中example是一个官方示例 我们这里自己写 所以这里用不上 直接删除 删除后将插件通过本地导入的方式导入到我们的flutter项目 这里我将插件复制到flutter项目的根目录(放在哪里都可以)

现在我的flutter项目的结果如下

然后再pubspec.yaml中引入这个插件

这样我们就把插件引入flutter项目了 然后我们用Android Studio打开插件中的Android项目

打开后你会发现 你的TestPlugin代码会飘红 

这个时候你打开build.gradle 然后再Android{}内添加

//获取local.properties配置文件
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
    localPropertiesFile.withReader('UTF-8') { reader ->
        localProperties.load(reader)
    }
}
//获取flutter的sdk路径
def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
    throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}
dependencies {
    testImplementation 'org.jetbrains.kotlin:kotlin-test'
    testImplementation 'org.mockito:mockito-core:5.0.0'
    compileOnly files("$flutterRoot/bin/cache/artifacts/engine/android-arm/flutter.jar")
}

然后重新编译一下 你会发现 飘红的问题已经解决了  好了 到现在为止 准备工作就好了 

然后我们开打插件的lib目录 你能看到三个文件

其中test_plugin中写的方法给flutter中调用 我们这里写一个调用方法

对应的另外俩个文件中添加同样的方法

这里的参数tag 就是我们从flutter传递到Android原生的参数 

然后再插件的Android目录下 我们打开TestPlugin 这是自动生成的  其中的onMethodCall方法中就是处理flutter调用的方法

然后在我们flutter项目的lib目录下 定义一个方法_getAndroidValue来调用插件的方法 

我们点击按钮 显示结果

这样简单的交互就完成了

现在进阶一下 模拟一个场景 比如从flutter页面点击登录跳转到Android原生页面 然后登录完成后携带返回值到flutter

首先定义一个方法 

点击事件中调用 然后再插件的lib目录下的三个方法中分别 添加方法

然后在TestPlugin 中添加对应的方法 要注意的是 这里跳转到页面需要context  这里有俩种方法可以获取到context

第一种是在onAttachedToEngine方法中通过flutterPluginBinding.applicationContext 获取到全局的context  第二种是实现ActivityAware接口 然后在实现的方法中获取到activity 具体如下

第一种

第二种

回到onMethodCall方法  我们接收到flutter调用的方法 然后携带传递的值跳转到LoginActivity

如果你需要在LoginActivity 处理完延迟消息后 才返回flutter的话 这里我们定义一个resultMethod 在onMethodCall方法中赋值 

在onDetachedFromEngine方法中清空 

这样在LoginActivity中 我们模拟一下 点击后返回flutter 

运行结果如下 

默认页面

点击跳转到LoginActivity

点击login按钮 返回flutter 

这样就实现了通过插件 flutter和Android原生交互了 

记录一下


文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复:表情:
评论列表 (暂无评论,0人围观)

还没有评论,来说两句吧...

目录[+]

取消
微信二维码
微信二维码
支付宝二维码