![](/img/trans.png)
[英]why GeneratedPluginRegistrant.registerWith(this) gives error in 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.