【问题标题】:Flutter - Get data with an Event Channel from Kotlin to DartFlutter - 使用从 Kotlin 到 Dart 的事件通道获取数据
【发布时间】: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
    }
}

【问题讨论】:

    标签: kotlin flutter dart


    【解决方案1】:

    我找到了解决办法:

    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)
                }
            })
        }
    

    【讨论】:

      猜你喜欢
      • 2019-09-04
      • 2021-05-03
      • 2020-07-07
      • 2021-06-27
      • 2020-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-28
      相关资源
      最近更新 更多