我不知道为什么调试应用程序时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语句从未被捕获。
答案 0 :(得分:0)
该异常可能是在本机代码中引发的,根本没有传递给Dart。 Dart无法捕获Java或ObjectivC / Swift异常。该插件需要用Java捕获,并向Dart发送消息,而在Dart中则需要抛出人为异常。
另请参见