当我创建flutter插件时,默认情况下plugin类中有两个方法:
override fun onAttachedToEngine(flutterPluginBinding: FlutterPlugin.FlutterPluginBinding)
和/或
fun registerWith(registrar: Registrar)
文件上的评论说:It is encouraged to share logic between onAttachedToEngine and registerWith to keep them functionally equivalent. Only one of onAttachedToEngine or registerWith will be called depending on the user's project. onAttachedToEngine or registerWith must both be defined in the same class.
现在,我需要从这里开始另一个活动,使用activity.startActivityForResult()
。可以使用registrar.activity()
获取对registerWith(registrar: Registrar)
中Activity的引用。如何在onAttachedToEngine(flutterPluginBinding: FlutterPlugin.FlutterPluginBinding)
方法中实现这一点?
5条答案
按热度按时间sbdsn5lh1#
解here
实现
ActivityAware
,其中一个方法是mum43rcc2#
注:
你可以通过实现ActivityAware接口来获取对Activity的引用但是如果你在
onAttachToEngine()
中使用setMethodCallHandler(...)
方法,onAttachToActivity()
将永远不会被调用,你也永远无法访问Activity看看下面的例子
**什么不起作用:**在下面的示例中,
onAttachToActivity()
从未被调用以下是一个工作示例:
o0lyfsai3#
在最新版本
Flutter 3.0.5+
中,这是我的工作:确保在类实现中添加
ActivityAware
记住添加所有4个覆盖方法
r7knjye24#
在2023年,你可以这样做:
Kotlin代码:
Java代码:
w1e3prcc5#
在我的情况下,alireza-easazade的分辨率不起作用。我从
onAttachedToEngine
删除了MethodChannel
创建,但ActivityAware
通知仍然没有出现。对我有用的是用flutterPluginBinding.getFlutterEngine().getDartExecutor()
替换flutterPluginBinding.getBinaryMessenger()
作为MethodChannel
构造函数中的参数。有一次我做了这个onAttachedToActivity
在onAttachedToEngine
之后立即调用。下面是我的工作示例: