AppConfig class

Application & lifecycle configuration.

AppConfig groups options that control how the SDK integrates with your app’s lifecycle: start/stop behavior on terminate and reboot, headless/background behavior, periodic heartbeats, scheduler windows, foreground notification, and the Android background-permission rationale dialog.

Use this class via Config.app.

BackgroundGeolocation.ready(Config(
  app: AppConfig(
    stopOnTerminate: false,
    startOnBoot: true,
  }
));

What belongs in AppConfig?

Platform notes

iOS

  • With AppConfig.stopOnTerminate set to false, the SDK creates a stationary geofence and iOS will relaunch your app in the background upon exiting that region.
  • AppConfig.preventSuspend is required for heartbeats and has a battery cost. Use sparingly.

Android

Examples

Configure once at startup:

import 'package:flutter_background_geolocation/flutter_background_geolocation.dart' as bg;

void main() async {
  final config = bg.Config(
    app: bg.AppConfig(
      stopOnTerminate: false,
      startOnBoot: true,
      enableHeadless: true,
      heartbeatInterval: 60,
      backgroundPermissionRationale: bg.PermissionRationale(
        title: "Allow {applicationName} to access this device's location even when the app is closed or not in use.",
        message: "This app collects location data to enable recording your trips to work and calculate distance-travelled.",
        positiveAction: 'Change to "{backgroundPermissionOptionLabel}"',
        negativeAction: 'Cancel',
      ),
      notification: bg.Notification(
        title: 'Background Geolocation',
        text: 'Tracking location',
        smallIcon: 'mipmap/ic_launcher',
      ),
      schedule: [ '1-5 09:00-17:00' ], // Weekdays 9–5
      scheduleUseAlarmManager: true,
    ),
  );

  await bg.BackgroundGeolocation.ready(config);
}

Update later at runtime:

await bg.BackgroundGeolocation.setConfig(bg.Config(
  app: bg.AppConfig(
    heartbeatInterval: 120, // slow down heartbeats
  ),
));

Migration from flat Config properties

The following legacy properties are deprecated on Config and should now be set via Config.app: Config.stopOnTerminate, Config.startOnBoot, Config.enableHeadless, Config.heartbeatInterval, Config.schedule, Config.scheduleUseAlarmManager, Config.notification, Config.backgroundPermissionRationale.

Constructors

AppConfig({bool? stopOnTerminate, bool? startOnBoot, bool? enableHeadless, double? heartbeatInterval, List<String>? schedule, bool? scheduleUseAlarmManager, Notification? notification, PermissionRationale? backgroundPermissionRationale, bool? preventSuspend})
const
AppConfig.fromMap(Map<String, dynamic> m)
factory

Properties

backgroundPermissionRationale PermissionRationale?
(Android 11+) Configure the dialog presented to the user when Always location permission is requested.
final
enableHeadless bool?
[Android only] Enables "Headless" operation allowing you to respond to events after you app has been terminated with AppConfig.stopOnTerminate:false.
final
hashCode int
The hash code for this object.
no setterinherited
heartbeatInterval double?
Controls the rate (in seconds) the BackgroundGeolocation.onHeartbeat event will fire.
final
notification Notification?
(Android only) The Android operating system requires a persistent notification when running a foreground service.
final
preventSuspend bool?
[iOS only] Prevent iOS from suspending your application in the background after location-services have been switched off.
final
runtimeType Type
A representation of the runtime type of the object.
no setterinherited
schedule List<String>?
Configures an automated, cron-like schedule for the SDK to BackgroundGeolocation.start / BackgroundGeolocation.stop tracking at pre-defined times.
final
scheduleUseAlarmManager bool?
Android only Force the Android scheduler to use AlarmManager (more precise) instead of JobScheduler. Defaults to false.
final
startOnBoot bool?
Controls whether to resume location-tracking after device is rebooted.
final
stopOnTerminate bool?
Controls whether to continue location-tracking after application is terminated.
final

Methods

noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
toMap() Map<String, dynamic>
toString() String
A string representation of this object.
inherited

Operators

operator ==(Object other) bool
The equality operator.
inherited