A Flutter plugin to easily handle realtime location in iOS and Android. Provides settings for optimizing performance or battery.

Overview

Flutter Location Plugin

pub package Cirrus CI - Task and Script Build Status codecov

This plugin for Flutter handles getting a location on Android and iOS. It also provides callbacks when the location is changed.

Youtube Video

Web demo (more features available on Android/iOS)

Getting Started

Add this to your package's pubspec.yaml file:

dependencies:
  location: ^4.2.0

Android

With Flutter 1.12, all the dependencies are automatically added to your project. If your project was created before Flutter 1.12, you might need to follow this.

To use location background mode on Android, you have to use the enableBackgroundMode({bool enable}) API before accessing location in the background and adding necessary permissions. You should place the required permissions in your applications /android/app/src/main/AndroidManifest.xml:

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

Remember that the user has to accept the location permission to always allow to use the background location. The Android 11 option to always allow is not presented on the location permission dialog prompt. The user has to enable it manually from the app settings. This should be explained to the user on a separate UI that redirects the user to the app's location settings managed by the operating system. More on that topic can be found on Android developer pages.

iOS

And to use it in iOS, you have to add this permission in Info.plist :

// This is probably the only one you need. Background location is supported
// by this -- the caveat is that a blue badge is shown in the status bar
// when the app is using location service while in the background.
NSLocationWhenInUseUsageDescription

// Deprecated, use NSLocationAlwaysAndWhenInUseUsageDescription instead.
NSLocationAlwaysUsageDescription

// Use this very carefully. This key is required only if your iOS app
// uses APIs that access the user’s location information at all times,
// even if the app isn't running.
NSLocationAlwaysAndWhenInUseUsageDescription

To receive location when application is in background, to Info.plist you have to add property list key :

UIBackgroundModes

with string value:

location

Web

Nothing to do, the plugin works directly out of box.

macOS

Ensure that the application is properly "sandboxed" and that the location is enabled. You can do this in Xcode with the following steps:

  1. In the project navigator, click on your application's target. This should bring up a view with tabs such as "General", "Capabilities", "Resource Tags", etc.
  2. Click on the "Capabilities" tab. This will give you a list of items such as "App Groups", "App Sandbox", and so on. Each item will have an "On/Off" button.
  3. Turn on the "App Sandbox" item and press the ">" button on the left to show the sandbox stuff.
  4. In the "App Data" section, select "Location".

Add this permission in Info.plist :

NSLocationWhenInUseUsageDescription
NSLocationAlwaysUsageDescription

Usage

Then you just have to import the package with

import 'package:location/location.dart';

In order to request location, you should always check Location Service status and Permission status manually

Location location = new Location();

bool _serviceEnabled;
PermissionStatus _permissionGranted;
LocationData _locationData;

_serviceEnabled = await location.serviceEnabled();
if (!_serviceEnabled) {
  _serviceEnabled = await location.requestService();
  if (!_serviceEnabled) {
    return;
  }
}

_permissionGranted = await location.hasPermission();
if (_permissionGranted == PermissionStatus.denied) {
  _permissionGranted = await location.requestPermission();
  if (_permissionGranted != PermissionStatus.granted) {
    return;
  }
}

_locationData = await location.getLocation();

You can also get continuous callbacks when your position is changing:

location.onLocationChanged.listen((LocationData currentLocation) {
  // Use current location
});

To receive location when application is in background you have to enable it:

location.enableBackgroundMode(enable: true)

Be sure to check the example project to get other code samples.

On Android, a foreground notification is displayed with information that location service is running in the background.

On iOS, while the app is in the background and gets the location, the blue system bar notifies users about updates. Tapping on this bar moves the User back to the app.

Androig background location iOS background location

Public Methods Summary

Return Description
Future<PermissionStatus> requestPermission()
Request the Location permission. Return a PermissionStatus to know if the permission has been granted.
Future<PermissionStatus> hasPermission()
Return a PermissionStatus to know the state of the location permission.
Future<bool> serviceEnabled()
Return a boolean to know if the Location Service is enabled or if the user manually deactivated it.
Future<bool> requestService()
Show an alert dialog to request the user to activate the Location Service. On iOS, will only display an alert due to Apple Guidelines, the user having to manually go to Settings. Return a boolean to know if the Location Service has been activated (always false on iOS).
Future<bool> changeSettings(LocationAccuracy accuracy = LocationAccuracy.HIGH, int interval = 1000, double distanceFilter = 0)
Will change the settings of futur requests. accuracywill describe the accuracy of the request (see the LocationAccuracy object). interval will set the desired interval for active location updates, in milliseconds (only affects Android). distanceFilter set the minimum displacement between location updates in meters.
Future<LocationData> getLocation()
Allow to get a one time position of the user. It will try to request permission if not granted yet and will throw a PERMISSION_DENIED error code if permission still not granted.
Stream<LocationData> onLocationChanged
Get the stream of the user's location. It will try to request permission if not granted yet and will throw a PERMISSION_DENIED error code if permission still not granted.
Future<bool> enableBackgroundMode({bool enable})
Allow or disallow to retrieve location events in the background. Return a boolean to know if background mode was successfully enabled.

You should try to manage permission manually with requestPermission() to avoid error, but plugin will try handle some cases for you.

Objects

class LocationData {
  final double latitude; // Latitude, in degrees
  final double longitude; // Longitude, in degrees
  final double accuracy; // Estimated horizontal accuracy of this location, radial, in meters
  final double altitude; // In meters above the WGS 84 reference ellipsoid
  final double speed; // In meters/second
  final double speedAccuracy; // In meters/second, always 0 on iOS
  final double heading; // Heading is the horizontal direction of travel of this device, in degrees
  final double time; // timestamp of the LocationData
  final bool isMock; // Is the location currently mocked
}


