【发布时间】:2019-12-09 15:09:13
【问题描述】:
我已经处理了 20 多个小时的以下问题:我想使用事件通道从 Spotify SDK 获取数据流。在原生端,我可以通过订阅我的 PlayerState 来自动显示当前歌曲的状态。我的目标是能够使用我的 Flutter 应用程序访问此数据流。在本机端,我可以毫无问题地输出数据流。但我也希望能够在我的 Flutter App 中访问这些数据。问题是我没有从 Kotlin 获取数据到 Dart。我无法执行命令mEventSink?.success(position),因为 mEventSink 为零。
如果有人能帮我解决这个问题,那就太好了。
//...
class Spotifysdk04Plugin(private var registrar: Registrar): MethodCallHandler, EventChannel.StreamHandler {
//...
private var mEventSink: EventChannel.EventSink? = null
companion object {
@JvmStatic
fun registerWith(registrar: Registrar) {
val channel = MethodChannel(registrar.messenger(), "spotifysdk")
channel.setMethodCallHandler(Spotifysdk04Plugin(registrar))
val eventChannel = EventChannel(registrar.messenger(), "timerStream")
eventChannel.setStreamHandler(Spotifysdk04Plugin(registrar))
}
}
override fun onMethodCall(call: MethodCall, result: Result) {
if (call.method == "loginAppRemote") {
//...
} else if(call.method == "initEventStream") {
try {
spotifyAppRemote!!.playerApi.subscribeToPlayerState()
.setEventCallback { playerState: PlayerState? ->
Log.d("test", "test24")
var position = playerState!!.playbackPosition.toDouble()
Log.d("playbackPosition1", position.toString())
if(mEventSink != null) {
Log.d("test", "test25")
mEventSink?.success(position)
} else {
Log.d("test", "mEventSink == null")
}
}
} catch (err:Throwable) {
Log.v("initEventStreamError",err.message.toString())
result.success(false)
}
} else {
result.notImplemented()
}
}
override fun onCancel(arguments: Any?) {
mEventSink = null
}
override fun onListen(arguments: Any?, eventSink: EventChannel.EventSink) {
mEventSink = eventSink
}
}
【问题讨论】: