Skip to content

BackgroundFetchConfig

Configuration object passed to BackgroundFetch.configure.

minimumFetchInterval

int? minimumFetchInterval

The minimum interval in minutes between background-fetch events. Defaults to 15 minutes. The minimum allowed value is 15 minutes.

Note

The OS does not guarantee fetch events will fire at exactly this interval. iOS adjusts timing based on usage patterns and battery state. This is a minimum hint, not a precise schedule.

Example

BackgroundFetch.configure(BackgroundFetchConfig(
  minimumFetchInterval: 15,
), (String taskId) async {
  BackgroundFetch.finish(taskId);
});

Android-only constraints

The following options apply to Android only.

enableHeadless Android only

bool? enableHeadless

Set true to enable the headless mechanism for handling fetch events after app termination. Defaults to false.

Note

Requires stopOnTerminate false.

📂 lib/main.dart:

import 'package:flutter/material.dart';
import 'package:background_fetch/background_fetch.dart';

// This "Headless Task" is run when the app is terminated.
// Must be a top-level or static function.
@pragma('vm:entry-point')
void backgroundFetchHeadlessTask(HeadlessEvent task) async {
  String taskId = task.taskId;
  bool isTimeout = task.timeout;
  if (isTimeout) {
    // This task has exceeded its allowed running-time.
    print("[BackgroundFetch] Headless TIMEOUT: $taskId");
    BackgroundFetch.finish(taskId);
    return;
  }
  print("[BackgroundFetch] Headless event received: $taskId");
  BackgroundFetch.finish(taskId);
}

void main() {
  runApp(MyApp());

  // Register to receive BackgroundFetch events after app is terminated.
  // Requires {stopOnTerminate: false, enableHeadless: true}
  BackgroundFetch.registerHeadlessTask(backgroundFetchHeadlessTask);
}

forceAlarmManager Android only

bool? forceAlarmManager

Force the use of Android's AlarmManager API instead of JobScheduler. Defaults to false.

By default the plugin uses JobScheduler on API 21+ and falls back to AlarmManager on older devices. Set true to force AlarmManager regardless of API level.

Note

AlarmManager bypasses the scheduling optimisations of JobScheduler and is less battery-efficient. Use it only when JobScheduler does not meet your timing requirements.

requiredNetworkType Android only

int? requiredNetworkType

Specify the kind of network connectivity required to run this task. Defaults to NetworkType.NETWORK_TYPE_NONE (no network required).

If the required network type is unavailable, the task will not run until the constraint is satisfied.

Value Constant Description
0 NetworkType.NETWORK_TYPE_NONE No network constraint.
1 NetworkType.NETWORK_TYPE_ANY Any active network connection.
2 NetworkType.NETWORK_TYPE_CELLULAR Cellular (mobile data) connection.
3 NetworkType.NETWORK_TYPE_UNMETERED Unmetered (e.g. Wi-Fi) connection.
4 NetworkType.NETWORK_TYPE_NOT_ROAMING Non-roaming connection.

On iOS, use TaskConfig.requiresNetworkConnectivity instead. Example

BackgroundFetch.scheduleTask(TaskConfig(
  taskId: 'com.foo.sync',
  delay: 60000,
  requiredNetworkType: BackgroundFetch.NETWORK_TYPE_UNMETERED,
));

requiresBatteryNotLow Android only

bool? requiresBatteryNotLow

Set true to require the device's battery level to be above the "low battery" threshold before running this task. Defaults to false.

requiresCharging Android only

bool? requiresCharging

Set true to require the device to be charging (or connected to permanent power) before running this task. Defaults to false.

requiresDeviceIdle Android only

bool? requiresDeviceIdle

Set true to require the device to be idle (not actively used) before running this task. Defaults to false.

This is a good option for resource-intensive tasks. Battery usage is still attributed to your app and surfaced to the user in battery stats.

requiresStorageNotLow Android only

bool? requiresStorageNotLow

Set true to require the device's available storage to be above the "low storage" threshold before running this task. Defaults to false.

startOnBoot Android only

bool? startOnBoot

Set true to resume background-fetch events when the device is rebooted. Defaults to false.

Note

Requires stopOnTerminate false.

stopOnTerminate Android only

bool? stopOnTerminate

Set false to continue receiving background-fetch events after the user terminates the app. Defaults to true.

Note

startOnBoot requires stopOnTerminate: false.

Example

BackgroundFetch.configure(BackgroundFetchConfig(
  stopOnTerminate: false,
  startOnBoot: true,
  enableHeadless: true,
), (String taskId) async {
  BackgroundFetch.finish(taskId);
});