颤振(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不,它不会抛出任何错误:((谢谢你,兄弟,你的这个和其他答案在隔离/计算方面对我帮助很大!