当前位置: 首页 > 知识库问答 >
问题:

如何调用方法在Dart部分的应用程序,从本机平台使用方法通道?

仲智
2023-03-14

我正在编写一个本地插件,在某些情况下,它必须调用应用程序Flutter部分中的函数,用Dart编写。它是如何实现的,在这里解释:https://flutter.io/platform-channels/

此外,从本机/平台部分向Dart/非本机调用方法的示例如下:https://github.com/flutter/plugins/tree/master/packages/quick_actions

现在,如果平台只需要调用方法,即调用不返回任何内容/void,那么这个示例非常好,但是如果它需要调用函数,即需要非本机/Dart部分的返回值,我在互联网上找不到示例或文档。但我相信它是可以实现的,因为在原生Java部分,有一种方法:

public void invokeMethod(String method, Object arguments, MethodChannel.Result callback)

所以,有一个回调对象可能有来自非本机部分的返回值——或者,我错了,目前没有办法从应用程序的非本机Dart部分返回值?

共有1个答案

何飞翰
2023-03-14

签名是ululsetmetodCallHandler(未来

然后实现处理程序。这一个处理两个方法foobar分别返回StringDouble

  Future<dynamic> myUtilsHandler(MethodCall methodCall) async {
    switch (methodCall.method) {
      case 'foo':
        return 'some string';
      case 'bar':
        return 123.0;
      default:
        throw MissingPluginException('notImplemented');
    }
  }

在Java端,返回值被传递给Result回调的success方法。

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() {}
});

在Swift中,返回值是Any 传递给结果闭包。(未实现由常量NSObjectnotimplemented的任何参数发出信号)

channel.invokeMethod("foo", arguments: args, result: {(r:Any?) -> () in
  // this will be called with r = "some string" (or FlutterMethodNotImplemented)
})

 类似资料:
  • 我正在开发一个原生插件,并试图进行单元测试。所有单元测试都将在Dart中完成(无本机代码)。 Flutter有一个测试示例,说明如何使用测试从Dart到本机的调用方法通道。 问题是,我还没有找到测试从本机调用Dart的方法通道的方法,该Dart使用<code>setMethodCallHandler</code>来处理本机调用。 下面是一个示例

  • 问题内容: 我想运行我的Java应用程序,并且在给定的工作量下能够看到: 给定函数被调用了多少次 每个函数调用相对而言的成本(即每个函数执行需要多长时间) 我大致知道瓶颈在我的应用程序中的哪个位置,但是我需要更细粒度的视图才能缩小范围。 谢谢 编辑 jvisualvm就像该工具一样-它在大约30秒内发现了问题。我只需要了解方法概要文件中的“自用时间”是什么意思。谢谢 问题答案: 从Sun在Java

  • 我有这个getData通用网络调用,它有一个完成处理程序: 这是对该方法的调用: 我不想在router.getData()中有一个完成处理程序,因为我想使用委托来通知我的控制器数据的下载状态。 因此,我使用了相同的方法(getData),但没有完成处理程序,签名如下: 唯一的区别是,现在可以在没有任何完成处理程序块的情况下进行调用,所以现在理想情况下,我应该能够像这样调用它: 但是我有一个错误:

  • 我需要一个简单的Java服务,它在系统启动时启动,并使用共享库与一些使用POSIX线程的功能。在实现JNI接口时,我遇到了一个问题,它不允许我从本地代码调用Java方法。GetMethodID()返回not NULL,所以我认为它做得很好。也没有任何可疑的错误可以帮助。所以我在log中添加了很多输出,并为此准备了一个简单的java测试。(下面列出了所有代码,但是project也可以在github的

  • 问题内容: 尝试在Parent类中创建1个接口和2个具体类。这将使封闭类成为内部类。 现在,我真的不确定如何在静态main()方法中创建C类的对象并调用C类的call()方法。现在我遇到了问题: 问题答案: 这里的内部类不是静态的,因此您需要创建一个外部类的实例,然后调用new, 但是在这种情况下,您可以将内部类设为静态, 那就可以使用了