Mar*_*ena 3 android dart kotlin flutter
这是我的 MainActivity.kt:
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
EventChannel(flutterEngine.dartExecutor.binaryMessenger, EVENT_CHANNEL).setStreamHandler(
object : EventChannel.StreamHandler {
override fun onListen(args: Any, events: EventChannel.EventSink) {
Log.d(TAG, "adding listener for $EVENT_CHANNEL")
events.success(true)
}
override fun onCancel(args: Any) {
Log.d(TAG, "cancelling listener for $EVENT_CHANNEL")
}
}
)
Run Code Online (Sandbox Code Playgroud)
然后在 Flutter 上我像这样打开它:
final stream = const EventChannel('com.my_app.event_channel');
Run Code Online (Sandbox Code Playgroud)
然后initState
:
widget.stream.receiveBroadcastStream().listen((event) {
print("@@@@@@@@@@@@@@@@@@@@@@@@@@ received event channel!");
});
Run Code Online (Sandbox Code Playgroud)
我得到什么:
E/EventChannel#com.my_app.event_channel(16346): Failed to open event stream
E/EventChannel#com.my_app.event_channel(16346): java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter args
E/EventChannel#com.my_app.event_channel(16346): at com.my_app.flutter_app.MainActivity$configureFlutterEngine$1.onListen(Unknown Source:2)
E/EventChannel#com.my_app.event_channel(16346): at io.flutter.plugin.common.EventChannel$IncomingStreamRequestHandler.onListen(EventChannel.java:188)
E/EventChannel#com.my_app.event_channel(16346): at io.flutter.plugin.common.EventChannel$IncomingStreamRequestHandler.onMessage(EventChannel.java:167)
E/EventChannel#com.my_app.event_channel(16346): at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/EventChannel#com.my_app.event_channel(16346): at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:692)
E/EventChannel#com.my_app.event_channel(16346): at android.os.MessageQueue.nativePollOnce(Native Method)
E/EventChannel#com.my_app.event_channel(16346): at android.os.MessageQueue.next(MessageQueue.java:325)
E/EventChannel#com.my_app.event_channel(16346): at android.os.Looper.loop(Looper.java:142)
E/EventChannel#com.my_app.event_channel(16346): at android.app.ActivityThread.main(ActivityThread.java:6617)
E/EventChannel#com.my_app.event_channel(16346): at java.lang.reflect.Method.invoke(Native Method)
E/EventChannel#com.my_app.event_channel(16346): at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
E/EventChannel#com.my_app.event_channel(16346): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:769)
Run Code Online (Sandbox Code Playgroud)
看起来像是onListen
用空数据调用的。但我不传递任何数据。发生了什么?
只需添加?
即可,args: Any
如下所示:args: Any?
,示例:
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
EventChannel(flutterEngine.dartExecutor.binaryMessenger, EVENT_CHANNEL).setStreamHandler(
object : EventChannel.StreamHandler {
override fun onListen(args: Any?, events: EventChannel.EventSink) {
Log.d(TAG, "adding listener for $EVENT_CHANNEL")
events.success(true)
}
override fun onCancel(args: Any?) {
Log.d(TAG, "cancelling listener for $EVENT_CHANNEL")
}
}
)
Run Code Online (Sandbox Code Playgroud)
这样它将接受空参数。以前的方式是强制args
为非空,但是当 flutter 打开一个没有任何名称的通道时,例如
widget.stream.receiveBroadcastStream()
Run Code Online (Sandbox Code Playgroud)
它向该代码发送一个空参数。另一种解决方案是发送一些东西:
widget.stream.receiveBroadcastStream("something")
Run Code Online (Sandbox Code Playgroud)
Any
但如果您预计没有参数,最好将 设为null
归档时间: |
|
查看次数: |
1536 次 |
最近记录: |