Flutter workmanager 插件在运行任务时无法与任何其他插件一起使用

标签 flutter plugins flutter-dependencies android-workmanager

在初始化工作管理器并创建任一任务后,如果我们在任务执行中使用任何插件,则无法识别并抛出如下错误
MissingPluginException(在 channel lyokone/location 上找不到方法 getLocation 的实现)

实际代码:

Workmanager.executeTask((task, inputData) async {
  Location locationObject = Location(); 
  locationObject.getLocation(); 
  print(locationObject); 
  return Future.value(true); 
}

基本上,工作管理器任务中使用的任何其他插件似乎都无法识别。

我错过了什么,我需要重新注册我的所有插件吗?
I/flutter (16120): Location permission has errorI/flutter (16120): MissingPluginException(No implementation found for method serviceEnabled on channel lyokone/location)

最佳答案

如果想从 WorkManager executeTask 内部使用其他插件;需要创建自定义应用程序类,并需要注册其他插件。如果 WorkManager 插件本身需要在执行任务中使用,该插件也需要注册。此外,需要在 AndroidManifest.xml 文件中指定这个新创建的自定义应用程序。
插件的 issues link 中提到了这一点。因为它不能完全从插件本身处理。

import io.flutter.app.FlutterApplication;
import io.flutter.plugin.common.PluginRegistry;
import io.flutter.plugin.common.PluginRegistry.PluginRegistrantCallback;
import io.flutter.plugins.GeneratedPluginRegistrant;
import io.flutter.plugins.androidalarmmanager.AlarmService;
import io.flutter.plugins.androidalarmmanager.AndroidAlarmManagerPlugin;
import com.dexterous.flutterlocalnotifications.FlutterLocalNotificationsPlugin;
import io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin;
import io.flutter.plugins.firebase.cloudfirestore.CloudFirestorePlugin;
import be.tramckrijte.workmanager.WorkmanagerPlugin;

public class CustomApplication extends FlutterApplication implements PluginRegistry.PluginRegistrantCallback {
    @Override
    public void onCreate() {
        super.onCreate();
        WorkmanagerPlugin.setPluginRegistrantCallback(this);

    }

    @Override
    public void registerWith(PluginRegistry registry) {
        // GeneratedPluginRegistrant.registerWith(registry);

        //add AndroidAlarmManagerPlugin plugin register  if you work with arlarm
        AndroidAlarmManagerPlugin.registerWith(registry.registrarFor("io.flutter.plugins.androidalarmmanager.AndroidAlarmManagerPlugin"));

       //add SharedPreferencesPlugin plugin register  if you work with share preferences
        SharedPreferencesPlugin.registerWith(registry.registrarFor("io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin"));

        // something else...

        FlutterLocalNotificationsPlugin.registerWith(registry.registrarFor("com.dexterous.flutterlocalnotifications.FlutterLocalNotificationsPlugin"));

        CloudFirestorePlugin.registerWith(registry.registrarFor("io.flutter.plugins.firebase.cloudfirestore.CloudFirestorePlugin"));

        WorkmanagerPlugin.registerWith(registry.registrarFor("be.tramckrijte.workmanager.WorkmanagerPlugin"));
    }
}

新创建的CustomApplication类需要在android manifest文件的application标签中指定
<application
    android:name="packagename.CustomApplication"

Android 特定文件位于 Android 项目文件夹中,请查看以下屏幕截图。

enter image description here

关于Flutter workmanager 插件在运行任务时无法与任何其他插件一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58194516/

相关文章:

dart - GestureDetector onTap 卡片

java - 从java项目中提取所有字符串

plugins - 如何在 VS Code 中设置 Vue 文件格式?

android - "Gradle Version 2.10 is required."错误

flutter - 在 channel plugins.flutter.io/image_picke 上找不到方法 pickImage 的实现

firebase - 如何使用 Flutter 获取 Firebase 存储目录中的所有文件

firebase - Flutter 2.0 - 没有为类型 'configure' 定义方法 'FirebaseMessaging'

dart - 在 Flutter 中,我想在导航到新屏幕后立即调用 for 循环。我把代码放在哪里?

缺少 Flutteranalysis_options.yaml

flutter - gradle构建错误[ fatal error ] checker-qual-2.5.2.pom:2:1:序言中不允许内容