簡體   English   中英

找不到方法錯誤的實現方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM