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); }); }