native flutter platform

native - Flutter: ¿Cómo llamar a los métodos en la parte Dart de la aplicación, desde la plataforma nativa usando MethodChannel?



platform (1)

La firma es void setMethodCallHandler(Future<dynamic> handler(MethodCall call)) , por lo que necesitamos proporcionar una función en el extremo de Dart que devuelva Future<dynamic> , por ejemplo _channel.setMethodCallHandler(myUtilsHandler);

Luego implementa el manejador. Éste maneja dos métodos, foo y bar respectivamente, String y double .

Future<dynamic> myUtilsHandler(MethodCall methodCall) async { switch (methodCall.method) { case ''foo'': return ''some string''; case ''bar'': return 123.0; default: // todo - throw not implemented } }

Al final de Java, el valor de retorno se pasa al método de success de la devolución de llamada del Result .

channel.invokeMethod("foo", arguments, new Result() { @Override public void success(Object o) { // this will be called with o = "some string" } @Override public void error(String s, String s1, Object o) {} @Override public void notImplemented() {} });

Estoy escribiendo un plugin nativo que, en algunos casos, tiene que llamar a funciones en la parte del aleteo de la aplicación, escrita en Dart. Cómo se logra, se explica aquí: https://flutter.io/platform-channels/

Además, aquí hay un ejemplo de invocación de un método desde la parte nativa / plataforma hacia Dart / no nativo: https://github.com/flutter/plugins/tree/master/packages/quick_actions

Ahora, este ejemplo es realmente bueno en caso de que la plataforma solo necesite invocar un method , es decir, que la llamada no devuelva nada / void , pero en caso de que necesite invocar una function , es decir, necesite un valor de retorno de la parte no nativa / Dart. No pude haber encontrado un ejemplo o documentación en internet. Sin embargo, creo que se puede implementar, porque en la parte nativa de Java hay un método:

public void invokeMethod (método de cadena, argumentos del objeto, devolución de llamada MethodChannel.Result)

Entonces, hay un objeto de callback que podría tener un valor de retorno de la parte no nativa o, ¿estoy equivocado aquí y actualmente no hay forma de devolver un valor de la parte de Dart no nativa de la aplicación?