我正在尝试使用 MethodChannel 和Kotlin作为我的语言选择在 Flutter 中移植Zendesk Native SDK for Android。
当我直接在项目中使用 Kotlin 代码时,它是有效的
class MainActivity : FlutterActivity() {
// others code are hidden
private fun initialize(call: MethodCall, result: Result) {
val url: String = call.argument("url")!!
val appId: String = call.argument("appId")!!
val clientId: String = call.argument("clientId")!!
Zendesk.INSTANCE.init(this, url, appId, clientId)
val identity = AnonymousIdentity()
Zendesk.INSTANCE.setIdentity(identity)
Support.INSTANCE.init(Zendesk.INSTANCE)
RequestListActivity.builder().show(this)
result.success(true)
}
}
Run Code Online (Sandbox Code Playgroud)
this指的是Activity我猜FlutterApplication已经在里面了,但是当我尝试制作独立的plugin东西时有点不同。我需要实现ActivityAware以获取活动(在 flutter 插件中获取活动参考)。
https://github.com/flutter/flutter/wiki/Experimental:-Create-Flutter-Plugin
(可选)如果您的插件需要 Activity 引用,还需要实现 ActivityAware。
public class ZendeskPlugin : FlutterPlugin, MethodCallHandler, ActivityAware {
private lateinit var activityBinding: ActivityPluginBinding
// I can get ActivityPluginBinding from this method
override fun onAttachedToActivity(@NonNull binding: ActivityPluginBinding) {
activityBinding = binding
}
private fun initialize(call: MethodCall, result: Result) {
activityBinding?.activity?.let {
val appId: String = call.argument("appId")!!
val clientId: String = call.argument("clientId")!!
val url: String = call.argument("url")!!
Zendesk.INSTANCE.init(it, url, appId, clientId)
val identity = AnonymousIdentity()
Zendesk.INSTANCE.setIdentity(identity)
Support.INSTANCE.init(Zendesk.INSTANCE)
RequestListActivity.builder().show(it)
result.success(true)
return
}
result.error("INITIALIZE_FAILED", "Failed to initialize", null)
}
}
Run Code Online (Sandbox Code Playgroud)
我试图initialize从 dart调用,实际上它运行但onAttachedToActivity似乎永远不会被调用,并且 makeactivityBinding永远不会被初始化,因此代码失败并且result.error.
我如何在FlutterPlugin课堂上进行活动?谢谢
| 归档时间: |
|
| 查看次数: |
600 次 |
| 最近记录: |