60 lines
1.6 KiB
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);
|
|
});
|
|
}
|