Files
dragon_ledger/lib/Controller/background_task_controller.dart

60 lines
1.6 KiB
Dart

import 'dart:async';
import 'dart:io';
import 'dart:isolate';
import 'package:flutter/services.dart';
import 'package:workmanager/workmanager.dart';
import '../Tasks/generate_transactions_task.dart';
import 'port_controller.dart';
/// Erstellt Hintergrundtasks und führt diese aus
class BackgroundTaskController {
/// Erstellt eine neue Instanz dieser Klasse
BackgroundTaskController() {
if (Platform.isAndroid) {
unawaited(Workmanager().initialize(callbackDispatcher));
unawaited(
Workmanager().registerPeriodicTask(
'generate-transactions',
'generate_transactions',
frequency: const Duration(minutes: 30),
initialDelay: const Duration(minutes: 1),
),
);
} else {
unawaited(
Isolate.run(() async {
sleep(const Duration(minutes: 1));
while (true) {
final RootIsolateToken? rootIsolateToken = await PortController()
.getRootIsolateToken();
if (rootIsolateToken != null) {
BackgroundIsolateBinaryMessenger.ensureInitialized(
rootIsolateToken,
);
await GenerateTransactionsTask().execute();
}
sleep(const Duration(minutes: 30));
}
}),
);
}
}
}
/// Die Funktion wird von Hintergrundtasks ausgerufen, um diese auszuführen
@pragma('vm:entry-point')
void callbackDispatcher() {
Workmanager().executeTask((final task, final inputData) {
switch (task) {
case 'generate_transactions':
return GenerateTransactionsTask().execute();
}
return Future.value(true);
});
}