Необработанное исключение: MissingPluginException (реализация не найдена для метода ... на канале ...) - PullRequest
0 голосов
/ 16 марта 2020

очень стандартный код, но я понятия не имею, почему я получаю необработанное исключение: MissingPluginException (реализация не найдена для метода getHello на канале com.jetbrains.handson.mpp.mobile/createApplicationScreenMessage)

package com.example.mysharedproject

import android.os.Bundle
import android.os.PersistableBundle
import android.util.Log
import com.jetbrains.handson.mpp.mobile.createApplicationScreenMessage
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugins.GeneratedPluginRegistrant


class MainActivity : FlutterActivity() {

    override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        GeneratedPluginRegistrant.registerWith(flutterEngine)
        MethodChannel(flutterEngine.dartExecutor.binaryMessenger, "com.jetbrains.handson.mpp.mobile/createApplicationScreenMessage")
            .setMethodCallHandler { call, result ->
                if (call.method == "getHello"){
                    result.success(createApplicationScreenMessage())
                }
                else{
                    result.notImplemented()
                }
            }
    }
}

этот код взят из SharedCode, как в этом уроке https://play.kotlinlang.org/hands-on/Targeting%20iOS%20and%20Android%20with%20Kotlin%20Multiplatform/03_CreatingSharedCode:

package com.jetbrains.handson.mpp.mobile

expect fun platformName(): String

fun createApplicationScreenMessage(): String {
    return "Kotlin Rocks on ${platformName()}"
}

и код Dart

class _MyHomePageState extends State<MyHomePage> {
  String _helloText = "...";
  static const MethodChannel methodChannel =
      MethodChannel('com.jetbrains.handson.mpp.mobile/createApplicationScreenMessage');

  Future<void> _getHello() async {
    final String result = await methodChannel.invokeMethod("getHello");
    setState(() {
      _helloText = result;
    });
  }
  @override
  void initState() {
    _getHello();
    super.initState();
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(_helloText),
          ],
        ),
      ),
    );
  }

Я попытался очистить флаттер, переустановить приложение , проект clean & build и у меня ничего не работает, какие могут быть причины этой проблемы?

UPD: Я не знаю, должна ли моя деятельность выводить этот журнал через Logcat в методе configureFlutterEngine или нет, но это не так. android .util.Log ("tagdbg", "Я здесь")

В Android Манифест Я указал <activity android:name=".MainActivity">, но не FlutterActivity, как в официальных документах, но мне нужно получить доступ к kotlin код от котлина / родного.

Ответы [ 2 ]

0 голосов
/ 17 марта 2020

Хорошо, я заставил это работать, но не знаю точно, какое решение произвело. Я могу посоветовать, чтобы сначала он работал только на Flutter (используя MethodChannel из официальных документов flutter), а затем попытаться сделать это с kotlin multiplatform. Также я использовал flutterEngine.dartExecutor вместо flutterEngine.dartExecutor.binaryMessenger

0 голосов
/ 16 марта 2020

Давайте попробуем это в вашем терминале

flutter run
...