enum LocationAccuracy {
  powerSave, // To request best accuracy possible with zero additional power consumption,
  low, // To request "city" level accuracy
  balanced, // To request "block" level accuracy
  high, // To request the most accurate locations available
  navigation // To request location for navigation usage (affect only iOS)
}

// Status of a permission request to use location services.
enum PermissionStatus {
  /// The permission to use location services has been granted.
  granted,
  // The permission to use location services has been denied by the user. May have been denied forever on iOS.
  denied,
  // The permission to use location services has been denied forever by the user. No dialog will be displayed on permission request.
  deniedForever
}

Note: you can convert the timestamp into a DateTime with: DateTime.fromMillisecondsSinceEpoch(locationData.time.toInt())

Feedback

Please feel free to give me any feedback helping support this plugin !

Comments
  • "getLocation()" never returns

    (First of all, thanks for your hardwork at this library)

    Describe the bug I am calling this method before calling "runApp(MyApp())" in my main method. I need this because my app needs a current known location at its very first frame:

    _getLastKnownLocation() async {
      print("STARTING LOCATION SERVICE");
      var location = Location();
      location.changeSettings(accuracy: LocationAccuracy.POWERSAVE);
      if (!await location.hasPermission()) {
        await location.requestPermission();
      } 
    
      InMemoryDatabase.lastKnownLocation = await location.getLocation();
    }
    

    The call gets stuck on the last line of this method, never returning a proper position.

    I am using library version 2.3.5 with flutter 1.2.1

    Expected behavior The method should return a position.

    Tested on:

    • Android, 8.1.0 Motorola Moto G5S (real device)
    bug inactive 
    opened by shinayser 57
  • Crash on app start

    Crash on app start

    The app crashes at start-up throwing this error, when using location: ^2.0.0 (compileSdkVersion 28, targetSdkVersion 28)

    java.lang.Throwable: java.util.concurrent.CompletionException: java.io.IOException: Application terminated at com.intellij.openapi.diagnostic.Logger.error(Logger.java:134) at io.flutter.view.InspectorPanel.lambda$recomputeTreeRoot$5(InspectorPanel.java:575) at io.flutter.inspector.InspectorService$ObjectGroup.lambda$null$69(InspectorService.java:872) at com.intellij.openapi.application.TransactionGuardImpl$2.run(TransactionGuardImpl.java:315) at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.doRun(LaterInvocator.java:435) at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.runNextEvent(LaterInvocator.java:419) at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:403) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:762) at java.awt.EventQueue.access$500(EventQueue.java:98) at java.awt.EventQueue$3.run(EventQueue.java:715) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) at java.awt.EventQueue.dispatchEvent(EventQueue.java:732) at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:719) at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:668) at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:363) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

    flutter doctor -v: ` [√] Flutter (Channel stable, v1.0.0, on Microsoft Windows [Versione 10.0.17134.472], locale it-IT) • Flutter version 1.0.0 at E:\A - Installazioni\Flutter\flutter • Framework revision 5391447fae (2 months ago), 2018-11-29 19:41:26 -0800 • Engine revision 7375a0f414 • Dart version 2.1.0 (build 2.1.0-dev.9.4 f9ebf21297)

    [√] Android toolchain - develop for Android devices (Android SDK 28.0.3) • Android SDK at C:\Users\Damiano\AppData\Local\Android\sdk • Android NDK location not configured (optional; useful for native profiling support) • Platform android-28, build-tools 28.0.3 • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1024-b02) • All Android licenses accepted.

    [√] Android Studio (version 3.1) • Android Studio at C:\Program Files\Android\Android Studio • Flutter plugin version 29.0.1 • Dart plugin version 173.4700 • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1024-b02)

    [√] IntelliJ IDEA Community Edition (version 2018.3) • IntelliJ at E:\A - Installazioni\IntelliJ IDEA Community Edition 2018.3.3 • Flutter plugin version 31.3.4 • Dart plugin version 183.5153.38

    [√] Connected device (1 available) • X30 • 0123456789ABCDEF • android-arm • Android 7.0 (API 24)

    • No issues found!

    E:\FlutterProjects\Tutorials\flutter_app_weather>

    `

    bug 
    opened by DaathGit 42
  • MissingPluginException when using in isolate with Android Alarm Service

    MissingPluginException when using in isolate with Android Alarm Service

    Describe the bug I'm trying to get device location in a callback of android_alarm_service. So I create a new alarm:

    AndroidAlarmManager.periodic(
                  Duration(minutes: 1),
                  1,
                  updateDeviceLocation,
                  wakeup: true,
                );
    

    Then updateDeviceLocation is called in a separate isolate in this case. Here is the function:

    static void updateDeviceLocation() {
        print("Starting device location update...");
        SharedPreferences.getInstance().then((prefs){
          print("... loading settings");
          String url = prefs.getString('app-webhook-url');
          if (url != null && url.isNotEmpty) {
            print("... done. Getting device location...");
            try {
              var location = new Location();
              location.getLocation().then((currentLocation){
                print("... done. Sending data home...");
                Map<String, String> headers = {};
                headers["Content-Type"] = "application/json";
                var data = {
                  "type": "update_location",
                  "data": {
                    "gps": [currentLocation.latitude, currentLocation.longitude],
                    "gps_accuracy": currentLocation.accuracy,
                    "battery": 45
                  }
                };
                http.post(
                    url,
                    headers: headers,
                    body: json.encode(data)
                );
              });
            } on PlatformException catch (e) {
              if (e.code == 'PERMISSION_DENIED') {
                print("... no location permission. Aborting");
              }
            }
          } else {
            print("... no webhook. Aborting");
          }
        });
      }
    

    If I call updateDeviceLocation directly in main isolate all works fine. But when updateDeviceLocation called by Alarm Manager in a separate isolate I'm getting:

    Unhandled Exception: MissingPluginException(No implementation found for method getLocation on channel lyokone/location)
    

    I tried flutter clean, restarting and rebuilding everything, but no luck.

    Expected behavior I hope this plugin can work fine in a separate isolate.

    Tested on:

    • Android 9, API Level 28, real device

    Additional logs

    I/flutter (14499): Starting device location update...
    I/flutter (14499): ... loading settings
    I/flutter (14499): ... checking settings
    I/flutter (14499): ... done. Getting device location...
    E/flutter (14499): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: MissingPluginException(No implementation found for method getLocation on channel lyokone/location)
    E/flutter (14499): #0      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:314:7)
    E/flutter (14499): <asynchronous suspension>
    E/flutter (14499): #1      Location.getLocation (package:location/location.dart:61:8)
    E/flutter (14499): #2      PremiumFeaturesManager.updateDeviceLocation.<anonymous closure> (package:hass_client/premium_features_manager.class.dart:22:20)
    E/flutter (14499): #3      _rootRunUnary (dart:async/zone.dart:1132:38)
    E/flutter (14499): #4      _CustomZone.runUnary (dart:async/zone.dart:1029:19)
    E/flutter (14499): #5      _FutureListener.handleValue (dart:async/future_impl.dart:126:18)
    E/flutter (14499): #6      Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:639:45)
    E/flutter (14499): #7      Future._propagateToListeners (dart:async/future_impl.dart:668:32)
    E/flutter (14499): #8      Future._complete (dart:async/future_impl.dart:473:7)
    E/flutter (14499): #9      _SyncCompleter.complete (dart:async/future_impl.dart:51:12)
    E/flutter (14499): #10     _AsyncAwaitCompleter.complete.<anonymous closure> (dart:async-patch/async_patch.dart:33:20)
    E/flutter (14499): #11     _rootRun (dart:async/zone.dart:1120:38)
    E/flutter (14499): #12     _CustomZone.run (dart:async/zone.dart:1021:19)
    E/flutter (14499): #13     _CustomZone.runGuarded (dart:async/zone.dart:923:7)
    E/flutter (14499): #14     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:963:23)
    E/flutter (14499): #15     _rootRun (dart:async/zone.dart:1124:13)
    E/flutter (14499): #16     _CustomZone.run (dart:async/zone.dart:1021:19)
    E/flutter (14499): #17     _CustomZone.runGuarded (dart:async/zone.dart:923:7)
    E/flutter (14499): #18     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:963:23)
    E/flutter (14499): #19     _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
    E/flutter (14499): #20     _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
    
    bug inactive 
    opened by estevez-dev 32
  • Failed to get location

    Failed to get location

    I'm getting the error when it calls

    .invokeMethod('getLocation')

    Future<Map<String, double>> get getLocation => _channel .invokeMethod('getLocation') .then((result) => result.cast<String, double>());

    inside location.dart.

    The message error is "Failed to get location" The app asks for permition.

    ============================================= (build.gradle)

    buildscript { repositories { google() jcenter() }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        classpath 'com.google.gms:google-services:3.1.2'
        classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.2-4'
    }
    

    }

    ============================================ (pubspec.yaml)

    dependencies: flutter: sdk: flutter image_picker: 0.4.1 google_sign_in: 3.0.2 firebase_analytics: 0.3.3 firebase_auth: 0.5.5 firebase_database: 0.4.6 firebase_storage: 0.3.0 cached_network_image: "^0.4.1" rxdart: ^0.16.7 cupertino_icons: ^0.1.0 photo_view: 0.0.2 flutter_map: ^0.0.1 location: 1.3.3 geohash: 0.1.1

    ============================================== (messages)

    Reloaded 3 of 651 libraries in 1.025ms.
    E/flutter ( 8349): [ERROR:topaz/lib/tonic/logging/dart_error.cc(16)] Unhandled exception:
    E/flutter ( 8349): PlatformException(ERROR, Failed to get location., null)
    E/flutter ( 8349): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:547:7)
    E/flutter ( 8349): #1      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:279:18)
    E/flutter ( 8349): <asynchronous suspension>
    E/flutter ( 8349): #2      Location.getLocation (package:location/location.dart:12:8)
    E/flutter ( 8349): #3      new ControllerLocation (package:flutter_chat/utils/geographic/ControllerLocation.dart:17:15)
    E/flutter ( 8349): #4      _MyMapWidgetState.build (package:flutter_chat/pages/map_screen.dart:96:30)
    E/flutter ( 8349): #5      StatefulElement.build (package:flutter/src/widgets/framework.dart:3730:27)
    E/flutter ( 8349): #6      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3642:15)
    E/flutter ( 8349): #7      Element.rebuild (package:flutter/src/widgets/framework.dart:3495:5)
    E/flutter ( 8349): #8      StatefulElement.update (package:flutter/src/widgets/framework.dart:3799:5)
    E/flutter ( 8349): #9      Element.updateChild (package:flutter/src/widgets/framework.dart:2699:15)
    E/flutter ( 8349): #10     RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:4379:32)
    E/flutter ( 8349): #11     MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4769:17)
    E/flutter ( 8349): #12     Element.updateChild (package:flutter/src/widgets/framework.dart:2699:15)
    E/flutter ( 8349): #13     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3653:16)
    E/flutter ( 8349): #14     Element.rebuild (package:flutter/src/widgets/framework.dart:3495:5)
    E/flutter ( 8349): #15     ProxyElement.update (package:flutter/src/widgets/framework.dart:3909:5)
    E/flutter ( 8349): #16     Element.updateChild (package:flutter/src/widgets/framework.dart:2699:15)
    E/flutter ( 8349): #17     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3653:16)
    E/flutter ( 8349): #18     Element.rebuild (package:flutter/src/widgets/framework.dart:3495:5)
    E/flutter ( 8349): #19     ProxyElement.update (package:flutter/src/widgets/framework.dart:3909:5)
    E/flutter ( 8349): #20     Element.updateChild (package:flutter/src/widgets/framework.dart:2699:15)
    E/flutter ( 8349): #21     RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:4379:32)
    E/flutter ( 8349): #22     MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4769:17)
    E/flutter ( 8349): #23     Element.updateChild (package:flutter/src/widgets/framework.dart:2699:15)
    E/flutter ( 8349): #24     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3653:16)
    E/flutter ( 8349): #25     Element.rebuild (package:flutter/src/widgets/framework.dart:3495:5)
    E/flutter ( 8349): #26     StatefulElement.update (package:flutter/src/widgets/framework.dart:3799:5)
    E/flutter ( 8349): #27     Element.updateChild (package:flutter/src/widgets/framework.dart:2699:15)
    E/flutter ( 8349): #28     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3653:16)
    E/flutter ( 8349): #29     Element.rebuild (package:flutter/src/widgets/framework.dart:3495:5)
    E/flutter ( 8349): #30     ProxyElement.update (package:flutter/src/widgets/framework.dart:3909:5)
    E/flutter ( 8349): #31     Element.updateChild (package:flutter/src/widgets/framework.dart:2699:15)
    E/flutter ( 8349): #32     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3653:16)
    E/flutter ( 8349): #33     Element.rebuild (package:flutter/src/widgets/framework.dart:3495:5)
    E/flutter ( 8349): #34     StatefulElement.update (package:flutter/src/widgets/framework.dart:3799:5)
    E/flutter ( 8349): #35     Element.updateChild (package:flutter/src/widgets/framework.dart:2699:15)
    E/flutter ( 8349): #36     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4661:14)
    E/flutter ( 8349): #37     Element.updateChild (package:flutter/src/widgets/framework.dart:2699:15)
    E/flutter ( 8349): #38     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3653:16)
    E/flutter ( 8349): #39     Element.rebuild (package:flutter/src/widgets/framework.dart:3495:5)
    E/flutter ( 8349): #40     StatelessElement.update (package:flutter/src/widgets/framework.dart:3702:5)
    E/flutter ( 8349): #41     Element.updateChild (package:flutter/src/widgets/framework.dart:2699:15)
    E/flutter ( 8349): #42     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4661:14)
    E/flutter ( 8349): #43     Element.updateChild (package:flutter/src/widgets/framework.dart:2699:15)
    E/flutter ( 8349): #44     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3653:16)
    E/flutter ( 8349): #45     Element.rebuild (package:flutter/src/widge
    
    opened by alexjuniodev 29
  • FlutterLocation.java:280: error: lambda expressions are not supported in -source 7

    FlutterLocation.java:280: error: lambda expressions are not supported in -source 7

    Describe the bug Getting this error when trying to build for location 4.2.2

    .pub-cache/hosted/pub.dartlang.org/location-4.2.0/android/src/main/java/com/lyokone/location/FlutterLocation.java:280: error: lambda expressions are not supported in -source 7 mMessageListener = (message, timestamp) -> { ^ (use -source 8 or higher to enable lambda expressions) 1 error

    Expected behavior Should build, as the project structure has the API level 11 support which includes lambda

    Tested on: N/A Build error

    Other plugins:

    • List of others Flutter plugins that could interfere

    Additional logs

    some logs
    
    bug 
    opened by accurithm 25
  • Crash on app start: java.lang.NullPointerException  java.lang.NullPointerException: Attempt to invoke virtual method 'io.flutter.plugin.common.PluginRegistry$RequestPermissionsResultListener

    Crash on app start: java.lang.NullPointerException java.lang.NullPointerException: Attempt to invoke virtual method 'io.flutter.plugin.common.PluginRegistry$RequestPermissionsResultListener

    Describe the bug Crash on app start

    Tested on:

    • OnePlus 8 Android 11 Real Device

    Additional logs

    E/AndroidRuntime(30049): java.lang.RuntimeException: Unable to destroy activity {com.nemorystudios.android.bluer.facebook/com.nemorystudios.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'io.flutter.plugin.common.PluginRegistry$RequestPermissionsResultListener com.lyokone.location.FlutterLocationService.g()' on a null object reference
    E/AndroidRuntime(30049): 	at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:5309)
    E/AndroidRuntime(30049): 	at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:5339)
    E/AndroidRuntime(30049): 	at android.app.ActivityThread.handleRelaunchActivityInner(ActivityThread.java:5631)
    E/AndroidRuntime(30049): 	at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:5561)
    E/AndroidRuntime(30049): 	at android.app.servertransaction.ActivityRelaunchItem.execute(ActivityRelaunchItem.java:69)
    E/AndroidRuntime(30049): 	at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
    E/AndroidRuntime(30049): 	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
    E/AndroidRuntime(30049): 	at android.app.ClientTransactionHandler.executeTransaction(ClientTransactionHandler.java:58)
    E/AndroidRuntime(30049): 	at android.app.ActivityThread.handleRelaunchActivityLocally(ActivityThread.java:5614)
    E/AndroidRuntime(30049): 	at android.app.ActivityThread.access$3700(ActivityThread.java:274)
    E/AndroidRuntime(30049): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2256)
    E/AndroidRuntime(30049): 	at android.os.Handler.dispatchMessage(Handler.java:106)
    E/AndroidRuntime(30049): 	at android.os.Looper.loop(Looper.java:233)
    E/AndroidRuntime(30049): 	at android.app.ActivityThread.main(ActivityThread.java:8010)
    E/AndroidRuntime(30049): 	at java.lang.reflect.Method.invoke(Native Method)
    E/AndroidRuntime(30049): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:631)
    E/AndroidRuntime(30049): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:978)
    E/AndroidRuntime(30049): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'io.flutter.plugin.common.PluginRegistry$RequestPermissionsResultListener com.lyokone.location.FlutterLocationService.g()' on a null object reference
    E/AndroidRuntime(30049): 	at com.lyokone.location.b.a(LocationPlugin.java:15)
    E/AndroidRuntime(30049): 	at com.lyokone.location.b.b(LocationPlugin.java:1)
    E/AndroidRuntime(30049): 	at com.lyokone.location.b.onDetachedFromActivityForConfigChanges(LocationPlugin.java:1)
    E/AndroidRuntime(30049): 	at io.flutter.embedding.engine.FlutterEnginePluginRegistry.detachFromActivityForConfigChanges(FlutterEnginePluginRegistry.java:5)
    E/AndroidRuntime(30049): 	at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onDetach(FlutterActivityAndFragmentDelegate.java:7)
    E/AndroidRuntime(30049): 	at io.flutter.embedding.android.FlutterFragment.onDetach(FlutterFragment.java:2)
    E/AndroidRuntime(30049): 	at androidx.fragment.app.Fragment.performDetach(Fragment.java:2)
    E/AndroidRuntime(30049): 	at androidx.fragment.app.g.a(FragmentManagerImpl.java:213)
    E/AndroidRuntime(30049): 	at androidx.fragment.app.g.l(FragmentManagerImpl.java:9)
    E/AndroidRuntime(30049): 	at androidx.fragment.app.g.a(FragmentManagerImpl.java:248)
    E/AndroidRuntime(30049): 	at androidx.fragment.app.g.c(FragmentManagerImpl.java:56)
    E/AndroidRuntime(30049): 	at androidx.fragment.app.g.d(FragmentManagerImpl.java:15)
    E/AndroidRuntime(30049): 	at androidx.fragment.app.d.c(FragmentController.java:1)
    E/AndroidRuntime(30049): 	at androidx.fragment.app.FragmentActivity.onDestroy(FragmentActivity.java:2)
    E/AndroidRuntime(30049): 	at android.app.Activity.performDestroy(Activity.java:8251)
    E/AndroidRuntime(30049): 	at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1364)
    E/AndroidRuntime(30049): 	at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:5294)
    E/AndroidRuntime(30049): 	... 16 more
    Application finished.
    Exited (sigterm)
    
    
    bug pinned 
    opened by oliverbytes 23
  • Background location tracking, when app closed

    Background location tracking, when app closed

    Thanks for the awesome library

    Please, add background location tracking So app closed but location tracking continue

    This approach do not really works: https://github.com/Lyokone/flutterlocation/wiki/Background-Location-Updates more over it require static handler function that is not practical

    new_feature inactive 
    opened by zs-dima 22
  • Error during app closing on android

    Error during app closing on android

    Describe the bug I'm getting the error below when I close my app.

    Tested on:

    • Android, API Level 29, simulator and real device

    Other plugins:

    • None, tested on new project with location version 3.2.1

    Error::

    E/AndroidRuntime( 5891): java.lang.RuntimeException: Unable to destroy activity {com.example.teste/com.example.teste.MainActivity}: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter activity
    E/AndroidRuntime( 5891):        at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4941)
    E/AndroidRuntime( 5891):        at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4970)
    E/AndroidRuntime( 5891):        at android.app.servertransaction.DestroyActivityItem.execute(DestroyActivityItem.java:44)
    E/AndroidRuntime( 5891):        at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
    E/AndroidRuntime( 5891):        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
    E/AndroidRuntime( 5891):        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
    E/AndroidRuntime( 5891):        at android.os.Handler.dispatchMessage(Handler.java:107)
    E/AndroidRuntime( 5891):        at android.os.Looper.loop(Looper.java:214)
    E/AndroidRuntime( 5891):        at android.app.ActivityThread.main(ActivityThread.java:7356)
    E/AndroidRuntime( 5891):        at java.lang.reflect.Method.invoke(Native Method)
    E/AndroidRuntime( 5891):        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
    E/AndroidRuntime( 5891):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
    E/AndroidRuntime( 5891): Caused by: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter activity
    E/AndroidRuntime( 5891):        at com.lyokone.location.FlutterLocationService.setActivity(Unknown Source:2)
    E/AndroidRuntime( 5891):        at com.lyokone.location.LocationPlugin.deinitialize(LocationPlugin.java:121)
    E/AndroidRuntime( 5891):        at com.lyokone.location.LocationPlugin.detachActivity(LocationPlugin.java:56)
    E/AndroidRuntime( 5891):        at com.lyokone.location.LocationPlugin.onDetachedFromActivity(LocationPlugin.java:69)
    E/AndroidRuntime( 5891):        at io.flutter.embedding.engine.FlutterEnginePluginRegistry.detachFromActivity(FlutterEnginePluginRegistry.java:346)
    E/AndroidRuntime( 5891):        at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onDetach(FlutterActivityAndFragmentDelegate.java:512)
    E/AndroidRuntime( 5891):        at io.flutter.embedding.android.FlutterActivity.onDestroy(FlutterActivity.java:577)
    E/AndroidRuntime( 5891):        at android.app.Activity.performDestroy(Activity.java:8048)
    E/AndroidRuntime( 5891):        at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1334)
    E/AndroidRuntime( 5891):        at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4926)
    E/AndroidRuntime( 5891):        ... 11 more```
    
    inactive 
    opened by carlosfiori 20
  • Error Building building app in debug and release

    Error Building building app in debug and release

    Suddenly my app is showing this error :

    FAILURE: Build failed with an exception.

    What went wrong:
    Could not determine the dependencies of task ':app:preDebugBuild'.
    
    Could not resolve all task dependencies for configuration ':app:debugCompileClasspath'.
    Could not resolve com.google.android.gms:play-services-location:15.+.
    Required by:
    project :app > project :location
    > Failed to list versions for com.google.android.gms:play-services-location.
    > Unable to load Maven meta-data from https://jcenter.bintray.com/com/google/android/gms/play-services-location/maven-metadata.xml.
    > Could not get resource 'https://jcenter.bintray.com/com/google/android/gms/play-services-location/maven-metadata.xml'.
    > Could not GET 'https://jcenter.bintray.com/com/google/android/gms/play-services-location/maven-metadata.xml'. Received status code 502 from server: Bad Gateway
    
    Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
    
    Get more help at https://help.gradle.org
    

    BUILD FAILED in 10s Finished with error: Gradle task assembleDebug failed with exit code 1

    question 
    opened by abumoallim 20
  • _locationService.getLocation() not returning anything on iPad.

    _locationService.getLocation() not returning anything on iPad.

    Describe the bug The _locationService.getLocation() is not returning anything on Ipad mini wifi model. The code gets to this line and after that, it never returns anything.

    Expected behavior _locationService.getLocation() should return location.

    Tested on:

    • Android - On Android, it's working fine.
    • iOS, Ipad mini 2018 wifi only model it's not working.

    Additional logs

    Code written

    try { _locationService.changeSettings( accuracy: LocationAccuracy.HIGH, ); currentLocation = await _locationService.getLocation(); return true; } catch (e) { print(e); if (e.code == 'PERMISSION_DENIED') { _locationService.requestPermission(); } else if (e.code == 'SERVICE_STATUS_DISABLED') { _locationService.requestService(); } currentLocation = null; return false; }

    inactive 
    opened by Shivamtruein 19
  • When the location service permission is given the LocationData doesn't seem to provide any data .

    When the location service permission is given the LocationData doesn't seem to provide any data .

    • When Location service dialog is shown and the user gives the permission even though the stream is being listened there is not data sent through the stream (no LocationData).
    • when the subscription is cancelled its doesn't unbind the location
    bug inactive 
    opened by Afsal102 18
  • Fix testing doc

    Fix testing doc

    Description

    Resolves https://github.com/Lyokone/flutterlocation/issues/790 by updating the testing docs to a solution that works. (if you import the required packages)

    Type of Change

    • [ ] ✨ New feature (non-breaking change which adds functionality)
    • [ ] 🛠️ Bug fix (non-breaking change which fixes an issue)
    • [ ] ❌ Breaking change (fix or feature that would cause existing functionality to change)
    • [ ] 🧹 Code refactor
    • [ ] ✅ Build configuration change
    • [x] 📝 Documentation
    • [ ] 🗑️ Chore
    opened by Leffe108 0
  • Unable to call setLocationInstance in test

    Unable to call setLocationInstance in test

    Description I tried to follow the instructions on how to mock in tests however, the setLocationInstance doesn't seem to exist in the location package.

    Expected behavior I expect that there is a way to tell Location to use the mock instance.

    Steps To Reproduce

    Get flutter 3.3.10 (current stable)

    flutter create mock_loc
    cd mock_loc
    

    Create test/loc_test.dart with the code below. It is based of the documentation, but had some fixes:

    • import of location_platfrom_interface package since LocationPlatform is defined there
    • use LocationData.fromMap factory as there is no unnamed constructor
    import 'package:flutter_test/flutter_test.dart';
    import 'package:location/location.dart';
    import 'package:location_platform_interface/location_platform_interface.dart';
    import 'package:mocktail/mocktail.dart';
    
    class MockLocationPlatform extends Mock implements LocationPlatform {}
    
    void main() {
      testWidgets('get location ...', (tester) async {
        final mock = MockLocationPlatform();
    
        when(mock.getLocation).thenAnswer(
          (invocation) async => LocationData.fromMap({'latitude': 42, 'longitude': 2}),
        );
    
        setLocationInstance(mock);
      });
    }
    

    The line setLocationInstance(mock); does not compile because setLocationInstance is not defined. I tried to search the source code of the plugin to figure out if it has a new import path, but there is no such method in the plugin. Is there an alternative way available to set the instance?

    Tested on:

    • flutter test, flutter version 3.3.10

    Other plugins:

    • location: ^4.4.0
    • location_platform_interface: ^2.3.0
    • mocktail: ^0.3.0
    bug 
    opened by Leffe108 1
  • [iOS]

    [iOS] "UI unresponsiveness" warning when run on iOS 16 device

    Description

    Using package location version 4.4.0, there is a warning when run on an iOS 16 device:

    [CoreLocation] This method can cause UI unresponsiveness if invoked on the main thread.
    Instead, consider waiting for the `-locationManagerDidChangeAuthorization:` callback
    and checking `authorizationStatus` first.
    

    So far it appears the location service is still working, although a warning about UI unresponsiveness is quite disconcerting.

    Expected behavior

    No warnings when run.

    Steps To Reproduce

    1. Run an app using package location version 4.4.0 on a device running iOS 16.

    Tested on:

    • iOS 16 device
    bug 
    opened by cbatson 0
  • fix: Location plugin is incompatible with latest play-services-location

    fix: Location plugin is incompatible with latest play-services-location

    Description The plugin is incompatible with the latest com.google.android.gms:play-services-location, 21.0.1.

    Expected behavior The app runs.

    Steps To Reproduce

    1. Install the plugin
    2. Add / change implementation "com.google.android.gms:play-services-location:21.0.1" in your app's build.gradle dependencies
    3. Try to launch app

    Tested on:

    • Android, API Level 33, emulator
    • Android, API Level 28 (Android 9.0), real device

    Other plugins:

    • None that I think could interfere

    Additional logs

    java.lang.IncompatibleClassChangeError: Found interface com.google.android.gms.location.FusedLocationProviderClient, but class was expected (declaration of 'com.google.android.gms.location.FusedLocationProviderClient' appears in /data/app/~~Btvdfhqi95-Fg_senEQppw==/nl.paytree.paytree_pos-HAQsmK9UNgM5XqakyhO3nA==/base.apk)
    E/AndroidRuntime(21578): 	at com.lyokone.location.FlutterLocation.createLocationCallback(FlutterLocation.java:219)
    E/AndroidRuntime(21578): 	at com.lyokone.location.FlutterLocation.changeSettings(FlutterLocation.java:197)
    E/AndroidRuntime(21578): 	at com.lyokone.location.MethodCallHandlerImpl.onChangeSettings(MethodCallHandlerImpl.java:106)
    E/AndroidRuntime(21578): 	at com.lyokone.location.MethodCallHandlerImpl.onMethodCall(MethodCallHandlerImpl.java:40)
    E/AndroidRuntime(21578): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:262)
    E/AndroidRuntime(21578): 	at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(DartMessenger.java:295)
    E/AndroidRuntime(21578): 	at io.flutter.embedding.engine.dart.DartMessenger.lambda$dispatchMessageToQueue$0$io-flutter-embedding-engine-dart-DartMessenger(DartMessenger.java:319)
    E/AndroidRuntime(21578): 	at io.flutter.embedding.engine.dart.DartMessenger$$ExternalSyntheticLambda0.run(Unknown Source:12)
    E/AndroidRuntime(21578): 	at android.os.Handler.handleCallback(Handler.java:942)
    E/AndroidRuntime(21578): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    E/AndroidRuntime(21578): 	at android.os.Looper.loopOnce(Looper.java:201)
    E/AndroidRuntime(21578): 	at android.os.Looper.loop(Looper.java:288)
    E/AndroidRuntime(21578): 	at android.app.ActivityThread.main(ActivityThread.java:7872)
    E/AndroidRuntime(21578): 	at java.lang.reflect.Method.invoke(Native Method)
    E/AndroidRuntime(21578): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
    E/AndroidRuntime(21578): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
    
    bug 
    opened by Ghoelian 1
  • fix: Flutter 3 Kotlin Version is not high enough (1.4.20)

    fix: Flutter 3 Kotlin Version is not high enough (1.4.20)

    Newer Gradle + Kotlin updates require newer options, this should be 1.5.20 or higher to match other Flutter 3 apps

    buildscript {
        ext.kotlin_version = '1.4.20'
        repositories {
            google()
            mavenCentral()
        }
    

    Error:

    
    Launching lib\main.dart on sdk gphone64 x86 64 in debug mode...
    Running Gradle task 'assembleDebug'...
    
    FAILURE: Build failed with an exception.
    
    * What went wrong:
    The Android Gradle plugin supports only Kotlin Gradle plugin version 1.5.20 and higher.
    The following dependencies do not satisfy the required version:
    project ':location' -> org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.20
    
    bug 
    opened by jpetro416 0
  • Cant Run flutter build apk - error location

    Cant Run flutter build apk - error location

    The whole code was working good last week, and now I try to open the same project and run flutter build apk

    It shows below error

    FAILURE: Build failed with an exception.
    
    * What went wrong:
    A problem occurred configuring project ':location'.
    > Could not load compiled classes for build file 'D:\flutter\.pub-cache\hosted\pub.dartlang.org\location-4.4.0\android\build.gradle' from cache.
    > Failed to notify project evaluation listener.
       > Could not get unknown property 'android' for project ':location' of type org.gradle.api.Project.
       > Could not get unknown property 'android' for project ':location' of type org.gradle.api.Project.
    * Try:
    ore log output. Run with --scan to get full insights.
    * Get more help at https://help.gradle.org
    BUILD FAILED in 16s
    Gradle task assembleRelease failed with exit code 1
    
    Doctor summary (to see all details, run flutter doctor -v):
    US)
    [√] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
    [√] Chrome - develop for the web
    [√] Visual Studio - develop for Windows (Visual Studio Community 2022 17.3.6)
    [√] Android Studio (version 2021.3)
    [√] Connected device (3 available)
    [√] HTTP Host Availability
    
    • No issues found!
    
    bug 
    opened by ebofi 0
Releases(location-v4.2.3)
  • location-v4.2.3(Jun 9, 2021)

  • location-v4.2.2(Jun 8, 2021)

  • location-v4.2.1(Jun 7, 2021)

  • location-v4.2.0(Jun 7, 2021)

    • REFACTOR: remove Android strings.
    • REFACTOR: extract background notification logic to separate class.
    • FIX: wait 2 location updates to make sure that the last knwown position isn't returned instantly #549.
    • FIX: fix the depreciation warning on android #550.
    • FIX: improve changeSettings to be applied immediatly.
    • FEAT: add several information to resolve #552.
    • FEAT: add several information to resolve #552.
    • FEAT: better listen example to prevent infinite location request.
    • FEAT: fix typos.
    • FEAT: add ios requirements.
    • FEAT: improve example app.
    • FEAT: separate result variables to prevent result override.
    • FEAT: add isMock information on LocationData.
    • FEAT: add fallback for LocationAccuracy.reduced on Android.
    • FEAT: add option to reopen app from notification.
    • FEAT: allow for customizing Android notification text, subtext and color.
    • FEAT: update example app to showcase Android notification options.
    • FEAT: allow for customizing Android background notification from dart.
    • FEAT: handle notification changes in Android MethodCallHandler.
    • FEAT: return notification and channel id when changing options.
    • DOCS: update readme web.
    • CHORE: publish packages.
    • CHORE: publish packages.
    • CHORE: publish packages.
    • CHORE: publish packages.
    • CHORE: publish packages.
    Source code(tar.gz)
    Source code(zip)
  • v4.0.0(Mar 4, 2021)

  • v3.1.0(Nov 16, 2020)

  • v3.0.2(Apr 3, 2020)

    Improve code coverage Fix a bug when requesting permission using an intent (thanks to kennethj) Fix a bug when onDetachedFromActivity is called (thanks to creativepsyco)

    Source code(tar.gz)
    Source code(zip)
  • v3.0.1(Mar 28, 2020)

  • v3.0.0(Mar 28, 2020)

    Add Web and macOS as new supported platforms (huge thanks to long1eu) [BREAKING] Enums are now following Dart guidelines. [BREAKING] onLocationChanged is now a getter to follow Dart guidelines.

    Source code(tar.gz)
    Source code(zip)
  • v2.5.4(Mar 11, 2020)

    Update documentation Fix: Airplane mode was preventing location from being requested Fix: Not crashing when activity is not set on Android

    Source code(tar.gz)
    Source code(zip)
  • v2.5.3(Feb 26, 2020)

  • v2.5.2(Feb 26, 2020)

Owner
Guillaume Bernos
Flutter Software Engineer @bamlab
Guillaume Bernos
A Flutter package for iOS and Android for picking location and images.

location and image picker package for Flutter A Flutter package for iOS and Android for picking location and images. Demo Installation First, add loca

sk shamimul islam 9 Sep 28, 2022
flutter_map plugin to request and display the users location and heading on the map

The plugin is discontinued. Feel free to fork it or checkout similar plugins. Flutter Map – Location plugin A flutter_map plugin to request and displa

Fabian Rosenthal 19 Oct 11, 2022
A Flutter example to use Google Maps in iOS and Android apps via the embedded Google Maps plugin Google Maps Plugin

maps_demo A Flutter example to use Google Maps in iOS and Android apps via the embedded Google Maps plugin Google Maps Plugin Getting Started Get an A

Gerry High 41 Feb 14, 2022
An Android App, which lets you work on Location Data, built with :heart: using Flutter

locatorz A Simple Flutter based Android Application to work with Location based Data ;) Documentation :: Work in Progress :) Screenshots :: Screen Rec

Anjan Roy 31 Aug 23, 2022
DinoRide allows you to book a trip and have dinosaurs deliver you to your desired location!

DinoRide ?? Inspiration We wanted to reimagine a modern app in a prehistoric context. We thought a taxi service but with dinosaurs would have been fun

Westdale Software Dev Club 1 Jun 30, 2022
A Flutter plugin which provides 'Picking Place' using Google Maps widget

Google Maps Places Picker Refractored This is a forked version of google_maps_place_picker package, with added custom styling and features.

Varun 5 Nov 13, 2022
Flutter geolocation plugin for Android and iOS.

geolocation Flutter geolocation plugin for Android API 16+ and iOS 9+. Features: Manual and automatic location permission management Current one-shot

Loup 222 Jan 2, 2023
Android and iOS Geolocation plugin for Flutter

Flutter geolocator plugin The Flutter geolocator plugin is build following the federated plugin architecture. A detailed explanation of the federated

Baseflow 1k Jan 5, 2023
Android and iOS Geolocation plugin for Flutter

Flutter geolocator plugin The Flutter geolocator plugin is build following the federated plugin architecture. A detailed explanation of the federated

Baseflow 891 Nov 14, 2021
Android and iOS Geolocation plugin for Flutter

Flutter geolocator plugin The Flutter geolocator plugin is build following the federated plugin architecture. A detailed explanation of the federated

Baseflow 1k Dec 27, 2022
A Flutter plugin for integrating Google Maps in iOS, Android and Web applications

flutter_google_maps A Flutter plugin for integrating Google Maps in iOS, Android and Web applications. It is a wrapper of google_maps_flutter for Mobi

MarchDev Toolkit 86 Sep 26, 2022
Flutter Tutorial - Google Map with Live Location Tracking

Flutter Tutorial - Google Map with Live Location Tracking Build Google Map app with Live Location Tracking in Flutter. ✌   App Preview Android Preview

Samuel Adekunle 10 Dec 22, 2022
Location picker for Flutter.

Flutter Place Picker The missing location picker made in Flutter for Flutter. With dark theme and custom localization support. ⚠️ Please note: This li

Degreat 143 Dec 6, 2022
🌍 Map location picker component for flutter Based on google_maps_flutter

google_map_location_picker Location picker using the official google_maps_flutter. I made This plugin because google deprecated Place Picker. Using Pu

Ibrahim Eid 189 Dec 5, 2022
Flutter application to share location with a group. (under development)

Beacon About the Project This project is a flutter build native interface to ease the group travelling (or hiking). By using this, the group leader wo

CCExtractor Development 29 Nov 30, 2022
Flow is a water source location app that helps students of the University of Bamenda, Bambili to find/locate clean water sources.

Flow is a water source location mobile app that helps students of the University of Bamenda, Cameroon to find/locate clean water sources.

DSC UBa 12 Oct 21, 2022
Dart API that provides sunset and sunrise times for a given latitude and longitude

Sunrise Sunset Dart API that provides sunset and sunrise times for a given latit

Asjad 0 Dec 24, 2021
Localizator is a flutter application that provides your current/given position,and gives you weather Forecasts

Locativity Locativity is a flutter application implements flutter_map and Geolocator plugins to provide your current/given position then render it on

Houssemeddine Souissi 48 Nov 6, 2022
Localizator is a flutter application that provides your current/given position,and gives you weather Forecasts

Locativity Locativity is a flutter application implements flutter_map and Geolocator plugins to provide your current/given position then render it on

Houssemeddine Souissi 48 Nov 6, 2022