subscribeToSee method
Implementation
Future<void> subscribeToSee(String url) async {
Dio dio = Dio();
// 设置 Dio 的一些默认配置(如果需要)
dio.options.connectTimeout = const Duration(seconds: 30);
dio.options.receiveTimeout = const Duration(minutes: 15); // 接收超时
dio.options.sendTimeout = const Duration(minutes: 15); // 接收超时
//dio.interceptors.add(CustomInterceptors());
dio.options.headers = {
'Accept': 'text/event-stream',
'X-Token': xToken,
};
//debugPrint('xToken=$xToken');
//Constant.instance.chatLib.idleTimes = 0;
final Response response = await dio.get(url,
onReceiveProgress: (int rece, int total) {
// debugPrint(
// 'Receive Progress: ${(rece / total * 100).toStringAsFixed(
// 0)}% ${DateTime.now()}');
});
//Constant.instance.chatLib.idleTimes = 0;
if (response.statusCode == 200) {
_listener?.updateProgress(99);
print("上传成功:${response.statusCode}");
final body = response.data;
if (body != null) {
final strData = body;
final lines = strData.split("\n");
var event = "";
var data = "";
print("上传监听返回 $strData");
if (lines.isEmpty) {
_listener?.uploadFailed("数据为空,上传失败");
return;
}
for (var line in lines) {
if (line.startsWith("event:")) {
event = line.replaceFirst("event:", "");
} else if (line.startsWith("data:")) {
data = line.replaceFirst("data:", "");
final result = UploadPercent.fromJson(jsonDecode(data));
if (result.percentage == 100 && result.data != null) {
_listener?.uploadSuccess(result.data!);
print("上传成功 ${result.data?.uri}");
print("${DateTime.now()} 上传进度 ${result.percentage}");
} else {
_listener?.updateProgress(result.percentage ?? 0);
print("${DateTime.now()} 上传进度 ${result.percentage}");
}
}
}
}
}else{
_listener?.uploadFailed('上传失败:${response.statusCode} - ${response.statusMessage}');
}
}