繁体   English   中英

如何更改 Flutter 中的 MainActivity.kt 文件?

[英]How can you change the MainActivity.kt file in Flutter?

所以,我想在我的 Flutter 项目中包含Flutter 条码扫描器package。 所以我将它添加到我的pubspec.yaml文件中的依赖项中。 但是当我运行该应用程序时,它立即崩溃并显示错误消息:

    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mycompany.myapp/com.mycompany.myapp.MainActivity}: 
    java.lang.ClassCastException: com.mycompany.myapp.MainActivity cannot be cast to io.flutter.embedding.android.FlutterActivity
    ...
    Caused by: java.lang.ClassCastException: com.neuberapps.math_trainer.MainActivity cannot be cast to io.flutter.embedding.android.FlutterActivity
        at com.amolg.flutterbarcodescanner.FlutterBarcodeScannerPlugin.registerWith(FlutterBarcodeScannerPlugin.java:87)
        at io.flutter.plugins.GeneratedPluginRegistrant.registerWith(GeneratedPluginRegistrant.java:29)
        at com.mycompany.myapp.MainActivity.onCreate(MainActivity.kt:11)

我尝试将 package 添加到另一个项目中,并且没有任何问题。 因此,因为问题显然出在我的第一个项目中,并且根据MainActivity.kt中的错误消息,我在两个项目中都打开了它,结果有所不同:

项目 1(有错误):

import android.os.Bundle

import io.flutter.app.FlutterActivity
import io.flutter.plugins.GeneratedPluginRegistrant

class MainActivity: FlutterActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    GeneratedPluginRegistrant.registerWith(this)
  }
}

项目2(没有错误):

import androidx.annotation.NonNull;
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugins.GeneratedPluginRegistrant

class MainActivity: FlutterActivity() {
    override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
        GeneratedPluginRegistrant.registerWith(flutterEngine);
    }
}

我试图将代码从一个项目复制到另一个项目,但当然这不起作用。 它产生了以下构建时错误:

...\MainActivity.kt: (10, 44): Type mismatch: inferred type is FlutterEngine but PluginRegistry! was expected

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:compileDebugKotlin'.
> Compilation error. See log for more details

我猜这个问题是由于这种差异而发生的。 如何正确地将我的文件从第一个更改为第二个。

非常感谢您的帮助!

项目 1 是使用低于 1.12 的 Flutter 版本创建的,因此具有较旧的插件 API。 要迁移到更新的插件 API,请按照升级 1.12 之前的 Android 项目中的说明进行操作。

具体来说,在更新MainActivity.kt之后,您还需要在清单中的<application>标记中添加一些元数据。 这告诉 Flutter 生成不同版本的GeneratedPluginRegistrant

<application ... >

    <!-- ... -->

    <meta-data
        android:name="flutterEmbedding"
        android:value="2" />

</application>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM