Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

  • What went wrong: Execution failed for task ':app:preDebugBuild'.

    Android dependency 'android.arch.lifecycle:runtime' has different version for the compile (1.0.0) and runtime (1.1.0) classpath. You should manually set the same version via DependencyResolution

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.

like image 667
Mateen Kiani Avatar asked Feb 28 '19 13:02

Mateen Kiani


4 Answers

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!

like image 70
Abdul Rehman Avatar answered Sep 28 '22 15:09

Abdul Rehman


  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,
             ),  
           ),
like image 29
Mohd Danish Khan Avatar answered Sep 28 '22 17:09

Mohd Danish Khan


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

like image 29
primo Avatar answered Sep 28 '22 16:09

primo


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.

like image 26
Mateen Kiani Avatar answered Sep 28 '22 16:09

Mateen Kiani