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

如何处理AudioHandler实现中抛出的异常?

问题原因与解决方案

核心问题

你遇到的是Dart异步错误的捕获规则问题:play()是异步函数(带async修饰),但你调用时没有用await等待它完成,导致抛出的错误逃逸到全局事件循环,无法被当前的try-catch捕获。

直接解决方案

把事件处理函数改成异步函数,并在调用play()时加上await,这样try-catch就能正常捕获异步错误:

Future<void> onPlayButtonTap() async {
    try {
        await audioPlayerHandler.play();
    } catch (error) {
        print(error.toString());
    } 
}

备选方案(无需修改函数异步性)

如果因为框架限制无法将onPlayButtonTap改为异步函数,可以直接用Future的catchError方法处理错误:

void onPlayButtonTap() {
    audioPlayerHandler.play().catchError((error) {
        print(error.toString());
    });
}

原理说明

Dart中,异步函数返回的Future如果没有被await或者通过catchError处理,其内部抛出的错误会成为未处理异常,直接输出到控制台。只有当你通过await将异步操作纳入当前代码的执行流,或者显式绑定错误处理回调,才能捕获到这些异步错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:01:35