android - Flutter Plugin 使用 Kotlin,Activity 总是返回 null

标签 android kotlin flutter android-activity

当我在 Flutter 中按下我的 FAB 时,我试图访问用 Kotlin 编写的 Flutter Plugin 中的 Activity 引用。

我的类(class)是ActivityAware
这是代码:
Kotlin :

  lateinit var myActivity: Activity

    //Method called by ActivityAware plugins to fetch the activity on re-initialization
  override fun onReattachedToActivityForConfigChanges(binding: ActivityPluginBinding) {

  this.myActivity = binding.activity 
}


      //Method called by ActivityAware plugins to fetch the activity on initialization
    override fun onAttachedToActivity(binding: ActivityPluginBinding) {

      this.myActivity = binding.activity
  }


  //With this method is called from Flutter to check if the Activity is accessible.
  //In this case it is always returning null/ not initialized
  //It prints "FAILED AGAIN!!"
  override fun onMethodCall(@NonNull call: MethodCall, @NonNull result: Result) {
    if (call.method == "checkForActivity") {

      if(::myActivity.isInitialized){

        System.out.println("I FOUND IT!!")
      }else{
        System.out.println("FAILED AGAIN!!")
      }
          return
    } else {
      result.notImplemented()
    }
  }

飞镖代码( flutter ):
//This Flutter class is run whenever you press a button to check for the Activity in Native Kotlin.
    static const MethodChannel _channel =
          const MethodChannel('sphinx_plugin');
      static Future<bool> get checkForActivity async {
        final bool isready = await _channel.invokeMethod('checkForActivity');
        return isready;
      }

最佳答案

我找到了解决方案。

 lateinit var myplugin: MyPlugin()

  override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
      myplugin = MyPlugin()
    val channel = MethodChannel(flutterPluginBinding.getFlutterEngine().getDartExecutor(), "my_plugin")
    channel.setMethodCallHandler(myplugin)



  }



 //This is where I was going wrong..The reference was being lost somewhere
    override fun onAttachedToActivity(binding: ActivityPluginBinding) {

      myplugin.myActivity = binding.activity
  }

通过设置:
myplugin.myActivity

后来我能够找到 Activity 引用。
无论如何谢谢:)

关于android - Flutter Plugin 使用 Kotlin,Activity 总是返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59967030/

相关文章:

firebase - 如何使用Flutter更新Firebase中没有所有数据的部分数据

java - App Engine 连接的 android 项目中的错误

android Activity 的多个实例?

android - ArrayAdapter的Textview占据整个屏幕

android - 如何摆脱Android 4.4.4 中Android DatePickerDialog 的默认背景?

generics - 如何使用泛型处理函数的重载解析歧义?

Firebase实时数据库查询Flutter中的所有项目

android - java.util.NoSuchElementException 导致找不到符号类 DataBindingComponent

android - 使用 Paging 3 库和 Retrofit 当响应为空时 PagingSource 中的无限循环

firebase - Firestore添加条件以仅读取最新数据