如何处理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
相关产品推荐
相关产品推荐

