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 location on Android and iOS. It also provides callbacks when location is changed.

Youtube Video

Getting Started

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

dependencies:
  location: ^4.0.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 may need to follow this.

To use location background mode on Android you have to use the enableBackgroundMode({bool enable}) API before trying to access location in the background and add nescessary permissions. You should place the required permissions in your applications <your-app>/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 background location. From 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 and this should be explained to the user on a separate UI that redirects user to 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 :

NSLocationWhenInUseUsageDescription
NSLocationAlwaysUsageDescription

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 manually Location Service status and Permission status.

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 app is in the background and gets location, blue system bar notifies User about updates. Tapping on this bar moves 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
}


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 59
  • 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: Could not get unknown property 'android' for project ':location' of type org.gradle.api.Project.

    fix: Could not get unknown property 'android' for project ':location' of type org.gradle.api.Project.

    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.

    bug 
    opened by francbiita 0
  • 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 1
  • 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 1
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
Software Engineer @ Matters
Guillaume Bernos
Flutter Downloader - A plugin for creating and managing download tasks. Supports iOS and Android. Maintainer: @hnvn

Flutter Downloader A plugin for creating and managing download tasks. Supports iOS and Android. This plugin is based on WorkManager in Android and NSU

Flutter Community 789 Jan 3, 2023
File picker plugin for Flutter, compatible with both iOS & Android and desktop (go-flutter).

File Picker A package that allows you to use the native file explorer to pick single or multiple files, with extensions filtering support. Currently s

Miguel Ruivo 985 Jan 5, 2023
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 221 Dec 27, 2022
A Flutter plugin for displaying local notifications on Android, iOS and macOS

Flutter Local Notifications plugin This repository consists hosts the following packages flutter_local_notifications: code for the cross-platform faci

Michael Bui 2.1k Dec 30, 2022
Android and iOS Geolocation plugin for Flutter

Flutter Geolocator Plugin A Flutter geolocation plugin which provides easy access to platform specific location services (FusedLocationProviderClient

Baseflow 1k Jan 5, 2023
Flutter Plugin for AR (Augmented Reality) - Supports ARKit on iOS and ARCore on Android devices

ar_flutter_plugin Flutter Plugin for AR (Augmented Reality) - Supports ARKit for iOS and ARCore for Android devices. Many thanks to Oleksandr Leuschen

Lars Carius 222 Jan 4, 2023
Telegram stickers importing Flutter plugin for iOS and Android

TelegramStickersImport — Telegram stickers importing Flutter plugin for iOS and Android TelegramStickersImport helps your users import third-party pro

Iurii Dorofeev 20 Dec 3, 2022
Plugin to retrieve a persistent UDID across app reinstalls on iOS and Android.

flutter_udid Plugin to retrieve a persistent UDID across app reinstalls on iOS and Android. Getting Started import 'package:flutter_udid/flutter_udid.

Leon Kukuk 183 Dec 21, 2022
Support to update the app badge on the launcher (both for Android and iOS)

Flutter App Badger plugin This plugin for Flutter adds the ability to change the badge of the app in the launcher. It supports iOS and some Android de

Edouard Marquez 258 Dec 25, 2022
A Flutter plugin that allows you to add an inline webview, to use a headless webview, and to open an in-app browser window.

Flutter InAppWebView Plugin A Flutter plugin that allows you to add an inline webview, to use an headless webview, and to open an in-app browser windo

Lorenzo Pichilli 2.3k Jan 8, 2023
A Flutter plugin that allows you to check if an app is installed/enabled, launch an app and get the list of installed apps.

Flutter AppAvailability Plugin A Flutter plugin that allows you to check if an app is installed/enabled, launch an app and get the list of installed a

Lorenzo Pichilli 89 Dec 2, 2022
A lightweight Flutter plugin for making payments and printing on MyPos

my_poster ?? my_poster is in beta - please provide feedback (and/or contribute) if you find issues ??️ A lightweight Flutter plugin for making payment

Antonio Mentone 3 Oct 10, 2022
Flutter library for iOS Widgets Extensions. Integrate a Widget into your App 🍏📱

flutter_widgetkit Flutter Library for the iOS ?? WidgetKit framework and Widget Communication Table of Contents ?? Introduction ??‍?? Installation ??‍

Fasky 227 Dec 31, 2022
Plugin to access VPN service for Flutter | Flutter 的 VPN 插件

Flutter VPN plugin This plugin help developers to access VPN service in their flutter app. 本插件帮助开发者在自己的应用内调用 VPN 服务。 The Android part was implemented

Xdea 277 Dec 28, 2022
Community WebView Plugin - Allows Flutter to communicate with a native WebView.

NOTICE We are working closely with the Flutter Team to integrate all the Community Plugin features in the Official WebView Plugin. We will try our bes

Flutter Community 1.4k Jan 7, 2023
Use dynamic and beautiful card view pagers to help you create great apps.

Use dynamic and beautiful card view pagers to help you create great apps. Preview New Feature v1.3.0 Change Alignment Left Center(Default) Right v1.4.

Jeongtae Kim 84 Dec 6, 2022
A Flutter plugin to easily handle realtime location in iOS and Android. Provides settings for optimizing performance or battery.

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

Guillaume Bernos 953 Dec 22, 2022
Battery+ is an open source battery info and device info for Android.

Battery+ Battery+ is an open source battery info and device info for Android.

Keshav Pratap K 1 Sep 26, 2022
A Flutter package which can be used to make polylines(route) from a source to a destination, and also handle a driver's realtime location (if any) on the map.

GoogleMapsWidget For Flutter A widget for flutter developers to easily integrate google maps in their apps. It can be used to make polylines from a so

Rithik Bhandari 14 Nov 30, 2022