我正在嘗試將來自 API 的回應存盤到串列中,回應正在被存盤,但最后一個元素沒有被存盤在串列中。
var selectedImage = [];
if (_image.length > 0) {
for (var img in _image) {
var request = http.MultipartRequest(
'POST', Uri.parse('url'));
request.fields.addAll({'userPath': "${widget.scanQr}"});
var process = await http.MultipartFile.fromBytes(
'file', File(img.path).readAsBytesSync(),
filename: img.path.split("/").last,
contentType: MediaType('image', 'jpg'));
request.files.add(process);
var response = await request.send();
print(response.statusCode);
if (response.statusCode == 200) {
response.stream.transform(utf8.decoder).listen((value) {
print("The value is $value");
selectedImage.add(value);
});
print(selectedImage);
}
嘗試插入 2 張影像時得到的回應是:
[/uploads/jdsfei884ri4h449898/activity/file_1637650234094]
第一個影像已存盤,但第二個影像未存盤。
uj5u.com熱心網友回復:
listen不是同步方法。您不必等待它完成,因此當您的代碼完成時,您不知道流偵聽器是否已經完成了它們的作業。他們可能已經添加到結果陣列中,也可能沒有。
我建議你在繼續之前使用一種方法來確保它完成了它的作業。
無論如何,您的流似乎只有一個元素:
if (response.statusCode == 200) {
const value = await stream.transform(utf8.decoder).first;
selectedImage.add(value);
}
uj5u.com熱心網友回復:
替換 selectedImage.add(value);為 selectedImage.addAll(value);
您正在從 API 獲取 ArrayList,因此基本上 add 函式僅添加物件, addAll 函式添加您的整個串列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/364075.html
