![](/img/trans.png)
[英]Custom method implementation in Spring Data fails with property not found error
[英]No implementation method found for method error
我有一個簡單的 Android 應用程序。 我導入了一個新的 flutter 模塊。 當我通過 Flutter 頁面時,我無法再實現本機代碼。 我得到一個錯誤No implementation method found for method getBatteryLevel
。 我怎樣才能解決這個問題?
注意:如果我運行 flutter 模塊本身,我可以獲得本機代碼的結果。
main.dart中的觸發方法:
String result = await methodChannel.invokeMethod('getBatteryLevel');
Flutter模塊的主要活動:
package com.deremakif.flutter_counter_module.host;
import io.flutter.embedding.android.FlutterActivity;
import androidx.annotation.NonNull;
import android.content.ContextWrapper;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.os.Build.VERSION;
import android.os.Build.VERSION_CODES;
import android.os.Bundle;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugins.GeneratedPluginRegistrant;
public class MainActivity extends FlutterActivity {
private static final String CHANNEL = "samples.flutter.io/battery";
@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine);
new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL).setMethodCallHandler(((methodCall, result) -> {
if (methodCall.method.equals("getBatteryLevel")) {
result.success("batteryLevel"); // It returns string "batteryLevel".
} else {
result.notImplemented();
}
}));
}
}
登錄按鈕將頁面從 Android 更改為 Flutter:
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(
FlutterActivity.createDefaultIntent(getApplicationContext())
);
}
});
您可以在此處找到重現錯誤的整個項目。
當您將 flutter 項目用作另一個項目中的庫模塊,並使用FlutterActivity.createDefaultIntent(getApplicationContext())
導航到 Flutter 部分時,您的 MainActivity 將不會被評估。 我建議您在本機應用程序(在您的情況下為 LoginApp)中創建一個新 Activity 並讓它擴展 FlutterActivity,並在您想要導航到 flutter 部分時啟動它(見下文)
// in LoginApp
import androidx.annotation.NonNull;
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugins.GeneratedPluginRegistrant;
class MyFlutterActivity extends FlutterActivity {
private static final String CHANNEL = "samples.flutter.io/battery";
@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine);
new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL).setMethodCallHandler(((methodCall, result) -> {
if (methodCall.method.equals("getBatteryLevel")) {
result.success("batteryLevel"); // It returns string "batteryLevel".
} else {
result.notImplemented();
}
}));
}
}
然后像這樣開始
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(
new FlutterActivity.NewEngineIntentBuilder(MyFlutterActivity.class).build(getApplicationContext())
);
}
});
並且不要忘記在您的 android 清單中列出此活動(在 LoginApp 中)
<activity android:name=".ui.login.MyFlutterActivity"
android:theme="@style/AppTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize"
/>
請在您的 dart 代碼中指定方法通道,與您的本機代碼中的 CHANNEL 字符串完全相同。 對於這種情況,您必須在 flutter 側代碼中編寫以下代碼
static const methodChannel = const MethodChannel('samples.flutter.io/battery');
String result = await methodChannel.invokeMethod('getBatteryLevel');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.