Способен ли flutter (dart) сделать запрос API в отдельном изоляте?

Я сделал функцию для отправки уведомления в тему. Он отлично работает в обычном режиме, затем я помещаю его в функцию вычисления и надеюсь, что он может публиковать уведомления в фоновом режиме. Но это не работает. Вот мой код:

void onSendMessageInBackGround(String message) {
  Future.delayed(Duration(milliseconds: 3000)).then((_) async{
    Client client = Client();
    final requestHeader = {'Authorization': 'key=my_server_key', 'Content-Type': 'application/json'};
    var data = json.encode({
      'notification': {
        'body': 'tester',
        'title': '$message',
      },
      'priority': 'high',
      'data': {
        'click_action': 'FLUTTER_NOTIFICATION_CLICK',
        'dataMessage': 'test',
        'time': "${DateTime.now()}",
      },
      'to': '/topics/uat'
    });
    await client.post('https://fcm.googleapis.com/fcm/send', headers: requestHeader, body: data);
  });
}

Call Compute:

compute(onSendMessageInBackGround, 'abc');

Примечание: я поместил функцию onSendMessageInBackGround на верхний уровень моего приложения, как сказала библиотека

Это что-то упустило? или мы не можем этого сделать?

2 ответа

Решение

Вам может понадобиться добавить return или же await

void onSendMessageInBackGround(String message) {
  return /* await (with async above) */ Future.delayed(Duration(milliseconds: 3000)).then((_) async{

Может случиться так, что изолят отключится до того, как будет сделан запрос, потому что вы не ожидаете Future

Функция, вызываемая из compute, должна быть статической или глобальной.

Либо я согласен с pskink, вычислять здесь не полезно.

Изоляты общаются, передавая сообщения туда и обратно. Эти сообщения могут быть примитивными значениями, такими как null, num, bool, double или String, или простыми объектами, такими как List в этом примере.

Вы можете столкнуться с ошибками, если попытаетесь передать более сложные объекты, такие как Future или http.Response между изолятами.

Получил это из документации здесь

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