From 1a99f8bbee014b05c1837747b95fa4e7f632c739 Mon Sep 17 00:00:00 2001 From: Absar Date: Fri, 5 Jun 2026 20:30:21 +0200 Subject: [PATCH] Replace companion FlutterLoader with FlutterInjector singleton and defer FlutterEngine creation to fix NullPointerException on io.flutter.embedding.engine.loader.FlutterApplicationInfo.flutterAssetsDir, when App and workmanager triggers at the same time. Fixes: #671 Closes: #671 --- workmanager_android/CHANGELOG.md | 4 ++++ .../dev/fluttercommunity/workmanager/BackgroundWorker.kt | 6 +++--- workmanager_android/pubspec.yaml | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/workmanager_android/CHANGELOG.md b/workmanager_android/CHANGELOG.md index ebd96f7e..9654ccf5 100644 --- a/workmanager_android/CHANGELOG.md +++ b/workmanager_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.9.1 + +- **FIX**: NullPointerException on io.flutter.embedding.engine.loader.FlutterApplicationInfo.flutterAssetsDir, when App and WorkManager task triggers at the same time + ## 0.9.0+2 - **FIX**: Android initialization bug and iOS 14 availability annotations (#647). 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 367b3bd7..278f735e 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 @@ -9,6 +9,7 @@ import androidx.work.WorkerParameters import com.google.common.util.concurrent.ListenableFuture import dev.fluttercommunity.workmanager.pigeon.TaskStatus import dev.fluttercommunity.workmanager.pigeon.WorkmanagerFlutterApi +import io.flutter.FlutterInjector import io.flutter.embedding.engine.FlutterEngine import io.flutter.embedding.engine.dart.DartExecutor import io.flutter.embedding.engine.loader.FlutterLoader @@ -29,8 +30,6 @@ class BackgroundWorker( companion object { const val PAYLOAD_KEY = "dev.fluttercommunity.workmanager.INPUT_DATA" const val DART_TASK_KEY = "dev.fluttercommunity.workmanager.DART_TASK" - - private val flutterLoader = FlutterLoader() } private val payload @@ -65,7 +64,7 @@ class BackgroundWorker( override fun startWork(): ListenableFuture { startTime = System.currentTimeMillis() - engine = FlutterEngine(applicationContext) + val flutterLoader: FlutterLoader = FlutterInjector.instance().flutterLoader() if (!flutterLoader.initialized()) { flutterLoader.startInitialization(applicationContext) @@ -76,6 +75,7 @@ class BackgroundWorker( null, Handler(Looper.getMainLooper()), ) { + engine = FlutterEngine(applicationContext) val callbackHandle = SharedPreferenceHelper.getCallbackHandle(applicationContext) val callbackInfo = FlutterCallbackInformation.lookupCallbackInformation(callbackHandle) diff --git a/workmanager_android/pubspec.yaml b/workmanager_android/pubspec.yaml index 32e4b523..ae6dc1c5 100644 --- a/workmanager_android/pubspec.yaml +++ b/workmanager_android/pubspec.yaml @@ -1,6 +1,6 @@ name: workmanager_android description: Android implementation of the workmanager plugin. -version: 0.9.0+2 +version: 0.9.1 # publish_to: none homepage: https://github.com/fluttercommunity/flutter_workmanager repository: https://github.com/fluttercommunity/flutter_workmanager