30 lines
1.2 KiB
Dart
30 lines
1.2 KiB
Dart
import 'package:workmanager/workmanager.dart';
|
||
|
||
import '../../models/home_config.dart';
|
||
import '../../services/geofence_worker.dart';
|
||
|
||
/// Синхронизировать состояние фонового таска с настройками домов.
|
||
/// Вызывать при старте приложения и при изменении настроек.
|
||
///
|
||
/// Если хотя бы один дом имеет geofenceReady -- регистрируем
|
||
/// периодический таск. Иначе -- отменяем.
|
||
Future<void> syncGeofenceTask(List<HomeConfig> homes) async {
|
||
final needGeofence = homes.any((h) => h.geofenceReady);
|
||
|
||
if (needGeofence) {
|
||
await resetGeofenceFired();
|
||
|
||
await Workmanager().registerPeriodicTask(
|
||
geofenceTaskUniqueName,
|
||
geofenceTaskName,
|
||
frequency: const Duration(minutes: 15),
|
||
constraints: Constraints(networkType: NetworkType.connected),
|
||
existingWorkPolicy: ExistingPeriodicWorkPolicy.replace,
|
||
backoffPolicy: BackoffPolicy.linear,
|
||
backoffPolicyDelay: const Duration(minutes: 1),
|
||
);
|
||
} else {
|
||
await Workmanager().cancelByUniqueName(geofenceTaskUniqueName);
|
||
}
|
||
}
|