способен ли flutter (dart) сделать запрос API в отдельном изоляте? - PullRequest
0 голосов
/ 16 ноября 2018

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

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);
  });
}

вызов вычисления:

compute(onSendMessageInBackGround, 'abc');

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

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

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

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

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

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

0 голосов
/ 16 ноября 2018

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

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

...