7

我做了一个功能来发布一个主题的通知。它在正常情况下工作得很好,然后我把它放在计算功能中,希望它可以在后台发布通知。但它不起作用。这是我的代码:

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

它缺少什么吗?或者我们不能这样做?

4

3 回答 3

1

您可能需要添加一个returnawait

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

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

于 2018-11-16T08:17:11.563 回答
0

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

要么我同意 pskink,这里的计算没有用。

于 2018-11-16T08:03:16.303 回答
0

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

如果您尝试在隔离之间传递更复杂的对象,例如 Future 或 http.Response,您可能会遇到错误。

从这里的文档中得到这个

于 2020-05-11T07:21:52.953 回答