2

我在颤振中使用地理定位插件提取了经度和纬度。但现在我需要根据这些经度和纬度创建地名。

我尝试使用地理编码器插件,但是

  final coordinates = new Coordinates(latitude, longitude);
          var addresses =  Geocoder.local.findAddressesFromCoordinates(coordinates);

      var first = addresses.first; 

上面的行给出错误,说没有为类 Future<> 定义 getter first

      print("${first.featureName} : ${first.addressLine}");

如何使用这些纬度和经度并在颤动中转换为地址?

4

3 回答 3

4

findAddressesFromCoordinatesFuture在这种情况下返回 a 。

您可以制作函数或方法async

void yourFunction() async {
  final coordinates = new Coordinates(latitude, longitude);
  var addresses = await Geocoder.local.findAddressesFromCoordinates(coordinates);

  var first = addresses.first; 
  print("${first.featureName} : ${first.addressLine}");
}

在这种情况下,您需要await在方法调用前使用关键字,这将使函数仅在检索到具有地址的对象后继续运行。

另一种选择是使用thena 上的方法Future,如下所示:

void yourFunction() {
  final coordinates = new Coordinates(latitude, longitude);
  Geocoder.local.findAddressesFromCoordinates(coordinates).then((addresses) {
    var first = addresses.first; 
    print("${first.featureName} : ${first.addressLine}");
  });
}

在这种情况下,您将一个回调传递给该方法,一旦返回then结果,该方法将在其中执行,但它本身将继续运行。findAddressesFromCoordinatesyourFunction

于 2018-06-17T17:11:48.253 回答
2

findAddressesFromCoordinates方法返回一个Future<List<Address>>

所以你可以做类似使用then的事情:

final coordinates = new Coordinates(latitude, longitude);
var addresses =  
Geocoder.local.findAddressesFromCoordinates(coordinates).then(
(data) => print(data);
);

或者您可以只使用 async/await :

getAddressesFromCoordinates() async {
final coordinates = new Coordinates(1.10, 45.50);
addresses = await Geocoder.local.findAddressesFromCoordinates(coordinates);
first = addresses.first;
print("${first.featureName} : ${first.addressLine}");}

如果你想了解 dart 中异步编程的基础知识,你应该看看这篇文章

于 2018-06-17T17:09:20.100 回答
1

在本地试试这个谷歌

final coordinates = new Coordinates(position.latitude, position.longitude);  
geocoder.google('GOOGLE_API_KEY').findAddressesFromCoordinates(coordinates)
于 2020-04-15T19:36:06.367 回答