如何处理AudioHandler实现中抛出的错误?



为了方便使用,假设我的应用程序中有一个BaseAudioHandler的实现:

class AudioPlayerHandler extends BaseAudioHandler {
@override
Future<void> play() async {
throw Error();
}
}

当我从事件处理程序中调用这个函数时:

void onPlayButtonTap() {
try {
audioPlayerHandler.play();
} catch (error) {
// Error is not caught, but in the console I see unhandled error message.
print(error.toString())
} 
}

它不捕获方法中抛出的错误。

当然,这种方式的例子是没有意义的,但我遇到了这个问题,当试图加载一个无效的url,我不能在"常规"的方式处理。

[VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: Instance of 'Error'
#0      AudioPlayerHandler.play (package:audio_service_example/main.dart:197:5)
#1      MainScreen._button.<anonymous closure> (package:audio_service_example/main.dart:145:22)
#2      _InkResponseState.handleTap (package:flutter/src/material/ink_well.dart:1072:21)
#3      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:253:24)
#4      TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:627:11)
#5      BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:306:5)
#6      BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:239:7)
#7      PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:615:9)
#8      PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:98:12)
#9      PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/pointer_ro<…>

我希望能够使用try-catch块来处理错误。

我可以在audiohandler实现中处理错误,假设我可以传播一个自定义事件,告诉处理程序的用户发生了错误,但这种解决方案似乎有点笨拙。

我也不确定这是我不知道的编程语言怪癖还是实现问题?尝试使用调试器逐步执行,但没有发现任何有意义的内容。

你能告诉我这个错误处理应该如何工作吗?

提前感谢!

这与Dart语言有关。

由于您将play定义为异步方法,因此play实际上不会抛出错误。它返回一个future,计算结果为错误。如果您将来await,您将能够捕获错误:

try {
await audioPlayerHandler.play();

相关内容

  • 没有找到相关文章

最新更新