TF-1842: Trigger handleBackgroundTask when finish task on WorkObserver

(cherry picked from commit 36c2826c1d84d76fc76dda278b4d1ef33ecab2b1)
This commit is contained in:
HuyNguyen
2023-05-31 21:56:10 +07:00
committed by Dat Vu
parent fa5606ab24
commit 0556445f97
4 changed files with 56 additions and 26 deletions
@@ -1,4 +1,4 @@
import 'dart:async';
import 'package:collection/collection.dart';
import 'package:core/utils/app_logger.dart';
import 'package:tmail_ui_user/features/offline_mode/config/work_manager_constants.dart';
@@ -54,6 +54,7 @@ class WorkSchedulerController {
}
Future<bool> handleBackgroundTask(String taskName, Map<String, dynamic>? inputData) async {
final completer = Completer<bool>();
log('WorkSchedulerController::handleBackgroundTask():taskName: $taskName | inputData: $inputData');
try {
if (inputData != null && inputData.isNotEmpty) {
@@ -63,14 +64,15 @@ class WorkSchedulerController {
final matchedType = WorkerType.values.firstWhereOrNull((type) => type.name == workerType);
if (matchedType != null) {
await matchedType.usingObserver().bindDI();
await matchedType.usingObserver().observe(taskName, dataObject);
await matchedType.usingObserver().bindDI(completer);
await matchedType.usingObserver().observe(taskName, dataObject, completer);
}
}
} catch (e) {
completer.completeError(e);
logError('WorkSchedulerController::handleBackgroundTask():EXCEPTION: $e');
}
return Future.value(true);
return completer.future;
}
Future<void> cancelByWorkType(WorkerType type) => Workmanager().cancelByTag(type.name);