Mateen Kiani
Mateen Kiani

Reputation: 3253

How to get current location on flutter sdk 1.2.1

How can i get current location on android device using flutter. I have tried both Location and GeoLocator plugins the GeoLocator 3.0.0 shows this error on debuging:

Launching lib\main.dart on Android SDK built for x86 in debug mode...

FAILURE: Build failed with an exception.

Location 2.0.0 also throws an error on debugging. There is another plugin available named geoLocation but that is not compatible with dart 2.0. In such a situation how can i get location (longitude and latitude)[once]? Any help would be highly appreciated.

Upvotes: 14

Views: 67242

Answers (4)

Abdul Rehman
Abdul Rehman

Reputation: 210

Follow these steps to get location in both IOS and Android.

  1. Add geolocator: ^4.0.3 in your pubspec.yaml file below dependencies: tag
  2. Add import 'package:geolocator/geolocator.dart'; in your dart file where you need to get location
  3. In order to get location for android add following permissions in android project manifest file

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

  1. For IOS you'll need to add following lines in your info.plist file under <dict> in IOS project

    <key>NSLocationWhenInUseUsageDescription</key>

    <string>This app needs access to location when open.</string>

  2. Function to get location

    void getLocation() async { Position position = await Geolocator .getCurrentPosition(desiredAccuracy: LocationAccuracy.high); print(position); }

Cheers!

Upvotes: 21

Mohd Danish Khan
Mohd Danish Khan

Reputation: 1101

  1. Add GeoLocation Plugin in pubsec.yaml
    geolocator: ^6.0.0

  2. Run flutter pub get

  3. Add location permissions for Android in app/src/main/AndroidManifest.xml

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
  1. For iOS add following keys in info.plist
<key>NSLocationWhenInUseUsageDescription</key>
<string>This app needs access to location when open.</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>This app needs access to location when in the background.</string>
  1. Creart function to fetch user current location:
LatLng currentPostion;

void _getUserLocation() async {
        var position = await GeolocatorPlatform.instance
            .getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
    
        setState(() {
          currentPostion = LatLng(position.latitude, position.longitude);
        });
      }
  1. Use currentPostion in your googlemap. (define Latlag currentPosition);
GoogleMap(
             // onMapCreated: _onMapCreated,
             initialCameraPosition: CameraPosition(
               target: currentPostion,
               zoom: 10,
             ),  
           ),

Upvotes: 16

Mateen Kiani
Mateen Kiani

Reputation: 3253

The geoLocator plugin that I installed was using Android x jetpack libraries while my project was using support libraries so this conflict was causing the problem and when I updated my project to use Android x libraries the problem was resolved.

Upvotes: 1

primo
primo

Reputation: 1472

It may be possible that uptil now you might have found a solution but still I am adding this so that others can get help

use geolocator for getting current location

In pubsec.yaml

  geolocator: '^2.0.1'

In your dart file

import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';

void main() => runApp(MapScreen());

class MapScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: "Map",
      home: MapActivity(),
    );
  }
}

class MapActivity extends StatefulWidget {
  @override
  _MapActivityState createState() => _MapActivityState();
}

class _MapActivityState extends State<MapActivity> {
  LatLng _center ;
  Position currentLocation;

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    getUserLocation();
  }

 Future<Position> locateUser() async {
    return Geolocator()
        .getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
  }

  getUserLocation() async {
    currentLocation = await locateUser();
    setState(() {
      _center = LatLng(currentLocation.latitude, currentLocation.longitude);
    });
    print('center $_center');
  }
}

Hope this helps

Upvotes: 3

Related Questions