flutter(dart)是否可以在单独的隔离中提出api请求?

时间:2018-11-16 07:41:11

标签: dart flutter dart-isolates

我做了一个功能,可以将通知发布到某个主题。它通常可以正常运行,然后将其放在enter image description here函数中,希望它可以在后台发布通知。但这行不通。 这是我的代码:

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函数放在应用程序的顶层

它缺少什么吗?还是我们做不到?

3 个答案:

答案 0 :(得分:0)

从compute调用的函数必须是静态的或全局的。

我同意pskink,在这里计算是没有用的。

答案 1 :(得分:0)

您可能需要添加returnawait

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

可能是隔离区在发出请求之前已关闭,因为您没有等待Future

答案 2 :(得分:0)

隔离通过来回传递消息进行通信。这些消息可以是原始值,例如null,num,bool,double或String,也可以是简单对象,例如本例中的List。

如果尝试传递更复杂的对象(例如Future或http。隔离之间的响应),则可能会遇到错误。

从文档here

中得到了帮助