Фоновая задача 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")
}
[...]
моя ошибка возникает после выполнения обратного вызова, независимо от того, что он делает. Я думаю, что это что-то глупое, чего я не вижу, но моя голова разбита.
Заранее большое спасибо.