颤振-通过从Kotlin到Dart的事件通道获取数据
我有一个问题已经解决了20多个小时:我想使用事件通道从Spotify SDK获取数据流。在本地,我可以通过订阅我的PlayerState自动显示当前歌曲的状态。我的目标是能够访问这个数据流与我的颤振应用程序。在本机端,我可以毫无问题地输出数据流。但我也希望能够在我的Flitter应用程序中访问这些数据。问题是我没有从Kotlin到Dart获取数据。我无法执行命令颤振-通过从Kotlin到Dart的事件通道获取数据,kotlin,flutter,dart,Kotlin,Flutter,Dart,我有一个问题已经解决了20多个小时:我想使用事件通道从Spotify SDK获取数据流。在本地,我可以通过订阅我的PlayerState自动显示当前歌曲的状态。我的目标是能够访问这个数据流与我的颤振应用程序。在本机端,我可以毫无问题地输出数据流。但我也希望能够在我的Flitter应用程序中访问这些数据。问题是我没有从Kotlin到Dart获取数据。我无法执行命令mEventSink?.success(position),因为mEventSink为零。 如果有人能帮我解决这个问题,那就太好了 //
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
}
}
我找到了一个解决方案:
override fun onListen(p0: Any?, p1: EventChannel.EventSink?) {
mEventSink = p1
Log.d("test", "test1")
if(spotifyAppRemote == null) {
Log.d("test", "test2")
}
val connectionParams = ConnectionParams.Builder(clientId)
.setRedirectUri(redirectUri)
.showAuthView(true)
.build()
SpotifyAppRemote.connect(registrar.context(), connectionParams, object : Connector.ConnectionListener {
override fun onConnected(appRemote: SpotifyAppRemote) {
spotifyAppRemote = appRemote
if(spotifyAppRemote != null) {
Log.d("test", "test3")
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")
}
}
}
Log.d("Spotify App Remote Login", "Connected!")
}
override fun onFailure(throwable: Throwable) {
Log.e("Spotify App Remote Login", "Error!", throwable)
}
})
}