#flutter #dart
#flutter #dart
Вопрос:
Попытка обработать исключение в коде ниже:
findLocation() async {
final GoogleMapController controller = await _controller.future;
try {
gcd.locationFromAddress(userAddress).then((result) => controller
.animateCamera(CameraUpdate.newCameraPosition(CameraPosition(
target: LatLng(result[0].latitude, result[0].longitude),
zoom: 15))));
} on gcd.NoResultFoundException {
print("test");
}
}
Однако, когда этот блок выполняется неудачно, он выдает эту ошибку:
NoResultFoundException (Could not find any result for the supplied address or coordinates.)
Ошибка указывает на этот блок кода:
switch (platformException.code) {
case 'NOT_FOUND':
throw NoResultFoundException();
}
}
Исключение NoResultFoundException определено в классе с содержимым:
/// a [Placemark] from coordinates as [double] latitude and longitude
/// or [Location] from address as [String]
class NoResultFoundException implements Exception {
/// Constructs the [LocationServiceDisabledException]
const NoResultFoundException();
@override
String toString() =>
'Could not find any result for the supplied address or coordinates.';
}
Как я могу обработать эту ошибку в своей findLocation()
функции?
(Кстати, это библиотека геокодирования flutter, и исключение определено в файлах библиотеки.)
Ответ №1:
Вы получите исключения только в том случае, если вы await
правильно выполняете вызов.
Если вы настаиваете на использовании then
here , тогда вам нужно будет использовать .catchError
вместо традиционного блока try / catch .
Небольшой совет, не смешивайте await
и then
. Это возможно, но очень легко ошибиться. Вероятно, придерживайтесь одного, await
поскольку с ним легче обращаться.
Комментарии:
1. Спасибо, как вы думаете, вы могли бы поделиться блоком кода, чтобы сообщить мне, что нужно изменить? Или дайте мне знать? Нет особой необходимости в then / catchError