Sim*_*ani 11 java android dart flutter android-native-library
我正在尝试用 Java 为 Flutter 创建一个插件。我试图Android activity在我的主Java类中传递参数。
这是我的本机代码:
package com.example.trsurveys;
import androidx.annotation.NonNull;
import android.app.Activity;
import io.flutter.embedding.engine.plugins.FlutterPlugin;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
import io.flutter.plugin.common.MethodChannel.Result;
import io.flutter.plugin.common.PluginRegistry.Registrar;
import theoremreach.com.theoremreach.TheoremReach;
public class TrsurveysPlugin implements FlutterPlugin, MethodCallHandler {
private MethodChannel channel;
private Registrar registrar;
private Activity activity;
@Override
public void onAttachedToEngine(@NonNull FlutterPluginBinding flutterPluginBinding) {
channel = new MethodChannel(flutterPluginBinding.getFlutterEngine().getDartExecutor(), "trsurveys");
channel.setMethodCallHandler(this);
}
When I try to debug my app it shows me the following errors
private TrsurveysPlugin(Activity activity) {
this.activity = activity;
}
public static void registerWith(Registrar registrar) {
final MethodChannel channel = new MethodChannel(registrar.messenger(), "trsurveys");
channel.setMethodCallHandler(new TrsurveysPlugin(registrar.activity()));
}
@Override
public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
if (call.method.equals("init")) {
String apiKey = call.argument("apiKey");
TheoremReach.initWithApiKeyAndUserIdAndActivityContext(apiKey, "USER_ID", activity);
}
}
@Override
public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
channel.setMethodCallHandler(null);
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试调试我的应用程序时,我收到以下错误:
error: constructor TrsurveysPlugin in class TrsurveysPlugin cannot be applied to given types;
flutterEngine.getPlugins().add(new com.example.trsurveys.TrsurveysPlugin());
^
required: Activity
found: no arguments
reason: actual and formal argument lists differ in length
...path/Downloads/TheoremReach-error/example/android/app/src/main/java/com/example/trsurveys_example/MainActivity.java:11: error: incompatible types: MainActivity cannot be converted to FlutterEngine
GeneratedPluginRegistrant.registerWith(this);
^
Run Code Online (Sandbox Code Playgroud)
这是出现在我的GeneratedPluginRegistrant.java文件中的代码。
package io.flutter.plugins;
import androidx.annotation.Keep;
import androidx.annotation.NonNull;
import io.flutter.embedding.engine.FlutterEngine;
@Keep
public final class GeneratedPluginRegistrant {
public static void registerWith(@NonNull FlutterEngine flutterEngine) {
flutterEngine.getPlugins().add(new com.example.trsurveys.TrsurveysPlugin());
}
}
Run Code Online (Sandbox Code Playgroud)
在制作插件时,我尝试删除 GeneratedPluginRegistrant.java 文件,但每次生成时都使用相同的配置。
Ill*_*ent 10
当我将存储库从较旧的 flutter 版本升级到较新的版本时,我就发生了这种情况。我按照官方flutter 链接进行了迁移。
我对 android 清单文件进行了适当的更改。即:
android:name属性<application>android:name单曲改为<activity>android:name="io.flutter.embedding.android.FlutterActivity"<meta-data android:name="flutterEmbedding" android:value="2"/>为标签的子级但是,我没有更改导致MainActivity错误的任何代码。使用的MainActivity是与上述三个更改不兼容的旧导入。
最终清单文件:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="co.appbrewery.magic8ball">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:label="magic_8_ball"
android:icon="@mipmap/ic_launcher">
<activity
android:name="io.flutter.embedding.android.FlutterActivity"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<meta-data android:name="flutterEmbedding" android:value="2"/>
<meta-data
android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
android:value="true" />
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
Run Code Online (Sandbox Code Playgroud)
删除MainActivity为我解决了问题。
小智 1
打开您的项目清单文件并删除此行
\nmeta-data\nandroid:name=\xe2\x80\x9dflutterEmbedding\xe2\x80\x9d\nandroid:value=\xe2\x80\x9d2\xe2\x80\xb3Run Code Online (Sandbox Code Playgroud)\r\n然后再次构建并运行它。
\n| 归档时间: |
|
| 查看次数: |
2529 次 |
| 最近记录: |