Feat: Erstellt die Möglichkeit, Tasks als Hintergrundprozesse auszuführen
This commit is contained in:
59
lib/Controller/background_task_controller.dart
Normal file
59
lib/Controller/background_task_controller.dart
Normal file
@@ -0,0 +1,59 @@
|
||||
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);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user