Как вы можете обрабатывать исключения dart, которые были объявлены в библиотеке?

#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