From 8e21e3901d2657240e807b3195824b37c7bb2069 Mon Sep 17 00:00:00 2001 From: ColinSchmale Date: Tue, 5 Aug 2025 20:03:01 +0200 Subject: [PATCH] Fix NullPointerException caused by dartTask of BackgroundWorker --- .../workmanager/BackgroundWorker.kt | 36 ++++++++++++++++--- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/workmanager_android/android/src/main/kotlin/dev/fluttercommunity/workmanager/BackgroundWorker.kt b/workmanager_android/android/src/main/kotlin/dev/fluttercommunity/workmanager/BackgroundWorker.kt index ef2a37ad..367b3bd7 100644 --- a/workmanager_android/android/src/main/kotlin/dev/fluttercommunity/workmanager/BackgroundWorker.kt +++ b/workmanager_android/android/src/main/kotlin/dev/fluttercommunity/workmanager/BackgroundWorker.kt @@ -46,7 +46,7 @@ class BackgroundWorker( } private val dartTask - get() = workerParams.inputData.getString(DART_TASK_KEY)!! + get() = workerParams.inputData.getString(DART_TASK_KEY) private val runAttemptCount = workerParams.runAttemptCount private val randomThreadIdentifier = Random().nextInt() @@ -86,11 +86,20 @@ class BackgroundWorker( return@ensureInitializationCompleteAsync } + val localDartTask = dartTask + + if (localDartTask == null) { + val exception = IllegalStateException("Dart task is null") + WorkmanagerDebug.onExceptionEncountered(applicationContext, null, exception) + completer?.set(Result.failure()) + return@ensureInitializationCompleteAsync + } + val dartBundlePath = flutterLoader.findAppBundlePath() val taskInfo = TaskDebugInfo( - taskName = dartTask, + taskName = localDartTask, inputData = payload, startTime = startTime, callbackHandle = callbackHandle, @@ -132,9 +141,18 @@ class BackgroundWorker( ) { val fetchDuration = System.currentTimeMillis() - startTime + val localDartTask = dartTask + + if (localDartTask == null) { + val exception = IllegalStateException("Dart task is null") + WorkmanagerDebug.onExceptionEncountered(applicationContext, null, exception) + completer?.set(Result.failure()) + return + } + val taskInfo = TaskDebugInfo( - taskName = dartTask, + taskName = localDartTask, inputData = payload, startTime = startTime, ) @@ -175,7 +193,17 @@ class BackgroundWorker( // Convert payload to the format expected by Pigeon (Map) val pigeonPayload = payload.mapKeys { it.key as String? }.mapValues { it.value as Object? } - flutterApi.executeTask(dartTask, pigeonPayload) { result -> + val localDartTask = dartTask + + if (localDartTask == null) { + val exception = IllegalStateException("Dart task is null") + WorkmanagerDebug.onExceptionEncountered(applicationContext, null, exception) + + stopEngine(Result.failure(), exception.message) + return + } + + flutterApi.executeTask(localDartTask, pigeonPayload) { result -> when { result.isSuccess -> { val wasSuccessful = result.getOrNull() ?: false