ActivityAware.onAttachedToActivity 未触发

Amp*_*nda 5 kotlin flutter

我正在尝试使用 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课堂上进行活动?谢谢