C. *_*yle 1 stream server-sent-events dart flutter
我正在尝试让我的应用程序响应 SSE 服务器发送的事件流。该流会出现多种类型的事件,并且仅当我收到的事件类型与该 UI 元素关联时,应用程序的某些部分才会更新。
示例 json 流响应(例如,如果我收到心跳,我不想更改 UI):
event:heartbeat
data:{"type":"heartbeat"}
event:gwy
data:{"a":532289,"lastUpdatedDateInMilliseconds":1587490669503,"t":1587490669503,"g":12479,"api":0,"cellSignalStrength":15}
event:gwy
data:{"a":532289,"lastUpdatedDateInMilliseconds":1587490694685,"t":1587490694685,"g":12479,"api":0,"cellSignalStrength":15}
Run Code Online (Sandbox Code Playgroud)
此数据的格式是全局数据变量的子集(事件应替换全局变量的该部分)。
非常感谢任何指示或资源。
小智 5
我知道您已经找到答案,但如果想要解析流值,这是我使用的代码,它提取事件和实际数据
import "package:http/http.dart";
http.Client client = http.Client();
http.Request request = http.Request("GET", Uri.parse('your url'));
request.headers["Accept"] = "text/event-stream";
request.headers["Cache-Control"] = "no-cache";
Future<http.StreamedResponse> response = client.send(request);
print("Subscribed!");
response.then((streamedResponse) => streamedResponse.stream.listen((value) {
final parsedData = utf8.decode(value);
print(parsedData);
//event:heartbeat
//data:{"type":"heartbeat"}
final eventType = parsedData.split("\n")[0].split(":")[1];
print(eventType);
//heartbeat
final realParsedData = json.decode(parsedData.split("data:")[1]) as Map<String, dynamic>;
if (realParsedData != null) {
// do something
}
}, onDone: () => print("The streamresponse is ended"),),);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2927 次 |
| 最近记录: |