getx
getx copied to clipboard
response.bodyBytes throw "Bad state: Stream has already been listened to."
Description
response.bodyBytes throw "Bad state: Stream has already been listened to." Server is returning csv file. Response Header include content-type: text/csv
Reproduction code
import 'dart:async';
import 'dart:developer';
import 'dart:io';
import 'package:get/get.dart';
import 'package:get/get_connect/http/src/request/request.dart';
import 'package:path_provider/path_provider.dart';
import '../../../constants/extra.dart';
import '../../../constants/validators.dart';
import '../../../widgets/snack_bar.dart';
class ReportApi extends GetConnect implements GetxService {
Future<dynamic> downloadReport(
String fileName,
String bucket,
String folder,
) async {
String url = 'url';
Map<String, dynamic> body = {
"fileName": fileName,
"bucket": bucket,
"folder": folder,
};
return post(
url,
body,
headers: apiHeader,
).then(
(Response response) async {
log('status code: Report ::: ${response.statusCode}');
if (response.isOk) {
final directory = await getExternalStorageDirectory();
final filePath = '${directory!.path}/$fileName';
File file = File(filePath);
file.writeAsBytes(await response.bodyBytes!.toBytes());
showSnackBar('file save');
} else {
if (response.unauthorized) {
showSnackBar('Unathorized', isError: true);
}
return null;
}
},
).onError((e, x) {
log(e.toString());
log(x.toString());
});
}
}
To Reproduce
You can see from code sample that that I am using response.bodyBytes!
only once, but this stream is already listened.
Console Logs
[log] status code: Report ::: 200
[log] Bad state: Stream has already been listened to.
[log] #0 _StreamController._subscribe (dart:async/stream_controller.dart:678:7)
#1 _ControllerStream._createSubscription (dart:async/stream_controller.dart:828:19)
#2 _StreamImpl.listen (dart:async/stream_impl.dart:471:9)
#3 new _ForwardingStreamSubscription (dart:async/stream_pipe.dart:114:10)
#4 _ForwardingStream._createSubscription (dart:async/stream_pipe.dart:86:16)
#5 _ForwardingStream.listen (dart:async/stream_pipe.dart:81:12)
#6 _HttpIncoming.listen (dart:_http/http_impl.dart:442:49)
#7 _HttpClientResponse.listen (dart:_http/http_impl.dart:713:19)
#8 BodyBytesStream.toBytes
Flutter Version: [√] Flutter (Channel stable, 3.10.0, on Microsoft Windows [Version 10.0.19045.2965], locale en-US) • Flutter version 3.10.0 on channel stable at C:\Users\PC\Downloads\flutter • Upstream repository https://github.com/flutter/flutter.git • Framework revision 84a1e904f4 (8 days ago), 2023-05-09 07:41:44 -0700 • Engine revision d44b5a94c9 • Dart version 3.0.0 • DevTools version 2.23.1
Getx Version: get: ^4.6.5
@MuhammadUmair786 have you managed to resolve this? I bumped into this same problem.