Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
颤振(dart)是否能够在单独的隔离中发出api请求?_Dart_Flutter_Dart Isolates - Fatal编程技术网

颤振(dart)是否能够在单独的隔离中发出api请求?

颤振(dart)是否能够在单独的隔离中发出api请求?,dart,flutter,dart-isolates,Dart,Flutter,Dart Isolates,我创建了一个函数,用于向主题发布通知。它在正常情况下工作得很好,然后我把它放在函数中,希望它能在后台发布通知。但它不起作用。 这是我的密码: void onSendMessageInBackGround(String message) { Future.delayed(Duration(milliseconds: 3000)).then((_) async{ Client client = Client(); final requestHeader = {'Authoriza

我创建了一个函数,用于向主题发布通知。它在正常情况下工作得很好,然后我把它放在函数中,希望它能在后台发布通知。但它不起作用。 这是我的密码:

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


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

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


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

您可能需要添加
返回
等待

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

可能是因为您没有等待未来的隔离,所以在发出请求之前隔离会关闭。这些消息可以是基本值,如null、num、bool、double或String,也可以是简单对象,如本例中的列表

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


从文档中获取此信息

应该可以使用。目前在隔离中使用插件存在局限性。我不认为在隔离中运行代码有什么好的理由,因为它不太可能在UI隔离上造成太多负载。事实上:您的代码不包含任何CPU阻塞部分,因此确实不需要在此处使用
compute
,您没有任何关于当前行为的信息。您是否收到任何错误消息?这只是我编写的一个示例,用于检查sperate隔离是否可以与服务器一起工作。我希望它能在某些情况下取代安卓服务的一部分,并在某些情况下作为一项服务发挥作用IOS@GünterZöchbauer不,它不会抛出任何错误:((谢谢你,兄弟,你的这个和其他答案在隔离/计算方面对我帮助很大!