The most sophisticated background location-tracking & geofencing module with battery-conscious motion-detection intelligence for iOS and Android.
The plugin’s Philosophy of Operation is to use motion-detection APIs (using accelerometer, gyroscope and magnetometer) to detect when the device is moving and stationary.
When the device is detected to be moving, the plugin will automatically start recording a location according to the configured distanceFilter
(meters).
When the device is detected be stationary, the plugin will automatically turn off location-services to conserve energy.
Also available for Cordova, React Native, NativeScript and pure native apps.
The Android module requires purchasing a license. However, it will work for DEBUG builds. It will not work with RELEASE builds without purchasing a license.
(2018) This plugin is supported full-time and field-tested daily since 2013.
📂 pubspec.yaml
:
Note: See Versions for latest available version.
dependencies:
flutter_background_geolocation: '^1.9.0'
dependencies:
flutter_background_geolocation:
git:
url: https://github.com/transistorsoft/flutter_background_geolocation.git
import 'package:flutter_background_geolocation/flutter_background_geolocation.dart' as bg;
⚠️ Note as bg
in the import
. This is important to namespace the plugin’s classes, which often use common class-names such as Location
, Config
, State
. You will access every flutter_background_geolocation
class with the prefix bg
(ie: “background geolocation”).
There are three main steps to using BackgroundGeolocation
:
#ready
.#start
the plugin.import 'package:flutter_background_geolocation/flutter_background_geolocation.dart' as bg;
class _MyHomePageState extends State<MyHomePage> {
@override
void initState() {
super.initState();
////
// 1\. Listen to events (See docs for all 12 available events).
//
// Fired whenever a location is recorded
bg.BackgroundGeolocation.onLocation((bg.Location location) {
print('[location] - $location');
});
// Fired whenever the plugin changes motion-state (stationary->moving and vice-versa)
bg.BackgroundGeolocation.onMotionChange((bg.Location location) {
print('[motionchange] - $location');
});
// Fired whenever the state of location-services changes. Always fired at boot
bg.BackgroundGeolocation.onProviderChange((bg.ProviderChangeEvent event) {
print('[providerchange] - $event');
});
////
// 2\. Configure the plugin
//
bg.BackgroundGeolocation.ready(bg.Config(
desiredAccuracy: bg.Config.DESIRED_ACCURACY_HIGH,
distanceFilter: 10.0,
stopOnTerminate: false,
startOnBoot: true,
debug: true,
logLevel: bg.Config.LOG_LEVEL_VERBOSE
)).then((bg.State state) {
if (!state.enabled) {
////
// 3\. Start the plugin.
//
bg.BackgroundGeolocation.start();
}
});
}
}
⚠️ Do not execute any API method which will require accessing location-services until the callback to **#ready*
executes (eg: #getCurrentPosition
, #watchPosition
, #start
).
A fully-featured Demo App is available in the repo in the /example
folder.
A simple Node-based web-application with SQLite database is available for field-testing and performance analysis. If you’re familiar with Node, you can have this server up-and-running in about one minute.
Author: transistorsoft
Demo: https://www.transistorsoft.com/shop/products/flutter-background-geolocation
Source Code: https://github.com/transistorsoft/flutter_background_geolocation
#flutter #dart #mobile-apps