You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Flutter Pigeon库实现Kotlin调用Dart的Spotify回调方法?

用Pigeon实现Kotlin调用Dart回调的正确配置方案

1. 修正Pigeon接口定义

不用手动传递回调实例,Pigeon对@FlutterApi有内置的实例管理支持。先把你的pigeon文件改成这样:

// pigeon.dart
import 'package:pigeon/pigeon.dart';

@FlutterApi()
abstract class SpotifyAPICallback {
  void onAuthCode(String authCode);
  void onAuthFailure(String errorMessage);
}

@HostApi()
abstract class SpotifyAPI {
  void startSpotifyAuth(); // 定义让原生触发授权的方法
}

重新运行Pigeon生成代码:

flutter pub run pigeon --input lib/pigeon.dart

2. Dart侧注册回调实现

在Dart层实现SpotifyAPICallback,并通过Pigeon生成的方法注册实例,这一步必须在调用原生授权前完成:

// Dart侧实现回调
class SpotifyCallbackImpl implements SpotifyAPICallback {
  @override
  void onAuthCode(String authCode) {
    // 这里处理拿到授权码后的逻辑
    print("Dart收到授权码: $authCode");
  }

  @override
  void onAuthFailure(String errorMessage) {
    print("Dart收到授权失败信息: $errorMessage");
  }
}

// 在APP初始化时注册(比如initState里)
void setupSpotifyCallback() {
  SpotifyAPICallback.setup(SpotifyCallbackImpl());
}

3. Kotlin侧调用Dart回调

Pigeon生成的Kotlin代码会自动生成SpotifyAPICallback的单例访问入口,直接在授权成功的回调里调用即可:

// Kotlin侧Spotify授权成功后的处理逻辑
fun handleSpotifyAuthSuccess(authCode: String) {
  // 直接调用Pigeon生成的回调方法
  SpotifyAPICallback.instance?.onAuthCode(authCode)
}

// 授权失败的处理
fun handleSpotifyAuthFailure(errorMsg: String) {
  SpotifyAPICallback.instance?.onAuthFailure(errorMsg)
}

4. 常见问题排查

  • 线程问题:原生调用Dart方法必须在主线程执行,如果Spotify的授权回调在子线程,要切换到主线程:
    Handler(Looper.getMainLooper()).post {
      SpotifyAPICallback.instance?.onAuthCode(authCode)
    }
    
  • 注册时机:如果Dart还没注册回调,SpotifyAPICallback.instance会返回null,所以一定要先调用setupSpotifyCallback()再触发原生授权。
  • 版本兼容:确保使用最新稳定版的Pigeon,旧版本可能存在回调注册的bug。

内容的提问来源于stack exchange,提问作者bufferking

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 08:10:16