当前位置: 首页 > 面试题库 >

如何将函数作为参数从Dart / Flutter传递到Android本机代码?

暴英达
2023-03-14
问题内容

我想创建一个可以从Flutter调用的基于Java的SDK,Flutter端需要通过提供在处理的不同阶段执行的回调来插入SDK,理想情况是:

Future<Result> = doPayment(
  amount: 100.00, 
  currency: 'USD', 
  onPasscodeEntry: () => _renderInputBox(), 
  onValidation: () => _doValidation()
);

处理本身需要一些时间等,因此某种Future<PaymentResult>模式很有意义,应用程序应对处理的某些点做出反应,因此传入回调是有意义的。

问题:

  1. 如何将函数传递给Java代码?据我所知,Flutter中所有Java可以通过的方法参数都是可序列化的对象

  2. (不太关键/可选)如何返回POJO并在Dart中处理它?从规范来看,我应该将结果编码为(在Java中)ArrayList/ HashMap或作为JSON字符串,然后在Dart中创建等效的构造器,该构造器采用List/ Map?这似乎有点笨拙,所以我问是否有更简单的方法,最好不要维护同一对象的Java和Dart变体


问题答案:

您无法传递函数。

您可以创建从函数名称到函数引用的映射,然后传递函数名称并在映射中按名称查找函数并调用它。

您也不能传递POJO。

您需要将其序列化为JSON(或其他受支持的格式),并在通道的另一侧反序列化。为此,您需要在Dart和Java中实现POJO类。

像protobuf或flatbuffer之类的程序包允许根据一种简化的语言为不同的语言生成代码,以指定数据结构。



 类似资料:
  • 问题内容: 我正在读一本教科书,我想知道我们传递给函数的参数为​​什么既不是原始的也不是用户定义的类实例。 我知道它是这两个之一。但是似乎在这里它传递了用户定义的构造方法,例如Runnable()。看来他们想在以后运行线程,但是什么时候?我认为这是合法的,但是我在Java类中从未听说过这种事情。 问题答案: 实际上,这是传递实现Runnable接口的匿名内部类的实例。在Java教程中阅读有关它们的

  • 假设我们有python中的函数: 虽然我可能会将传递给A,但我正在寻找一种优雅的方法来传递类似于的东西来执行。 我现在看到的唯一方法是发送一个函数列表并按顺序应用它们。有没有更好的办法?

  • 最近我在使用c语言时遇到了一些问题,基本上是这样的: 在一个函数(比如intmain)中,我声明了一个变量Y=5,我有一个lambda函数,它接收一个值并将Y相加; 我的问题是:我需要将这个lambda函数传递给一个已经存在的函数,这样它就可以在另一个函数内部调用。 我尝试了几件事,但没有一个像我预期的那样工作(有些甚至不起作用): 另一个问题是我不能改变我的receives函数签名,因为代码的剩

  • 问题内容: 如何在不执行“父”函数或不使用函数的情况下将函数作为参数传递?(因为我已经读到它是不安全的。) 我有这个: 它可以工作,但是问题是在调用函数时触发,而不是在函数中使用时触发。 根据我所读的内容,我可以使用来解决它,但这不是最佳实践。如何在JavaScript中将函数作为参数传递? 问题答案: 您只需要删除括号: 然后,这将传递函数而不先执行它。 这是一个例子:

  • 问题内容: 在Java中,如何将一个函数作为另一个函数的参数传递? 问题答案: Java 8及以上 如果你的类或接口只有一个抽象方法(有时称为SAM type),则使用Java 8+ lambda表达式,例如: 然后可以在使用MyInterface的任何地方替换lambda表达式: 例如,你可以非常快速地创建一个新线程: 并使用方法引用语法使其更加清晰: 如果没有 lambda表达式,则最后两个示

  • 问题内容: 我有一个通用函数,该函数调用Web服务并将JSON响应序列化回一个对象。 我要完成的是等效于此Java代码 我要完成的方法签名正确吗? 更具体地说,将参数类型指定为正确的做法是正确的吗? 调用该方法时,我将其作为returningClass值传递,但是出现编译 错误“无法将表达式的类型’()’转换为’String’类型” CastDAO.invokeService(“test”, wi

  • 我正试图将dataframe列作为参数传递 但是得到错误 :33:错误:类型不匹配; 找到:org.apache.spark.sql.column 必需:int val df_new=df.withcolumn(“age_category”,ageclassification.agecategory(df(“age”))

  • 我有如下spring数据存储库界面: Postgres的函数我定义如下(但如果我做错了,我可以更改): 调用此存储库方法时,出现以下错误: 你能告诉我在postgres函数中应该使用什么类型吗?谢谢你的建议。 编辑:我不能使用本机查询上述存储库方法并将其传递到IN子句中,因为我在DB函数中有更多的逻辑、变量等。。。它必须是DB函数。