2

I have extracted longitude and latitude using geolocation plugin in flutter. But now I need to create name of place from those longitude and latitude.

I tried using geocoder plugin, but

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

      var first = addresses.first; 

above line is giving error saying getter first is not defined for class Future<>

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

How can I use those latitude and longitude and convert into address in flutter?

Neeraj Yadav
  • 422
  • 6
  • 13

4 Answers4

4

findAddressesFromCoordinates returns a Future in this case.

You can either make your function or method 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}");
}

In this case you need to use the await keyword in front of your method call, which will make the function only continue running after your object with the addresses has been retrieved.

The other option is using the then method on a Future, which would look like this:

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

In this case you are passing a callback to the then method, which will be executed with the result of findAddressesFromCoordinates in it once they are returned, but yourFunction itself will continue running.

creativecreatorormaybenot
  • 114,516
  • 58
  • 291
  • 402
2

the findAddressesFromCoordinates method return a Future<List<Address>>

so you can do something like using then :

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

or you can just use the 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}");}

if you want to understand the basics of Asynchronous Programming in dart you should take a look at this article

Raouf Rahiche
  • 28,948
  • 10
  • 85
  • 77
1

try this google instead on local

final coordinates = new Coordinates(position.latitude, position.longitude);  
geocoder.google('GOOGLE_API_KEY').findAddressesFromCoordinates(coordinates)
Saad Ahmed
  • 700
  • 1
  • 8
  • 15
0

With the help of geocoding you can get Placemark using LatLan. But sometimes you will get a meaningless 'name' for that specific LatLng, in that case, you can do a little modification for getting a meaningful 'name' as shown below.

Future<String> getLocationFromLatLng(LatLng latLng) async {
  List<Placemark> place = await placemarkFromCoordinates(latLng.latitude, latLng.longitude);
  int len = place.length;
  String name = '';
  for(int i = 0; i < len; i++){
    String temp = place[i].name ?? '';
    if(name.length <= temp.length){
      name = temp;
    }
  }
  return name;
}
A_Rush
  • 368
  • 3
  • 14