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

Viv*_*C R 8 plugins flutter flutter-dependencies android-workmanager

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

实际代码:

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

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

我错过了什么,我需要重新注册我的所有插件吗?

I/flutter (16120): Location permission has error

I/flutter (16120): MissingPluginException(No implementation found for method serviceEnabled on channel lyokone/location)

SAJ*_*SAJ 2

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

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"));
    }
}
Run Code Online (Sandbox Code Playgroud)

新创建的CustomApplication类需要在android清单文件的application标签中指定

<application
    android:name="packagename.CustomApplication"
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述