Фоновая задача Flutter

Я пытаюсь запустить задачу в фоновом режиме (не отвечаю существующим подключаемым модулем), но при первом запуске я получаю сообщение об ошибке "-32601 получено из приложения: метод не найден"

шаг за шагом

У меня есть метод, который отправляет через MethodChannel, родной ручку

class Backgroundtask {
  static const MethodChannel _channel = const MethodChannel('backgroundtask');

  static Future<bool> periodic({@required Function callback}) async {
    assert(callback != null, 'task cannot be null');

    CallbackHandle handle = PluginUtilities.getCallbackHandle(callback);
    if (handle == null) {
      return false;
    }

    final bool result = await _channel.invokeMethod(
      'periodic',
      <dynamic>[
        handle.toRawHandle(),
      ],
    );
    return result ?? false;
  }
}

с другой стороны, я запускаю WorkerManager, передавая handle как Data.

    override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) {
           [...]
            val data = Data.Builder()
            data.putLong("handle", handle)

            val constrains = Constraints.Builder()
                    .setRequiredNetworkType(NetworkType.CONNECTED)
                    .build()

            val pWorkRequest = PeriodicWorkRequest
                    .Builder(CustomWorker::class.java, 15, TimeUnit.MINUTES)
                    .setInputData(data.build())
                    .setConstraints(constrains)
                    .build()

            WorkManager.getInstance(context).enqueue(pWorkRequest)
            [...]
    }

Мой androidx.work.Worker.doWork()

        [...]
        Handler(Looper.getMainLooper()).post {
            Log.d("periodic", "background service start")

            val handle = inputData.getLong("handle", 0)
            val flutterEngine = FlutterEngine(context)
            val flutterCallback = FlutterCallbackInformation.lookupCallbackInformation(handle)
            if (flutterCallback.callbackName == null) {
                Log.e("periodic", "callback not found")
                return
            }

            val assets = context.assets
            val bundle = FlutterMain.findAppBundlePath()
            val executor = flutterEngine.dartExecutor
            val dartCallback = DartExecutor.DartCallback(assets, bundle, flutterCallback)

            executor.executeDartCallback(dartCallback)
            Log.d("periodic", "background service end")
        }
        [...]

моя ошибка возникает после выполнения обратного вызова, независимо от того, что он делает. Я думаю, что это что-то глупое, чего я не вижу, но моя голова разбита.

Заранее большое спасибо.

изображение ошибки

0 ответов

Другие вопросы по тегам