【问题标题】:How to listen to method invokation using Dart reflection?如何使用 Dart 反射监听方法调用?
【发布时间】:2020-12-22 10:22:44
【问题描述】:

我读过一些关于飞镖镜的文章,但我没有弄清楚how to listen to method invocation using dart reflection

用例:

Flutter 中的按钮可以有一个 onTap() 方法,当用户点击该按钮时会调用该方法。

我想听听 onTap() 的调用,使用 dart 反射在发生这种情况时触发我自己的代码...

如何实现?

编辑:

我想将代码注入到具有特定注释的函数中...如何执行此操作?

【问题讨论】:

  • 如果它是一个调用,为什么你需要听它?你明白我的意思了吗?
  • 我想跟踪用户...当他单击一个按钮时,我想跟踪它。我在大学的研究项目中需要这个。
  • 请看我的编辑

标签: flutter dart methods reflection dart-mirrors


【解决方案1】:

这是不可能 - Flutter 完全禁用反射(dart:mirror)。所以你需要寻找其他方法。

查看禁用反射:https://github.com/flutter/flutter/issues/1150

编辑

鉴于您更新的问题,您需要一个代码生成器。例如 json_annotation 包。

如果这没有帮助,您可能需要 https://github.com/alibaba-flutter/aspectd 之类的东西(警告:该项目可能好也可能不好)。

【讨论】:

  • 我看了一下 json_annotation,但这不是我需要的。我不想在函数之外创建代码作为单独的函数,我想在构建时将代码注入特定函数,以便在构建完成后以具有一些代码行的方式修改原始函数最后,我通过一些逻辑注入了更多内容,让它成为反射或其他什么......我寻找一种方法来做到这一点。我的目标是:开发一种智能方式,让开发人员可以注释函数甚至不注释任何内容,同时我的代码会读取并向其注入代码。
  • 通过这种方式,我可以将代码注入到按钮的点击功能(点击功能)中,例如,这些按钮将执行我的代码,其跟踪按钮的点击...使用我想要的数据保存事件并稍后对它们进行相同的分析,例如用户是如何浏览应用程序的?他做了谁的动作?他点击了什么按钮等等。
  • @skm 然后看aspectd。据我所知,几乎没有什么可以实现你的目标,因为 dart 是一种静态语言,不像 JS
  • 我正在为 aspectD 苦苦挣扎……还没有让它工作。看了一些文章,他们对它说得很好......会尝试让它工作......你有一个工作样本吗? git 中的示例似乎不是开箱即用的......
  • @skm 确实缺乏文档...我也没有,但您可以在那里发布问题寻求帮助
猜你喜欢
  • 2018-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-27
  • 2011-01-13
相关资源
最近更新 更多