Catch语句无法在异步功能的调试模式下捕获引发的错误

时间:2019-02-26 20:26:29

标签: dart flutter try-catch

我不知道为什么调试应用程序时catch语句不能捕获引发的错误。
这是主要功能:

void main() async {
  final initialState = await persistor.load();
  bool logged = false;

  if (initialState.isLoggedIn) {
    logged = await initialState.silentlyLogin(); // <---- FUNCTION THAT THROWS ERROR
  }
  if (!logged) {
    initialState.logout();
  }
}

这是我的State类的silentlyLogin函数:

Future<bool> silentlyLogin() async {
    try {
      await globals.googleSignIn.signInSilently();
      return true;
    } catch (e) {
      return false;
    }
}

在调试中,在此部分代码中,googleSignIn.signInSilently函数引发错误:

@override
  dynamic decodeEnvelope(ByteData envelope) {
    // First byte is zero in success case, and non-zero otherwise.
    if (envelope.lengthInBytes == 0)
      throw const FormatException('Expected envelope, got nothing');
    final ReadBuffer buffer = ReadBuffer(envelope);
    if (buffer.getUint8() == 0)
      return messageCodec.readValue(buffer);
    final dynamic errorCode = messageCodec.readValue(buffer);
    final dynamic errorMessage = messageCodec.readValue(buffer);
    final dynamic errorDetails = messageCodec.readValue(buffer);
    if (errorCode is String && (errorMessage == null || errorMessage is String) && !buffer.hasRemaining)
      throw PlatformException(code: errorCode, message: errorMessage, details: errorDetails); // <------ HERE IS THE ERROR
    else
      throw const FormatException('Invalid envelope');
  }

在调试模式下,android studio在throw PlatformException行中阻止了该应用程序,但是我的catch语句从未被捕获,因此我的函数始终返回true。 虽然我的catch语句从未被捕获。

1 个答案:

答案 0 :(得分:0)

该异常可能是在本机代码中引发的,根本没有传递给Dart。 Dart无法捕获Java或ObjectivC / Swift异常。该插件需要用Java捕获,并向Dart发送消息,而在Dart中则需要抛出人为异常。

另请参见